싱글톤
스프링 MVC 1 - 동시 요청 - 멀티 쓰레드
스프링 MVC 1 - 동시 요청 - 멀티 쓰레드
2022.06.29동시 요청 - 멀티 쓰레드 클라이언트가 요청을 하면 WAS에서 응답을 할 것이다. 요청을 하면, TCP/IP 커넥션이 연결되고, servelet이라는 것을 호출한다. 그런데 서블릿 객체를 누가 호출하는 것일까? 바로 쓰레드가 호출한다. 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행 쓰레드가 없다면 자바 애플리케이션 실행이 불가능 쓰레드는 한번에 하나의 코드 라인만 수행 동시 처리가 필요하다면 쓰레드를 추가로 생성 쓰레드가 하나가 있다고 가정하자. 요청이 1개오면 쓰레드를 할당한다. 그리고 이 쓰레드를 가지고 서블릿을 호출해주는 것이다. 그리고나서 쓰레드를 가지고 응답까지 다 하고, 응답이 되고나면 쓰레드가 휴식을 ..
스프링 MVC 1 - 서블릿
스프링 MVC 1 - 서블릿
2022.06.28서블릿 위와같은 HTML Form이 있다고 가정해보자. 회원 이름과 나이를 넣고 전송버튼을 누르면, 회원이 가입되는 폼이다. 이러한 폼이 있을 때, HTML Form을 POST로 데이터를 저장하려면, form action="/save" method="post" 그리고 username과 age 값을 넣어서 데이터를 전송한다. 전송을 누르면, 웹브라우저가 요청 HTTP메시지를 만들어준다. 각종 정보를 넣고, 실제 Content Body에는 username=kim&age=20 이라고 데이터를 보내고, 이 Content에 대한 내용은, Content-Type에 x-www-form-urlencoded 방식으로 보내겠다고 표시해서 생성한다. 이러한 방식으로 HTTP메시지를 만들어서 서버에 전송을 한다. 이렇게 했을..
스프링 기본 - @Configuration과 바이트코드 조작의 마법
스프링 기본 - @Configuration과 바이트코드 조작의 마법
2022.05.30@Configuration과 바이트코드 조작의 마법 스프링 컨테이너는 싱글톤 레지스트리다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 한다. 그런데, 스프링이 자바 코드까지 어떻게 하기는 어렵다. 이전시간에 보았던 AppConfig의 자바코드를 보면 memberRepsository가 분명 3번 호출되어야 하는 것이 맞다. 그래서 스프링은 클래스의 바이트코드를 조작하는 라이브러리를 사용한다. 모든 비밀은 @Configuration을 적용한 AppConfig에 있다. 다음 코드를 보자. 사실 AnnotationConfigApplicationContext에 파라미터로 넘긴 값은 스프링 빈으로 등록된다. 그래서 AppConfig도 스프링 빈이 된다. AppConfig 스프링 빈을 조회해서 클래스 정보를 출..
스프링 기본 - @Configuration과 싱글톤
스프링 기본 - @Configuration과 싱글톤
2022.05.28@Configuration과 싱글톤 다음 AppConfig 코드를 보자. memberService 빈을 만드는 코드를 보면, memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository()를 호출한다. orderService빈을 만드는 코드도 동일하게 memberRepository()를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository()를 호출한다. 결과적으로 각각 다른 2개의 MemoryMemberRepository가 생성되면서 싱글톤이 깨지는 것 처럼 보인다. 스프링 컨테이너는 이 문제를 어떻게 해결할까? 직접 테스트 해보자. 검증 용도의 코드 추가 (MemberServiceImpl, OrderServiceImp..
스프링 기본 - 싱글톤 컨테이너
스프링 기본 - 싱글톤 컨테이너
2022.05.28싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 지금까지 우리가 학습한 스프링 빈이 바로 싱글톤으로 관리되는 빈이다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패넡을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다. 이전에 설명한 컨테이너 생성 과정을 자세히 보자. 컨테이너는 객체를 하나만 생성해서 관리한다. 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라한다. 스프링 컨테이너의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있다. 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 된다. DIP, OCP, 테스트, priv..
스프링 기본 - 웹 애플리케이션과 싱글톤
스프링 기본 - 웹 애플리케이션과 싱글톤
2022.05.28웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없는 순수한 DI 컨테이너 테스트 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! → 메모리 낭비가 심하다. 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. → 싱글톤 패턴