본문 바로가기

전체 글124

@SpringBootTest의 webEnvironment를 통한 통합테스트 환경 구축 및 비교하기 최근 사내에서 라이브러리 버전을 올리고 나서 배포를 하려고 생각해보니, 어디서 오류가 날지 알 수 없어 매우 불안해하며 배포했던 기억이 있다. 자연스레 머릿속에 통합테스트와 인수테스트가 떠올랐고, 통합 테스트 환경 구축에 대한 이야기를 해보고자 한다. 스프링에서는 @SpringBootTest를 통해 보다 쉽게 통합 테스트 환경을 구축할 수 있다. 이러한 환경을 구성하는 다양한 방법이 있는데 이에 대해 알아보자. webEnvironment = WebEnvironment.MOCK 와 mockMvc를 이용한 통합 테스트@SpringBootTest의 기본 설정인 WebEnvironment.Mock은 WebApplicationContext를 실제로 로드하긴 하지만 SpringBoot의 Servletcontaine.. 2024. 11. 3.
ThreadLocal과 MDC를 통해 알아보는 스프링에서의 로깅 원리 오늘은 ThreadLocal과 MDC 관련해 포스팅해보고자 한다.  우선 ThreadLocalThreadLocal은 무엇인가?정의를 ChatGpt에게 물어봤다. ThreadLocal은 프로그래밍에서 스레드 간에 데이터를 공유하지 않고, 각 스레드에게 독립적으로 데이터를 제공하기 위한 메커니즘입니다. 자바에서 ThreadLocal은 스레드 수준의 데이터 저장소를 제공하는 클래스입니다.ThreadLocal을 사용하면 한 스레드에서 저장한 데이터를 다른 스레드에서 직접 접근할 수 없고, 각 스레드에게 독립적인 데이터를 제공할 수 있습니다. 이는 스레드 간의 데이터 공유를 방지하고 스레드 간에 충돌이나 경합 상태를 피할 수 있도록 도와줍니다.by ChatGpt 즉, 스레드 별로 관리할 수 있는 저장소라고 할 수.. 2024. 11. 3.
[스프링 AOP] 3. 스프링 AOP 스프링에서 빈이 프록시로 변환되는 과정 이전 글에서는 스프링에서 빈을 만드는 방법과 그 원리에 대해서 알아보았다. 이번 글에서는 언제 스프링이 일반 빈을 스프링으로 바꾸어 주는지 알아보자. 스프링에서 빈이 프록시로 변환되는 과정도대체 언제 스프링은 순수하게 만들어진 Bean을 프록시로 바꿔쳐서 부가기능을 추가해주고 Advisor들을 넣어주는 걸까? 참고로 스프링에서는 프록시를 적용할 필요가 없다면 프록시가 아닌 일반 자바 객체를 빈으로 등록한다.@Serviceclass ExampleService() { fun saveInternal() { }}@SpringBootTestclass ProxyTest { @Autowired lateinit var exampleService: ExampleService @Test .. 2024. 11. 3.
[스프링 AOP] 2. 스프링 AOP 프록시 생성 원리 이전 글에서 스프링 AOP의 정의와 기본 개념이 되는 Proxy에 대해서 알아보았다. 이제는 스프링에서 Proxy를 어떻게 만들어주고 있는지 알아보자. Weavingweaving이란 우리가 모듈화한 부가 기능을 타켓에 적용해 핵심 기능과 연결하는 과정을 뜻한다. weaving은 크게 3가지로 나눌 수 있다.컴파일 타임 위빙.java 코드를 컴파일러를 사용해서 .class을 만드는 시점에 부가 기능을 추가하는 것을 말한다.컴파일 과정에 부가 기능을 끼워넣기 때문에 특별한 컴파일러가 필요하다..class파일을 다시 디컴파일 해보면 애스팩트 관련 호출 코드가 들어간다.클래스 로드 타임 위빙자바언어는 .class파일을 JVM내에 클래스 로더에 보관하는데 이 때 부가 기능을 넣기 위해 .class파일의 바이트 코.. 2024. 10. 2.