Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[10주차]한상윤 학습 PR 제출합니다. #60

Open
wants to merge 33 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
d6655df
Update and rename 1주차.md to 한상윤.md
0702Yoon Sep 24, 2023
412ee44
Update 한상윤.md
0702Yoon Sep 24, 2023
eea8195
Update and rename 1주차.md
0702Yoon Sep 24, 2023
64f0b66
1주차 한상윤 과제
0702Yoon Sep 24, 2023
67e984f
1주차 한상윤 과제
0702Yoon Sep 24, 2023
939b91a
1주차 한상윤 과제
0702Yoon Sep 24, 2023
fc42f78
Update and rename 1주차.md to 한상윤.md
0702Yoon Sep 24, 2023
5326158
Update 한상윤.md
0702Yoon Sep 24, 2023
27d200b
Update and rename 1주차.md
0702Yoon Sep 24, 2023
723355a
1주차 한상윤 과제
0702Yoon Sep 24, 2023
5fb5ff1
1주차 한상윤 과제
0702Yoon Sep 24, 2023
f9086bf
1주차 한상윤 과제
0702Yoon Sep 24, 2023
3623831
1주차.md 파일 제거
0702Yoon Oct 2, 2023
5946f26
[2주차]한상윤PR입니다.
0702Yoon Oct 3, 2023
4745292
[2주차]한상윤 학습PR 제출합니다.
0702Yoon Oct 3, 2023
4b56cb2
한상윤 이미지 파일을 이슈를 이용하여 지웠습니다.
0702Yoon Oct 4, 2023
68d8ebc
Merge remote-tracking branch 'upstream/main'
0702Yoon Oct 11, 2023
48be55d
[3주차] 한상윤 학습 PR 제출합니다.
0702Yoon Oct 11, 2023
1b8747d
[3주차]한상윤 학습 PR 제출합니다.
0702Yoon Oct 12, 2023
d01daea
Merge remote-tracking branch 'upstream/main'
0702Yoon Oct 13, 2023
ca4883b
[3주차]한상윤 학습 PR 제출합니다.
0702Yoon Oct 13, 2023
c0c7fea
한상윤.md
0702Yoon Oct 13, 2023
64a2007
[3주차] 한상윤 학습 PR 제출합니다.
0702Yoon Oct 13, 2023
4ec9f8b
[4주차]한상윤 학습 PR 제출합니다.
0702Yoon Oct 17, 2023
fb66347
Merge remote-tracking branch 'origin/main'
0702Yoon Oct 17, 2023
41eb183
Merge branch 'main' of https://github.com/COW-edu/COW-Spring-2
0702Yoon Nov 6, 2023
0058f1a
[7주차] 한상윤 학습 PR 제출합니다.
0702Yoon Nov 7, 2023
5046a37
Merge branch 'main' of https://github.com/COW-edu/COW-Spring-2
0702Yoon Nov 11, 2023
8159518
[8주차]한상윤 학습 PR 제출합니다.
0702Yoon Nov 14, 2023
705010c
Merge branch 'main' of https://github.com/COW-edu/COW-Spring-2
0702Yoon Nov 21, 2023
0bab7f7
[9주차]한상윤 학습 PR 제출합니다.
0702Yoon Nov 21, 2023
0f17aee
Merge branch 'main' of https://github.com/COW-edu/COW-Spring-2
0702Yoon Nov 27, 2023
99ea1f8
[10주차]한상윤 학습 PR 제출합니다.
0702Yoon Nov 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions week10/10주차.md

This file was deleted.

66 changes: 66 additions & 0 deletions week10/한상윤.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# **10주차 학습 PR**
이번 주는 살짝 쉬어가는 느낌으로 실습 PR은 별도로 없고, H2 Database를 설치해오시면 좋을 것 같습니다!

## **Indexing이란?**

(clustering index, secondary index)

## **DB의 Relationship(1:1, 1:m, n:m)**

## **JPA 엔티티의 생명 주기**

## **@Id, @GeneratedValue**

## Indexing이란?

1. 데이터베이스에서 인덱스란?
데이터베이스에서 인덱스는 데이터베이스 성능을 향상시키기 위해서 사용되는 기술이다. 데이터 베이스의 성능이라고 하는 것은, 원하는 데이터에 접근하는 능력을 의미한다.
즉 성능이 좋다면, 원하는 데이터에 빠르게 접근하여, 그것을 읽거나 가공할 수 있다.

데이터베이스도 디스크에 저장되는 것이다. 디스크에서 발생하는 I/O 시간(디스크 내에서 이동)은 Main Memery에서 발생하는 I/O 시간에 비하면 매우 크다. 그래서, 데이터가 저장되어 있는 Main Memery에 빠르게 접근하는 것이 데이터 베이스 성능을 높일 수 있다.

2. clustered Index
클러스터링 인덱스란, “테이블 전체가 인덱스에 의해 정렬되어 있는 방식”이다. InnoDB 엔진(MySQL 데이터베이스 관리 시스템에서 사용하는 스토리지 엔진 중 하나이다.)에서는 테이블에 Primary key(기본키)를 정의하면, 자연스럽게 Clustered Index가 되어서, 테이블이 인덱스에 의해 정렬이 된다. 그래서 데이블의 데이터를 저장하는 물리적인 순서를 인덱스에 의해 변경시킬 수 있다. 그래서 하나의 테이블은 단 하나의 클러스터링 인덱스만 존재할 수 있다.
그래서 데이터를 넣는 , Insert시 data가 index에 의해 정렬되고, index의 첫 번째 값은, data block의 첫 번째 레코드의 주소값을 갖게 된다. index가 곧바로 data block에 접근할 수 있어서, 밑에 나올 Secondary Index보다 동작이 빠르다. 하지만 Insert시에는 물리적으로 재 배치가 일어나야하기 때문에, 동작이 느리다.

3. Secondary Index
Primary Key 이외에 필요한 정렬의 기준이 있을 경우에 사용한다.
이건 물리적으로 테이블의 데이터를 바꾸지 않기 떄문에, 테이블당 여러개를 가질 수 있다.
하지만 그렇기에 Record들이 기본키에 의해 정렬되어있지 않다. 그래서 데이터에 접근하는 성능은 그렇게 좋지 않다. 하지만, 데이터의 CUD(Create, Update, Delete)는 Clustered Index보다 빠르다.

## **DB의 Relationship(1:1, 1:m, n:m)**

1. DB의 Relationship
데이터베이스에서 말하는 Relationship은 엔터티와 엔터티간의 관계를 의미한다. 그리고 그 관계는, 엔터티 한 레코드가 다른 엔터티 레코드에 하나에만 관계를 맺는 지, 아니면 여러 개와 관계를 맺는 지를 의미한다.
2. 1:1
A,B엔터티가 존재할 떄, 엔터티 A의 각 각의 레코드는 하나의 B의 레코드와 매칭이 된다. 그 반대도 마찬가지이다. 이것은 주로 데이터 베이스를 세분화하거나, 중복을 피하기 위해 사용된다.
3. 1:N
A,B엔터티가 존재할 때, A의 각 각의 레코드는 B의 여러 레코드와 관계를 맺는 다 하면, B가 N이 되고, B의 각 각의 레코드는 단 하나의 A 레코드와 관계를 맺는 다로 A가 1이 된다. 그래서 1:N의 관계가 만들어진다. 이것은 주로 부모-자식 관계를 표현하거나, 한 엔터티의 레코드가, 다른 엔터티의 여러 레코드와 관계가 있을 때 사용한다.
4. N:M
한 엔터티A 의 레코드가 다른 엔터티B 의 여러 레코드와 매칭이 되고, 그 반대도, 엔터티B의 레코드도 다른 엔터티A의 여러 레코드와 매칭이 될 때, N:M의 관계라고 한다.

## **JPA 엔티티의 생명 주기**

1. JPA란
자바 플랫폼의 객체와, 관계형 데이터베이스 간의 패러다임을 연결시켜주는 API이다. 이 것을 통해, 자바 클래스와 데이터베이스의 테이블을 매핑해서, 개발자가 SQL 쿼리를 작성하지 않고, 객체를 통해서 데이터 베이스를 조작할 수 있는 ORM(Object-Relation-Mapping)기술을 사용할 수 있게 한다.
※이것을 통해 얻을 수 있는 장점
위에서 말헀다, 싶이 SQL 쿼리를 통하지 않고, 객체를 데이터베이스에 저장하고, 조회할 수 있다.
그리고 또 데이터베이스의 트랜잭션 관리를 할 수 있다.
또 JPA 내부에 캐시와 지연 로딩 등의 최적화 기능이 있어서, 성능이 최적화 된다.
간단히 설명하면 지연 로딩은 데이터베이스에 저장할 내용을 한곳에 모은 다음에, 한번에 여러개를 넘기는 것을 말한다. 데이터 베이스, 디스크에 접근하는 시간이 오래 걸려서, 그것을 최소화 하기 위해서 이다.
그리고 캐시인 경우는, 방금 말헀듯이, 디스크에 접근 하지 않도록, 조그만한 저장소에 자주 사용되는 데이터들을 저장해놓아서, 거기 저장된 데이터를 요구하면, 바로 거기서 전달하는 방식을 의미한다.
2. JPA 엔티티란
JPA에서 데이터 베이스의 테이블과 매핑되는 자바 클래스를 의미한다. JPA 엔터티는 데이터베이스의 테이블과 일대일(1:1)로 대응되며, 각 엔터티 객체는 데이터베이스의 레코드를 나타낸다.

JPA 엔터티 클래스라는 것은 @Entity 어노테이션으로 표시한다.
그리고 JPA 엔티티는 테이블의 기본 키를 통해 매핑이 되는 데, 엔티티 클래스 안에서, 식별자 필드를 정의해야하고, 그 필드에 @Id 어노테이션으로 표시해야한다.
자세히 말하면, @Entity 어노테이션을 붙이면, JPA 엔티티임을 나타내서, JPA에게 이거 매핑해야해 라고 알려주는 역할인 것이다.
@Id는 그냥 이게 붙여진 필드에 데이터베이스의 기본키가 매핑되는 것이다. 테이블안에 있는 속성(필드)도 엔터티 클래스에 매핑이 되어야 하는 데, 그것의 역할은 @Column 어노테이션을 사용한다.
@Column(name=””) 여기 column의 이름을 적어야 한다.
그리고 @JoinColumn(name=””)을 통해 포린키도 표현할 수 있다. 그리고 거기에 @ManyToOne, @ManyToMany, @OneToOne으로 관계를 표시할 수 있다.

@GenerateValue 어노테이션은 자동 증가하는 식별자(기본 키)를 생성하기 위해서 사용된다. 이것은 엔터티 클래스에서 기본키의 값을 자동으로 생성한다.
1) GenerationType.IDENTITY : 데이터베이스의 자동 증가 기능을 사용해서, 자동으로 기본키 값을 생성한다.
2) GenerationType.SEQUENCE : 데이터베이스의 시퀀스를 사용해서, 기본 키 값을 생성한다. 여기서 말하는 시퀀스는 데이터베이스에서 일련번호를 관리하는 객체이고, 오라클 데이터베이스에서 많이 사용한다.
3) GenerationType.TABLE : 별도의 키 생성용 테이블이 있고, 그것을 이용해서 기본키 값을 설정한다.
4) GenerationType.AUTO: 데이터베이스에 따라 적잘한 기본키 생성 전략을 선택할 수 있게 한다.즉 이것으로 설정하면 JPA 구현체가 사용하는 데이터베이스에 맞게 자동으로 선택된다.