spring 5

AOP를 이용한 @Transactional의 동작 원리 (feat. 트랜잭션의 범위, 전파)

Spring이 제공하는 트랜잭션의 기능트랜잭션 동기화: 컨텍스트 내에서 일관된 처리트랜잭션 추상화: jdbc, jpa 등의 다양한 인터페이스를 동일한 방식으로 제공AOP를 이용한 트랜잭션 분리: 트랜잭션이라는 관심사(Aspect)를 분리해서 비즈니스에 집중시킴 AOP(Aspect Oriented Programming)은 흩어진 관심사를 별도의 클래스로 모듈화하는 방식을 말한다.Aspect: 애플리케이션 내에서 중복으로 존재하는 부가 기능(advice)을 모듈화Advice: Aspect에 구현된 실제의 부가 기능 코드Pointcut: Aspect를 어디에 적용할지 지정 (언제)EX) @GetMapping시에만, UserService만 등의 언제 실행할지 정하는 조건문JointPoint: Advice가 실행..

backend 2025.07.12

Spring의 비동기 프로그래밍 @Async에 대해 알아보자

@EnableAsync, @Async 는 Spring에서 비동기로 작업을 처리하도록 쉽게 도와주는 어노테이션이다.​왜 ThreadPoolTaskExecutor를 등록해야 할까?Spring의 기본 비동기 처리 Executor는 매번 새로운 쓰레드를 생성하기에, 쓰레드풀을 만들어두면 성능 개선​​@EnableAsync 어노테이션을 들어가보자.​org.springframework.core.task.SimpleAsyncTaskExecutor 빈을 찾는다.does not reuse threads즉, 재사용하지 않고 매번 쓰레드를 생성한다.​​​쓰레드를 생성하는 작업은 매우 비용이 많이 드는 작업이라 쓰레드풀로 성능을 개선해보자​CPU Bound 작업보단 IO bound가 대부분인 애플리케이션 로직​​Java의 E..

backend 2024.11.23

토이프로젝트 - 트랜잭션 관리를 통한 베타락(Exclusive Lock) 구현

트랜잭션(transaction)의 관리격리성(Isolation) : 일련의 트랜잭션을 작업 중에는 다른 트랜잭션의 연산 작업이 끼어들지 못하게 격리시킨다.동시에 공유 리소스에 접근시 독립성을 유지하기 위해 대기한다.​​트랜잭션의 isolation level 상승@Transactional(isolation= isolation.SERIALIZABLE)트랜잭션 내에서 선택(select)된 리소스는 공유 잠금(write제한)된다. 성능적으로 동시처리 성능이 가장 나지만 단순하고 가장 엄격한 관리 수준​SERIALIZABLE 만 해둔다면 쓰기 작업은 안되겠지만 읽기 작업이 동시에 가능하기에 비즈니스 로직에서는 잘 고려해야한다.​​트랜잭션 격리 수준의 종류repatable-Read(default) : 조회하는 데이..

mysql 2024.11.22

토이프로젝트 - Redis를 이용한 분산 락(Distributed Lock)

Database Lock은 Lock 획득을 위해 대기하는 connection을 증가시켜서 부하를 준다.​Java의 synchronized나 ReentrantLock을 사용하여 애플리케이션 수준에서의 동시성 제어도 가능하겠지만, 우리는 트랜잭션 관리나 분산 락 구현을 통해 해결할 것이다.​​데이터베이스의 Lock 전략1. 낙관적 잠금 : 충돌이 감지되면 그때 처리하자!JPA의 @Version 어노테이션을 사용하여 엔티티의 버전을 관리하고, 업데이트 시 버전을 체크하여 충돌을 방지할 수 있다충돌 안나면 처리 성능이 좋지만, 충돌이 빈번한 경우 오히려 비용이 크다.다른 트랜잭션의 접근을 제어하지 않기에 동시성이 높지만 충돌을 방지하지 못한다.충돌시 롤백 처리를 구현해야한다Table의 @Version 이나 Ti..

backend 2024.11.22

Spring Cloud를 뜯어보자 (Gateway, Config, Netflix Eureka)

마이크로 서비스 아키텍처(MSA)는 하나의 모놀리식 아키텍처에서 각 도메인별로 분해하여 비즈니스에 따른 유연한 대응을 목적으로 한다.​구조는 복잡해져도, 기술만을 중요시하지 않고 도메인을 신경써야하는 요즘 시대에 걸맞는다고 볼 수 있어서 시장의 대세로 자리잡았다. ​그런 MSA의 단점으로 꼽히는 문제점들이 있고, 각 서비스들은 이 문제를 어떤 방식으로 해결하는가? 가 중요해졌다. ​ 예를 들자면​여러 마이크로 서비스들이 어디 있는지 어떻게 찾아야 하는가?각 서비스는 어떻게 통신하는가?보안적 요소나 속도 제한처럼 서비스의 접근을 어떻게 제어하는가?문제 상황 발생시, 개별 서비스가 응답하지 않으면 비즈니스를 어떻게 처리할건가?​​이런 복잡한 문제점들을 해결하기 위해 Spring Cloud에서 여러 서비스를 ..

backend 2024.11.19