본문 바로가기

Spring31

JPA를 사용하는 이유가 무엇일까? 목차개요순수 JDBCSQL Mapper(JdbcTemplate, Mybatis)JPA(Java Persitence Api)Jdbc vs SQL Mapper vs JPAJPA가 무조건 좋을까?결론1. 개요현재 많은 개발자들이 JPA를 사용하지만 JPA를 사용하는 이유와 장단점에 대해 정리해보려고 한다.먼저 코드를 통해서 눈에 띄는 차이를 살펴보자.2. 순수 JDBC과거에는 객체를 데이터베이스 저장 하려면 위와 같이 복잡한 JDBC API와 SQL을 한땀 한땀 작성해야 했다.3. SQL Mapper(JdbcTemplate, Mybatis)JdbcTemplate이나 Mybatis 같은 SQL Mapper가 등장하면서 위와 같이 개발 코드가 줄었지만 개발자가 SQL을 작성해야 하는 것은 변하지 않았다.4. JP.. 2024. 8. 7.
트랜잭션 전파 옵션을 이용해서 복구하기 목차개요복구 REQUIRE복구 REQUIRE_NEW복구 REQUIRES_NEW 사용X결론1. 개요회원 가입과 로그를 하나의 트랜잭션으로 묶은 기능이 있다. 이때 이력 로그를 DB에 남기는 작업에 문제가 발생해서 가입 자체가 안되는 경우가 발생한다고 하자.‘회원 가입을 시도한 로그를 남기는데, 실패하더라도 회원 가입은 유지되어야 한다.’이 요구사항을 만족하기 위해 REQUIRES_NEW 옵션을 사용해보자.2. 복구 REQUIRE개발자들이 많이 하는 실수 케이스이다.LogRepository 에서 예외가 발생하면 그것은 MemberService 에서 예외를 잡아서 처리하면 될 것 같다라고 생각한다.그러나 내부 트랜잭션에서 rollbackOnly 를 설정하기 때문에 결과적으로 정상 흐름 처리를 해서 외부 트랜잭.. 2024. 8. 3.
스프링 트랜잭션 전파에 대해 알아보자 목차개요전파 기본외부롤백내부롤백결론1. 개요트랜잭션이 둘 이상 있을때 어떻게 동작하는지 자세히 알아보고, 트랜잭션 전파에 대한 개념을 알아보려고 한다. 트랜잭션을 각각 사용하는 것이 아니라 트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 수행하면 어떻게 될까?기존 트랜잭션이 별도의 트랜잭션을 진행해야 하는지? 아니면 기존 트랜잭션을 그대로 이어 받아서 트랜잭션을 수행해야 하는지? 이런 경우 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation)라 한다.2. 전파 기본외부 트랜잭션이 수행중인데, 내부 트랜잭션이 추가로 수행됨.스프링에서 이 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외부 트랜잭션에 참여하는 것이다. 이것은 기본동작이고 옵션을.. 2024. 7. 28.
@Transactional을 사용할때 어떤 점을 주의할까? 목차개요주의사항1 - 프록시 내부 호출주의사항2 - public 메서드만 트랜잭션 적용주의사항3 - 초기화 시점결론1. 개요보통 트랜잭션을 걸고 싶을때 간단하게 @Transactional 키워드를 자주 사용한다. 이 키워드를 사용하면 스프링의 트랜잭션 AOP가 적용된다.트랜잭션을 적용하다가 많은 개발자들이 이 문제를 실수 하는 경우가 많은데 아래 내용을 천천히 살펴보자.2. 주의사항1 - 프록시 내부 호출 @Transactional 을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출해준다.따라서, 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체를 호출해야 한다.AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관꼐 주.. 2024. 7. 11.
Kafka vs RabbitMQ vs Redis 목차 개요 Kafka RabbitMQ Redis Pub/Sub 결론 1. 개요 Kafka, RabbitMQ, Redis의 Pub/Sub 을 비교하면 각각의 시스템이 메시징 패턴을 구현하는 방식과 그에 따른 성능, 확장성 유연성 측면에서 상이한 특징을 나타낸다. 이 세가지 시스템을 각각의 관점에서 간단하게만 비교해보려고 한다. 2. Kafka 개념 토픽 기반의 Pub/Sub 모델을 사용한다. Producer(게시자)는 특정 토픽에 메시지를 게시하고, Consumer(구독자)는 관심 있는 토픽을 구독하여 메시지를 소비한다. 성능 및 확장성 높은 처리량과 데이터 내구성, 분산 처리에 강점을 가지며, 대량의 데이터 스트림 처리에 최적화되어 있다. 대규모 시스템에서 확장성이 매우 뛰어난다. 유연성 뛰어난 확장성과.. 2024. 3. 12.
레이어드 아키텍처(Layerd Architecture)와 테스트 목차개요Presentation Layer(User Interface)Business Layer(Business Logic)Persstence Layer(Data Access)레이어 아키텍처의 핵심요소1. 개요스프링 MVC 기반에서 가장 많이 사용되는 아키텍처이다. 아래 그림을 살펴 보자.레이어 별로 나누어서 개발을 하기위해 나누었으나 언급하는 곳마다 용어가 조금씩 다르기도 하고 어떤 관점에서 보는 것에 따라 달라지기도 한다.왜 레이어를 나누는가를 중점으로 볼때 나의 답은 아래와 같다.관심사의 분리 때문에 레이어를 분리하는 것이라 생각한다. 관심사를 나누어서 각 계층마다 책임을 나누고 유지보수 용이하도록 하는 것이다.2. Presentation Layer(User Interface)Presentation .. 2024. 2. 23.