Spring Core
-
스프링 부트에서는 application의 속성 설정을 위해서 src/resources 아래에 application.properties 또는 application.yml 파일을 사용할 수 있다. .properties 작성 방법 key=value의 맵 구조 properties 파일은 key=value의 구조로 설정들을 작성한다. 여기서 많이 하는 실수 중 하나가 가독성을 높인다는 이유로 = 주변에 공백을 넣는 것이다. 그러면 공백까지 key 또는 value의 일부가 되버린다. !key는 'key' 속성의 값을 'value'이다. key=value !key는 'key ' 속성의 값은 ' value'이다. key = value 한 줄 주석을 작성할 때는 # 또는 ! 를 사용한다. 이전에는 #을 주로 사용했는데 ..
04. application 설정 파일 작성스프링 부트에서는 application의 속성 설정을 위해서 src/resources 아래에 application.properties 또는 application.yml 파일을 사용할 수 있다. .properties 작성 방법 key=value의 맵 구조 properties 파일은 key=value의 구조로 설정들을 작성한다. 여기서 많이 하는 실수 중 하나가 가독성을 높인다는 이유로 = 주변에 공백을 넣는 것이다. 그러면 공백까지 key 또는 value의 일부가 되버린다. !key는 'key' 속성의 값을 'value'이다. key=value !key는 'key ' 속성의 값은 ' value'이다. key = value 한 줄 주석을 작성할 때는 # 또는 ! 를 사용한다. 이전에는 #을 주로 사용했는데 ..
2024.03.11 -
이번 포스트에서는 Spring이 관리하는 빈의 생명주기(Life Cycle)에 대해 살펴보자. 빈의 생명 주기 빈의 생명 주기 스프링의 빈은 다음과 같은 생명 주기를 갖는다. 생성자를 호출하여 객체를 생성한다. 1의 과정을 통해 생성자 주입을 하거나 별도의 setter 메서드를 이용해서 의존성을 주입한다. 아직 빈을 활용하기 이전에 초기화 메서드를 실행한다. 빈을 사용한다. 빈을 다 사용한 후 소멸 메서드를 실행한다. 초기화 및 소멸 메서드 초기화 메서드와 소멸 메서드에 대해 살펴보자. 초기화 메서드 소멸 메서드 주요 용도 빈에서 사용하려는 자원의 초기화 빈에서 사용한 자원의 정리 호출 시점 의존성 주입 후 비지니스 로직이 호출되기 전 모든 비지니스 로직이 종료된 후 작성 방법 명시적 빈 등록: @Pos..
07. 빈의 생명주기이번 포스트에서는 Spring이 관리하는 빈의 생명주기(Life Cycle)에 대해 살펴보자. 빈의 생명 주기 빈의 생명 주기 스프링의 빈은 다음과 같은 생명 주기를 갖는다. 생성자를 호출하여 객체를 생성한다. 1의 과정을 통해 생성자 주입을 하거나 별도의 setter 메서드를 이용해서 의존성을 주입한다. 아직 빈을 활용하기 이전에 초기화 메서드를 실행한다. 빈을 사용한다. 빈을 다 사용한 후 소멸 메서드를 실행한다. 초기화 및 소멸 메서드 초기화 메서드와 소멸 메서드에 대해 살펴보자. 초기화 메서드 소멸 메서드 주요 용도 빈에서 사용하려는 자원의 초기화 빈에서 사용한 자원의 정리 호출 시점 의존성 주입 후 비지니스 로직이 호출되기 전 모든 비지니스 로직이 종료된 후 작성 방법 명시적 빈 등록: @Pos..
2024.02.23 -
이번 포스트에서는 빈의 스코프에 대해 살펴보자. 빈의 스코프(Scope) 축 개업! 새롭게 하나의 CoffeeShop을 개업한다고 생각해보자. CoffeeShop에는 Barista가 근무할텐데 이 Barista는 손이 엄청 빠르기 때문에 아무리 많은 주문이 들어와도 순식간에 처리할 수 있다. 즉 맛있게 커피를 만들 수 있는 단 한 명만 필요하다. 그리고 CoffeeShop은 인기가 많아서 엄청나게 많은 Coffee가 팔리고 있다. 일단 이 일과 관련된 3개의 클래스를 작성해보자. @Data public class Coffee { private final String client; private final String name; } public class Barista { public Coffee make..
06. 빈의 스코프이번 포스트에서는 빈의 스코프에 대해 살펴보자. 빈의 스코프(Scope) 축 개업! 새롭게 하나의 CoffeeShop을 개업한다고 생각해보자. CoffeeShop에는 Barista가 근무할텐데 이 Barista는 손이 엄청 빠르기 때문에 아무리 많은 주문이 들어와도 순식간에 처리할 수 있다. 즉 맛있게 커피를 만들 수 있는 단 한 명만 필요하다. 그리고 CoffeeShop은 인기가 많아서 엄청나게 많은 Coffee가 팔리고 있다. 일단 이 일과 관련된 3개의 클래스를 작성해보자. @Data public class Coffee { private final String client; private final String name; } public class Barista { public Coffee make..
2024.02.22 -
AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항 AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까? @Before("execution(* *(..))") public void toAllMethod(JoinPoint jp) { // do something } 이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다.따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다...
06. AOP 작성 주의 사항AOP는 우리의 코드에서 횡단 관심 사항을 분리해 줌으로 엄청난 자동화를 이룰 수 있다. 하지만 잘못 사용하면 큰 난관에 부딪힐 수도 있으니 주의해야 한다. AOP 작성 주의 사항 일반적인 작성 시 주의 사항 AOP를 잘못 사용하면 예기치 못한 큰 문제를 일으킬 수 있다. 좀 억지로 만들어본 코드지만 다음과 같이 advice를 설정하면 어떤 일이 발생할까? @Before("execution(* *(..))") public void toAllMethod(JoinPoint jp) { // do something } 이 코드는 프로젝트의 모든 빈의 메서드에게 영향을 줄것이다. 이로 인한 부작용은 심각할 수 있다.따라서 AOP를 사용할 때는 적용 대상을 정확히 파악하고 꼭 필요한 내용만 AOP로 작성해야 한다...
2024.02.16 -
이번 포스트에서는 앞서 설정한 환경을 점검할 겸 간단한 Quick Start application을 만들어보자. Quick Start와 프로젝트 구성 Spring.io Spring과 관련된 내용은 https://spring.io/에 잘 정리되어있다. Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io 아래 내용은 Quick Start(https://spring.io/quickstart/)의 내용을 활용한 내용 들이다. 프로젝트 생성 Spring을 개발할 때는 Maven 또는 Gradle같은 build tool을 이용하는데 여..
03. Quick Start이번 포스트에서는 앞서 설정한 환경을 점검할 겸 간단한 Quick Start application을 만들어보자. Quick Start와 프로젝트 구성 Spring.io Spring과 관련된 내용은 https://spring.io/에 잘 정리되어있다. Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io 아래 내용은 Quick Start(https://spring.io/quickstart/)의 내용을 활용한 내용 들이다. 프로젝트 생성 Spring을 개발할 때는 Maven 또는 Gradle같은 build tool을 이용하는데 여..
2023.11.21 -
이번 포스트에서는 Spring Legacy Project를 SpringBoot로 변경하는 과정을 살펴보자. 기본 설정 빈 스켄과 자동 설정 SpringBoot를 하면서 처음 살펴볼 녀석은 당연히 main 메서드가 작성된 @SpringBootApplication이다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(ty..
Spring Legacy To SpringBoot이번 포스트에서는 Spring Legacy Project를 SpringBoot로 변경하는 과정을 살펴보자. 기본 설정 빈 스켄과 자동 설정 SpringBoot를 하면서 처음 살펴볼 녀석은 당연히 main 메서드가 작성된 @SpringBootApplication이다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(ty..
2023.10.30 -
평소에 궁금했었는데 찾아보지 못한 내용이 있었는데 바로 Legacy Spring에서 DispatcherServlet의 url mapping이 왜 "/*"가 아니라 "/"일까이다. DispatcherServlet의 urlmapping url mapping 방식 전통적으로 web.xml의 URL mapping에서 wildcard은 크게 3가지 형태로 사용된다. 형태 의미 /* 경로 기반의 매핑 ex) /abc/* -> /abc/ 아래의 모든 요청, : /abc/def, /abc , /abc.do 등 사용 가능 *.ext 확장자 기반 매핑으로 경로에 상관 없이 확장자가 같은 모든 요청 ex)*.do -> 확장자가 do인 모든 요청: /abc.do, /abc/def/ghi.do / 어떤 URL 매핑에도 연결되지..
[spring] DispatcherServlet의 url은 왜 "/*"가 아니고 "/" 일까?평소에 궁금했었는데 찾아보지 못한 내용이 있었는데 바로 Legacy Spring에서 DispatcherServlet의 url mapping이 왜 "/*"가 아니라 "/"일까이다. DispatcherServlet의 urlmapping url mapping 방식 전통적으로 web.xml의 URL mapping에서 wildcard은 크게 3가지 형태로 사용된다. 형태 의미 /* 경로 기반의 매핑 ex) /abc/* -> /abc/ 아래의 모든 요청, : /abc/def, /abc , /abc.do 등 사용 가능 *.ext 확장자 기반 매핑으로 경로에 상관 없이 확장자가 같은 모든 요청 ex)*.do -> 확장자가 do인 모든 요청: /abc.do, /abc/def/ghi.do / 어떤 URL 매핑에도 연결되지..
2023.04.19 -
Spring을 이용해서 샘플 프로젝트를 만들 때 매번 DB를 초기화하는게 상당히 귀찮은데 이런 경우 초기화 스크립트를 이용하면 아주 쉽게 문제를 해결할 수 있다. schema.sql과 data.sql 초기화 파일 준비 먼저 두 개의 초기화 파일을 resoures/init_data 경로에 위치시키자. 첫번 째 초기화 파일은 db의 구조를 담당하는 schema 파일이다. drop table todo if exists ; create table todo( id number primary key auto_increment, content varchar(100) not null, done char(1) default 'F' ); 다음은 초기 데이터 파일을 설정하는 data.sql이다. insert into tod..
[spring]SQL script를 활용한 DB 초기화Spring을 이용해서 샘플 프로젝트를 만들 때 매번 DB를 초기화하는게 상당히 귀찮은데 이런 경우 초기화 스크립트를 이용하면 아주 쉽게 문제를 해결할 수 있다. schema.sql과 data.sql 초기화 파일 준비 먼저 두 개의 초기화 파일을 resoures/init_data 경로에 위치시키자. 첫번 째 초기화 파일은 db의 구조를 담당하는 schema 파일이다. drop table todo if exists ; create table todo( id number primary key auto_increment, content varchar(100) not null, done char(1) default 'F' ); 다음은 초기 데이터 파일을 설정하는 data.sql이다. insert into tod..
2022.12.03