1. 스프링 이벤트(Spring Event)를 사용하는 이유스프링 이벤트(Spring Event)를 사용하는 이유는 서비스 간의 의존성을 줄이기 위해서이다.스프링 이벤트를 사용하기 전에는 OrderService가 (1)사용자의 주문 요청을 처리하고 (2)푸시 메시지 발송 및 (3)메일 전송을 처리한다. OrderService는 PushService와 MailService를 의존하게 된다.반면에 스프링 이벤트를 사용하면 OrderService는 사용자의 주문 요청을 처리하는 책임만 갖고, 스프링 이벤트가 푸시 메시지 발송과 메일 전송을 처리한다. OrderService는 주문 요청만 처리하기 때문에 푸시 메시지 발송 및 메일 전송에 대한 책임을 갖지 않는다. 2. 스프링 이벤트(Spring Event) 구..
프로세스 간에는 기본적으로 자원을 공유할 수 없다. 각 프로세스는 독립된 주소 공간을 가지고 있기 때문에 자신의 메모리 공간에만 접근할 수 있다. 만약 프로세스가 서로의 메모리 공간에 접근할 수 있다면 의도치 않게 데이터를 변경하거나 충돌이 발생할 수 있다.만약 프로세스 간에 데이터를 주고받고 싶다면 IPC(Inter-Process Communication) 방식을 사용해야 한다. 1. 공유 메모리공유 메모리 방식은 사용자 영역 일부를 데이터를 주고받기 위한 메모리 공간으로 사용한다. 프로세스 A는 B에게 전달하고자 하는 데이터를 공유 메모리에 저장하고, 프로세스 B는 공유 메모리에 저장된 데이터를 읽는다. 이렇게 되면 프로세스 A가 B에게 데이터를 전달한 것과 마찬가지가 된다. 공유 메모리 방식은 사용..
1. 커널 영역과 사용자 영역커널 영역에는 프로세스 제어 블록(PCB)이 저장되고, 사용자 영역에는 실행 중인 프로세스를 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.1-1. 코드 영역코드 영역은 CPU가 실행할 명령어가 담겨 있기 때문에 읽기 전용(read-only) 모드로 사용한다. CPU는 코드 영역에 담긴 명령어를 읽고 실행만 하기 때문에, 수정되어서는 안 될 공간이다.1-2. 데이터 영역데이터 영역은 프로그램이 실행되는 동안 사용할 데이터가 저장되는 공간이다. 주로 정적 변수와 전역 변수가 저장된다.전역 변수 : 프로그램 전체에서 사용 가능한 변수이다.자바(Java)는 전역 변수를 지원하지 않는다.정적 변수 : 클래스에 속한 변수로, 클래스의 모든 인스턴스가 공유하는 변수..
클라이언트로부터 HTTP 요청이 발생하면 웹 서버(ex. Apache, Tomcat, Nginx, ..)로 전달된다. 서블릿 컨테이너에는 여러 요청을 처리할 수 있도록 여러 개의 서블릿이 등록되어 있다. 서블릿 컨테이너는 웹 서버로부터 HTTP 요청을 받아, 이 요청을 처리할 수 있는 서블릿으로 전달한다. 서블릿(Servlet)은 HTTP 요청을 처리하고 응답을 생성하여 웹 페이지를 동적으로 생성하는 역할을 한다. 기본적으로 init(), service(), destroy()가 정의되어 있다.HTTP 요청이 들어오면 요청을 처리할 수 있는 서블릿을 찾는다.서블릿이 처음으로 사용된다면 해당 서블릿을 인스턴스화하여 메모리에 로드한다. 이후에 init()을 호출하여 서블릿을 초기화한다. 초기화 작업은 서블릿 ..