본문 바로가기

Spring27

[JPA] 고급 매핑 상속관계 매핑 · 관계형 데이터베이스는 상속 관계 X · 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사 · 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑 · 슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 - 각각 테이블로 변환 → 조인 전략 - 통합 테이블로 변환 → 단일 테이블 전략 - 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 주요 어노테이션 · @Inheritance(strategy = InheritanceType.XXX) - JOINED: 조인전략 - SINGLE_TABLE: 단일 테이블 전략 - TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 · @DiscriminatorColumn(name = "DTYPE").. 2023. 10. 31.
[JPA] 다양한 연관관계 매핑 연관관계 매핑시 고려사항 1. 다중성 · 다대일: @ManyToOne · 일대다: @OneToMany · 일대일: @OneToOne · 다대다: @ManyToMany 2. 단방향, 양방향 테이블 · 외래 키 하나로 양쪽 조인 가능 · 방향이라는 개념 X 객체 · 참조용 필드가 있는 쪽으로만 참조 가능 · 한쪽만 참조하면 단방향 · 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 · 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 · 객체 양방햔 관계는 A→B, B→A 처럼 참조가 2개 · 연관관계의 주인: 외래 키를 관리하는 참조 · 주인의 반대편: 외래 키에 영향을 주지 않고 단순 조회만 가능 다대일 단방향 · 가장 많이 사용하는 연관관계 · 다대일의 반대는 일대다 다대일 양방향 · 외래 키가 .. 2023. 10. 30.
[JPA] 연관관계 매핑 연관관계 용어 · 방향(Direction): 단방향, 양방향 · 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) · 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인 필요 연관관계가 필요한 이유 · 객체를 테이블에 맞추어 데이터 중심 모델링을 하면, 협력 관계를 만들 수 없다. · 테이블은 외래 키로 조인을 사용해 연관된 테이블을 찾는다. · 객체는 참조를 사용해 연관된 객체를 찾는다. · 테이블과 객체 사이에는 큰 간격이 있다. 단방향 연관관계 · 객체 지향 모델링 (객체의 참조와 테이블의 외래 키를 매핑) @Entity public class Member{ @Id @GeneratedValue private Long id; @Colu.. 2023. 10. 18.
[JPA] JPA 기본 개념 JPA(Java Persistence API)란? Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함 JPA 구동 방식 JPA - CRUD - C(Create): jpa.persist(member) - R(Read): Member member = jpa.find(memberId) - U(Update): member.setName(". . .") - D(Delete): jpa.remove(member) 객체와 테이블 생성, 매핑 import javax.persistence.Entity; imp.. 2023. 10. 14.
[DataBase] JPA / Spring Data JPA JPA란? - Java Persistence API - 자바 진영의 ORM 표준 기술 - JPA는 인터페이스 모음 - Hibernate, EclipseLink, DataNucleus 3가지 구현체 사용 JPA를 사용해야 하는 이유 - SQL 중심적인 개발에서 객체 중심으로 개발 - 생산성, 유지보수 편리함 / 성능 최적화 기능 1. 1차 캐시와 동일성(identity) 보장 2. 트랜잭션을 지원하는 쓰기 지연 3. 지연 로징(Lazy Loading) - 패러다임 불일치 해결 JPA - CRUD - Create(저장): jpa.persist(. . .) - Read(조회): jpa.find(. . .) - Update(수정): member.setName(". . .") - Delete(삭제): jpa.re.. 2023. 10. 3.
[DataBase] 데이터 접근 기술 - 테스트 테스트 - 데이터베이스 분리 로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용하면 테스트에서 문제가 발생한다. 이를 해결하기 웨해 테스트를 다른 환경과 철저하게 분리해야 한다. 가장 간단한 방법으로는 테스트 전용 데이터베이스를 별도로 운영하는 것이다. 테스트에서 매우 중요한 원칙 1. 테스트는 다른 테스트와 격리해야 한다. 2. 테스트는 반복해서 실행할 수 있어야 한다. 테스트가 끝날 때마다 추가한 데이터에 DELETE SQL을 사용해도 되지만, 가장 좋은 방법은 트랜잭션, 롤백이다. 테스트 - 데이터 롤백 테스트가 끝나고 트랜잭션을 강제로 롤백해버리면 데이터가 제거된다. 테스트를 하면서 데이터를 이미 저장했는데, 중간에 테스트가 실패해 롤백을 호출하지 못해도 트랜잭션을 커밋하지 .. 2023. 9. 25.
[DataBase] 트랜잭션 (Transaction)2 애플리케이션 구조 애플리케이션은 3가지 계층으로 나눌 수 있다. Controller, Service, Repository 프레젠테이션 계층 (Controller) - UI와 관련된 처리 담당 - 웹 요청과 응답 - 사용자 요청을 검증 - 사용 기술: Servlet, HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 (Service) - 비즈니스 로직 담당 - 사용 기술: 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층(Repository) - 실제 데이터베이스에 접근하는 코드 - 사용 기술: JDBC, JPA, File, Redis, Mongo ... 이 중 가장 중요한 곳은 서비스 계층이다. 서비스 계층은 시간이 흘러 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술이 다른 .. 2023. 9. 19.
[DataBase] 트랜잭션 (Transaction) 트랜잭션 (Transaction)이란? 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 커밋(Commit): 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것 롤백(Rollback): 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것 트랜잭션 ACID 원자성(Atomicity) 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것 처럼 모두 성공하거나 모두 실패 일관성(Consistency) 모든 트랜잭션은 일관성 있는 데이터베이스 상태 유지, 무결성 제약 조건을 항상 만족 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리, 동시에 같은 데이터 수정 X 지속성(Durability) 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 함.. 2023. 9. 18.
[DataBase] JDBC란? JDBC 이해 JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리.. 2023. 9. 13.
[MVC 패턴] API 예외 처리 API 예외 처리 - 스프링 부트 기본 오류 처리 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {} @RequestMapping public ResponseEntity error(HttpServletRequest request) {} - errorHtml(): produces = MediaType.TEXT_HTMl_VALUE: 클라이언트 요청의 Accept 헤더 값이 text/html인 경우에는 errorHtml()을 호출해서 view를 제공한다. - error(): 그 외 경우에 호출되고 Resp.. 2023. 9. 4.