반응형
제육's 휘발성 코딩
반응형
article thumbnail
스프링 프록시 정리 (2) - 프록시 팩토리, Advice, Advisor, Pointcut
🔷 Spring/Advanced 2023. 2. 19. 23:20

프록시 팩토리 프록시 팩토리란 스프링에서 동적 프록시를 통합해서 관리해주는 클래스 팩토리이다. 프록시 팩토리를 사용하면, 인터페이스가 있을 경우 JDK 동적 프록시를 사용하고, 구체 클래스만 있으면 CGLIB 동적 프록시를 사용하도록 처리해준다. client의 요청이 오면 대상 Target 클래스의 정보를 파악하여 동적 프록시를 선택하여 반환해준다. JDK 동적 프록시는 InvocationHandler, CGLIB 동적 프록시는 MethodInterceptor를 각각 구현해야 하는데, 스프링에선 Advice라는 개념을 통해 공통 구현을 할 수 있도록 지원한다. Advice 개발자가 Advice를 구현하게 되면 동적 프록시 별로 요청오는 핸들러의 정보를 받아 실제 타겟의 로직을 실행시켜 준다. 즉, Adv..

article thumbnail
스프링 프록시 정리 (1) - JDK 동적 프록시, CGLIB 동적 프록시
🔷 Spring/Advanced 2023. 2. 19. 17:24

프록시란? 프록시는 서버와 클라이언트 사이에서 통신을 대신해주는 역할을 하는 객체이다. 자바에서는 이 프록시를 통해서 JDK 동적 프록시와 CGLIB 프록시를 지원해서 프록시를 직접 생성하는 것이 아닌, 프록시 객체를 런타임 환경에서 자동으로 만들 수 있다. JDK 동적 프록시는 인터페이스의 구현체일 경우 생성되며, CGLIB 동적 프록시의 경우 인터페이스가 없는 구현체 클래스일 경우에 생성 된다. 스프링에서는 AOP 적용을 인터페이스 구현없이 할 수 있도록 기본 방식으로 CGLIB를 채택하여 사용하고 있다. (레거시는 JDK 동적 프록시 사용) JDK 동적 프록시와 CGLIB 프록시에 대해 알아보자. 프록시에 대한 개념은 하단의 포스팅을 참고하자. https://sasca37.tistory.com/27..

article thumbnail
[디자인 패턴] 템플릿 콜백 패턴
🔷 Spring/Advanced 2023. 2. 9. 00:01

템플릿 콜백 패턴 콜백(callback)이란 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 의미한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행하거나 나중에 실행할 수 있다. (call - 호출은 되었고, back - 실행은 뒤에서) @Test void strategyV2() { ContextV2 context = new ContextV2(); context.execute(new Strategy() { @Override public void call() { log.info("비즈니스 로직1 실행"); } }); context.execute(new Strategy() { @Override public void call() { log.info("비즈니스 로직2 실행"); } }); } 전략..

[Spring] 스프링 JSON 요청 및 응답 - RestTemplate 예제
🔷 Spring/basic 2023. 1. 30. 00:51

RestTemplate 이란? RestTemplate은 스프링 3.0 버전부터 지원하는 라이브러리로, REST 방식의 API를 요청하고 json, xml, String 등 응답받을 수 있다. Spring 5부턴 WebFlux와 함께 WebClient를 도입하여 동기식 방식 및 비동기 접근을 지원하고 있다. RestTemplate 동작 과정 RestTemplate restTemplate = new RestTemplate(); 애플리케이션에서 Http Rest API 요청을 위한 RestTemplate을 생성한다. private final List

article thumbnail
스프링 트랜잭션 동작 원리 (@Transactional, AOP)
🔷 Spring/basic 2023. 1. 15. 21:28

@Transactional 란? @Transactional 어노테이션은 스프링에서 많이 사용되는 선언적 트랜잭션 방식이다. 해당 어노테이션은 getConnection(), setAutoCommit(false), 예외 발생 시 롤백, 정상 종료 시 커밋 등의 필요한 코드를 삽입해준다. @Transactional 사용 방법 레거시 스프링에선 해당 어노테이션을 사용하기 위해선 PlatformTransactionManager 와 어노테이션 활성화 설정이 필요하다. 스프링 부트에선 @EnableTransactionManagement 설정이 되어 있어서 자동으로 사용할 수 있으며 입맛에 맞게 클래스 또는 메서드에 @Transactional 어노테이션을 적용하면 된다. PlatformTransactionManager..

article thumbnail
[Advanced] 스프링 로그 추적기 구현
🔷 Spring/Advanced 2022. 6. 15. 01:58

프로젝트 생성 https://start.spring.io/ 에서 다음과 같이 프로젝트를 생성하자. 상품을 주문하는 프로세스로 가정하고, Controller , Service, Repository로 이어지는 흐름을 단순하게 만들어보자. OrderRepositoryV0 package hello.advanced.app.v0; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @Repository @RequiredArgsConstructor public class OrderRepositoryV0 { public void save(String itemId) { // 저장 로직 if (itemId.equal..

[Spring] 스프링 부트 동작과정 (스프링 컨테이너)
🔷 Spring/basic 2022. 4. 12. 12:18

스프링 웹 개발 기초 프로젝트 생성 https://start.spring.io/ 에서 프로젝트를 GENERATE하고 IDE에서 임포트하자. 라이브러리 Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. 스프링 부트 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat spring-webmvc springboot-starter-thymeleaf spring-boot-starter(공통) : 스프링 부트 , 스프링 코어, 로깅 기능 웹 개발에는 크게 정적 컨텐츠, MVC와 템플릿 엔진, API 세 가지로 나눌 수 있다. 스프링 부트는 static/index.html 을 올려두면 Welcome page 기능을 제공한다. 정적 컨텐츠 HTML 파일을 ..

스프링 MVC - 기본 기능
🔷 Spring/MVC 2021. 8. 13. 09:44

Welcome 페이지 스프링 부트에 Jar 를 사용하면 /resources/static/index.hml 위치에 index.html 파일을 두면 Welcome 페이지로 처리해준다. 로깅 스프링 부트 라이브러리는 스프링 부트 로깅 라이브러리를 포함한다. SLF4J (Logback, Log4J, Log4J2 통합) - 인터페이스 Logback - 구현체 (대부분 사용) @Slf4j // 애노테이션 설정으로 편리하게 사용 @RestController // 디폴트의 뷰 반환이 아닌 문자 반환설정 (http 바디에 담아서 전송) public class LogTestController { // private final Logger log = LoggerFactory.getLogger(getClass()); //해당..

반응형
반응형