일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- WebApplicationType
- ConcurrentHashMap
- Java
- DataSet
- Lombok
- 어플리케이션 컨텍스트
- JavaScript
- java8
- RequestMapping
- Spring
- Thread-safe
- 스프링
- IntelliJ
- DispatcherServlet
- 빌더패턴
- ApplicationContext
- testAnnotationProcessor
- 빈 스코프
- Bean Scope
- mybatis
- 토비
- Gradle
- AOP
- 어플리케이션컨텍스트
- 그래이들
- 트랜잭션
- spring boot
- annotationProcessor
- 그래들
- okhttp
- Today
- Total
목록Spring (8)
나만보는페이지
[Spring] 사용자 정의 Bean Scope 만들기 싱글톤, 프로토타입 등 스프링에서 기본적으로 제공 해주는 스코프들이 있다. 기본적으로 제공되는 것 외에 내가 원하는 Scope 을 만들어서 활용해보자! 그냥 궁금하니깐 사용자 정의 빈 스코프를 만들어보자. Bean Scope⁉️ 스프링에서 빈 스코프는 쉽게 말하면 bean 의 생명 주기(수명?)를 결정하는 범위이다. 스프링이 Scope 를 이용하여 어떤 식으로 빈의 생명 주기를 관리 하는지는 기회가 되면 자세하게 써볼 예정이다. Bean Scope 종류 스프링에서 기본적으로 제공하는 대표적인 스코프는 2가지 이다. singleton 은 한번만 생성해서 컨테이너 종료까지 유지된다. prototype 은 빈 팩토리에 빈을 요청할 때 마다 새로 생성 해준..
토비스프링 6장 AOP (2) AOP 용어 정리 (1) target (타깃) 타깃은 부가기능을 부여할 대상 오브젝트이다. (2) advice (어드바이스) 어드바이스는 타깃에게 제공할 부가기능을 담은 모듈이다. (3) join point (조인 포인트) 조인 포인트는 어드바이스가 적용될 수 있는 위치를 말한다. 스프링에서 조인 포인트는 메소드의 실행 단계이다. (4) pointcut (포인트컷) 어드바이스를 적용할 조인 포인트를 선별하는 작업 또는 그 기능을 정의한 모듈이다. (5) proxy (프록시) 클라이언트와 타깃 사이에 투명하게 존재하면서 부가기능을 제공하는 오브젝트이다. (6) advisor (어드바이저) 포인트컷과 어드바이스를 하나씩 갖고 있는 오브젝트이다. 어떤 부가기능(advice)을 어..
[Spring MVC] DispatcherServlet boot-2.2.6(spring-5.2.5) 기준으로 작성하였다. 스프링 웹 어플리케이션을 개발하면서 항상 나의 시작점은 @Controller 였다. 쿼리 스트링으로 id=pplenty 작성하여 호출하면 당연하게 메서드에 매개변수 String id 를 추가하여 전달 받는다. Http 요청을 파싱하고 전달인자를 만들어 메서드를 호출해주는 것은 어떤 방식으로 이루어질지가 궁금하다. 브라우저를 통한 HTTP 요청이 내가 작성한 Controller 의 특정 메서드까지 도달하기 까지의 과정을 분석해보자. DispatcherServlet 스프링은 모든 요청을 하나의 서블릿(DispatcherServlet)으로 받아서, 처리할 수 있는 핸들러에게 요청을 전달해준..
토비스프링 6장 AOP (1) 학습 목표 AOP 가치를 이해하고 효과적으로 사용할 방벙을 찾아보자. 트랜잭션 코드 분리 단계 UserService 내에는 비즈니스 로직과 트랜잭션 로직이 함께 존재하기 때문에 분리 해야 한다. (1) 메소드 분리 장점 메소드가 분리되어 깔끔해짐. 단점 비즈니스 로직 코드에 트랜잭션을 적용하고 있다는 사실이 드러남. 부가기능(트랜잭션)을 어디에 적용할 것인가가 코드에 노출됨. (2) DI를 이용한 데코레이터 패턴 적용 장점 비즈니스 로직을 담은 클래스의 코드에는 영향을 주지 않고 트랜잭션이라는 부가기능을 자유롭게 부여할 수 있는 구조. 비즈니스 로직에 대한 테스트를 쉽게 만들 수 있다. 타깃의 코드를 손대지 않고, 클라이언트가 호출하는 방법도 변경하지 않은 채로 새로운 기능..
boot-2.1.3(spring 5.1.5) 기준으로 작성하였다. 스프링에서 컨트롤러 메서드가 URL 에 매핑 되는 과정을 살펴본다. 개인적으로 스프링은 naming 이 정말 쉽게 잘 되어 있다고 생각한다. RequestMapping 과 관련된 빈의 이름은 requestMappingHandlerMapping 이다. 빈 이름으로만 어떤 역할을 하는지 추정해보면 RequestMapping 과 Handler 를 매핑해 주는 빈이라고 유추가 가능하다. 빈 초기화는 ApplicationContext refresh 과정(11) 중에 일어난다. @Bean으로 설정 되어있는 RequestMappingHandlerMapping 빈의 생성 후 초기화(InitializingBean) 하는 과정을 자세하게 살펴보자! 클래스 ..
boot-2.1.3(spring 5.1.5) 기준으로 작성하였다. 스프링부트에서는 어플리케이션 타입에(Servlet/Reactive) 따라 다른 applicationContext 구현체 를 만든다. 아래 내용은 Servlet 타입 기준으로 작성하였다. ApplicationContext refresh() Spring 의 ApplicationContext 가 refresh 될 때, 어떤 과정을 거치는지 알아보자. refresh() 는 ConfigurableApplicationContext 인터페이스의 함수이다. BeanFactory 의 초기화가 이 부분에서 진행되고, Bean 이 등록되는 과정 등이 포함되어 있다. 함수 주석을 보면, XML 파일, 프로퍼티 파일 관계형 DB 등의 설정을 갱신 또는 불러오는 ..
spring classpath: vs classpath*: 이슈 Invalid bound statement (not found) 웹 어플리케이션을 리팩토링하고, 모듈 별로 분리하는 작업을 하는 과정에서 mapperLocations 에 설정된 mapper xml 을 읽지 못하고 Exception 을 뱉었다. 보통 세션팩토리 빈을 아래와 같이 설정하고, 프로퍼티 값으로 xml 의 경로를 AntPattern 으로 설정해 해당 경로의 모든 xml 을 파일을 가져올 수 있도록 설정한다. 원인 파악 리팩토링 과정에서 수정된 사항 중 의심이 가는 부분이 있었다. mapper xml 파일을 공용으로 사용하기 위해 별도의 모듈로 옮겼는데 그 부분이 문제가 될 것 같았다. 역시나 jar 로 말려 들어간 xml 파일들만 스..
boot-2.2.6(spring-5.2.5) 기준으로 작성하였다. spring boot 에서는 아래와 같이 어플리케이션을 실행한다. 웹 어플리케이션 혹은 배치 어플리케이션이던 간에 실행 방법은 비슷하다. 궁금증 어플리케이션 타입에 따라 ApplicationContext 의 구현체도 달라지는데 스프링부트에서는 어떤 방식으로 타입을 구별하고 구현체를 선택할지가 궁금하다. 컨텍스트 생성 부분 찾기 스프링부트가 어플리케이션 컨텍스트를 생성하는 부분은 main 함수의 SpringApplication.run 스태틱 함수부터 따라가 보면 쉽게 찾을 수 있다. run 함수에서 createApplicationContext() 함수를 통해 context 를 생성한다는 걸 알 수 있다. 타입에 따른 구현체 결정 create..