본문 바로가기

springboot10

JPA 기본키(PK) 매핑 전략 JPA에서 기본키(PK) 매핑 전략은 엔티티의 식별자를 어떻게 생성하고관리할지를 결정하는 매우 중요한 설계 요소이다. 기본키 매핑 annotation● @Id● @GeneratedValue@Entitypublic class MemberEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; ...} ● 기본키를 직접 할당할 때는 @Id만 사용한다. ● 자동 생성을 할 경우 @GeneratedValue를 사용하고 전략을 설정한다.strategy설명AUTO방언에 따라 자동 지정, strategy 기본값IDENTITY데이터베이스에 위임, MYSQLSEQUENCE데이터베이스 시퀀스 오브젝트 사용, OR.. 2025. 6. 23.
JPA 필드와 컬럼 매핑 자바 클래스의 필드와 데이터베이스의 컬럼을 연결한다.@Column 속성name● 매핑할 컬럼 이름 설정@Column(name = "user_name")private String name; insertable / updatable● INSERT/UPDATE 쿼리에 컬럼 포함 여부(기본값 true)@Column(insertable = false)private String name; ● insert query에서 name 컬럼은 제외된다.[Hibernate] insert into member (modified_at, created_at, desc, email, role, id) values (?, ?, ?, ?, ?, ?) ● updatable은 생성일, ID 같이 수정되면 안되는 필드에 사.. 2025. 6. 23.
JPA DB 스키마 자동 생성 이상과 현실 객체 지향 애플리케이션은 테이블이 아닌 객체 구조에 집중해야 한다. ● JPA는 엔티티 클래스 정의만으로 DDL을 애플리케이션 실행 시점에 자동으로 생성해준다. ● DDL 생성 기능은 JPA의 실행 로직에는 영향을 주지 않는다. ● 데이터베이스 방언(Dialect)를 활용하여 데이터베이스에 맞는 적절한 DDL을 생성한다. ● 따라서 테이블 중심 설계 대신 객체 중심 설계를 할 수 있게 된다. DDL 생성 전략 설정hibernate.hbm2ddl.auto 속성값설명create애플리케이션 실행 시 테이블 삭제 후 생성(DROP + CREATE)create-dropcreate와 같지만, 애플리케이션 종료 시 테이블 제거update테이블이 없으면 생성하고, 변경 사항 반영validate엔티티와 테이블이 .. 2025. 6. 22.
JPA 클래스와 테이블 매핑 @Entity, @Table @Entity@Entitypublic class MemberEntity { ...} ● 해당 클래스가 JPA가 관리하는 엔티티임을 선언한다. ● @Entity는 name 속성을 가지는데, 기본값을 쓰는게 좋다. ● 설정하지 않으면 기본 값으로 class명이 설정 된다. Entity 선언 주의사항1. 파라미터가 없는 기본 생성자 선언 필수 (public or protected)● JPA는 Reflection을 사용하여 객체를 생성한다. ● 실무에서는 protected를 주로 사용하는데, 외부에서 new로 직접 생성하는 것을 막고, JPA만 사용할 수 있어 캡슐화 유지에 유리하다. 2. final 클래스 사용 금지public final class MemberEntity {...} ● JPA는 성능.. 2025. 6. 22.
JPA 영속성 관리 영속성 관리는 JPA의 핵심 개념으로, 객체와 데이터베이스 사이의 상태를 동기화하여 애플리케이션의 일관성과 성능을 보장한다. 영속성이란?● 애플리케이션이 종료되어도 데이터가 사라지지 않고 유지되는 성질을 말한다. ● JPA에서는 메모리 상의 객체를 데이터베이스에 영구 저장하고, 반대로 DB의 데이터를 객체로 조회·관리하기 위해 영속성 컨텍스트라는 것을 사용한다. 영속성 컨텍스트(Persistence Context)● 영속성 컨텍스트는 entity를 관리하는 JPA의 내부 메모리 상의 공간 ● 자바 객체와 DB 테이블 간의 상태를 동기화하는 중간 다리 역할// 웹서버가 올라오는 시점에 DB 당 하나만 생성EntityManagerFactory emf = Persistence.createEntityMa.. 2025. 6. 20.
JPA를 왜 사용해야 하는가? JPA 도입 이전 개발 환경● 전통적으로 Java 기반의 데이터베이스 연동 애플리케이션은 JDBC와 SQL을 직접 다루는 방식으로 구축되었다. ● 우리가 만든 객체를 관계형 데이터베이스에 보관하고, 이 데이터를 사용 할 때는 다시 객체로 바꾸어 사용했다. ● 즉 자바 객체를 SQL로 바꾸고, SQL을 자바 객체로 바꾸는 과정을 직접 반복한다. ● 이처럼 객체와 데이터베이스 사이의 매핑을 수작업으로 처리하는 방식은, 시스템이 커질수록 반복 작업이 많아진다. ● 오류 가능성 또한 높아지며, 유지 보수를 어렵게 만들었다.SQL에 종속된 개발 구조의 문제● 전통적인 개발 방식에서는 도메인 모델이 아닌, SQL이 중심이 된다. ● 도메인 모델이 복잡해질수록 SQL과 자바 코드 간의 간극이 커진다. ●.. 2025. 6. 18.
Spring의 트랜잭션 추상화로 JDBC 기반 트랜잭션 처리의 문제점 해결하기 트랜잭션은 왜 필요할까?● A가 B에게 10000원을 이체하는 경우를 생각해보자.START TRANSACTION;UPDATE member SET balance = balance - 10000 WHERE id = 'A';UPDATE member SET balance = balance + 10000 WHERE id = 'B';COMMIT; ● A의 잔고를 줄이고 B의 잔고를 늘리면 되므로 간단해 보인다.@Slf4j@RequiredArgsConstructorpublic class MemberService { private final MemberRepository memberRepository; public void accountTransfer(String fromId, String toId, int amo.. 2025. 4. 27.
커넥션 풀과 DataSource 데이터베이스와의 connection은 비용이 많이 드는 작업이다.매 요청마다 새 커넥션을 생성하면 성능 저하와 리소스 낭비가 발생한다.Connection Pool을 사용하면 미리 생성된 연결을 재사용하여 성능을 높이고 안정적인 트랜잭션 처리를 보장할 수 있다. 데이터베이스 connection을 획득할 때 다음과 같은 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성 5. DB는 커넥션 생성이 완료되었다고 응답 6. DB 드라이버는 커넥션 객체를 .. 2025. 3. 22.
JDBC 기초부터 이해하기 SQL Mapper 또는 ORM을 사용해도 결국 모든 것은 JDBC 위에서 동작한다. JDBC의 필요성애플리케이션 서버와 DB의 일반적인 사용법은 다음과 같다.TCP/IP를 사용하여 커넥션 연결커넥션을 통해 DB에 맞는 SQL 전달DB는 전달받은 SQL을 수행하고 결과를 응답 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL 전달 방법, 결과를 응답 받는 방법이 모두 다르다데이터베이스를 변경하면 애플리케이션 서버에 개발된 데이터베이스 관련 코드도 전부 변경해야한다개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 결과 응답 받는 방법을 새로 학습해야한다이 문제를 해결하기 위해 JDBC라는 자바 표준이 등장한다. JDBC 표준 인터페이스JDBC(Java Database Connecti.. 2025. 3. 10.