[Basic-1] JPA 시작
·
Spring/JPA
1. JPA란 무엇인가?1.1. JPA의 등장 배경과 정의JPA(Java Persistence API)는 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다. JPA가 등장하게 된 근본적인 이유는 기존 데이터 접근 방식의 여러 한계를 해결하기 위해서다.기존 방식의 문제점 (JDBC/JdbcTemplate/MyBatis):// 전통적인 JDBC 방식의 코드public class MemberRepository { public Member findById(Long id) throws SQLException { String sql = "SELECT id, name, age FROM member WHERE id = ?"; Connection conn =..
[Advanced-4] JdbcTemplate
·
Spring/DB
0. 한 눈에 보는 JdbcTemplate 핵심 요약 기술 명칭 핵심 특징 실무 활용 포인트 JdbcTemplate기본 SQL 실행기, 반복 코드 제거단순한 Native SQL 실행 시 사용NamedParameter...이름 기반 파라미터 바인딩실무 표준. 파라미터 순서 버그 방지 (권장)SimpleJdbcInsertINSERT 쿼리 자동 생성SQL 직접 작성 없이 저장할 때 편리RowMapperDB 결과(ResultSet) → 객체 변환조회 결과를 DTO나 엔티티로 바꿀 때 사용1. JdbcTemplate 소개와 설정SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate은 아주 좋은 선택지이다. JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있게 도와준다.1.1. ..
[Advanced-3] 트랜잭션 전파(2): 활용
·
Spring/DB
1. 트랜잭션 전파 활용1 - 예제 프로젝트 시작1.1. 비즈니스 요구사항회원을 등록하고 조회한다회원에 대한 변경 이력을 추적할 수 있도록 회원 데이터가 변경될 때 변경 이력을 DB LOG 테이블에 남겨야 한다여기서는 예제를 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다1.2. 엔티티와 리포지토리Member 엔티티package hello.springtx.propagation;import lombok.Getter;import lombok.Setter;import javax.persistence.*;@Entity@Getter @Setterpublic class Member { @Id @GeneratedValue private Long id; private String u..
[Advanced-2] 트랜잭션 전파(1): 기본
·
Spring/DB
트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파(propagation)라는 개념도 알아본다. 트랜잭션 전파를 이해하는 과정을 통해서 스프링 트랜잭션의 동작 원리도 더 깊이있게 이해할 수 있다. 먼저 간단한 스프링 트랜잭션 코드를 통해 기본 원리를 학습하고, 이후에 실제 예제를 통해 어떻게 활용하는지 알아본다.1. 스프링 트랜잭션 전파1 - 커밋, 롤백간단한 예제 코드로 스프링 트랜잭션을 실행해본다.1.1. BasicTxTestpackage hello.springtx.propagation;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.be..
[Advanced-1] 예외와 트랜잭션 커밋, 롤백
·
Spring/DB
서론: 이전 학습과의 차별점지금까지 스프링 트랜잭션의 기본적인 사용법과 예외 처리의 기초를 다뤘다. @Transactional 애노테이션을 사용하는 방법, 체크 예외와 언체크 예외의 차이, 예외 전환과 추상화, JdbcTemplate을 통한 반복 코드 제거 등을 배웠다.이번 글에서는 그 기초 지식을 바탕으로 더 깊이 있는 주제를 다룬다. 예외가 발생했을 때 트랜잭션이 실제로 어떻게 동작하는지, 스프링이 예외 종류에 따라 자동으로 커밋과 롤백을 결정하는 원리, 그리고 실무에서 마주치는 다양한 예외 상황에 대한 처리 전략을 심층적으로 살펴본다.이전 내용과의 가장 큰 차별점은 트랜잭션의 '자동' 동작 메커니즘을 이해하는 것이다. 단순히 @Transactional을 붙이는 수준을 넘어, 예외 발생 시 실제로 어..
[Basic-6] 스프링과 문제 해결 - 예외 처리, 반복
·
Spring/DB
1. 체크 예외와 인터페이스1.1. 서비스 계층의 순수성 유지 필요성서비스 계층은 비즈니스 로직을 담당하는 핵심 계층으로, 가능한 한 특정 구현 기술에 의존하지 않고 순수하게 유지해야 한다. 이전까지 해결한 트랜잭션 문제와 더불어, 예외 처리에 대한 의존성도 해결해야 완전한 순수성을 달성할 수 있다.현재 문제 상황:public class MemberServiceV3_3 { @Transactional public void accountTransfer(String fromId, String toId, int money) throws SQLException { // ❌ SQLException에 의존 bizLogic(fromId, toId, money); }}서..
[Basic-5] 자바 예외 이해
·
Spring/DB
1. 예외 계층 구조1.1. 예외 계층도 이해하기자바의 예외는 객체지향적 계층 구조를 가지고 있다. 이 구조를 이해하는 것이 예외 처리를 효과적으로 하는 첫걸음이다.계층 구조 상세 설명1. Object모든 자바 객체의 최상위 클래스예외도 객체이므로 Object를 상속받음2. Throwable예외와 오류의 최상위 클래스getMessage(), printStackTrace() 같은 공통 메서드 제공하위에 Error와 Exception 두 가지 주요 카테고리 존재3. Error시스템 수준의 심각한 오류애플리케이션에서 복구 불가능개발자가 잡아서 처리하면 안됨예시: OutOfMemoryError, StackOverflowError, VirtualMachineError// Error 예시 - 처리하면 안됨!publ..
[Advanced-13] 스프링 AOP - 실무 주의사항
·
Spring/Core
1. 프록시와 내부 호출 - 문제1.1. 내부 호출 문제의 본질스프링 AOP는 프록시 기반으로 동작한다. 이는 AOP가 적용된 메서드를 호출할 때 항상 프록시를 거쳐서 대상 객체를 호출해야 함을 의미한다. 프록시를 거치지 않고 대상 객체를 직접 호출하면 AOP가 적용되지 않는다.문제 발생 시나리오:스프링은 AOP 적용 시 대상 객체 대신 프록시 객체를 빈으로 등록의존관계 주입 시 프록시 객체가 주입됨하지만 대상 객체의 내부 메서드 호출 시 프록시를 거치지 않고 직접 호출되는 문제 발생1.2. 예제를 통한 문제 확인1.2.1. CallServiceV0 - 내부 호출이 있는 서비스 클래스package hello.aop.internalcall;import lombok.extern.slf4j.Slf4j;impo..