
AOP AOP란 무엇일까? AOP란 일단 개념 자체는 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법이다 무슨 말인지 이해가 잘 안간다. 쉽게 생각하면 주기능과 보조기능을 분리하고 보조 기능을 선택적으로 적용해서 사용한다는 개념이다 예를 들어 어떠한 메소드에 로그처리 기능을 추가해야한다고 할 때 만약 메소드에 직접 구현한다고 생각해보자. 이 때 로그 기능을 붙어야하는 메소드가 수백개가 된다면 어떨까 하나하나 하면 분명 시간도 더 걸리고 복잡해 질 것이다. 유지관리에 문제가 생길 수 있다! 이럴 때 AOP를 사용한다. 로그 기능을 보조기능으로 빼서 구현해두고 필요한 메소드에 선택적으로 붙인다..! 그림으로 한번 살펴보자 위 그림은 해당 각 클래스마다 부가기능이 들어가 있는 모습이다. 공통적인 기능..

Resource 추상화 (https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#resources) Resource 추상화란? Resource 추상화란 low-level 리소스에 접근할 수 있게 자바의 java.net.URL을 추상화 한 것이다 처음 들었을 때는 감이 잘안왔다..! 그럼 추상화 한 이유는 무엇일까?! 공식문서를 통해 알아보자! 추상화를 한 이유는 무엇일까? 일단 공식문서를 보면 영어로 길~~~게 나와있다 이유들을 살펴보면 첫째로 클래스패스 기준으로 리소스를 읽어오는 기능이 없다! ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다 URL prefix를 이용해 새로운 핸들러를 만들 수..

ApplicationEventPublisher ApplicationEventPublisher는 무엇인가?! ApplicationEventPublisher는 이벤트 기반의 프로그래밍을 할 때 필요한 기능을 제공해준다! ApplicationContext가 상속 받고 있다! 이벤트 프로그래밍 이라고 얘기하니까 느낌이 잘 안온다! 한번 직접 이벤트를 다뤄보자! 일단 이벤트와 이벤트를 다뤄줄 이벤트 핸들러를 만들어보자! 이벤트를 만들었으니 AppRunner에서 Event를 가져와 실행시켜보자! 이 때 중요한게 있는데 Event는 Bean이 아니다!! EventHandler만 빈으로 등록된다!! 헷갈리지말자 ApplicationEventPublisher를 주입받아서 publishEvent를 통해 MyEvent를 발..

Spring Profile 알아보기 Profile 이란? Profile은 Bean들의 그룹이라고 생각하면 쉽다! ApplicationContext의 getEnvironment()를 통해 가져올 수 있다! Environment의 역할은 활성화할 Profile을 확인하고 설정해준다! 위의 실행결과는 아래와 같다! 현재 활성화된 Profile은 없고 default는 언제나 적용된다 그럼 이걸 언제쓸까? Profile을 언제쓸까? 아직 내가 직접적으로 사용해 본 적은 없다..! Profile은 각각의 환경에 따라 다른 Bean을 써야하는 경우 혹은 특정한 Bean들을 써야하는 경우에 사용된다 예를들어 테스트 환경에서는 A라는 Bean을 사용하고, 배포 환경에서는 B라는 Bean을 쓰고싶다면 Profile을 통해..