728x90

Spring Boot 13

[Spring] @Transactional의 동작 방식과 전파 속성

목차트랜잭션이란?@Transactional 어노테이션 동작 방식@Transactional 속성@Transactional 전파 속성(propagation)정리 1. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변화시키는 작업의 논리적 단위로서 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 ACID 특성을 보장한다.Atomicity (원자성) - 트랜잭션의 모든 쿼리가 DB에 반영되거나, 모두 반영되지 않아야 한다.Consistency (일관성) - 트랜잭션 처리 결과는 항상 일관성이 있어야 한다.Isolation (격리성) - 서로 다른 트랜잭션을 서로의 연산에 개입할 수 없다.Durability (지속성) - 트랜잭션이 성공적으로 ..

Spring Boot 2025.05.02

[Spring] Gradle 핵심 정리

목차Gradle의 등장 배경과 핵심 개념Spring 프로젝트에 Gradle 설정하기Maven vs GradleGradle 관련 명령어 1. Gradle의 등장 배경과 핵심 개념Java 빌드 도구 역사에서 Ant와 Maven에 이어 2012년 Gradle이 등장했다. Maven의 XML 기반 선언적 접근은 복잡한 빌드 로직 구현에 한계가 있었고, 이를 해결하기 위해 Gradle이 만들어졌다. Gradle의 특징은 다음과 같다. 1) Groovy 기반 DSL Gradle은 XML 대신 Groovy(또는 Kotlin) 기반의 DSL을 사용해 가독성이 높고 유연한 빌드 스크립트를 작성할 수 있다. 2) 태스크 기반 빌드 모델 모든 빌드 과정을 태스크 단위로 나누어 관리하며, 태스크 간 의존성 설정이 가능하다.t..

Spring Boot 2025.03.27

[Spring] 효율적인 패키지 구조와 네이밍 컨벤션

목차패키지 구조의 중요성과 기본 원칙스프링 프로젝트 초기 세팅을 위한 패키지 구조 가이드네이밍 컨벤션과 예시도메인 중심 vs 계층 중심 구조다양한 패키지 구성 예시 1. 패키지 구조의 중요성과 기본 원칙패키지 구조는 단순한 코드 정리 이상의 의미를 갖는다. 잘 설계된 패키지 구조는 코드의 가독성을 높이고, 유지보수를 용이하게 하며, 개발자 간 협업을 효율적으로 만든다. 스프링 프로젝트에서 패키지 구조가 중요한 이유는 다음과 같다. 1.1 코드 탐색성 향상개발자가 코드를 처음 접할 때, 패키지 구조는 프로젝트의 전체 구조를 이해하는 첫 번째 단서가 된다. 논리적이고 명확한 패키지 구조는 새로운 개발자가 빠르게 프로젝트에 적응할 수 있게 도와준다.1.2 의존성 관리패키지는 의존성 관리의 기본 단위다. 잘 설..

Spring Boot 2025.03.27

[Spring] Spring Bean이란?

목차Spring Bean이란?Bean 등록 방법Bean 생성과정 / 생명주기Bean Scope 1. Spring Bean이란?Spring Bean빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체로 스프링 컨테이너에 의해 관리된다.스프링 빈은 싱글톤(Singleton) 패턴으로 관리되어 애플리케이션 전체에서 하나의 인스턴스만 존재하게 된다.Bean 왜 쓸까?Bean을 통해 스프링 컨테이너에 객체 간의 의존 관계를 관리할 수 있다. 2. Bean 등록 방법Bean 등록 방법으로 다음과 같은 방법이 있다.(1) xml에 직접 등록(2) @Bean 어노테이션 사용메서드 위에 @Bean태그를 사용하고 AppConfig 객체 위에 @Configuration, @ComponentScan, @Impor..

Spring Boot 2025.03.06

[Spring] SOLID 원칙

SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞글자를 따서 만들어졌다. SOLID 원칙은 객체지향 프로그래밍에서 개발 생산성을 높일 수 있으며 객체지향 설계의 핵심인 의존성 관리를 위해 준수해야하는 원칙이다.  SOLID 원칙을 지킴으로서 다음과 같은 이점을 얻을 수 있다.코드의 유지보수성 향상확장성 있는 설계 가능재사용 가능한 컴포넌트 구성 가능복잡성을 감소시켜 개발 생산성 향상 각각의 원칙을 하나씩 살펴보자. 1. SRP (Single Responsibility Principle, 단일 책임 원칙)SRP는 Single Responsibility Principle의 약자로 단일 책임 원칙을 의미한다. SRP는 한 클래스는 하나의 책임만 가져야한다는 원칙이다. 따라서 클래스는 오직 ..

Spring Boot 2025.02.06

[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (2)적용

앞서 살펴본 Resilience4j 라이브러리를 적용해 보고자한다. Circuit Breaker 패턴과 Resilience4j에 대해서는 이전 글을 참고하면 된다. 전체 코드는 GitHub에서 볼 수 있다. 목차Resilience4j 1.1 환경 구성1.2 프로퍼티 설정1.3 커스터마이징Circuit Breaker 기본 구현 2.1 @CircuitBreaker 적용 2.2 @TimeLimiter 적용2.3 상태 확인 및 관리 2.4 Fallback 전략 실전 예제3.1 시나리오3.2 Resilience4j 적용 코드3.3 적용 결과 3.4 고려 사항  1. Resilience4j 환경 구성1.1 의존성 추가gradleimplementation 'org.springframework.cloud:spring-..

Spring Boot 2025.01.15

[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (1)개념

목차 Circuit Breaker란? Circuit Breaker 패턴 동작 방식 2.1 Circuit Breaker 상태 종 2.2 Circuit Breaker의 장애 판단 기준 2.3 Circuit Breaker 동작 방식 Resilience4j 라이브러리 3.1 Resilience4j 3.2 핵심 모듈 3.3 기본 설정 및 예시  1. Circuit Breaker란? Circuit Breaker란 사전적 의미로 회로 차단기이다. 회로 차단기는 전기 회로에서 과부하가 걸리거나 단락으로 인한 피해를 막기 위해 자동으로 회로를 정지시키는 장치이다. 차단기는 어느 정도 시간이 지난 뒤에는, 원래의 기능이 동작하도록 복귀한다.  Circuit Breaker 패턴은 회로 차단기처럼 MSA에서 장애 전파..

Spring Boot 2024.12.28

[Spring] Redis를 이용한 대기열 관리

콘서트 예약 서비스 기능 중 대기열 관리를 위해 RDB 대신 Redis를 적용해 보며 얻은 장점을 정리해보고자한다.  1. DB 부하 감소Redis를 사용하면 RDB 보다 비용이 저렴하고 속도가 빠르다. 특히, 대기열 진입은 많은 사용자가 동시에 요청할 수 있는 기능으로 Redis를 사용해 DB 부하를 줄일 수 있다.사용자마다 폴링을 통해 토큰의 상태를 확인하고, 토큰의 상태를 전환하는 과정 등에서 발생하는 DB의 부하를 줄일 수 있다. 2. 대기열 순서 관리 용이Redis는 String, List, Sorted Set, Set, Hash 등 다양한 자료구조를 제공한다.Redis를 사용하면 대기 상태(WAITING) 토큰을 갖는 User 정보를 Sorted Set 자료구조로, 활동 상태(ACTIVE) 토..

Spring Boot 2024.12.28

[Spring] Transaction 분리를 통한 성능 개선

목차1. Transaction 분리의 필요성2. Transaction 분리로 발생할 수 있는 문제와 해결방안3. 콘서트 예약 서비스에 적용해보기    3.1 Transaction 분리1. 좌석예약    3.2 Transaction 분리2. 결제 1. Transaction 분리의 필요성Transaction의 범위에 따라 다음과 같이 성능에 영향을 줄 수 있다. 따라서 Transaction을 분리할 필요가 있다. 1. Transaction 범위가 불필요하게 많거나 느린 쿼리가 포함되어 있는 경우트랜잭션 내에서 Lock을 갖고 있다면 다른 사용자는 트랜잭션이 끝날때까지 대기해야한다. 그리고 데드락이 발생할 수도 있다.다수의 느린 쿼리가 포함된 작업은 요청 처리에 영향을 줄 수 있다.긴 생명 주기의 Transa..

Spring Boot 2024.12.27

[Spring] Lock을 이용한 동시성 제어 - 낙관적락/비관적락/분산락 (2)적용

콘서트 예약 서비스에서 발생할 수 있는 동시성 문제를 파악해보고 앞서 살펴본 동시성 제어에 대하여 적용해보았다. Lock을 이용한 동시성 제어 개념은 이전 글을 참고하면 된다. 콘서트 예약 서비스 기능 중 동시성 제어가 필요한 기능으로 다음 항목을 선정하였다.콘서트 좌석 예약포인트 충전포인트 사용 각각에 대해 적합한 방법을 고민한 결과 다음과 같다. 실제 구현 코드는 GitHub에 있다.   1. 콘서트 좌석 예약적절한 방법: 분산락(pub/sub) > 비관적락 > 낙관적락선택한 방법: 분산락(pub/sub) + 낙관적락선택 이유콘서트 예매는 동시 접속자가 많기 때문에 충돌이 많이 발생할 수 있다. 따라서 동시성 이슈 발생 가능성이 매우 높다. 또한 분산 환경에서의 동시성 제어가 필요하다.분산 환경에서 ..

Spring Boot 2024.12.27
728x90