백엔드 프레임워크 10

[Spring Boot] 실무에서의 디자인 패턴과 도메인 디자인 패턴 적용 사례

Spring Boot 기반 실무에서의 디자인 패턴과 도메인 디자인 패턴 적용 사례Spring Boot 기반의 백엔드 개발을 진행하면서 다양한 디자인 패턴을 적용해야 하는 상황을 자주 마주하게 됩니다. 특히 도메인 중심의 설계를 고려할 때, 단순한 CRUD를 넘어 비즈니스 로직을 체계적으로 관리하는 것이 중요합니다. 이번 포스팅에서는 실무에서 경험한 디자인 패턴과 도메인 디자인 패턴을 적용한 사례를 공유하며, 어떤 고민을 했고, 어떤 방식으로 해결했는지를 정리해 보겠습니다.본 게시글은 실무 경험을 기반으로 작성되었으나, 회사의 실제 데이터 모델 및 프로젝트 내용과는 무관하며 일부 내용을 각색하였습니다. 보안 및 기밀 유지 정책을 준수하기 위해 특정 기술적 세부 사항이 변경되었음을 알려드립니다.1. 레이어드..

Spring @Transactional - REQUIRES_NEW vs REQUIRED, 그리고 실전 적용 사례

Spring @Transactional - REQUIRES_NEW vs REQUIRED, 그리고 실전 적용 사례1. 개요Spring에서는 @Transactional을 활용하여 트랜잭션을 관리할 수 있다. 하지만 단순히 @Transactional을 선언하는 것만으로 충분하지 않을 때가 많다. 특히 트랜잭션 전파(Propagation) 옵션을 적절히 선택하지 않으면 예상치 못한 문제가 발생할 수 있다.이번 글에서는 REQUIRES_NEW와 REQUIRED의 차이점을 실무에서 발생했던 이슈와 함께 설명하고, 커스텀 예외 처리 적용 사례를 통해 이를 어떻게 해결할 수 있는지 정리해보려고 한다.2. @Transactional의 전파(Propagation) 개념1) REQUIRED (기본값)부모 트랜잭션이 있으면 ..

[Spring Framework] 스프링 싱글톤: 실제 업무에서 마주하는 문제와 해결 방법

실제 업무에서 마주하는 문제와 해결 방법스프링을 사용하다 보면 개발자라면 누구나 한 번쯤 들어보는 개념이 바로 **싱글톤(Singleton)**입니다. 스프링 컨테이너(ApplicationContext)가 기본적으로 빈(Bean)을 싱글톤으로 관리한다는 사실은 많이 알려져 있지만, 이를 제대로 이해하지 못하면 예상치 못한 문제를 마주할 수 있습니다. 특히, 멀티스레드 환경에서의 동시성 문제, 빈 스코프의 잘못된 활용, 또는 상태 관리 실수 등은 실제 업무에서 흔히 발생하는 상황입니다.이번 글에서는 스프링의 싱글톤이 왜 중요한지, 그리고 이를 실제 업무에서 어떻게 체감할 수 있는지 살펴보겠습니다. 또한, 흔히 발생하는 문제와 해결 방법을 함께 다뤄 안정적인 애플리케이션 설계를 위한 실질적인 팁을 공유합니다..

[Spring Framework] 스프링 컨테이너의 싱글톤: 왜, 어떻게 관리될까?

스프링 컨테이너의 싱글톤: 왜, 어떻게 관리될까?스프링 프레임워크를 사용하다 보면 "싱글톤"이라는 용어를 자주 접하게 됩니다. 싱글톤은 객체 생성 방식에 큰 영향을 미치며, 애플리케이션 전반에 걸쳐 효율적인 리소스 관리와 코드 구조를 단순화하는 핵심 개념입니다. 이번 글에서는 스프링 컨테이너의 싱글톤이 무엇인지, 자바의 싱글톤 패턴과 어떤 차이가 있는지, 그리고 싱글톤 사용 시 주의할 점에 대해 다뤄보겠습니다.1. 싱글톤이란?**싱글톤(Singleton)**은 단 하나의 객체만 생성되도록 보장하는 디자인 패턴입니다. 주로 애플리케이션에서 전역적으로 공유해야 하는 리소스를 관리할 때 사용됩니다. 예를 들어, 데이터베이스 연결 풀, 로그 관리 클래스 등이 이에 해당합니다.자바에서는 아래와 같은 코드로 싱글톤..

[JPA] 엔티티 매핑 (Entity Mapping)

엔티티 매핑 (Entity Mapping)엔티티 매핑(Entity Mapping)은 객체 지향 프로그래밍에서 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의하는 핵심 개념입니다. JPA(Java Persistence API)와 같은 ORM(Object-Relational Mapping) 기술을 활용하여 데이터베이스와 객체 간의 데이터를 매핑하고 관리할 수 있습니다. 이번 글에서는 엔티티 매핑의 기본 개념, 주요 애노테이션, 실무 적용 사례, 그리고 엔티티 매핑 시 주의해야 할 점에 대해 다뤄보겠습니다.1. 엔티티 매핑의 기본 개념엔티티(Entity)는 데이터베이스의 테이블과 매핑되는 자바 클래스입니다. JPA를 통해 우리는 자바 객체를 데이터베이스 테이블에 쉽게 매핑하고, CRUD(Create, R..

[JPA] JPQL (Java Persistence Query Language) 완벽 가이드

JPQL (Java Persistence Query Language) 완벽 가이드JPQL(Java Persistence Query Language)은 JPA(Java Persistence API)에서 엔티티 객체를 대상으로 하는 쿼리 언어로, SQL과 유사하지만 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 작동한다는 점에서 차이가 있다. JPQL은 데이터베이스에 의존하지 않는 객체 지향 쿼리로, JPA를 사용하는 애플리케이션에서 데이터베이스와 독립적으로 유지보수가 용이한 코드를 작성하는 데 필수적이다.JPQL 기본 문법JPQL은 기본적으로 SQL과 문법이 유사하지만, 테이블 대신 엔티티 객체를 대상으로 조회를 수행한다.// JPQL 예시String jpql = "SELECT m FROM Member..

[JPA] JPA 기본 사용법

JPA 기본 사용법1. JPA란 무엇인가?JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하기 위한 표준 인터페이스입니다. ORM(Object Relational Mapping)을 통해 객체와 데이터베이스 테이블을 매핑하여 객체 지향적인 프로그래밍 패러다임을 유지하면서 데이터베이스 작업을 할 수 있게 해줍니다. JPA의 주요 구현체로는 Hibernate, EclipseLink 등이 있습니다.주요 용어Entity: 데이터베이스 테이블에 매핑되는 클래스EntityManager: 엔티티를 관리하고 데이터베이스 작업을 수행하는 인터페이스Persistence Context: 엔티티의 상태를 관리하는 공간으로, 영속성 컨텍스트라고도 함2. JPA 설정JPA를 사용하기 ..

[아키텍처] 도메인 주도 설계(DDD)

도메인 주도 설계(DDD) 개요1. 도메인소프트웨어 개발에서 "도메인"은 소프트웨어가 해결하고자 하는 문제 영역이나 비즈니스 영역을 의미합니다. 도메인은 특정 비즈니스의 핵심 개념, 규칙, 프로세스를 포함합니다.예를 들어, 은행 시스템에서는 계좌, 고객, 거래와 같은 개념이 도메인에 해당하며, 이러한 요소들에 대한 비즈니스 규칙이 포함됩니다. 도메인에 대한 이해는 비즈니스 문제를 효과적으로 해결할 수 있는 소프트웨어를 개발하는 데 필수적입니다.도메인의 주요 특징:비즈니스 중심: 실제 비즈니스 문제와 요구사항에 중점을 둡니다.고유한 용어: 비즈니스 커뮤니케이션에서 필수적인 특정 용어와 정의를 포함합니다.핵심 로직: 비즈니스 규칙과 로직이 도메인의 핵심에 위치하며 소프트웨어에 반영되어야 합니다.2. 도메인 ..

JPA vs MyBatis: ORM 선택 기준과 차이점

데이터베이스와 애플리케이션 간의 상호작용을 단순화하고, 생산성을 높이기 위해 개발자들은 ORM(Object Relational Mapping) 기술을 사용합니다. ORM은 객체와 관계형 데이터베이스 간의 매핑을 지원하여 SQL 작성 없이 데이터베이스와 통신할 수 있게 합니다. Java 및 Kotlin 환경에서 주로 사용되는 두 가지 ORM 기술은 **JPA(Java Persistence API)**와 MyBatis입니다. 이 포스팅에서는 JPA와 MyBatis의 개념, 차이점, 각각의 장단점, 그리고 어떤 상황에서 적절하게 사용할 수 있는지에 대해 자세히 설명하겠습니다.1. JPA란?**JPA(Java Persistence API)**는 Java EE에서 제공하는 표준 ORM 인터페이스입니다. 객체 지향..

RESTful API 설계 원칙 및 베스트 프랙티스 (best practice)

RESTful API는 현대 웹 애플리케이션의 핵심 요소로, 클라이언트와 서버 간의 통신을 단순하고 효율적으로 할 수 있도록 설계된 아키텍처 스타일입니다. **REST(Representational State Transfer)**는 2000년 로이 필딩(Roy Fielding)이 소개한 개념으로, 리소스를 명확히 정의하고 HTTP 프로토콜을 기반으로 데이터를 주고받는 방식입니다. 이번 포스팅에서는 RESTful API의 설계 원칙과 이를 효과적으로 구현하기 위한 베스트 프랙티스를 자세히 설명합니다.1. REST의 6가지 주요 원칙REST 아키텍처는 다음 6가지 원칙을 따릅니다:클라이언트-서버 구조 (Client-Server Architecture)클라이언트와 서버는 서로 독립적으로 동작해야 합니다. 클라..