소스 코드는 여기 있습니다. (commit hash: c93b796) > git clone https://github.com/lcalmsky/jpa > git checkout c93b796 Warning: 이번 소스 코드는 최종 커밋 기준으로 작성되어 있어 모든 테스트 결과를 정확히 확인할 순 없으니 참고 부탁드립니다. Overview 객체의 상속관계를 테이블로 어떻게 표현할 수 있는지 알아봅니다. 슈퍼타입, 서브타입 관계 관계형 데이터베이스에는 상속 관계가 존재하지 않습니다. 반면 객체는 상속관계를 나타낼 수 있는데요, 이 상속과 유사한 방법이 DB 모델링 기법에도 존재합니다. 바로 슈퍼타입, 서브타입 관계인데 확장된 ER 모델이라고 부릅니다. 슈퍼-서브 타입이 도출되는 과정은 다음과 같습니다. 공통된..
소스 코드는 여기 있습니다. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview 양방향 연관관계를 맺을 때 관리의 주체인 연관관계 주인에 대해 알아봅니다. 연관관계의 주인(Owner) 양방향 연관관계를 맺을 때 규칙은 다음과 같습니다. 객체의 두 관계중 하나를 연관관계의 주인으로 지정 ex) Member 객체가 가진 Team이 주인이 될지 Team 객체가 가진 Members가 주인이 될지 정함 연관관계의 주인만 FK를 관리(등록, 수정 등) 주인이 아닌 쪽은 읽기만 가능 주인이 아닌 쪽에서 mappedBy 속성으로 주인 지정 그렇다면 두 관계 중 어떤 것을 주인으로 지정하는 게 타..
소스 코드는 여기 있습니다. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview 양방향 연관관계를 설명합니다. 객체 지향 모델링 양방향 연관관계는 객체가 서로 참조할 수 있는 것을 의미합니다. 따라서 객체간의 관계는 아래 처럼 나타낼 수 있습니다. 테이블 연관관계는 이전과 동일합니다. DB에서는 team_id 만으로도 Member를 찾을 수 있기 때문입니다. 테이의 연관관계에는 방향이라는 개념이 없습니다. FK 하나로 충분히 연관관계를 파악할 수 있기 떄문입니다. 양방향 연관관계 구현 이전 포스팅에서 이미 단방향 연관관계를 구현해놓았기 때문에 양방향 관계를 맺기 위해선 Team 쪽..
소스 코드는 여기 있습니다. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview 단방향 연관관계를 설명합니다. JPA를 설명하기 위해 포스팅하는 글이지만 스프링 내에서 사용하는 경우가 많아 스프링 부트 프로젝트로 구성하였습니다. 프로젝트를 구성하는 내용은 다른 포스팅에도 그동안 많이 작성하였기 때문에 생략하였습니다. 객체 지향 모델링 저번 포스팅에서와 다르게 객체지향적으로 모델링한 모습은 아래와 같습니다. 객체 연관관계 Member 객체가 Team 객체를 참조하기 위해선 teamId를 가지는 게 아니라 Team 객체를 참조하고 있어야 합니다. 테이블 연관관계 코드로 나타내면 다음과..
본 포스팅은 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발 강의를 참고하여 작성하였습니다. 소스 코드는 여기 있습니다. (branch: feature/6) Overview 지금까지 작성한 코드를 리펙터링합니다. 리펙터링 전에 테스트 코드를 작성하면 리펙터링 이후에도 견고한 테스트 코드를 작성했는지 추가로 확인할 수 있습니다. 테스트 할 것을 정의합니다. 회원 가입시 이상한 값이 입력된 경우 다시 회원 가입 화면으로 리다이렉트 하는지 확인 에러가 잘 노출 되는지 확인 회원 가입시 정상적인 값이 입력된 경우 가입한 회원 데이터가 존재하는지 확인 이메일이 보내지는지 확인 리팩터링시 고려해야할 부분입니다. 메서드의 길이 너무 길면 메서드를 나눔 코드 가독성 코드의 위치 객체들 사이의 의존 관계 클래스의 ..
본 포스팅은 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발 강의를 참고하여 작성하였습니다. 소스 코드는 여기 있습니다. (branch: feature/5) Overview 회원 가입 폼을 검증하는 방법과 회원 가입을 처리하는 방법에 대해 공부합니다. 애너테이션을 이용한 검증과 커스텀 검증을 모두 사용하고, 에러가 있을 경우 회원 가입을 처리하지 않습니다. 모든 값이 유효할 회원 정보를 저장하고, 이메일 정보를 발송한 뒤 홈으로 이동하는 과정까지 개발합니다. Prerequisite Dependencies build.gradle의 dependencies에 spring-boot-starter-validation 패키지를 추가합니다. dependencies { // 생략 implementation 'or..
모든 소스 코드는 여기에서 확인 가능합니다. API에서 페이징 활용 지난 번에 스프링 데이터 JPA가 페이징 및 정렬을 지원하는 부분을 살펴봤었는데요, API 형태로 제공될 때는 어떻게 활용될 수 있는지 Controller를 개발해 확인해보겠습니다. package io.lcalmsky.springdatajpa.controller; import io.lcalmsky.springdatajpa.domain.entity.Member; import io.lcalmsky.springdatajpa.domain.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; impo..
- Total
- Today
- Yesterday
- JPA
- 스프링부트
- Spring Boot
- intellij
- Linux
- 스프링 데이터 jpa
- Spring Boot JPA
- Java
- r
- QueryDSL
- 스프링 부트 회원 가입
- 스프링 부트
- 함께 자라기 후기
- JSON
- spring boot application
- Spring Boot Tutorial
- 헥사고날 아키텍처
- 스프링 부트 튜토리얼
- gRPC
- @ManyToOne
- spring boot app
- leetcode
- 함께 자라기
- Jackson
- spring boot jwt
- Spring Data JPA
- proto3
- 클린 아키텍처
- 스프링 부트 애플리케이션
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |