Backend

·Backend/JPA
소개JPA를 사용하여 데이터베이스와 객체를 연결할 때, 부모-자식 1:N 관계에서 자식 엔티티가 부모 엔티티와의 관계에서 벗어났을 때 어떻게 처리할지를 결정하는 orphanRemoval 속성의 사용법에 대해 설명하는 글입니다.orphanRemoval의 true와 false 설정에 따른 동작 차이를 알아보고, 이를 사용방법을 설명하겠습니다.    도메인 모델 정의하나의 게시글(Board)에 대해 국가별로 보기 권한(BoardCountry)을 설정할 수 있다고 가정해보겠습니다.이 예제에서는 Board 엔티티가 특정 국가에서만 볼 수 있는 게시글을 나타내며, BoardCountry 엔티티가 그 국가 정보를 담고 있습니다.  Board 엔티티@Getter@Entity@Builder@AllArgsConstruct..
·Backend/Test
Testcontainers를 이용한 애플리케이션 통합 테스트 환경 구축이 글에서는 Testcontainers를 활용하여 애플리케이션 통합 테스트 시 데이터베이스 환경을 어떻게 구성할 수 있는지에 대해 설명합니다.Testcontainers 공식 문서를 참고하여 현재 버전에 맞게 직접 테스트해보며 작성했습니다.  서론테스트 코드를 작성할 때, Docker를 사용해 테스트용 데이터베이스를 직접 띄우거나 H2 메모리 데이터베이스를 활용할 수 있습니다. 하지만 Docker로 테스트용 DB를 직접 실행하고 종료하는 과정은 번거로울 수 있으며, H2 메모리 DB는 설정이 간편하고 테스트 속도가 빠르지만 운영 환경과 다른 DB를 사용할 때 문제가 발생할 가능성이 있습니다. 이는 테스트에서 문제가 없더라도 실제 운영 환..
·Backend/Java
퍼사드 (Facade) 패턴복잡한 서브 시스템 의존성을 최소화하는 디자인 패턴 문제의존성이 많을수록 해당 코드를 변경하기가 어려운데, 코드가 변경되어야 하는 이유도 많아지며, 테스트하기도 어려워집니다.레이어드 아키텍처로 어느 정도 의존성을 해소할 수 있었으나, 플랫폼이 커질수록 서비스 레이어(Service Layer)가 의존하는 리포지토리(Repository)와 외부 라이브러리들이 많아질 수밖에 없는 구조였습니다.특히 JPA를 사용하는 환경에서는 도메인 간 상호작용이 많아질수록 Repository 의존성이 과다하게 증가하여, Mock을 사용하는 단위 테스트는 검증이 제대로 되지 않을 뿐만 아니라 목을 하나하나 지정해주기도 어려웠습니다.이러한 문제를 해결하기 위해 퍼사드 패턴(Facade Pattern)을..
·Backend/Spring
최근 운영 중인 플랫폼에서 JPA의 LocalDate 필드(환자 생일, 결제 요청일)가 하루씩 내려가는 문제가 발생했습니다. 이 문제의 원인과 해결 과정을 공유합니다. 문제 상황문제 증상LocalDate 필드(환자 생일, 결제 요청일)의 날짜가 하루씩 내려갑니다.예: 1997-03-25 → 1997-03-24 → 1997-03-23... 로그 확인환자 생일을 수정한 API 호출 이력이 없습니다.결제 요청일은 클라이언트에서 수정할 방법이 제공되지 않았습니다.LocalDate 필드만 문제가 발생하며, LocalDateTime은 정상적으로 동작하고 있었습니다. 타임존 확인백엔드 서버의 JVM 타임존과 DB의 타임존을 확인한 결과 모두 한국(Asia/Seoul)으로 설정되어 있었습니다.@SpringBootApp..
·Backend/Spring
최근 프로젝트에서 Spring Batch를 사용하여 데이터를 처리하는 과정에서 새로운 요구사항이 발생했어요.기존에는 Chunk 방식으로 Reader → Processor → Writer를 통해 테이블 정보를 수집하고 처리했는데, 내부 프로세스의 새로운 요구사항에 맞추기 위해 기존 기능은 유지하면서도 Chunk 방식을 Tasklet으로 전환하여 upsert를 처리해야 했어요. Upsert 란?데이터베이스에 존재하지 않는 경우 삽입하고, 존재하는 경우 업데이트하는 방식이에요. 기존 Chunk 방식 @JobScope @Bean public Step tabCurrStep() throws Exception { return new StepBuilder("tabCurrStep", jobR..
·Backend/JPA
소개개발 과정에서 유지보수성과 확장성을 고려하는 것은 매우 중요합니다. 특히, 시스템이 커지고 복잡해질수록 코드의 일관성과 가독성은 유지보수의 핵심 요소가 됩니다. 이번 글에서는 알림 코드 관리 문제를 Enum Converter를 활용해 해결한 사례를 소개합니다. 이 방법을 통해 알림 코드의 관리 효율성을 높이고, 유지보수의 편의성을 극대화할 수 있었습니다.  문제프로젝트에서 알림 코드가 문자열(String) 타입으로 관리되고 있었습니다. 문제는 이 코드들이 구체적으로 어떤 알림을 발생시키는지 한눈에 파악하기 어렵다는 것이었습니다.데이터베이스나 문서를 보지 않고서는 코드가 무엇을 의미하는지 알기 힘들었으며, 문서조차 최신 상태로 유지되지 않아 정확성을 보장할 수 없었습니다.이러한 상황에서 알림 코드를 수..
dami97
'Backend' 카테고리의 글 목록