본문 바로가기
관리자

Programming-[Backend]

(394)
[스프링 웹MVC] 1. 웹 애플리케이션 이해 1. 웹서버(WEB)와 웹 애플리케이션 서버(WAS) HTTP와 정적 리소스 거의 모든 통신이 HTTP를 기반으로 한다! HTML, TEXT, 이미지, 음성, 파일, JSON 등 대부분의 데이터가 인터넷의 HTTP라는 프로토콜(규약)을 기반으로 해서 통신한다. 정적 리소스란, 서버 컴퓨터 내에 저장되어 있는 HTML, 이미지, 영상 등으로 클라이언트에서 이런 파일에 대한 요청을 하면, 서버에서는 파일을 전송해주는 방식으로 서버를 구성한다. 클라이언트와 서버간 상호작용을 통해 정보 및 자료가 작성되는게 아니고, 단순히 서버에 존재하는 파일이기 때문에 정적 리소스라는 용어를 사용한다. 정적 리소스를 전달해주는 서버를 웹서버(WEB)라고 한다. WEB 서버와 WAS 반면, 웹 애플리케이션 서버(WAS)란, 웹..
[스프링 기초] 17. 빈 스코프 : 웹 스코프와 프록시 1. 웹 스코프 웹스코프의 특징과 종류 스프링은 주로 웹 기술에 적용되므로, 웹과 관련된 스코프가 따로 지정되어 있다. 웹 스코프는 웹 환경에서만 동작한다는 특징이 있다. 웹 스코프의 종류는 다음과 같다. request : HTTP 요청 하나가 들어오고 나갈 때까지 유지된다. 각 HTTP 요청마다 개별적으로 인스턴스가 생성되고 관리된다. session : HTTP session과 동일한 주기를 갖는다. application : 서블릿 컨텍스트와 동일한 주기를 갖는다. websocket : 웹 소켓과 동일한 주기를 갖는다. 각 스코프는 생명주기만 다르고, 동작 방식은 거의 같다. 강의에서는 request 스코프를 예제로 학습해본다. 웹 스코프 연습해보기 : 웹 Logger 만들기 웹 스코프는 프로토타입 스..
[스프링 기초] 16. 빈 스코프 : Prototype Scope와 Provider 1. 기본 스코프 기본적으로 적용되는 스코프는 앞서 배운바와 같이 싱글톤 스코프이다. 메모리의 낭비 방지, Stateless 설계를 위해서 싱글톤이 필요하다는 것을 배웠었다. 싱글톤 스코프 외에 프로토 타입 스코프도 있다. 프로토타입 스코프 빈은 요청 시마다 개별적인 인스턴스를 반환하기 때문에 사용자의 요청에 따라 계속해서 새로운 객체를 반환해야할 때 쓴다(많이 사용되지는 않는다). @Scope("singleton"), @Singleton("prototype") 으로 빈 스코프를 설정해줄 수 있다(default는 싱글톤 빈). 싱글톤 스코프와 프로토타입 스코프를 아래에서 비교해보자. 싱글톤 스코프 기본적으로 적용되며, 컨테이너의 시작과 종료까지 유지된다. 요청 횟수에 관계없이 1개의 인스턴스만 반환한다...
[스프링 기초] 15. 빈 생명주기 콜백 : initMethod, destroyMethod, @PostConstruct, @PreDestroy 1. 기본 개념 빈 생명주기 콜백은 빈이 생성되거나 소멸되는 시점에 설정해둔 메서드가 실행되게 함으로써 초기 설정을 해주거나, 연결을 종료하는 등의 기능을 한다. 스프링 빈은 '객체 생성 -> 의존관계 주입' 의 2단계를 거치게 되는데(생성자 주입의 경우 한번에 처리), 의존관계 주입 후 값을 설정해주는 단계를 초기화 단계라고 한다. 이 초기화 단계를 알리기 위해 스프링 빈은 의존관계 주입 후 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 그리고 스프링은 스프링 컨테이너가 종료되기 전에도 소멸 콜백 메서드를 제공한다. 이렇게 객체의 생성과 초기화가 분리된 이유는 SRP의 원칙을 지키기 위해서이기도 하고, 초기화 작업이 외부와 커넥션을 연결하는 등 무거운 작업을 하기도 하기 때문이다..
[수정중][스프링 기초] 14. 여러 개의 빈이 있을 때 자동주입하기, @Primary, @Qualifier, NoUniqueBeanDefinitionException 1. 여러 개의 빈이 존재할 때 에러 발생 : NoUniqueBeanDefinitionException @Autowired 어노테이션은 빈을 타입을 기준으로 조회한다. 그래서 두 개 이상의 같은 타입의 빈이 존재할 때는 NoUniqueBeanDefinitionException이 발생한다. 아래 코드로 확인해보자. PlanServiceImpl 클래스는 CreatureRepository와 CaringPolicy를 생성자 주입받도록 되어있는 상황이다. 이중 CaringPolicy는 FixedCaringPolicy, RateCaringPolicy의 2개의 구현체를 갖고 있다. 각 구현체는 @Component 어노테이션을 통해 @ComponentScan에 의해 Scan되며, CaringPolicy 인터페이스를 i..
[스프링 기초] 13. 의존관계 주입 : 4가지 방법 의존관계 주입방법은 크게 4가지이다. 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 1. 생성자 주입 가장 많이 사용하고 효용성이 있는 방법이다. 생성자 호출 시점에 1번만 호출되는 것이 보장된다. 즉 불변, 필수 의존관계에 사용한다. 가장 많이 사용되는 방식이다. 생성자가 1개만 있으면 @Autowired를 생략해도 빈이 자동으로 주입된다. final을 사용하자 필수적이고 불변하는 관계이므로, 주입받는 객체를 final로 선언하는 방식을 주로 적용한다. 이렇게 하는 이유는, final 키워드 없이 선언 시에 생성자부분에서 오타가 발생하거나, 의존관계에 대한 부분을 작성하는 것을 누락하는 경우가 발생할 수 있기 때문이다. 이런 상황에서는 컴파일 이후에야 잘못된 부분을 찾을 수 있는데, final ..
[스프링 기초] 12. 컴포넌트 스캔(Component Scan) 1. 컴포넌트 스캔 개념 @ComponentScan, @Component 이때까지 컨테이너의 설정 정보 작성은 적은 수의 스프링 빈으로 작성하였다. 그러나 실무에서는 수 십, 수 백개의 빈들을 등록하고, 관리해야되는 문제가 발생한다. 스프링은 이런 문제를 해결하기 위해 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. @ComponentScan은 말그대로 @Component 애노테이션이 붙은 클래스들을 스캔한다. @Configuration 내부에 있는 @Component도 스캔하므로, @Configuration은 filter로 제외한다(예제 코드상 다른 위치에 @Configuration이 붙어있는 클래스가 있기 때문). 이때 스프링 빈의 기본이름은 해당 클래스명을 맨 앞글..
[스프링 기초] 11. 싱글톤(Singleton) 1. 싱글톤 개념 Spring으로 다른 애플리케이션을 개발할 수도 있지만, 보통은 웹 애플리케이션을 개발한다. 그리고 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 요청때마다 계속 객체가 생성되고 소멸되는 형태인데, 이렇게 되면 메모리 낭비가 심하다. 그러나 순수한 자바가 아닌 스프링을 이용하면 클래스의 인스턴스가 1개만 생성되어 그것을 공유해서 사용하게 된다. 이러한 방식을 싱글톤 패턴이라고 한다. 싱글톤 적용 기본 원리 이러한 싱글톤 방식을 구현하기 위해서, 자바의 private 접근 지정자 방식을 활용한다. 어떤 클래스가 호출되었을 때 적용되는 생성자를 private으로 처리해서 외부에서 해당 클래스의 인스턴스가 만들어지는 것을 막는다. 이렇게 해서 new 키워드를 통해서 인스턴스가 만들..