이론/Spring

    Spring 의 예외 처리 방법

    WAS 의 예외 처리 방식 우선적으로 서블릿 컨테이너가 예외 처리를 하는 방식을 알아야합니다. 서블릿 컨테이너는 2가지 방식으로 예외를 처리합니다. Exception 을 처리. response.sendError(상태코드, 메세지) 를 처리. 1. Exception 을 처리하는 경우 WAS(서블릿 컨테이너) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러 의 흐름으로 진행됩니다. 컨트롤러에서 발생한 Exception 이 처리되지 않고 다시 WAS 까지 올라온다면 500 에러로 처리되고 WAS 자체의 오류 페이지를 화면에 보여줍니다. 2. response.sendError() 를 처리하는 경우 컨트롤러에서 response.sendError() 를 호출한 경우에는 Exception 이 발생하는 것은 아니지만 서블..

    Spring DI 란?

    Spring DI 란? DI 란? 구체적인 구현체에 의존하지 않고 추상화된 객체에 의존하게 하여 결합도을 낮추는 것. 구현체에 의존하게 되면 사용하는 구현체가 변경되었을 때 구현체를 사용하는 코드의 변경이 생기게 됨. 이는 OCP 를 위반함. 추상화된 객체에 의존하게 하고 구현체를 외부에서 주입해주면 사용하는 코드의 변경이 필요 없게 됨. 이를 의존성 주입(DI) 라고 함. Spring 에서의 DI 스프링에서는 구현체를 주입해주는 외부가 IOC 컨테이너임. 먼저 빈을 등록하고, 각 빈에 필요한 의존성을 주입해준다. 개발자는 빈에 해당하는 객체들을 작성하고, 그 빈에 필요한 의존성은 Spring 에서 주입해주고 호출하기에 이를 제어의 역전(IOC) 라고 함.

    빈 스코프에 따른 생명 주기

    singleton 디폴트 스코프로 컨테이너의 시작부터 끝까지 함께하는 빈이다. 컨테이너 생성-빈 생성-의존관계 주입-초기화 후 콜백-사용-소멸 전 콜백-종료 의 생명주기를 가진다. prototype 요청 시마다 새로운 빈을 생성하여 클라이언트에 반환한다. 스프링 컨테이너에서 빈 생성 후 의존관계 주입까지만 관리하고 그 이후 관리의 책임은 클라이언트가 갖는다. 컨테이너 생성-빈 생성-의존관계 주입-초기화 후 콜백까지만 스프링이 관리함. request http 요청마다 생성되어 http 요청과 같은 생명주기를 가짐 request 빈은 실제 http 요청이 올때까지는 존재하지 않는 빈이다. 스프링 컨테이너 생성 시점에는 request 빈이 존재하지 않기에 DI를 해주면 오류가 발생한다. 스프링에서는 Provi..

    [Spring Boot] SpringApplication 파일 위치

    프로젝트를 하다가 SpringApplication 파일 위치를 바꾸어 오류가 났던 경험이 있다. 간단한 오류이지만 한번 정리해본다. 클래스 명은 사용자의 설정에 따라 달라지지만 파일 코드의 큰 틀은 아래와 같다. @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 어노테이션을 통해 스프링 빈을 읽어와 자동으로 생성해준다. 기본 설정으로 이 파일이 있는 위치부터 찾아 읽어가기 시작하므로 따로 설정을 해줄 것이 아니라면 프로젝트의 최상단에 위치해주는 것이 좋다.