spring 16

Spring - Argument Resolver를 이용한 패러미터 처리

Spring MVC 패턴에서 Argument Resolver의 역할을 알아보도록 하겠습니다. 1. MVC 흐름 Spring MVC 패턴 설계 시 대략적인 흐름은 그림과 같습니다. 클라이언트가 HTTP 요청을 보낸다면 DispatcherServlet(FrontController)에서 클라이언트 요청을 수신하고 요청된 URI를 기반으로 애플리케이션의 컨트롤러를 호출한 뒤, ViewResolver에 반환합니다. 이 때, ArgumentResolver가 Controller(Handler)에 공통으로 필요한 패러미터(객체)를 생성하고 Controller를 호출하면서 값을 넘겨주게 됩니다. 이를 Spring에서는 애노테이션 기반으로 인터페이스를 제공하는데 한 번 살펴보겠습니다. 2. 예시 @Slf4j @Contro..

Skills/Spring 2022.09.27

Spring - Bean Scope 관리

1. Bean Scope Spring은 Bean이라는 개념으로 객체를 만들고 SIngleton화 시켜 관리합니다. 이 Bean으로 생성된 객체들은 Spring Container와 함께 시작되어서 종료될 때까지 Spring이 관리해주는데 이 이유는 Spring Bean들은 Singletone Bean으로 관리되기 때문입니다. 그렇다면 빈 스코프는? 스코프(Scope)는 영어 뜻 그대로 범위인데 직역 그대로 Bean이 관리되는 범위를 의미합니다. Spring이 가지는 Scope는 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다(따라서 빈..

Skills/Spring 2022.09.13

Spring - Bean 생명주기 콜백

1. Bean LifeCycle 생명주기 Spring Container는 Bean 객체의 생명주기(Lifecycle)을 관리합니다. 여기서 객체들을 관리한다는 것은 단순히 싱글톤으로 제공하거나 필요한 곳에 주입하는 것뿐 아니라 객체의 생성과 소멸, 즉 생명주기(Lifecycle)를 관리한다는 것을 의미합니다. 데이터베이스 Connection pool이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요합니다. 컨테이너를 초기화 할 때 컨테이너는 가장 먼저 빈 객체를 생성하고 의존 주입을 하고, 의존 자동 주입을 통한 의존 설정이 이 시점에 실행되며, 모든 의존 설정이 완료되면 빈 객..

Skills/Spring 2022.09.09

Spring - ComponentScan(컴포넌트 스캔)

1. ComponentScan Spring Bean을 등록할 때 @Bean 어노테이션을 이용하여 설정 정보에 직접 등록할 스프링 빈을 나열했습니다. 이 때, 등록해야 할 스프링 빈이 많을 경우에는 설정 정보도 커지고 누락하는 문제가 발생하게 되는데 이러한 문제를 해결하기 위해 Spring은 설정 정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능과 의존 관계를 주입하는 @Autowired 기능을 제공합니다. 컴포넌트 스캔을 하게 되면 AppConfig에서 해주었던 빈 등록을 하지 않아도 된다. 대신 @Component 어노테이션이 붙은 클래스를 스캔하여 Spring Bean으로 등록하게 됩니다. @Configuration @ComponentScan public class AutoApp..

Skills/Spring 2022.09.06

Spring - Singleton(싱글톤)

1. SIngleton Spring은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했습니다. 대부분 Spring 애플리케이션은 웹 애플리케이션으로 보통의 경우 여러 고객이 동시에 요청을 하게 됩니다. 이 때, 요청이 여러 개 들어올 때마다 객체를 생성하게 되면, 수천 수만의 요청을 받아내는 서버는 감당하지 못하고 성능이 저하될 것입니다. 이러한 점을 해결하기 위해 Singleton Pattern이 등장합니다. 싱글톤 패턴은 애플리케이션이 시작 될 때 static을 통해 인스턴스를 메모리에 딱 하나 할당하고, 뒤의 호출 시 마다 해당 인스턴스를 반환해주는 디자인 패턴입니다.. 생성자를 private으로 설정하기 때문에 외부에서 생성자를 통해 인스턴스를 만들 수 없게 됩니다. 2. 구현 "스프링 ..

Skills/Spring 2022.09.04

Spring - BeanFactory & BeanDefinition

1. BeanFactory 1.1 BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스로 스프링 빈을 관리하고 조회하는 역할을 담당합니다. getBean()메서드도 BeanFactory에서 제공하는 것입니다. 1.2 ApplicationContext ApplicationContext는 BeanFactory 기능을 모두 상속받아서 제공합니다. 이미 Bean을 조회하고 관리하는 역할을 Factory가 제공한다고 하였는데, 차이가 무엇인지 살펴봐야겠죠. 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론, 수 많은 부가기능이 필요하게 될 것입니다. 메세지소스를 활용한 국제화 기능 : 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 : 로컬, 개발, ..

Skills/Spring 2022.09.01

Spring - DI & Spring Container

1. DI & DI Container DI는 Dependency Injection으로 의존관계 주입이라고합니다. 이는 애플리케이션 런타임에 외부에서 실제 구현 객체를 생성하고 Client에 전달해서 Client와 Server의 실제 의존관계가 연결되는 것을 의미합니다. 이 DI를 이용하면 Client 코드를 변경하지않고 Client가 호출하는 대상의 인스턴스를 변경할 수 있습니다. 1.1 DI 컨테이너 이 의존관계 주입을 이용하여 외부에서 객체를 생성하고 관리하면서 의존관계를 연결해주는것을 DI 컨테이너라고 합니다. 이 DI 컨테이너를 IoC(Inversino of Control) 컨테이너라고도 하는데 프로그램의 제어 흐름을 개발자기 직접 제어하는 것이 아니라, 외부에서 관리하기 입니다. Java의 경우..

Skills/Spring 2022.08.31

Spring - 테스트 코드(TDD) 작성

어떤 소프트웨어를 개발한다고 할 때, 소프트웨어의 기능에서 무언가 필요하다거나 잘못된 점이 무엇인지 찾아내는 것부터 시작할 것입니다. 이어서 문제점을 찾은 개발자는 그것을 해결하는 기능을 구현하고, 구현의 검증을 위한 테스트를 수행하게됩니다. 이 때, 고전적인 개발 방식에서는 검증을 위해 console 화면에 값을 찍어 기능이 동작하는지 확인해볼 것입니다. 눈에 보이는 확실한 방법이지만 이러한 방식은 개발자의 두뇌에 의존해야 하는 맹점(?)이 있습니다. 사람이 판단하고, 사람에게 의존하는지라 실수가 언젠가는 하나씩 발견될 수도 있을 것입니다. 또한 작업 분량이 많아질 수록 로그를 찾아내기 힘들고, 귀찮아져 간소화하는 일이 생길 수도 있게되는 것이죠. 그래서 구안된 방식이 테스트 주도 개발(Test-Dr..

Skills/Spring 2022.08.02

Spring - Spring Web Layer

Spring Boot로 아키텍쳐 설계 시 이해를 돕고자 Spring에서 Web 기반 프로그램을 만들 때 어떤 계층이 존재하고, 어떤 역할을 하는지 패키지를 어떻게 나눠야 좋은 것인지 알아보겠습니다. 1. Spring Web Layer Spring에서 Web 계층은 사진과 같이 분류되는데, 특징과 역할을 알아보겠습니다. 1.1 Presentation Layer(Web Layer) 프레젠테이션 계층은 브라우저 상의 웹 클라이언트의 요청, 응답을 처리하는 계층입니다. 서비스 계층과 데이터 엑세스 계층에서 발생하는 Exception(예외)를 처리, 인증 관리, 권한없는 사용자의 인가를 거부하는 역할을 합니다. @Controller 애노테이션을 사용해 작성된 Controller 클래스, @Filter, 인터셉터,..

Skills/Spring 2022.07.27

Spring - MockMvc를 이용한 HTTP 메시지 검증

1. MockMvc MockMvc는 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고 Test용 MVC환경를 만들어 요청 및 전송 응답(HTTP request) 기능을 제공해주는 유틸리티 클래스입니다. 2. 사용 예 먼저 MockMVc 생성을 해주고, perform() 메서드를 이용해 요청 설정 메서드를 통해서 요청에 대한 설정을 할 수 있습니다. 이 때 요청에 대한 설정은 param, cookie, request * sessionAttr (객체설정), content(요청 본문 설정) 등 다양합니다. 2.1 .andExpect .andExpect() 메서드는 응답을 검증하는 메서드로 뒤에 패러미터에 따라 검증하는 값을 바꿀 수 있습니다. isOk() : 200, isNotFound() : 404 등....

Skills/Spring 2022.07.24