백엔드

·백엔드/Spring
이 글에서는 JWT(Json Web Token) 기반 인증 시스템에서 발생할 수 있는 리프레시 토큰 탈취 문제를 해결하기 위한 실질적인 방법을 제시합니다.탈취된 토큰이 악용되는 상황을 방지하고, 리프레시 토큰 로테이션과 플랫폼별 고유 토큰 관리를 통해 보안을 강화합니다.  프로젝트 환경 요약Spring Boot 3.3.4Java 21JJWT 라이브러리 버전 0.12.3Redis를 활용한 리프레시 토큰 관리Spring Security  의존성 설정JWT와 Redis를 사용하기 위해 다음과 같은 의존성을 추가합니다.dependencies { // JWT implementation("io.jsonwebtoken:jjwt-api:0.12.3") implementation("io.jsonwebto..
·백엔드/JPA
소개JPA를 사용하여 데이터베이스와 객체를 연결할 때, 부모-자식 1:N 관계에서 자식 엔티티가 부모 엔티티와의 관계에서 벗어났을 때 어떻게 처리할지를 결정하는 orphanRemoval 속성의 사용법에 대해 설명하는 글입니다.orphanRemoval의 true와 false 설정에 따른 동작 차이를 알아보고, 이를 사용방법을 설명하겠습니다.    도메인 모델 정의하나의 게시글(Board)에 대해 국가별로 보기 권한(BoardCountry)을 설정할 수 있다고 가정해보겠습니다.이 예제에서는 Board 엔티티가 특정 국가에서만 볼 수 있는 게시글을 나타내며, BoardCountry 엔티티가 그 국가 정보를 담고 있습니다.  Board 엔티티@Getter@Entity@Builder@AllArgsConstruct..
·백엔드/Test
Testcontainers를 이용한 애플리케이션 통합 테스트 환경 구축이 글에서는 Testcontainers를 활용하여 애플리케이션 통합 테스트 시 데이터베이스 환경을 어떻게 구성할 수 있는지에 대해 설명합니다.Testcontainers 공식 문서를 참고하여 현재 버전에 맞게 직접 테스트해보며 작성했습니다.  서론테스트 코드를 작성할 때, Docker를 사용해 테스트용 데이터베이스를 직접 띄우거나 H2 메모리 데이터베이스를 활용할 수 있습니다. 하지만 Docker로 테스트용 DB를 직접 실행하고 종료하는 과정은 번거로울 수 있으며, H2 메모리 DB는 설정이 간편하고 테스트 속도가 빠르지만 운영 환경과 다른 DB를 사용할 때 문제가 발생할 가능성이 있습니다. 이는 테스트에서 문제가 없더라도 실제 운영 환..
·백엔드/Spring
Spring Batch에서 PostgreSQL Upsert 처리하기기존 프로젝트에서는 Spring Batch의 Chunk 방식을 사용하여 데이터를 처리해왔으나, 새로운 요구사항에 따라 데이터가 이미 존재할 때는 업데이트하고, 존재하지 않을 때는 삽입하는 Upsert 작업이 필요해졌습니다. Chunk 방식은 주로 대용량 데이터를 처리하고 데이터 변환이 필요한 경우에 적합하지만, 특정 로직(Upsert)에 맞춰 단일 작업을 수행하는 데는 Tasklet 방식이 더 유리하기 때문에 Tasklet 방식으로 전환하여 Upsert를 구현하게 되었습니다. Upsert 란?데이터베이스에 존재하지 않는 경우 삽입하고, 존재하는 경우 업데이트하는 방식입니다. 기존 Chunk 방식 @JobScope @Bean ..
·백엔드/Java
Maven Central 포털의 Gradle 플러그인을 사용한 방식으로 라이브러리를 배포하는 방법을 정리한 글입니다.2024년 3월 12일부터 issues.sonatype.org는 폐쇄되어 모든 등록은 중앙 포털을 통해 이루어지도록 변경되었습니다. 기존 Nexus repository(OSSRH)로 올리는 방식을 사용하던 사용자는 기존 방식을 그대로 사용할 수 있지만, 신규 사용자라면 Maven Central을 통해서 라이브러리를 배포해야 합니다.1. Maven Central 계정 설정따로 도메인이 존재하는 경우 지침서에 따라 Namespace를 등록 하시면 됩니다. 참고로 github는 io.github.사용자이름 형식입니다.아래의 공식 홈페이지에 github 소셜 로그인을 하면 번거로운 작업 없이 Na..
·백엔드/Test
TDD란 Test Driven Development의 약자로 테스트 주도 개발이라고 합니다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다. TDD에 대해 알아보기 전에 전통적인 개발 방식은 코드를 어떤 순서로 작성하는지 TDD와 비교해 무엇이 다른지 알아봅시다. 전통적인 개발 방식(Traditional Development) 전통적인 개발 방식은 위와 같이 1. 애플리케이션 구상 → 2. 코드 작성 → 3. 테스트 코드 작성 순서로 애플리케이션을 개발합니다. 이미 코드를 먼저 작성하였기 때문에 여러 가지 많은 이유로 테스트 코드 작성을 하지 않거나 아예 작성하지 않는 경우도 많이 볼 수 있습니다. 이러한 흐름을 ..
dami97
'백엔드' 카테고리의 글 목록