spring 15

[SpringBoot] yml 파일로 메세지 다국어 처리

개요진행 중인 프로젝트에 다국어 처리를 추가해야 하는데, 공식 문서에서 제시한 properties 파일 대신 yml 파일을 사용하고 싶었고, 조사 결과 이를 가능하게 하는 라이브러리가 존재했습니다.https://github.com/akkinoc/yaml-resource-bundle?tab=readme-ov-file GitHub - akkinoc/yaml-resource-bundle: Java ResourceBundle for YAML format.Java ResourceBundle for YAML format. Contribute to akkinoc/yaml-resource-bundle development by creating an account on GitHub.github.com 이 게시글에서는 스..

리서치 2024.02.14

[Spring Batch] TaskletStep 아키텍처

TaskletStep 간단 요약 1. Job이 Step을 실행 2. Step은 RepeatTemplate 내 Tasklet을 실행 3. Tasklet 내 비즈니스 로직 수행 후 예외 발생 여부에 따른 조건 분기 3.1 예외 발생 시 반복문 종료 및 Step 종료 4. 정상적으로 비즈니스 로직이 수행될 경우 RepeatStatus에 따른 조건 분기 4.1 RepeatStatus가 FINISHED일 경우 반복문 종료 및 Step 종료 4.2 RepeatStatus가 CONTINUABLE일 경우 2번으로 돌아가서 다시 Tasklet 실행 TaskletStep 상세 1. SimpleJob이 각각의 Step들을 실행합니다. SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300 ..

Spring 2023.07.11

[Spring] @Transactional 적용 시 주의 사항

개요 앞선 포스팅에서 @Transactional 애노테이션 적용 시 프록시 방식의 AOP를 통해 트랜잭션이 적용되는 내용을 정리했습니다. https://jaimemin.tistory.com/2271 @Transactional 동작 원리 용어 정리 트랜잭션 관리에는 크게 두 가지 방법이 있습니다. 선언 방식의 트랜잭션 관리 프로그래밍 방식의 트랜잭션 관리 선언적 트랜잭션 관리 @Transactional 애노테이션 하나만 선언해서 편리 jaimemin.tistory.com 이번 게시글에서는 @Transactional 적용 시 주의할 사항을 정리해 보겠습니다. @Transactional 적용 시 주의 사항 @Transactional을 적용 시 주의할 점이 크게 세 가지가 있습니다. 트랜잭션을 적용하기 위해서는..

Spring 2023.04.18

@Transactional 동작 원리

용어 정리 트랜잭션 관리에는 크게 두 가지 방법이 있습니다. 선언 방식의 트랜잭션 관리 프로그래밍 방식의 트랜잭션 관리 선언적 트랜잭션 관리 @Transactional 애노테이션 하나만 선언해서 편리하게 트랜잭션을 적용하는 방법 "트랜잭션을 적용하겠다"라고 메서드나 서비스에 선언하기만 하면 AOP를 통해 트랜잭션이 적용되는 방식 프로그래밍 방식의 트랜잭션 관리 PlatformTransactionManager 또는 TransactionTemplate 등을 통해 트랜잭션 관련 코드를 직접 작성하는 방법 이번 게시글에서는 선언적 트랜잭션 관리의 동작 원리에 대해 알아보겠습니다. Transaction AOP 전체 흐름 @Transactional 애노테이션이 선언되면 AOP를 통해 트랜잭션이 적용되므로 Trans..

Spring 2023.03.29

Springboot 동작 방식 및 분석하는 방법

개요 Spring Initialzr가 제공해 주는 프로젝트 템플릿 덕분에 개발자들은 손쉽게 스프링 부트 프로젝트 개발을 시작할 수 있습니다. 버튼 몇 번 클릭만 하면 개발을 바로 진행할 수 있기 때문에 편리하다는 장점이 있지만, 이로 인해 저를 포함해서 많은 개발자들이 스프링 부트의 내부 동작 과정 및 AutoConfiguration에 의해 추가된 빈들을 배우지 않는 단점이 있습니다. 따라서, 이번 게시글에서는 스프링 부트가 내부적으로 구성 정보를 어떻게 추가하는지 살펴보고 추가된 bean들에 대해 확인하는 방법을 간략하게 소개하겠습니다. 글을 읽기에 앞서 아래 게시글들을 참고하시면 이해가 더 잘 될 것 같습니다. https://jaimemin.tistory.com/2259 [Spring Boot] Au..

Spring 2023.03.15

[Spring] @Conditional 정리

개요 스프링 4.0부터 추가된 Conditional 애노테이션에 대해 간단히 정리해 보겠습니다. @Conditional & Condition 인터페이스 앞서 언급했듯이 @Conditional은 Spring 4.0부터 추가가 되었고 이름 뜻대로 모든 조건을 충족해야지만 스프링 컨테이너에 Bean으로 등록시키는 역할을 수행합니다. @Conditional은 @Configuration 클래스와 @Bean 메서드에 적용이 가능하기 때문에 Target이 타입과 메서드 모두 적용되며 클래스 조건을 만족하지 못하는 경우 메서드는 무시가 됩니다. 스프링 부트가 사용하는 @Conditional의 가장 대표적인 방법은 클래스의 존재를 확인할 때이며 이를 위해 @ConditionalOnClass와 @ConditionalOnM..

Spring 2023.03.07

Spring 지원 없이 Servlet을 통해 Front Controller 구현

개요 앞서 작성한 Spring Boot 개요 게시글에서 스프링 부트는 스프링 애플리케이션 개발에 요구되는 Servlet Container의 설치, WAR 폴더 구조, web.xml, WAR 빌드, 컨테이너로 배치, 포트 바인딩, 클래스로더, 로깅 등과 같은 필요하지만 애플리케이션 개발의 핵심이 아닌 단순 반복 작업을 제거해 주는 개발 도구와 아키텍처를 지원한다고 언급했습니다. https://jaimemin.tistory.com/2254

Spring 2023.03.02

[Maven] java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x2fbb01ba) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler)

개요 SpringBoot 프로젝트를 실행하는데 아래와 같은 에러가 발생했습니다. java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x2fbb01ba) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) 원인 pom.xml에 명시된 Java 버전과 lombok 버전 호환성이 맞지 않아 발생하는 문제였습니다. 해결 방법 저 같은 경우 Java 11 버전을 사용하고 있었고 lombok은 별도 version 명시 없이 사용하고 있었는데 Java 11과 호환성이 맞는 버전인..

[DEV] 기록 2023.01.27

[Intellij] resource 폴더를 인식하지 못할 때 해결 방법

개요 깃에서 프로젝트를 pull 받고 실행을 하려는데 Intellij에서 resources 폴더를 인식하지 못하는 문제가 발생했습니다. 해결 방법 위와 같은 문제가 발생할 경우 아래와 같이 수동으로 해결해야 합니다. File > Project Structure > Project Settings > Modules > 프로젝트 구조 내 resources 폴더 클릭 > Mark as Resources 버튼 클릭 > Apply

[DEV] 기록 2023.01.27

[SpringBoot] OpenSessionInView

개요 JPA를 사용하는 서비스를 개발하는 도중 Controller에서 데이터를 변경했는데도 불구하고 DB에 변경이 되지 않는 문제가 발생했습니다. 검색해보니 이는 Transactional 범위 밖에서 데이터를 변경했기 때문에 발생했던 문제이고 자세한 내용을 알기 위해서는 OpenSessionInView(OSIV) 동작 원리를 알아야 한다고 해서 간단히 정리해보겠습니다. (OSIV는 hibernate에서 사용하는 용어이고 사실 JPA에서는 OpenEntityManagerInView(OEIV)라고 지칭합니다.) 내용을 잘 정리해주신 Shi._.D TIL님께 감사드립니다. * 해당 글은 JPA 영속성 컨텍스트에 대해 안다는 전제 하에 작성했습니다. https://jaimemin.tistory.com/1898 ..

Spring 2022.03.29