spring
[토비의 스프링 - Vol.2] 1장 - 1.3 프로토타입과 스코프
1.3.1 프로토타입 스코프스코프 스코프는 존재할 수 있는 범위를 가리키는 말이다. 빈의 스코프는 빈 오브젝트가 만들어져 존재할 수 있는 범위다. 빈 오브젝트의 생명주기는 스프링 컨테이너가 관리하기 때문에 대부분 정해진 범위의 끝까지 존재한다. 싱글톤 스코프는 컨테이너 스코프라고 하기도 한다. 단일 컨테이너 구조에서는 컨테이너가 존재하는 범위와 싱글톤이 존재하는 범위가 일치하기 때문이다. 요청(request) 스코프는 하나의 요청이 끝날때 까지만 존재한다. 싱글톤 스코프는 컨텍스트당 한 개의 오브젝트만 만들어지게 함하나의 빈을 여러 개의 빈에서 DI하더라도 매번 동일한 오브젝트가 주입 (DI, getBean(), 등)@Test public void singletonScope() { ApplicationC..
[토비의 스프링 - Vol.2] 1장 - 1.2.5 컨테이너가 자동등록하는 빈
1.2.5 컨테이너가 자동등록하는 빈스프링 컨테이너는 초기화 과정에서 몇 가지 빈을 기본적으로 등록 (자주 사용 X) ApplicationContext, BeanFactory스프링에서는 컨테이너 자신을 빈으로 등록해두고 필요하면 일반 빈에서 DI 받아 사용 가능스프링 컨테이너는 ApplicationContext 인터페이스를 구현체@Autowired로 자동와이어링을 이용하는 방법이 가장 쉬운 방법 (@Resource도 사용 가능)public class SystemBean { @Autowired ApplicationContext context; public void specialJobWithContext() { this.context.getBean(...); } }애노테이션을 이용한 설정을 못쓴다면 Appl..
[토비의 스프링 - Vol.2] 1장 - 1.2.4 프로퍼티 값 설정 방법
1.2.4 프로퍼티 값 설정 방법DI를 통해 빈에 주입되는 것은 두가지다른 빈 오브젝트의 래퍼런스 단순 값 (빈이 아닌 모든 것) 메타정보 종류에 따른 값 설정 방법값을 넣는 방법도 네가지로 구분이 가능1. XML:와 전용 태그는 ref 애트리뷰트를 이용해 다른 빈의 아이디 지정이 가능ref 대신 value 애트리뷰트를 사용하면 런타임시 주입할 값으로 인식String이 가장 간단한 타입이며, int, float, double, boolean, 등 기본 타입이거나 Class Resource같은 단순하지 않은 오브젝트는 적절한 변환이 필요스프링 컨테이너는 XML의 문자열로 된 값을 프로퍼티 타입으로 변환하는 서비스를 내장2. 애노테이션:@Value빈이 사용해야할 단순한 값이나 오브젝트를 런타임시에 주입해야하..
[토비의 스프링 - Vol.2] 1장 - 1.2.3 빈 의존관계 설정 방법
1.2.3 빈 의존관계 설정 방법빈 사이의 의존관계 메타 정보를 작성하는 방법은 여러 가지 기준으로 분류가 가능DI 할 대상을 선정하는 방법으로 분류할 경우명시적으로 지정하는 방법 (DI 할 빈의 아이디를 직접 지정)일정 규칙에 자동으로 선정하는 방법 (자동와이어링autowiring)메타정보 작성 방법으로 분류할 경우XML , 스키마를 가진 전용태그, 어노테이션, 자바코드에 의한 직접적인 DI빈 스캐너에 의한 빈 등록 방법과 어노테이션 방식은 둘다 비슷하지만 의존관계 주입에 사용되는 어노테이션은 빈 스캐너에 의해 등록될 때만 사용되는게 아니라는 점에서 차이가 발생빈 등록 방식과 빈 의존관계 주입 방법은 메타정보 작성 방법이 항상 같지 않음을 주의Ex) 태그를 사용해 빈을 등록하면서 의존관계 정보는 XML..
[ 스프링부트 / Spring Boot ] 2.5.x data.sql 문제 (h2, mysql)
1. 문제 발생 온라인 강의를 듣는 중, data.sql을 만들어서 기초 데이터를 넣는 부분이 있었다. 같은 소스를 실행했는데, 문제가 발생하여 데이터가 입력되지 않고 에러가 발생했다. 2. 원인 파악 프로젝트 구성 및 테스트 코드 data.sql call next value for hibernate_sequence; insert into user (`id`, `name`, `email`, `created_at`, `updated_at`) values (1, 'martin', 'martin@fastcampus.com', now(), now()); call next value for hibernate_sequence; insert into user (`id`, `name`, `email`, `created..
[ 스프링 / Spring ] 4.x Controller Dto파라미터 매핑 안되는 현상 처리
작업을 하던 중 해결하는데 시간이 걸려 적게 되었다. 1. 문제 기존 시스템 컨트롤러 - > 새 시스템 컨트롤러에 이관하는 작업을 진행했다. 화면상에 form태그(post)로 해당 컨트롤러에 값을 전달한다. dateFrom, dateTo라는 두개의 값을 전달하는데 컨트롤러에 해당 dto에는 값이 매핑되지 않는 현상이 발생하였다. 기존 시스템에서는 dto에 값이 매핑이 됐고, 새 시스템에는 dto에 값이 매핑되지 않았다. 두 시스템은 같은 소스를 옮겨놓은 상태여서 소스는 동일했다. 2. 작업 과정 아래와 같이 문제들이 될만한 요소를 생각해 봤다. 1. 필터(Filter), 인터셉터(interceptor)에서 문제 발생 2. 설정(Config) 관련 문제 2.1. 필터(Filter), 인터셉터(interce..
[ 스프링부트 / Spring Boot ] Interceptor
#시작하기 전.. 이전 글 - [ 스프링부트 / Spring Boot ] Filter 위에 글에도 언급했지만, Spring Life Cycle 에는 Filter, Interceptor, AOP, 등 많은 기능들이 존재한다. 그 중 Interceptor에 대해 이해한 것에 대해 정리를 한거라 부족한게 많을 수 있다.. 1. Interceptor는 무엇인가? Interceptor 단어 그대로 데이터를 가로채서 처리하는 영역이다. Interceptor는 컨트롤러에 접근하기 전 request, response를 받아 처리가 가능하다. 그럼 여기서 의문이 생길 수 있다. Filter와 Interceptor는 같은 역할인 것이 아닌가? 그러나 두개는 큰 차이가 있다. 그것은 바로 스프링 컨테이너에 포함 여부다. 아..
[ 스프링부트 / Spring Boot ] Filter
#시작하기 전.. 현재 온라인 강의와 토비의 스프링 책를 통해 스프링 기초에 대해 공부를 시작하고 있다. 역시 내가 모르는 것들이 너무 많았고, 그 중 Spring MVC 라이프 사이클을 모르는 내 자신에 부끄러웠다. Filter, Interceptor, AOP를 이해하려면 Spring MVC 라이프 사이클이 너무 너무 중요하다. 그것을 이제서야 깨닫고 있으며, 공부하는 중이다... 1. Filter란 무엇인가? 필터를 설명하기 전에 스프링 MVC가 작동하는 원리에 대한 사전 지식이 필요하다. 내가 아는 얕은 지식으로 예로 든다면, 1. 사용자는 웹사이트에 접속을 한다. 2. 특정 버튼, 등을 통해 서버에 정보를 조회하거나, 등록, 수정, 등을 요청한다. (Request) 3. 서버는 요청을 받는다. 일..