본문 바로가기

JPA

(7)
RS) SQL 중심적인 개발의 문제점 데이터베이스의 세계는 현재 아직 RDB(관계형 디비)가 잡고 있다. 즉 객체를 관계형 디비에 저장해서 관리한다. 문제점은 관계형 디비에 저장하다보니 SQL이 중요한 비중을 차지한다. 수정의 경우에도 SQL 수정을 위주로 해야하며, 모든 SQL을 짜야한다. ex) memberId와 name을 통해 쿼리문을 다 짜여진 상태로 개발이 완료가 되었으나, 이후에 전화번호(tel)를 추가해달라는 요청으로 컬럼도 추가해야하고 본질적인 쿼리문에도 수정작업이 들어가야한다. 이로인해 SQL에 의존적인 개발을 피하기 어렵다는 점이 큰 문제로 작용한다. 패러다임의 불일치 문제 (객체 vs 관계형 데이터베이스) 객체지향이 나온 사상과 관계형 데이터베이스가 나온 사상 자체가 다르다. 관계형 데이터베이스는 데이터를 정규화해서 보관..
JPA의 사용 여기서는 직접 사용해보고 이해한 내용을 중심으로 풀어보고자 한다. 사용 환경 IDE : Intelij DB : h2 database 의존성 관리 : Maven Java 8 1. 라이브러리 추가 (pom.xml) JPA를 사용하려면 위와같은 라이브러리가 필요하다. Maven을 사용하여 자동으로 다운받아지도록 Pom.xml에 추가해주자! JPA의 인터페이스로 하이버네이트를 선택함 내가 사용할 데이터베이스(h2) 여기서 중요한 것은 내가 다운받은 데이터베이스 버전이랑 동일한 버전으로 설정해야한다는 점! 2. JPA 설정하기 (persistence.xml) 어떤거는 javax로 시작하고, 어떤것은 hibernate로 시작하는 설정인데.. 이부분은 쉽게 말해서 앞에서 JPA를 쓰기위해서 사용하는 구현체가 여러개로..
JPA 상속관계 매핑 객체는 상속관계를 지원하기 때문에 표현할 수 있는데 테이블 관계에 있어서는 상속을 표현하기 위해서는 여러가지 전략이 있다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) ex) InheritanceType.JOINED / 내가 직접 전략을 지정해서 사용할 수 있다. → 어노테이션의 값만 바꿨을 뿐인데 JPA가 이에 맞춰서 알아서 변경해준다. JPA의 장점 중 하나!! JOINED : 조인전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 조인전략(JOINED) : 이 전략이 제일 정석!!! @DiscriminatorColumn(name=“DTYPE”) → 조인전략에서는 어떤 타입인지 알 수 있게 적어..
연관관계 매핑 기초 이번 글에서는 연관관계에 대해서 적어보고자 한다. "객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다." - 조영호(객체지향의 사실과 오해) 나중에 경험치가 쌓였을 때 이책을 한번 봐봐야 겠다. 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 테이블 관계에서는 TEAM이 1이고 MEMBER가 N으로 1:N 관계이다. 이를 객체 연관관계로 표현하면 외래키(FK)인 TEAM_ID를 teamId로 그대로 표현해서 사용 코드로 표현하자면 아래와 같다.. try{ Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new M..
JPA내부 구조(영속성 관리) 이번 글에서는 JPA내부 구조와 영속성 관리에 대해서 끄적여보고자 한다. JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기(어떻게 매핑 할 것인가?) - 영속성 컨텍스트 먼저 위 두가지 경우를 이해하기 위해서는 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 이해가 필요하다. 이 두개에 대해서는 이전 글에서도 언급을 해놨으니 참고하길 바란다. -> 2020/07/01 - [Dev/JPA] - JPA의 사용 1. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); - DB에 저장한다는 것이 아니고 엔티티를 영속성 컨텍스트라는 곳에다가 저장한다는 뜻 - EntityManager 를 통해 영속성..
JPA의 등장 객체를 마치 자바 컬렉션에 저장하고 불러오듯이 관계형 데이터베이스에 저장하고 불러올 수 있는 방법이 없을까? 고민 끝에 등장한 것이 JPA 이다. - JPA(Java Persistence API) - 자바 진영의 ORM 기술 표준 ORM(Object-relational mapping) - 객체 관계 매핑 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑하는 역할 즉, 객체지향 개발자는 객체지향스럽게 개발하고 관계형 데이터베이스는 관계형 데이터베이스 답게 처리 진행 나머지는 ORM 프레임 워크한테 맡긴다! JPA는 자바 애플리케이션과 JDBC 사이에서 동작한다. 개발자는 JDBC API를 직접 사용하는 것이 아닌 JPA에게 명령한다. JPA는 개발자의..
SQL중심개발의 문제점 SQL중심 개발의 문제점이 무엇인지 내 나름대로 이해하기 쉽게 풀어보고자 한다. JAVA를 공부하면서 한번쯤은 JDBC 프로그래밍을 해봤을 거라고 생각한다. Connection 객체를 만들고 getConnection 해준다음에 Preparestatement 생성하고 연결해줄 SQL 문 선언해주고.. 결과값을 ResultSet을 통해 연결 받고.. close를 해주기까지.. 그렇다.. 번거롭다.. DB에 접근해서 조금더 편하게 사용하기 위해서 Spring MVC에서 ibatis/mybatis라는 개념이 등장한다. Connection과 Preparestatement 등의 역할을 이녀석들이 대신해주는 것으로 개발자 입장에서는 더 편해졌다. 위 두가지 방식에는 큰 공통점이 있다. 바로... SQL SQL SQL..