Spring 9

Gradle 설정 알아보기 (2편)

0. 서론0.1 왜 이걸 찾아보게 되었는가?멀티 모듈 아키텍처에서 의존성을 정리하면서 다양한 개념들이 나왔지만 필요한 것만 골라서 찾아봄그 당시에는 어떤 역할을 하는지 간단하게 알아보고 사용했기에 잠시만 기억하고, 기억에 남아 있지 않음하지만 계속 사용할 거라고 생각했기 때문에 한번 정리가 필요하다고 생각0.2 정리하고자 하는 내용gradle의 역할 및 특징, build.gradle에서 볼 수 있는 설정들을 1편에서 다루었습니다 -> https://recently0.tistory.com/18의존성과 관련된 implementation, compileOnly, runtimeOnly, runtimeClasspath와 같은 설정들에 대해 알아보려고 합니다. 1. Java Library Plugin1.1 Java..

Spring 2025.02.23

Gradle 설정 알아보기 (1편)

0. 서론0.1 왜 이걸 찾아보게 되었는가?멀티 모듈 아키텍처에서 의존성을 정리하면서 다양한 개념들이 나왔지만 필요한 것만 골라서 찾아봄그 당시에는 어떤 역할을 하는지 간단하게 알아보고 사용했기에 잠시만 기억하고, 기억에 남아 있지 않음하지만 계속 사용할거라고 생각했기 때문에 한번 정리가 필요하다고 생각0.2 정리하고자 하는 내용gradle의 역할 및 특징build.gradle에서 볼 수 있는 설정들의존성과 관련된 implementation, compileOnly, runtimeOnly, runtimeClasspath은 2편에서 다룰 예정 1. Gradle1.1 Gradle 역할 및 특징코드 컴파일 및 패키징Java, Kotlin, Groovy 등의 소스코드를 컴파일하고 JAR 또는 WAR 파일로 패키징..

Spring 2025.02.16

Flyway 도입 전 탐색해보기

0. 서론이전에 Flyway를 사용해서 DB 형상 관리를 하면, 좀 더 개발에 집중할 수 있다고 생각해 도입한 기억이 있습니다. 다만 소수 인원이었기에 단순히 배포할 때, 실행해야 할 쿼리가 누락되는 걸 방지하기 위한 용도로만 사용했습니다. 이후 업무를 하면서 DDL, DML 쿼리가 생각보다 자주 발생하는 것을 느끼고 이를 팀원끼리 매번 공유하기 어려워, Flyway를 도입해 그 시간을 단축하면 좋겠다는 생각이 들었습니다. 그리하여 도입 전 Flyway에 대해 알아보고 정확히 알아보기 위해 이번 글을 작성하고자 합니다. 1. Flyway 알아보기1.1 Flyway란?Flyway는 DB 마이그레이션 툴로, DB 형상관리를 위한 도구Git을 통해 코드 형상 관리를 하듯, Flyway를 사용해 다른 사람들과 ..

Spring 2024.12.07

환경변수가 있었는데요? 없었습니다

서론환경변수를 관리하고 있는 서버가 모종의 이유로 더 이상 서버에 접근할 수 없고, 사용하고 있는 환경변수를 백업하지 않았다면 환경변수 값을 정확하게 알기 어렵습니다. 그래서 이번 포스팅에서는 이미 올라가 있는 서버에 대해, JVM Heap Dump를 활용하여 환경변수를 찾아오는 방법에 대해 공유해드리고자 합니다.사용한 기술 및 소프트웨어Java11, Spring Boot 2.6.11, Docker, Filezilla JVM Heap Dump?일단 JVM Heap Dump에 대해 간단하게 소개를 드리겠습니다. JVM Heap Dump는 JVM의 힙 메모리에 저장된 모든 객체들의 스냅샷을 저장한 파일입니다. 해당 파일들은 다음과 같은 정보를 가지고 있습니다.힙에 저장된 객체 정보객체 간의 참조 관계클래스별..

Spring 2024.11.09

JPA 양방향 매핑 탈출기

서론이때까지 개인적으로 해오던 프로젝트들은 개발에 충분한 시간이 주어지고, 도메인이 단순했습니다. 그래서 ORM 기술인 JPA를 사용할 때 단방향 매핑을 사용해서 모든 것을 해결할 수 있었습니다. 하지만 실제 업무를 진행할 때는 급하게 개발을 하다 보니 양방향 매핑을 자주 사용했습니다. 그리고 그 문제들은 점점 커져 유지보수에 어려움을 주고 있었기에, 성능에 영향을 주는 OneToOne 관계를 급선무로 하여 약 90% 정도 (OneToMany는 조금씩 진행 중) 끊어냈습니다. 이 과정에서 제가 겪었던 양방향 매핑의 문제점에 대해 공유하고자 글을 작성했습니다. 사용한 기술들 -> Java17, Spring Boot 3.2.7, MySQL 8.0.34, JPA, QueryDSL 1. 데이터 획득 경로 분산양..

Spring 2024.10.27

@PathVariable 엔드포인트 매핑 원리

서론최근에 회사일을 하며 파일 다운로드 기능에 대해 리팩터링이 진행되었는데, 기존에 @PathVariable로 수행되었던 API 엔드포인트가 변경되면서 정상적으로 동작하지 않던 문제를 확인했습니다. 이에 관해 @PathVariable에 어떤 로직이 숨어있는지 알아보고자 합니다.문제 파악문제가 발생한 코드 다음은 문제가 발생하기 이전 코드에 대한 예시입니다. fileName을 PathVariable 어노테이션을 사용해서 받아왔습니다.@RequiredArgsConstructor @RestController public class DownloadController { private final DownloadService downloadService; @GetMapping("/before/file/{fileNa..

Spring 2024.10.12

Redis, 그리고 Spring 에서 Redis 활용

서론Redis가 제공하는 기능 중 알고 있는 내용은 간단하게 정리하고, 직접 구현해보지 않았거나 두리뭉실하게 알고 있는 내용들에 대해 예제 코드를 작성하여, Redis에서 제공하는 기능들을 더 적극적으로 활용하고자 글을 쓰게 되었습니다.Redis에 대해Redis는 무엇인가?Redis는 인메모리 기반의 key-value DB입니다. MySQL과 같은 관계형 데이터베이스와 비교했을 때, 관계가 존재하지 않고 단순히 key 하나에 value 하나를 저장할 수 있습니다. 또한 인메모리 기반이기 때문에 디스크에 쓰고 읽는 것이 아닌, 메모리에서 데이터를 처리하게 됩니다. 메모리에서 데이터를 처리함으로써 빠른 연산을 통해 Redis를 캐시 서버로 사용할 수 있습니다.Redis 사용 시 주의점1.  메모리 관리Red..

Spring 2024.09.07

ChainedTransactionManager, JtaTransactionManager

서론여러 개의 DataSource를 다루고 있을 때, 트랜잭션 매니저를 다룰 수 있는 한 가지 방법인ChainedTransactionManager에 대해 알아보고 어떤 문제점이 있는지 찾아본 후, 이를 해결하기 위한 방법 중 하나인 JtaTransactionManager에 대해 다뤄보고자 합니다.Chained TransactionManagerChainedTransactionManager란ChainedTransactionManager는 말그대로 여러 개의 트랜잭션을 묶어서 사용할 수 있는 TransactionManager 입니다. 그렇기 때문에 여러 개의 DataSource를 다룰때 여러개의 TransactionManager를 활용하여 트랜잭션을 시작하고 끝내는 작업을 하나의 TransactionManag..

Spring 2024.07.17

AWS Presigned URL로 트래픽 낮추기

서론 2022년, 팀 프로젝트를 할 때 일기 쓰기 기능에서 이미지 저장을 다음과 같이 구현했었습니다. 클라이언트에서 업로드 하려는 파일을 서버에 전달 서버는 전달받은 파일을 S3에 저장 S3에 저장 후 리턴되는 이미지 경로를 DB에 저장 여기서 저는 '이미지 업로드를 클라이언트에서 할 수 있지 않을까?' 라는 의문점이 들었습니다. 다만 그때는 깊이 생각해보지 못했고, 현재 다시 의문에 대한 해결책인 PresignedURL을 소개해 드리려고 합니다. 소개 및 사용 이유 Presigned URL은 AWS 에서 제공하는 기능으로, 이름 그대로 미리 서명된 URL을 활용하여 AWS S3에 객체를 업로드할 수 있습니다. 즉 Presigned URL을 활용하면 누구든 객체를 업로드 할 수 있습니다. AWS Pres..

Spring 2024.03.28