전체 글
-
트랜잭션 기본 개념과 스프링 적용 방식spring/개념 2025. 9. 1. 19:40
1) 트랜잭션 기본: 정의와 ACID**트랜잭션(Transaction)**은 “모아놓은 작업 단위를 전부 성공(Commit)하거나 전부 실패(Rollback)시키는” 데이터베이스의 논리적 작업 묶음이야. 이를 이해하는 핵심 축이 ACID.A(Atomicity, 원자성): 올-or-낫싱. 일부만 적용된 상태가 남지 않음.보장 장치: DB의 Write-Ahead Log(WAL)/undo 로그, 저장점(savepoint), 롤백 세그먼트. 실패 시 로그를 따라 되돌림.C(Consistency, 일관성): 트랜잭션 전후로 DB의 제약(무결성)이 항상 참.보장 장치: PK/UK/FK/체크/트리거/도메인 규칙 + 애플리케이션 레벨의 비즈니스 규칙. 스프링은 이를 돕지만 “일관성” 자체는 DB 스키마/규칙이 1차적 ..
-
spring aop - 2편 (proxy)spring/aop 2025. 8. 20. 11:22
1. Proxy 기반 동작 구조 (Spring AOP)Spring AOP는 런타임에 프록시 객체를 만들어서, 클라이언트가 Target Object(비즈니스 로직 객체)를 호출할 때 중간에 Advice를 실행시킵니다.클라이언트 → 프록시 객체 → (Advice 실행) → Target Object(실제 메서드 실행)즉, 클라이언트는 Target Object를 직접 부르지 않고 Proxy 객체를 호출하게 됩니다.Spring이 Bean을 등록할 때 원래 객체 대신 Proxy 객체를 빈으로 등록해두기 때문에, DI/Autowired 시점에 주입되는 것도 사실은 Proxy입니다.1-1. Proxy 객체의 정의Proxy 객체란? → 원래 객체(Target Object)를 대신해서 동작하는 "대리 객체".역할:프록시(..
-
spring aop - 1편(기본 개념)spring/aop 2025. 8. 20. 11:06
1. AOP(관점 지향 프로그래밍, Aspect-Oriented Programming)가 생겨난 이유문제: 객체지향(OOP)만으로는 **흩어져 있는 공통 기능(횡단 관심사, cross-cutting concerns)**을 깔끔하게 분리하기 어려움.예: 모든 메서드 실행 전에 로그 찍기, 트랜잭션 처리, 보안 검사→ 각 메서드에 logger.info("시작"), try/catch, @Transactional 같은 중복 코드가 늘어남.해결책: 핵심 비즈니스 로직과 이런 부가 기능을 분리해서 관리하고, 런타임 시 자동으로 "끼워 넣는" 기술 필요.AOP 등장: 공통 기능을 별도로 정의해두고, "어느 시점(JoinPoint)에, 어떤 방식(Advice)으로 적용할지" 선언적으로 설정.Spring은 Proxy 기..
-
아파치 그라비티노란?Web_Server 2025. 8. 16. 12:29
아파치 재단에서 개발한 고성능·지리 분산(geo-distributed)·페더레이션(federated) 방식의 메타데이터 관리 시스템 입니다.즉 여러 데이터베이스와 여러 리전에 분산되어 있는 데이터를 효율적으로 관리하게 해주는 시스템입니다.-> 즉 실무에서 여러군데 흩어진 데이터베이스를 하나의 시스템(아파치 그라비티노)를 통해 통합 관리해주는 시스템 아파치 그라비티노 주요 개념메타데이터 레이크(중요)데이터 레이크(Data Lake): 데이터를 다양한 포맷(CSV, JSON, Parquet 등) 그대로 저장하는 중앙 저장소메타데이터 레이크(Metadata Lake):여러 데이터 소스(MySQL, PostgreSQL, MongoDB, Hive, S3 등)의 메타데이터만 모아놓은 중앙 저장소데이터를 직접 저장..
-
Future / CompletableFutureJAVA 2025. 5. 25. 20:59
Future🎯 Future의 기본 개념Future는 "미래에 완료될 작업의 결과"를 나타내는 인터페이스입니다.Java 5에서 java.util.concurrent 패키지와 함께 도입되었습니다. 핵심 아이디어: ─ 비동기 작업을 시작하고 즉시 Future 객체 반환 ─ 실제 결과는 나중에 Future.get()으로 조회 ─ 작업이 완료될 때까지 get()은 블로킹됨 ─ 작업 취소, 완료 여부 확인 등의 제어 기능 제공 Future 인터페이스의 실제 구조public interface Future { // 작업 취소 시도 boolean cancel(boolean mayInterruptIfRunning); // 취소 여부 확인 boolean isCancelled(); ..
-
티켓팅 서비스 내 동시성 문제 해결(RDB 동시성 문제)flab 2025. 4. 9. 21:31
사용자는 티켓팅 예약을 통해 티켓팅을 할 수 있습니다.이 때 유저는 좌석을 선택해서 좌석이 이미 선택되지 않은 경우 예약이 가능하고 콘서트에서는 예매 가능 좌석이 하나 줄어듭니다. 참고로 제가 테스트한 콘서트의 정보는 다음과 같습니다.해당 콘서트는 concert_seat을 1~80까지 가지고 있습니다.(80건의 좌석예매 가능)idnameartist_nameremaining_seatstatusconcert_hall_name1Shining Star 콘서트엑소80OPEN올림픽홀 이 콘서트를 2000명이 동시에 접속하여 예약 시도해보겠습니다.총계: 90idmember_idseat_idstatuscreated_at1510PENDING 2025-04-08 09:02:15225810PENDING 2025-04-08 ..
-
Sticky Session네트워크 2025. 2. 26. 14:06
Sticky Session(Session Affinity)은 특정 사용자의 요청을 항상 동일한 서버로 라우팅하는 로드 밸런싱 기법이다. 즉, 사용자의 첫 번째 요청이 특정 서버에 연결되면 이후의 요청도 계속 해당 서버로 보내진다. ✅ 어디에 쓰이나?세션 기반 애플리케이션→ 사용자의 세션 정보를 서버 메모리에 저장하는 구조에서는, 요청이 다른 서버로 가면 세션 정보가 없어 로그인 유지가 어렵다. Sticky Session을 사용하면 문제를 해결할 수 있다.로드 밸런서와 함께 사용→ 로드 밸런서(HAProxy, Nginx, AWS ALB 등)가 클라이언트의 세션을 기반으로 요청을 동일한 서버로 보낸다.🔹 Sticky Session의 구현 방식Sticky Session을 구현하는 주요 자료구조와 알고리즘을 ..
-
spring-boot-starter-test는 어떻게 동작하는가.spring/mockito 2025. 2. 21. 21:10
spring-boot-starter-test의 동작 방식테스트 실행 시 Spring Boot는 테스트 컨텍스트(TestContext)를 생성하여 실행됩니다. 테스트 컨텍스트 로딩@SpringBootTest 또는 @ContextConfiguration 등의 어노테이션을 통해 Spring의 애플리케이션 컨텍스트를 로드함.이 과정에서 필요한 빈(Bean)을 생성하고, ApplicationContext를 초기화.spring-boot-starter-test는 기본적으로 SpringBootTestContextBootstrapper를 사용하여 컨텍스트를 초기화함.테스트 환경 설정@MockBean, @SpyBean 등을 사용하여 특정 빈을 목(Mock) 객체로 대체할 수 있음.@TestConfiguration을 통해 ..