Spring Framework 7

[Spring Framework] 예외 처리 - 뷰를 반환할 때

순수 서블릿 컨테이너의 예외처리 순수 서블릿 컨테이너는 두 가지 방법으로 예외를 처리한다. Exception response.sendError(HTTP 상태코드, 오류 메시지) Exception 자바코드를 실행하다가 에러가 발생하는 경우 자바의 메인메서드를 실행했을 때 main이라는 이름의 메서드가 실행되고, 실행 도중에 발생한 예외를 잡지 못해서 처음 실행한 main메서드까지 예외가 던져지면 예외 정보를 남기고 스레드가 종료된다. 웹 애플리케이션에서는 사용자 요청별로 스레드가 할당되고 서블릿 컨테이너 안에서 예외가 처리된다. 애플리케이션에서 예외가 발생하여 try-catch문으로 처리했다면 괜찮지만 애플리케이션에서 예외를 처리하지 못하고 서블릿 밖으로 예외가 전달되면 WAS까지 예외가 전달된다. WAS..

[Spring Framework] 로그인, 쿠키와 세션

로그인 기능을 구현하기 위해서는 서버가 로그인 한 사용자의 상태를 기억하고 있어야 한다. 어떤 사용자인지 식별하기 위해서는 쿠키와 세션이라는 두 가지를 이용할 수 있다. 쿠키는 서버가 클라이언트에게 쿠키 값을 넘기고, 브라우저가 이를 기억하고 있다가 다음에 서버에 요청할 때 HTTP 요청메세지에 쿠키를 함께 담아서 요청하는 방법이고, 세션은 세션 아이디를 서버가 기억하고 있다가 클라이언트의 요청으로 세션 아이디가 넘어오면 정보를 조회해서 응답하는 방법이다. 세션도 정보식별을 위해 쿠키를 사용한다. 쿠키 사용하기 쿠키는 위에서 설명했듯이 서버가 HTTP 응답에 쿠키를 담아서 브라우저에 전달하면 브라우저가 앞으로 요청을 보낼 때마다 요청 메시지에 쿠키를 담아 요청하는 방법이다. 쿠키에는 두 종류가 있다. 영..

[Spring Framework] Bean Validation

코드를 이용해서 모든 Validation 에러를 처리하는 것은 상당히 번거롭다. 필드에러 같은 경우에는 빈 값을 입력하거나 올바른 범위를 입력하지 않은 간단한 에러들이 대부분입니다. 이럴 때는 매번 받아온 데이터를 직접 자바 코드로 작성해서 검증하기보다는 Bean Validation이라는 기술을 사용하면 좀 더 간편하게 데이터를 검증할 수 있습니다. Bean Validation을 소개하고 사용하는 방법, 그리고 단점과 해결법까지 알아보도록 하겠습니다. Bean Validation 이란? Bean Validation 이란 특정한 구현체를 말하는 것이 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준을 의미합니다. 검증기능을 위한 검증 애노테이션과 여러 인터페이스들이 모여있습니다. ..

[Spring Framework] 빈 생명주기 콜백

본 포스트는 김영한 강사님의 스프링 핵심 원리 - 기본 편을 보고 정리한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 데이터베이스 연결이나 네트워크 연결의 소켓을 미리 열어놓아야 빨리 응답을 줄 수 있다. 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료작업이 필요하다. 이러한 역할을 스프링이 제공해 준다. 스프링을 통해 이런 초기화와 종료작업이 어떻게 진행되는지 알아보자. 일단 용어부터 정리해봅시다, 객체를 생성하는..

[Spring Framework] 의존관계 자동주입

본 포스트는 김영한 님의 스프링 핵심 원리 - 기본 편을 보고 정리한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 다양한 의존관계 주입 방법 의존관계를 주입하는 방법은 다음 네가지로 나눌 수 있습니다. 생성자 주입 수정자 Setter 주입 필드 주입 일반 메서드 주입 생성자 주입 말 그대로 생성자를 통해서 의존관계를 주입받는 방법입니다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장되고, 값이 변하지 않고, 필수적으로 필요한 의존관계인 경우에 사용합니다. 위의 코드에서도 생성자로 주입받는 경우 필드 속성에 final을..

[Spring Framework] 컴포넌트 스캔(Component Scan)

지금까지는 스프링 컨테이너에 빈을 수동으로 등록하려 할 때는 자바코드의 @Bean을 작성하거나 XML의 을 통해서 등록합니다. 하지만 등록할 빈이 많아지면 이런 코드를 일일이 작성해야하기 때문에 등록하기도 힘들고, 설정정보도 커지고, 개발자가 실수해서 누락하는 문제가 발생할 수 있습니다. 그래서 스프링이 설정정보 없이도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 그리고 의존관계도 자동으로 주입해주는 @Autowired라는 기능도 제공한다. 이런 컴포넌트 스캔을 사용하기 위해서는 @ComponentScan 애노테이션을 사용하면 됩니다. 단, 컴포넌트 스캔을 사용하면 @Configuration의 내부에도 @Component 애노테이션이 있기 때문에 @Configuration이 붙은 ..

IOC, DI, 그리고 컨테이너

제어의 역전 IoC(Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한 마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 반면에 앱 설정 정보(AppConfig) 클래스에서 프로그램의 제어를 해주는 경우는 구현 객체는 자신의 로직을 실행하는 역할만 담당하며 제어 흐름은 AppConfig가 가져간다. 예를 들어서 OrderServiceImpl이라는 클래스 객체는 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다. 프로그램에 대한 제어 흐름에 대한 권한은 모두 제어의 흐름을 조종하는 클래스(이하 AppConfig)만 가지고 있다. 심지어 구현 객체도 AppConfig가 생성한다. 그리고..

Spring Framework 2021.09.26