본문 바로가기
반응형

개발 이야기/Springboot25

Springboot App 시작, 종료시 로직 실행 Springboot Application을 시작하거나 종료 할때특정한 로직을 수행해야할 경우가 있습니다.로그를 찍는다거나, 백업을 한다거나 등등... 이번 포스팅에서는 Springboot에서 시작, 종료 시 이벤트를 받아 로직 수행을 처리하는 방법을 정리합니다.제 테스트 환경은 Kotlin + Springboot 3.1.4 입니다.목차1. Application 시작 이벤트 리스너import org.springframework.boot.context.event.ApplicationReadyEventimport org.springframework.context.ApplicationListenerimport org.springframework.stereotype.Component@Componentclass A.. 2024. 8. 31.
Springboot 에서 Gzip으로 압축(with Kotlin) Gzip은 파일이나 데이터를 압축하기 위한 소프트웨어 기술을 의미합니다.간혹 .tar.gz이란 포맷을 가진 파일을 볼 수 있는데 여기에 사용된 압축 기술도 Gzip입니다.압축률이 준수하고, 속도도 빨라서 웹 환경에서도 자주 사용되곤 합니다. 이번 포스팅에서는 Springboot 프로젝트에서 Gzip을 사용한 압축/압축해제 하는 방법을 정리합니다. 목차1. 압축 하기아래와 같이 코드를 작성해줍니다.import java.io.BufferedReaderimport java.io.ByteArrayInputStreamimport java.io.ByteArrayOutputStreamimport java.io.InputStreamReaderimport java.util.*import java.util.zip.GZIP.. 2024. 7. 6.
AWS S3 타계정의 버킷 업로드 시 BucketOwnerFullControl 설정 목차1. 서로 다른 AWS 계정에서 업로드 시 객체 소유권S3 버킷에 파일 객체를 업로드할 때, 버킷 생성 AWS 계정과 동일한 계정이라면 특별한 문제가 발생하지 않습니다. 그러나 다른 계정 간에 S3 버킷에 파일을 업로드하는 경우, 해당 객체에 대한 접근 권한 설정이 복잡해질 수 있습니다.이는 아래와 같은 AWS S3 소유권 정책 때문입니다.  2. AWS 콘솔을 통해 버킷 정책 변경아래와 같이 AWS 콘솔에 접근하여 버킷의 정책을 변경해줍니다.이는 애플리케이션 측에서 bucket-owner-full-control를 설정하여 객체를 업로드할 때해당 객체의 소유자를 버킷 소유자로 합니다.  3. 의존성 추가Springboot에서 S3 업로드 및 조회를 하려면 라이브러리 의존성을 먼저 추가해줘야합니다.//.. 2024. 6. 6.
DTO에서 LocalDateTime 유효성 체크와 에러핸들링 방법 이번 포스팅에서는 실무에 많이 사용되는@RequestBody로 선언된 DTO의 LocalDateTime 활용시, 참고 할만한 정보를 소개합니다.목차먼저 제 피씨 환경은 아래와 같습니다.Springboot 3.1.4Java 17Kotlin 1.8.22IntellijLocalDateTime 타입의 날짜 포맷 허용 범위는?아래와 같은 데이터 클래스가 있습니다.data class MemberRequestDto( val id: Long?, val name: String, val email: String, val age: Int, val createdTime: LocalDateTime,) LocalDateTime의 Document를 봅시다.A date-time without a time-.. 2024. 6. 1.
JdbcTemplate로 batchUpdate 사용해보기 목차1. BatchHelper 클래스아래와 같이 jdbcTemplate을 인자로하는 헬퍼 클래스를 하나 만들어 줍니다.import org.springframework.jdbc.core.BatchPreparedStatementSetterimport org.springframework.jdbc.core.JdbcTemplateimport java.sql.PreparedStatementobject BatchHelper { fun executeBatchUpdate( jdbcTemplate: JdbcTemplate, sql: String, list: List, setter: (ps: PreparedStatement, i: Int) -> Unit ) { .. 2024. 5. 28.
Springbatch에서 메타테이블 없이 실행(Springbatch 5) 외부로부터 대량의 데이터를 가져와 주기적으로 가공 및 저장하는 기능 개발이 필요했습니다. 이에 Springbatch를 사용해서 배치 프로그램을 작성 해보기로 했습니다. 다만, 문제가 있었는데요. 자주 실행 되는 만큼 메타 테이블에 데이터가 너무 많이 쌓인다는 것이었어요. 메타 테이블이란 Springbatch 프레임워크에서 작업의 상태를 추적하고 관리하기 위해 메타데이터를 저장하는 장소입니다. BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION ... 등으로 구성되어 있습니다. 기본적으로 Job을 실행하면 해당 테이블에 관련 데이터들이 자동으로 생성 및 저장됩니다. 메타테이블을 사용한다면 거기에 따른 장점이 있겠지만 현시점에서 중요도는 떨어져서 메.. 2024. 3. 19.
Multi-module에서 Domain 분리하기 Springboot로 API 서버 애플리케이션 등을 개발할 때 Multi-module을 채택 할 수 있습니다. (요즘 핫하다고는 못하겠네요. 주목 받은지 꽤 시간이 흐른듯합니다 ㅎㅎ) 아래와 같은 Multi-module로 된 프로젝트가 있습니다. Front API와 Backoffice API를 개발하다보면 같은 도메인(예: DB Entity 및 Repository)을 사용할 때가 생길 수 있습니다. 중복코드가 많아 질 수 있는 상황입니다. 아래와 같이 Domain 모듈로 분리해주면 좀 더 세련된 코딩을 할 수 있을 것 같습니다. 이번 포스팅에서는 Multi-module에서 Domain(DB 의존성) 모듈을 분리하여 세팅할 때 필요한 작업을 정리해봅니다. 1. 프로젝트 구조 Project의 각 Module.. 2024. 2. 21.
Springboot Webflux에서 blocking 감지하기(with BlockHound) 1. BlockHound란? Webflux를 도입하고 로깅 관련 리서치를 하던 중 우연히 blocking을 감지하는 라이브러리가 있다는 것을 알게 되었습니다. 출처: https://stackoverflow.com/questions/63788067/spring-webflux-and-non-blocking-logging-with-log4j2 로깅 관련 Stackoverflow질문의 채택된 답변에서 처음 접하게 되었습니다. BlockHound란 리액티브 애플리케이션에서 Blocking 코드를 감지하고 식별하는 라이브러리입니다. Project Reactor와 호환되며, Blocking 코드를 감지하고 StackTrace를 통해 그 원인을 식별합니다. Project Reactor를 기반으로 하는 Webflux는 .. 2024. 2. 8.
Springboot에서 P6Spy 통해 쿼리 로깅 1. 문제 & 도입 배경 Springboot + JPA를 사용하여 피처를 개발하다보면 실제 DB에 어떤 쿼리가 실행되는지 표시하고 싶을 때가 있습니다. JPA 사용 시 아래와 같이 옵션을 주면 쿼리가 표시됩니다. ## application.yml spring: jpa: properties: hibernate: show_sql: true 아래와 같이 Hibernate: {SQL} 형식으로 표시됨을 확인 할 수 있습니다. 2024-02-03T10:11:16,918 INFO [http-nio-8080-exec-1] o.s.w.s.FrameworkServlet: Completed initialization in 1 ms Hibernate: select tblmember0_.id as id1_1_0_, tblme.. 2024. 2. 3.
Springboot에서 ArchUnit 사용해서 아키텍처 테스트 ArchUnit은 어플리케이션의 아키텍처를 테스트하고 검증하기 위한 라이브러리입니다. https://www.archunit.org/getting-started ArchUnit을 사용하면 코드에서 특정 패키지, 네이밍 규칙 등이 잘 지켜지는지 테스트 해볼 수 있습니다. 예를 들면 아래와 같은 것들 말입니다. 패키지 구조 클래스 의존성 네이밍 어노테이션 ... Spring 개발자라면 아래 그림이 어떤걸 뜻하는지 한 눈에 알아볼 수 있습니다. 마치 관성처럼 아래와 같이 개발을 할 것입니다. +-------------------------+ +-----------------+ +-----------------+ | Controller | ----> | Service | ----> | Repository | | .. 2024. 1. 27.
Springboot에서 AWS SQS 사용 (with Kotlin) Springboot 버전별로 AWS SDK 버전을 잘 선택해야 합니다. 아래 캡쳐에 따라 그에 맞는 버전을 사용합니다. - 참고: https://github.com/awspring/spring-cloud-aws 이번 포스팅에서는 AWS의 SQS(Simple Queue Service)를 Springboot에서 사용하는 방법을 기술합니다. 로컬 환경은 아래와 같습니다. JDK 17 Kotlin 1.8.22 Springboot 3.1.4 SpringCloudAws 3.0.4 1. 의존성 추가 dependencies { implementation("org.springframework.boot:spring-boot-starter-webflux:3.1.4") ...(중략) implementation(platform.. 2024. 1. 18.
Testcontainers로 테스트 코드 만들기 2(with Kotlin) 앞서 Java로 작성했던 Testcontainers로 테스트 코드 만들기를 Kotlin으로도 작성해봅시다. 이번에는 Mysql이 아닌 Redis를 사용한다고 가정합니다. 또한 Webflux 기반 테스트 환경 구축방법에 대해 포스팅합니다. 로컬환경은 아래와 같습니다. Windows 10 JDK 17 Kotlin 1.8 Springboot 3.1.4 Testcontainers 1.17.7 1. 의존성 추가 아래와 같이 build.gradle.kts에 의존성을 추가해줍니다. /* build.gradle.kts */ dependencies { ...(중략) testImplementation("io.mockk:mockk:1.10.4") testImplementation("org.junit.jupiter:junit.. 2024. 1. 18.
반응형