소스 코드는 여기 있습니다. (commit hash: 85838b8) > git clone https://github.com/lcalmsky/jpa > git checkout 85838b8 Warning: 최종 커밋 기준으로 작성되어 있어 모든 테스트 결과를 정확히 확인할 순 없으니 참고 부탁드립니다. Overview 즉시 로딩(EAGER)과 지연 로딩(LAZY)에 대해 알아봅니다. 지연 로딩(Lazy Loading) Unit를 조회하면서 Factory의 정보가 필요하지 않을 때 굳이 Factory를 같이 조회할 필요가 없습니다. 그럴 때 지연 로딩을 사용합니다. 사용법은 간단합니다. 매핑관계를 지정한 애너테이션에 fetch 속성을 FetchType.LAZY로 설정하시면 됩니다. package com.t..
소스 코드는 여기 있습니다. (commit hash: ba15d2d) > git clone https://github.com/lcalmsky/jpa > git checkout ba15d2d Warning: 최종 커밋 기준으로 작성되어 있어 모든 테스트 결과를 정확히 확인할 순 없으니 참고 부탁드립니다. Overview 객체간 상속을 이용하지만 실제로는 Entity나 Table과 관계가 전혀 없을 때 사용하는 @MappedSuperclass에 대해 알아봅니다. @MappedSuperclass 객체에서 공통 속성을 추상 객체로 이동시키고 자식 객체들이 해당 속성을 공통으로 사용하는 것은 매우 흔한 일입니다. 이전 포스팅에서는 Entity 간 관계(슈퍼타입, 서브타입)도 중요했었는데요, 여기서 다룰 내용은 E..
소스 코드는 여기 있습니다. (commit hash: c93b796) > git clone https://github.com/lcalmsky/jpa > git checkout c93b796 Warning: 이번 소스 코드는 최종 커밋 기준으로 작성되어 있어 모든 테스트 결과를 정확히 확인할 순 없으니 참고 부탁드립니다. Overview 객체의 상속관계를 테이블로 어떻게 표현할 수 있는지 알아봅니다. 슈퍼타입, 서브타입 관계 관계형 데이터베이스에는 상속 관계가 존재하지 않습니다. 반면 객체는 상속관계를 나타낼 수 있는데요, 이 상속과 유사한 방법이 DB 모델링 기법에도 존재합니다. 바로 슈퍼타입, 서브타입 관계인데 확장된 ER 모델이라고 부릅니다. 슈퍼-서브 타입이 도출되는 과정은 다음과 같습니다. 공통된..
소스 코드는 여기 있습니다. (commit hash: 6695e56) > git clone https://github.com/lcalmsky/jpa > git checkout 6695e56 Overview 다양한 연관관계에 대해 알아봅니다. 연관관계 매핑시 고려해야할 사항이 3가지가 있습니다. 방향(단방향, 양방향) 연관관계의 주인 다중성 이중 두 가지는 이미 이전 포스팅에서 살펴보았으므로 다중성에 대해 알아보겠습니다. 다중성 사실 다중성도 이전 포스팅에서 다루긴했지만 다시 한번 개념을 정리해보겠습니다. DB 관점에서의 다중성을 말합니다. JPA는 객체를 테이블에 매핑하기 위해 다양한 애너테이션을 사용하는데 이 중 다중성에 해당하는 애너테이션은 다음과 같습니다. @ManyToOne: 다대일 @OneToM..
소스 코드는 여기 있습니다. (commit hash: 0bacabb) > git clone https://github.com/lcalmsky/jpa > git checkout 0bacabb Overview 연관관계 매핑 예제를 구현합니다. 테이블 구조 객체 구조 구현 테이블 구조에서 확인했다시피 FK를 가지는 테이블은 orders, order_item 두 가지이고, 객체 기준으로는 Order, OrderItem이 연관관계의 주인이 됩니다. 따라서 Order가 Member를 @ManyToOne으로 가지고, @JoinColumn(name = "member_id")을 사용해 join 할 수 있습니다. OrderItem이 Order를 @ManyToOne으로 가지고, @JoinColumn(name = "order..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given an integer array nums of size n, return the minimum number of moves required to make all array elements equal. In one move, you can increment or decrement an element of the array by 1. Test cases are designed so that the answer will fit in a 32-bit integer. Example 1: Input: nums = [1,2,3] Output: 2 Explanation: Only two moves are needed (remember each ..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem You are given an array of people, people, which are the attributes of some people in a queue (not necessarily in order). Each people[i] = [hi, ki] represents the ith person of height hi with exactly ki other people in front who have a height greater than or equal to hi. Reconstruct and return the queue that is represented by the input array people. The return..
소스 코드는 여기 있습니다. (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 객체를 참조하고 있어야 합니다. 테이블 연관관계 코드로 나타내면 다음과..
스프링 부트 버전이 2.7.0으로 올라가면서 H2 버전도 같이 2.x.x로 변경되었는데, 이전에 예약어가 아니었던 year가 예약어가 되어 애플리케이션이 깨지는 현상이 발생하였습니다. 근본적인 해결 방법은 예약어 컬럼명을 따옴표(quote)를 감싸는 것인데 이렇게 처리하기 위한 몇 가지 방법을 소개합니다. @Column 애너테이션 내 따옴표(") 사용 이전에는 @Column(name="open") 이렇게 예약어를 사용하는 경우 @Column(name="`open`") 백틱을 추가하는 방식으로 해결 가능했었는데요, 이제는 @Column(name="\"year\"") 이런식으로 따옴표를 추가하여 해결할 수 있습니다. 설정 변경 hibernate의 설정을 추가하여 해결할 수 있습니다. hibernate.aut..
Overview 스프링 부트에서 사용할 수 있는 설정 값들의 우선 순위를 알아봅니다. 설정 Spring Boot를 사용하면 설정을 외부화(externalize)하여 다른 환경에서 동일한 애플리케이션 코드로 작업할 수 있습니다. 설정의 종류는 다음과 같습니다. 자바 속성 파일(properties) yaml 파일 환경 변수 커맨드 라인 인수(command line argument) 속성 값은 @Value를 통해 주입하거나 Environment 추상 클래스를 통해 접근하거나 @ConfigurationProperties를 이용해 객체에 바인딩 할 수 있습니다. 우선순위 설정 값을 우선순위에 의해 오버라이드하는 방식으로 사용할 수 있습니다. 우선순위는 낮은 순에서 높은 순으로 오버라이드되므로, 공통으로 사용할 값..
Overview 객체와 테이블과 연관관계의 차이를 이해하기합니다. 예제 시나리오 단방향 연관관계에 대해 설명하기 위해 아래와 같이 세 가지 상황을 가정합니다. 회원과 팀 회원은 하나의 팀에만 소속될 수 있음 회원:팀=N:1 연관관계가 필요한 이유 예제 시나리오의 상황을 다이어그램으로 나타내면 다음과 같습니다. 객체 연관관계 테이블 연관관계 테이블에 맞춰서 객체를 모델링하게되면 서로 아무 관계가 없는 객체가 되어버립니다. 테이블끼리는 FK를 이용해 관계를 나타낼 수 있지만 객체는 다른 객체의 ID를 갖고있다고해도 서로 관계가 있다고 보긴 힘듭니다. 이를 자바 코드로 나타내면 다음과 같습니다. package com.tistory.jaimenote.jpa.domain.entity; import javax.pe..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem Given an integer array nums and an integer k, return the kth largest element in the array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Example 1: Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 Example 2: Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4 Constraints: 1
본 포스팅은 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발 강의를 참고하여 작성하였습니다. 소스 코드는 여기 있습니다. (commit hash: 316856a) > git clone https://github.com/lcalmsky/spring-boot-app.git > git checkout 316856a ℹ️ squash merge를 사용해 기존 branch를 삭제하기로 하여 앞으로는 commit hash로 포스팅 시점의 소스 코드를 공유할 예정입니다. Overview 이제 모든 기능이 구현됐으므로 마지막남은 첫 화면을 구현합니다. 로그인 전과 후로 나뉘는데 먼저 로그인하기 전 화면을 구현해보겠습니다. 로그인 전 화면 구현 MainController 수정 첫 화면에 전달할 데이터를 추가해주기 ..
- Total
- Today
- Yesterday
- r
- 헥사고날 아키텍처
- 스프링 부트 애플리케이션
- 함께 자라기 후기
- leetcode
- 알고리즘
- Spring Boot JPA
- spring boot app
- JSON
- 스프링 데이터 jpa
- 클린 아키텍처
- JPA
- @ManyToOne
- Java
- 함께 자라기
- 스프링부트
- spring boot jwt
- intellij
- 스프링 부트 튜토리얼
- 스프링 부트 회원 가입
- QueryDSL
- Linux
- 스프링 부트
- spring boot application
- gRPC
- proto3
- Spring Boot Tutorial
- Jackson
- Spring Boot
- Spring Data JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |