1. 속성 (Attribute)의 개념 속성이란 사전적인 의미로는 사물이나 개념이 어떤 것인지를 나타내고 그것을 다른 것과 구별하는 성질이라고 할 수 있다. 데이터 모델링 관점에서의 속성은 “업무에서 필요로 하는 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위”로 정의할 수 있다. 업무상 관리하기 위한 최소의 의미 단위로 생각할 수 있고, 이것은 엔터티에서 한 분야를 담당하고 있다. 속성의 정의를 정리해 보면 다음과 같다. 업무에서 필요로 한다. 의미상 더 이상 분리되지 않는다. 엔터티를 설명하고 인스턴스의 구성요소가 된다. 의미상 더 이상 분리되지 않는다는 특징을 살펴보면 다음과 같다. 예를 들어 생년월일은 하나로서 의미가 있다. 만약 이것을 생년, 생월, 생일로 구분한다면..
1. 엔터티의 개념 데이터 모델을 이해할 때 가장 명확하게 이해해야 하는 개념 중에 하나가 바로 엔터티(Entity)이다. 이것은 우리말로 실체, 객체라고 번역하기도 하는데 실무적으로 엔터티라는 외래어를 많이 사용한다. 엔터티는 아래와 같은 특징을 갖는다. 엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다. 엔터티는 업무상 관리가 필요한 관심사에 해당한다. 엔터티는 저장이 되기 위한 어떤 것(Thing)이다. 엔터티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성(Attribute)을 갖는데, 예를 들어 ‘학생’이라는 엔터티는 학번, 이름, 이수학점, 등록일자, 생일, 주소, 전화번호, 전공 등의 속성으로 특징지어질 수 있다. 이러한 속성 가운데에는 엔터티 인스턴스 전체가 공유할 ..
스프링JPA를 이용할 때 나타날 수 있는 N+1 문제는 무엇이며 어떻게 해결해야 할까? N+1은 JPA를 이용해서 데이터를 조회할 때 한 개의 쿼리로 처리되길 기대했는데 N개의 추가 쿼리가 발생하는 현상으로 불필요한 리소스를 낭비하고 조회 성능을 악화시키는 문제이다. 예를 들어 멤버와 팀간 관계를 생각해볼 때, 한 명의 멤버는 하나의 팀을 가질 수 있고 팀 입장에서는 여러 명의 멤버를 가질 수 있는데 team1의 멤버를 findAll() 하게 되면 멤버들을 전체 조회하는 쿼리가 먼저 나가고 그 다음으로 멤버수만큼 멤버를 조회하는 쿼리가 추가로 나가게 되는 것이다. N+1문제가 발생하는 이유는 JPA와 JPQL의 동작 특성 때문이다. JPA가 JPQL을 분석해서 SQL을 생성할 때는 글로벌 Fetch전략을..

What I Learned JPA를 이야기 하기 전에 ORM(Object-Relational Mapping)을 알 필요가 있다. ORM이란 객체는 객체대로 생성을 하고 관계형 데이터베이스는 데이터베이스대로 설계를 한 후에 ORM이라는 프레임워크가 중간에서 매핑해주는 기술이다 개발자는 오로지 매핑하는 방법만 전달해주면 되는 것이다. JPA는 이러한 ORM을 위한 표준 인터페이스(기술)이다.데이터베이스는 SQL 이라는 언어를 사용하기 때문에 자바 언어로 명령을 내릴 수가 없다. 또한 데이터베이스별로 문법이 조금씩 다르기 때문에 데이터베이스에 종속될 수 밖에 없는데 JPA는 개발자가 직접 SQL을 작성하지 않고 JPA가 SQL을 생성하여 DB와 소통함으로써 객체지향 프로그래밍을 할 수 있게 된다. JPA는 워..
- Total
- Today
- Yesterday
- 해시맵
- SQLD
- 스프링부트
- Spring
- DP
- 타입스크립트
- Queue
- dfs
- 백준
- 자바트리
- 리액트
- Algorithm
- 스프링
- JavaScript
- 알고리즘
- java
- 자바dp
- SQL
- Comparator
- JPA
- 형변환
- CS
- 이분탐색
- 자바스크립트
- 프로그래머스
- 자바bfs
- 정렬
- Nest
- BFS
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |