728x90

2025/04 14

JPA 연관관계 정리 (단방향, 양방향 관계 포함)

JPA(Java Persistence API)에서는 엔티티 간의 관계를 정의할 때 단방향과 양방향 관계를 설정할 수 있습니다. 이 관계들은 Many-to-One, One-to-Many, One-to-One, Many-to-Many 등 다양한 매핑 관계와 함께 설정할 수 있으며, 각 방향에 따라 데이터 흐름과 관계 관리 방식이 달라집니다.이번에는 단방향과 양방향 관계를 포함한 JPA 관계 설정을 정리해 보겠습니다.1. 단방향 관계 (One-Way Relationship)단방향 관계는 한 엔티티에서만 다른 엔티티를 참조하는 관계입니다. 즉, 한 쪽에서만 연관된 엔티티를 관리하고, 다른 쪽에서는 해당 관계를 알지 못하는 형태입니다. 이 경우, 양쪽 엔티티에서 연관된 객체를 조회하거나 수정할 수 없습니다.예시:..

JPA 2025.04.29

양방향 매핑에서 연관관계의 주인에 값을 입력하지 않은 실수

JPA(Java Persistence API)를 사용하면서, 특히 양방향 연관관계를 매핑할 때 자주 발생하는 실수 중 하나는 연관관계의 주인에 값을 제대로 설정하지 않는 것입니다. 이 실수는 데이터베이스에 저장되는 결과가 의도한 대로 동작하지 않거나, 예상치 못한 오류가 발생하는 원인이 됩니다.1. 양방향 연관관계란?JPA에서 양방향 연관관계는 두 개의 엔티티 간에 서로를 참조하는 구조를 말합니다. 예를 들어, Member와 Team 엔티티가 있을 때, Member는 Team을 참조하고, Team은 여러 Member들을 참조하는 관계가 있을 수 있습니다.예시: Member와 Team의 양방향 관계@Entitypublic class Member { @Id @GeneratedValue pri..

JPA 2025.04.29

데이터 중심 설계와 객체 중심 설계의 차이 – JPA 예제로 쉽게 이해하기

안녕하세요! 오늘은 데이터 중심으로 모델링한 예제가 왜 협력 관계를 만들 수 없는지 쉽게 설명해볼게요.우선 아래 코드를 보면서 어떤 부분이 문제가 되는지 살펴봅시다.Team team = new Team();team.setName("TeamA");em.persist(team);Member member = new Member();member.setUsername("memberA");member.setTeamId(team.getId());em.persist(member);Member findMember = em.find(Member.class, member.getId());Long findTeamId = findMember.getTeamId();Team findTeam = em.find(Team.class,..

JPA 2025.04.28

JPA에서 플러시(Flush)와 커밋(Commit)의 차이 + 트랜잭션 관리 완벽 정리

JPA를 공부하다 보면 자주 마주치는 개념 중 하나가 바로 플러시(Flush)와 커밋(Commit)입니다. 이 둘은 비슷해 보이지만 실제로는 역할과 시점이 다릅니다. 또한, 트랜잭션의 관리 방식도 함께 이해해야 JPA를 제대로 활용할 수 있습니다.이 글에서는 플러시와 커밋의 차이, 그리고 트랜잭션의 흐름까지 쉽게 정리해보겠습니다.1. 플러시(Flush)란?정의: JPA의 영속성 컨텍스트(1차 캐시)에 저장된 변경 내용을 DB에 SQL로 반영하는 작업입니다.중요: 플러시는 트랜잭션을 끝내지 않습니다. 단순히 SQL이 실행될 뿐이고, 트랜잭션은 계속 유지됩니다.언제 플러시가 일어날까?직접 호출: em.flush()JPQL 실행 전: 정확한 결과를 위해 자동 플러시커밋 직전: 자동으로 플러시 후 커밋 진행2...

JPA 2025.04.27

JPA 기본키 매핑 전략 완벽 정리

JPA(Java Persistence API)를 사용할 때 가장 먼저 고민하게 되는 부분 중 하나가 바로 기본키(Primary Key) 매핑 전략입니다. 엔티티(Entity)는 데이터베이스 테이블과 매핑되기 때문에, 각 엔티티에는 반드시 고유한 식별자(Primary Key)가 필요합니다.이번 포스팅에서는 JPA에서 제공하는 기본키 매핑 전략에 대해 하나씩 자세히 알아보겠습니다.1. 기본키 매핑 방식의 종류JPA에서는 기본키를 매핑할 때 총 4가지 전략을 제공합니다.직접 할당 (Assigned, 직접 설정)자동 증가 (IDENTITY)시퀀스 (SEQUENCE)테이블 (TABLE)2. 직접 할당 (Assigned)@Idprivate String id;개발자가 직접 기본키 값을 지정합니다.자동 생성되지 않기 ..

JPA 2025.04.26

JPA 영속성과 캐시의 관계 – 캐시처럼 동작하는 영속성 컨텍스트

JPA = ORM + 캐시?JPA를 쓰다 보면 마치 자동으로 캐시를 써주는 것 같은 경험을 하게 됩니다. 같은 데이터를 여러 번 조회해도 SQL 쿼리가 한 번만 날아가고, 트랜잭션 내에서 바뀐 값이 자동으로 DB에 반영되기도 하죠. 이 모든 비밀은 영속성 컨텍스트에 있습니다.1. 영속성 컨텍스트는 1차 캐시다JPA에서 영속성 컨텍스트는 1차 캐시 역할을 합니다.1차 캐시란?트랜잭션 범위 내에서만 유효한 메모리 캐시입니다.동일한 EntityManager에서 같은 엔티티를 여러 번 조회해도 DB에서 재조회하지 않고 캐시에서 반환합니다.2. persist()와 캐시의 관계📍 persist() 호출 시엔티티는 영속성 컨텍스트에 저장됩니다.이후 해당 엔티티는 1차 캐시에 존재합니다.같은 엔티티를 다시 조회하면 ..

JPA 2025.04.24

JPA 영속성 컨텍스트란? 쉽게 이해하는 JPA 핵심 개념

1. 영속성 컨텍스트란 무엇인가?JPA(Java Persistence API)를 사용하다 보면 "영속성 컨텍스트(Persistence Context)"라는 용어를 자주 접하게 됩니다. 영속성 컨텍스트는 엔티티를 관리하는 일종의 메모리 공간으로 이해할 수 있습니다. 더 정확히 말하면, 엔티티 객체를 데이터베이스와 동기화된 상태로 유지해주는 캐시입니다.JPA를 처음 접할 때 혼란스러울 수 있는 이 개념, 지금부터 쉽게 풀어보겠습니다.2. 영속성 컨텍스트의 역할엔티티 관리: 데이터베이스에서 조회한 엔티티 객체를 관리합니다.1차 캐시: 같은 트랜잭션 내에서 동일한 엔티티를 여러 번 조회해도 데이터베이스에 다시 접근하지 않고 메모리에서 가져옵니다.변경 감지 (Dirty Checking): 영속성 컨텍스트에 저장된..

JPA 2025.04.24

JPA에서 트랜젝션

1. 트랜잭션 기본 개념JPA에서 모든 데이터 변경 작업(CREATE, UPDATE, DELETE) 은 반드시 트랜잭션 안에서 이루어져야 해.트랜잭션 생명주기시작: tx.begin();작업 수행: persist, find, remove, 등.성공 시 커밋: tx.commit();오류 시 롤백: tx.rollback(); 2. 매번 트랜잭션을 직접 만드는 방식 (지금처럼)EntityManager 를 사용할 때 매 작업마다 트랜잭션을 시작하고 종료해야 해.이 방식은 단순한 자바 SE 환경 (Spring 없이 순수 JPA) 에서 많이 씀.예시:EntityTransaction tx = em.getTransaction();tx.begin();try { // 작업 em.persist(...); tx..

JPA 2025.04.24

소프트웨어 공학

1. 소프트웨어 공학 개요1.1 소프트웨어 공학의 정의소프트웨어 공학(Software Engineering)은 효율적인 비용으로 높은 품질의 소프트웨어를 개발하기 위한 학문이다. 단순한 프로그래밍이 아닌, 소프트웨어의 계획, 분석, 설계, 구현, 테스트, 유지보수 등 전체 생명주기를 체계적으로 다룬다.궁극적으로는 개발 생산성을 높이고, 유지보수가 쉬운 품질 좋은 소프트웨어를 만드는 것이 목표다.1.2 소프트웨어 공학의 3R소프트웨어의 생산성을 극대화하고, 개발 비용을 절감하며, 유지보수를 효율적으로 하기 위한 세 가지 핵심 전략은 다음과 같다.Reverse Engineering (역공학)이미 개발된 시스템으로부터 설계나 구조를 추출하는 과정이다.문서화가 부족한 기존 시스템을 분석하여 문서를 생성하거나 새..

728x90