[JPA] JPA와 영속성 컨텍스트란?
·
JPA
1. ORM (Object-Relational Mapping) ORM은 객체 지향 언어에서 관계형 데이터베이스의 데이터를 다루기 위한 기술로, 객체와 관계형 데이터베이스의 테이블간의 매핑을 자동화해주는 방식이다. 데이터베이스의 데이터를 객체 형태로 변환하고, 객체를 데이터베이스에 저장할 수 있도록 함으로써 개발자가 SQL을 직접 작성하지 않게 해준다.  특징객체와 테이블의 매핑: 클래스와 데이터베이스 테이블을 1:1로 매핑하여 객체로 데이터를 다루게 한다.SQL 자동 생성: 데이터를 저장하거나 조회할 때 ORM 프레임워크가 SQL을 자동으로 생성하고 실행한다.데이터베이스 추상화: 특정 데이터베이스에 종속되지 않고, 추상화 계층을 통해 여러 데이터베이스 시스템을 쉽게 변경할 수 있다.  2. JPA (Ja..
[Spring] API 예외 처리
·
Spring Framework
기술 스택JDK 17Spring boot 3.3.5thymeleaf  1. 개요HTML 페이지의 경우 /resources/templates/error 폴더에 4xx.html, 5xx.html 와 같은 오류 페이지만 있으면 BasicErrorController가 대부분의 문제를 해결해준다. 그런데 API의 경우 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만 API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 JSON으로 데이터를 내려주어야 한다. 지금부터 API의 경우 어떻게 예외처리를 하면 좋은지 알아보겠다. 2. 코드 기본 세팅Member.java@NoArgsConstructor@AllArgsConstructor@Datapublic class Member{ ..
스프링 트랜잭션 전파 - 2
·
Spring Transaction
기술스택JDK 17Spring Boot 3.3.5JPA 1. 요구사항회원을 등록하고 조회한다.회원에 대한 변경 이력을 추적할 수 있도록 변경될 때 변경이력을 DB LOG 테이블에 남겨야한다.이 예제는 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다.테스트 전 기본 코드아래는 기본 세팅 코드들이다.Log.java ( Log Entity)@Entity@Getter @Setterpublic class Log { @Id @GeneratedValue private Long id; private String message; public Log() { } public Log(String message) { this.message = message; }}..
스프링 트랜잭션 전파 - 1
·
Spring Transaction
기술스택JDK 17Spring Boot 3.3.5 먼저 들어가기 앞서 로그를 확인하기 위해 application.properties에 다음과 같은 코드를 추가를 하자. logging.level.org.springframework.transaction.interceptor=TRACE logging.level.org.springframework.jdbc.datasource.DataSourceTransactionManager=DEBUG #JPA log logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG logging.level.org.hibernate.resource.transaction=DEBUG #JPA SQL logging.leve..
스프링 트랜잭션 이해
·
Spring Transaction
기술 스택JDK 17GradleSpring boot 3.3.5Spring Data JpaH2 Database  먼저 트랜잭션에 대해 기본적인 설명을 보고싶다면 여기 를 들어가면 된다. 스프링 트랜잭션 소개스프링 트랜잭션 추상화각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다.따라서 JDBC 기술을 사용하다가 JPA 기술로 변경하게 되면 트랜잭션을 사용하는 코드도 모두 함께 변경해야 한다.  스프링은 이런 문제를 해결하기 위해 트랜잭션 추상화를 제공한다. 바로 PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화 한다.PlatformTransactionManager packa..
[Spring] 예외 처리와 오류 페이지
·
Spring Framework
기술 스택JDK 17GradleSpring Boot 3.3.5Thymeleaf 1. 서블릿 예외 처리 - 시작스프링이 아닌 순수 서블릿 컨테이너는 두가지 방식으로 예외 처리를 지원한다.Exception (예외)response.sendError (HTTP 상태 코드, 오류 메시지)Exception (예외)1. 자바 직접 실행자바의 메인 메서드를 직접 실행하는 경우  main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main( ) 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 2. 웹 어플리케이션웹 어플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 어플리케이션에서 예외가 발생했는데, 어디선가 try ..
[JDBC] 스프링과 문제 해결 - 예외 처리, 반복
·
JDBC
기술스택Spring Boot 3.3.5Java 17H2 Database 1. 체크 예외와 인터페이스서비스 계층은 가급적 특정 구현 기술에 의존하지 않고 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야 한다. 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 어떻게 해야할까?바로 SQLException 체크 예외를 RuntimeException 언체크 예외로 전환해서 서비스 계층에 던지면 서비스 계층이 해당 예외를 무시할 수 있기 때문에 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. 인터페이스 도입이렇게 인터페이스를 도입하면 MemberService는 MemberRepository 인터페이스에만 의존하면 된다. Me..
[JDBC] 자바 예외 이해
·
JDBC
1. 예외 계층스프링이 제공하는 예외 추상화를 이해하기 위해서는 먼저 자바 기본 예외에 대한 이해가 필요하다. 예외 계층Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리 케이션 개발자는 이 예외를 잡으려고 해서는 안된다.Exception: 체크예외애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException은 체크 예외가 아니다.RuntimeException: 언체크예외컴파일러가 체크하지 않는 언체크 예외이다.RuntimeException과 그 자식 예외는 모두 언체크 예외이다.2. 예외 기본 규칙예외는 폭탄돌리기와 같다. 잡아서 처..
[JDBC] 트랜잭션 - 스프링과 문제 해결
·
JDBC
기술스택Spring Boot 3.3.5Java 17H2 Database1. 개요문제점전 포스팅에 만들었던 코드를 보자. 전체 내용은 여기 를 클릭하면 된다.MemberServiceV2.java@Slf4j@RequiredArgsConstructorpublic class MemberServiceV2 { private final DataSource dataSource; private final MemberRepositoryV2 memberRepository; public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConnec..