본문 바로가기

전체 글

(65)
반효경 운영체제 - 6. DeadLock 이 포스팅은 반효경 교수님의 운영체제 강의를 수강 후 내용을 정리한 글입니다. Deadlock Deadlock이란? 일련의 프로세스들이 서로가 가진 자원(Resource)을 기다리며 block된 상태이다. Resource 하드웨어 소프트웨어 등을 포함하는 개념 ex) I/O device, CPU cycle, memory, semaphore 등 프로세스가 자원을 사용하는 절차 Request, Allocate, Use, Release Deadlock 발생의 4가지 조건 Mutual Exclusion(상호 배제) 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 No preemption(비선점) 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 Hold and wait(보유대기) 자원을 가진 프로세..
반효경 운영체제 - 5. Process Synchronization 더보기 반효경 교수님의 운영체제 강의를 듣고 내용을 정리한 글입니다. Process Synchronization이란? 데이터의 접근 - 연산 - 결과 저장 과정에 일어나는 순서에 따른 발생할 수 있는 문제, 다시 말하면 Storage box를 여러 개의 execution box가 공유하기 때문에 발생할 수 있는 문제라고 할 수 있다. Race Condition 의미 : 여러 주체가 동시에 하나의 객체에 접근하려고 할 때 원치않는 결과를 얻을 수 있다. 발생 : CPU - Memory 관계, 컴퓨터 내부 - 보조저장장치(디스크), 프로세스 - 프로세스의 주소 공간 등 일반적으로 프로세스는 자신의 주소 공간을 가지므로 문제가 되지 않지만, 시스템콜을 통해 공유 메모리를 사용하는 프로세스의 경우나, 커널 내부..
Dynamic Proxy, CGLIB - Java로 인터셉터 만들어보기 AOP, Interceptor... 왜 필요할까? 애플리케이션을 개발하면서, 특정한 객체의 메소드가 호출될 때마다 로깅을 남기거나, 트랜잭션을 관리하는 등의 작업이 필요할 때가 있습니다. 이러한 작업을 위해서는 각각의 메소드에 코드를 추가해주어야 하지만, 이는 번거로운 작업입니다. 이러한 경우, 동적 프록시와 CGLIB을 이용하여 인터셉터를 구현하여, 중복 코드를 제거하고 작업을 간편하게 할 수 있습니다. 이러한 인터셉터를 구현하는 것이 대표적인 AOP라고 합니다. 비즈니스 로직과 인프라 로직을 분리하는 것이죠. 간단하게 제가 만들고 있는 웹 서버의 루트 디렉토리를 접속했을 때 index.html을 보여주는 예제를 어떻게 개선했는지 보여드리겠습니다. 주석만 살펴보면 루트로 HTTP 요청이 들어오면 ind..
Reflection과 Custom Annotation 활용기 2 - @ExceptionHandler 구현하기 안녕하세요! 오늘은 저번 포스팅에 이어서 Reflection을 좀 더 활용해본 활용기를 가져왔습니다. 이번 포스팅에서는 Spring 없이 동작하는(그러나 비슷하게 돌아가는) 제 웹 서버에서 Reflection과 Custom Annotation을 좀 더 활용해서 @ExceptionHandler 어노테이션과 그 역할을 비슷하게 구현해보았습니다. 전체적인 구현방향, 흐름은 아래와 같습니다. UserLogin 기능을 사용할 때 login이 실패하는 경우 Custom 예외를 발생시키도록 구현했다고 할 때, 어떻게 예외를 잘 분리해서 처리할까에 대한 고민을 담았다고 보시면 될 것 같습니다. Spring MVC의 예외 처리 전략과 흐름만 보면 얼핏 비슷합니다. 이 포스팅의 마지막에서는 실제 스프링의 예외처리 전략에 ..
Reflection과 Custom Annotation 활용기 1 - @RequestMapping 구현하기 커스텀 어노테이션과 Reflection은 강력한 기능으로, 프로그래머들에게 많은 편의와 유연성을 제공합니다. 이번 포스팅에서는 Java의 커스텀 어노테이션과 Reflection에 대해 알아보고, 그 활용에 대해 살펴보겠습니다. Annotation이란? 어노테이션이란 코드에 부가적인 메타데이터를 표현하는 방법으로, 컴파일러, 런타임, reflection 등에서 사용되어 코드의 동작이나 처리를 제어하거나 정보를 제공하는 기능을 수행합니다. 코드에 부가적인 메타데이터를 부여한다는 관점에서 주석과 비슷하지만, 사용 목적과 처리 시점에서 가장 큰 차이가 있습니다. 주석은 개발자 간 소통이나 혹은 작성한 코드의 이해를 돕기 위해 작성되는 반면, 어노테이션은 컴파일러, 런타임에 동작을 위한 부가적 정보를 부여하기 위..
Socket의 연결 종료와 Timeout 설정하기 - setSoTimeOut Socket 통신에 대해 공부하다가 궁금한 점을 기록한 내용입니다. 틀린 내용이 있다면 편하게 지적해주세요. 스프링에 대해서 학습하다가 간단히 아래와 같은 소켓 통신을 하는 서버 모델을 만들었습니다. 외부로부터 개방되어있는 listen socket은 8080포트로 들어오는 연결을 받아 connection 소켓에 할당합니다. 할당된 소켓은 새로운 스레드에 할당되어 클라이언트와 비동기적으로 통신하고, listenSocket은 다시 새로운 연결을 기다립니다. public class WebServer { public static void main(String args[]) throws Exception { int port = 8080; try (ServerSocket listenSocket = new Serve..
AJAX와 Jquery로 비동기 댓글달기 웹페이지를 제작할 때, 사용자의 경험을 향상시키는 것은 매우 중요합니다. 이를 위해 AJAX와 jQuery 같은 웹 기술이 자주 사용됩니다. AJAX는 비동기적으로 서버와 통신하여 페이지를 동적으로 업데이트하는 데 사용되며, jQuery는 이를 보다 쉽게 처리할 수 있도록 도와줍니다. 이번 글에서는 AJAX와 jQuery를 사용하여, 블로그나 다른 웹페이지를 보다 동적으로 만드는 방법에 대해 살펴보려고 합니다. AJAX와 jQuery를 사용하면, 더욱 효율적이고 사용자 친화적인 웹페이지를 제작할 수 있습니다. 아래에서는 AJAX와 jQuery의 개념과 이를 사용하여 구현할 수 있는 기능에 대해 자세히 알아보도록 하겠습니다. AJAX란? AJAX는 "Asynchronous JavaScript and XML..
Mock을 이용한 Sliced Test - @WebMvcTest, @JdbcTest Spring Framework와 Sliced Test 스프링에서 테스트를 위해 @SpringBootTest를 이용하곤 합니다. 이 어노테이션을 이용하면 모든 Component를 스캔하여 손쉽게 테스트를 작성할 수 있습니다만, 만약 테스트 하고 싶은 단위가 아주 작은 기능 단위라면, @SpringBootTest를 사용하는 것은 아주 비효율적입니다. 왜 비효율적인지는 @SpringBootTest의 실행 과정에서 알 수 있습니다. @SpringBootTest는 아래와 같은 순서로 실행됩니다. 테스트 클래스의 @SpringBootTest 애노테이션을 분석합니다. 이때, @SpringBootTest는 애플리케이션을 로드하기 위해 필요한 설정 정보를 포함하고 있습니다. 테스트 클래스에서 사용할 빈을 로드합니다. 이..