스프링부트12 @Async 를 통해 비동기 호출을 해보자 스프링에서는 Async 어노테이션을 통해 간편하게 메서드 호출을 비동기 방식으로 만들 수 있다.즉, @Async 어노테이션을 달면, 해당 메서드가 별도의 스레드에서 호출된다.@EnableAsync우선, 스프링의 비동기 메서드 실행을 활성화하기 위해서는 @EnableAsync 어노테이션을 추가해줘야한다.스프링 부트의 AutoConfigure 에 의해서 비동기와 관련된 빈들을 등록해주어야하기 때문이다.해당 Configuration 을 작성하지 않는 경우, 비동기 프로세스로 실행되지 않는다.@Configuration@EnableAsyncclass AsyncConfig : AsyncConfigurer우선 아무런 추가 설정을 추가하지 않고, 아래의 두 코드를 추가해보자.@Serviceclass AsyncDemoS.. 2024. 11. 10. JPA 1차캐시의 동작 방식 만약 같은 테이블을 다른 entity 로 논리적으로 분리하게 되면 1차 캐시가 동작할까? 라는 질문으로부터 1차캐시가 어떻게 동작하는지 궁금해졌다.실제 1차 캐시가 동작하는 방식은 더 복잡하고, 연관관계가 있는 경우에는 또 다르게 동작한다. 그렇기에 해당 포스트에서는 연관관계가 없는 단일 테이블 조회에서 1차 캐시가 어떻게 동작하는지 살펴보고자 한다.1차 캐시란 무엇인가?우선 1차 캐시가 정확히 무엇인가? 라는 질문을 해야한다.JPA 에서 1차 캐시는 영속성 컨텍스트(Persistence Context) 를 의미한다.어플리케이션은 엔티티를 엔티티 매니저 를 통해 다루게 된다.즉, 엔티티 매니저를 통해 entity 의 상태 (managed, detached, removed 등) 을 관리하게 된다. 그리고 .. 2024. 7. 28. 스프링부트 테스트(2) - configuration 과 property 1. 무엇으로 configuration 을 구성할까?참고로 조금 더 자세한 추가적인 내용은 공식문서에 있습니다.1편에서 소개한 TestContextBootstrapper 구현체 SpringBootTestContextBootstrapper 는 기본적으로 별다른 조건이 없다면 @SpringBootConfiguration 어노테이션이 붙은 클래스를 찾아서 context 를 구성한다.즉 @SpringBootApplication 어노테이션 내에 @SpringBootConfiguration 어노테이션을 포함하기 때문에 별다른 조건이 없는 경우 전체 컨테이너 환경이 구성되는 것이다.// @SpringBootApplication 어노테이션@Target(ElementType.TYPE)@Retention(Retention.. 2024. 7. 23. 스프링부트 테스트(1) - 동작원리와 어노테이션 친해지기 동작 원리TestContext 를 bootstrap 하는 원리테스트 컨텍스트란, 테스트시 application context 를 말하며 애플리케이션의 구성 정보를 구성하는 것을 말한다. 예를들어,애플리케이션의 Bean 을 로드하는 것도 이에 포함된다고 할 수 있다.그렇다면, 이 테스트 컨텍스트는 어떻게 로드 될까? 이를 알기 위해서 @SpringBootTest 어노테이션을 확인해보자.@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited// TestContextBootstrapper 구현체 : SpringBootTestContextBootstrapper@BootstrapWith(SpringBootTestContex.. 2024. 7. 23. AOP 활용 (feat. jpa 호출 로깅) AOP 에 대한 기본적인 개념을 이전 포스팅에서 알아보았다.https://pius712.tistory.com/33 스프링 AOP - 톺아보기aop 는 횡단 관심사를 분리하여 모듈화 한 것을 말한다.횡단 관심사란 비즈니스 로직이 아닌 그 외의 로깅, 트랜잭션과 같은 것들을 말한다.스프링을 사용하면 자주 만나게되는 @Transactional 이나 @pius712.tistory.com 이 AOP 를 활용하여, JPA repository 메서드 호출에 대한 로깅을 간단하게 구현하고자 한다.요구사항jpa repository 모든 메서드에 대해 로그를 남겨야함어떤 메서드가 호출했는지, 어떤 메서드가 호출되었는지 로그를 남겨야함jpa repository 의 time elapsed 로그를 남겨야함예외 발생시 messa.. 2024. 6. 6. 스프링 AOP - 톺아보기 aop 는 횡단 관심사를 분리하여 모듈화 한 것을 말한다.횡단 관심사란 비즈니스 로직이 아닌 그 외의 로깅, 트랜잭션과 같은 것들을 말한다.스프링을 사용하면 자주 만나게되는 @Transactional 이나 @Cacheable 과 같은 어노테이션들이 이런 스프링 AOP 를 통해 구현된 것이라고 볼 수 있다.이 스프링 AOP의 기반이 되는 proxy 와 bean post processor 에 대해 알아보고, 스프링 AOP 에 대해 알아보고자 한다.Spring-Aop 의 기반Proxy프록시는 디자인 패턴의 일종이다.아래와 같이 client 가 target 객체를 호출할 때, target 을 객체로 감싸서 중간에서 다른 작업을 하게 된다.간단하게 코드를 살펴보면 아래와 같다.// 인터페이스 기반class Foo.. 2024. 6. 6. 나는 테스트에서 @Transactional 붙이지 않겠다.. (feat. 동시성 삽질기) 재민님 유튜브: https://www.youtube.com/watch?v=PDhN6aiF7QQ 향로님 블로그: https://jojoldu.tistory.com/761토비님 페이스북 게시글: https://www.facebook.com/tobyilee/posts/pfbid037KmQz4TbwBfgkAXc8JjMjipMesF9iuTTWvMtUKirr3742cGfvVrq4Aft33CGmLWSl 로그인 또는 가입하여 보기Facebook에서 게시물, 사진 등을 확인하세요.www.facebook.com 한 때, 테스트에 @Transactional 을 붙일 것이냐 말 것이냐에 대한 논쟁이 개발자 커뮤니티에서 핫했었다.나는 별다른 생각이 없이, 회사에서 안 쓰기도하고 변경감지 관련해서 한번 실수한 이후로 그냥 안쓰고.. 2024. 5. 2. jackson for kotlin part3. 삽질기 (feat. jacksonObjectMapper) https://pius712.tistory.com/19 jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리 kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation( pius712.tistory.com 위 글을 쓰면서, 잠깐 삽질을 했었다. 글을 쓰면서, 동작 확인차 테스트 코드를 만들어서 돌리는데 설정이 안먹히는 것이었다. 문제의 발단 serialize 를 설정해놓고 아래와 같이 테스트 코드를 돌렸다. 테스트 실패. // 설정 @Configuration cla.. 2024. 3. 10. jackson for kotlin part2. 커스터마이징 앞선 글에 이어서, 추가로 커스터마이징에 대해서 글을 쓰려고 한다. https://pius712.tistory.com/11 jackson for kotlin part1. 동작 원리kotlin 을 사용하면, kotlin 용의 jackson library를 설치해야한다. implementation("com.fasterxml.jackson.module:jackson-module-kotlin") spring initializer 로 스프링 프로젝트를 구성하다보면, 자동으로 해당 라이브러리가pius712.tistory.com Spring 부트에, JSON 형식의 요청을 하거나, 응답을 할 때는 ObjectMapper 인스턴스를 사용하게 된다.ObjectMapper 를 통해 marshalling, unmarsha.. 2024. 3. 10. 이전 1 2 다음