Skip to content

Commit 99f6b8a

Browse files
committed
week 06 workbook
1 parent ac0f9a9 commit 99f6b8a

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

week06/keyword/keyword.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<aside>
2+
💡 주요 내용들을 정리하고, 여러분만의 생각을 통해 정리해보세요!
3+
4+
- 레퍼런스를 참고하여 정의, 속성, 장단점 등을 적어주셔도 괜찮습니다.
5+
- 조사는 공식 홈페이지 **Best**, 블로그(최신 날짜) **Not Bad**
6+
</aside>
7+
8+
- ORM
9+
10+
Object-Relational Mapping
11+
12+
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말함.
13+
14+
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 이용함.
15+
16+
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동적으로 생성하여 객체 모델과 관계형 모델 간에 불일치를 해결함.
17+
18+
- Prisma 문서 살펴보기
19+
- ex. Prisma의 Connection Pool 관리 방법
20+
21+
Prisma 자체는 Connection Pool을 직접 관리하지 않고, 대신 사용하는 데이터베이스 드라이버의 connection pool 기능을 사용한다. MYSQL의 경우에는 Prisma가 내부적으로 mysql2 드라이버를 사용한다. .env 파일의 DATABASE_URL에 쿼리 스트링으로 설정할 수 있다. Prisma Client는 애플리케이션 전체에서 단 1번만 생성해야하기 때문에 요청마다 새로 생성하면 Pool 누수와 연결 과다 문제가 생길 수 있기 때문에 주의해야한다.
22+
23+
- ex. Prisma의 Migration 관리 방법
24+
25+
Migration은 데이터베이스 스키마의 버전을 안전하게 관리하고 추적하기 위한 방법이다. 데이터베이스 구조(테이블, 컬럼 등)을 변경하는 코드를 의미한다. Prisma에서 크게 2단계를 거쳐 마이그레이션을 관리한다.
26+
27+
1. prisma/schema.prisma 수정 스키마 파일에서 모델(테이블)을 수정하거나 추가한다.
28+
2. 명령어로 마이그레이션 생성 및 적용 `npm exec prisma migrate dev` 이 명령어를 수행하여 변경된 스키마를 기반으로 SQL migration 파일을 생성하고, 로컬 DB에 마이그레이션을 자동 적용한다.
29+
- ORM(Prisma)을 사용하여 좋은 점과 나쁜 점
30+
- 장점
31+
32+
ORM은 데이터베이스 작업을 객체 지향적인 방식으로 처리하게 해준다. 이를 이용하여 개발자는 SQL 쿼리를 작성하는 대신 객체를 이용하여 데이터베이스와 상호작용으로 인해 코드가 간결해지고 개발속도 또한 빨라져 생산성 향상에 도움이 된다.
33+
34+
- 단점
35+
36+
ORM은 추상화된 레이어를 추가하므로 직접 SQL 쿼리를 작성하는 것보다 성능이 떨어지며 복잡한 쿼리나 대량 데이터 처리 시 성능 문제가 발생할 수 있다.
37+
38+
- 다양한 ORM 라이브러리 살펴보기
39+
40+
**ex. Sequelize**
41+
42+
Sequelize는 JavaScript/TypeScript에서 사용하는 Node.js에서 가장 오래되고 널리 쓰이는 ORM 중 하나이다. Sequlize의 특징으로는 모델 정의를 코드에서 직접해주어야하고, 쿼리 작성은 체인 기반 ORM 스타일로 작성한다는 것이 있다. Prisma에 비해 타입 지원이 불안전하고, 마이그레이션을 sequelize-cli를 통해 수동 스크립트로 작성해야한다는 단점이 있지만 사용 난이도가 비교적 간단하고 오래된 만큼 문서의 양이 방대하고 커뮤니티가 활발하다는 장점을 갖고있다.
43+
44+
**ex. TypeORM**
45+
46+
TypeORM은 node.js에서 실행되고 typeScript로 작성된 객체 관리형 매퍼 라이브러리이다. Entity 클래스 중심이고 TypeScript에 최적화되어 데코레이터(Entity, Column)으로 모델을 정의한다는 특징을 가진다. 또한 NestJS와의 호환이 뛰어나다. 타입 안정성과 마이그레이션 평의성 및 관계 설정이 Prisma보다 불편하다는 단점을 갖고있다.
47+
48+
- 페이지네이션을 사용하는 다른 API 찾아보기
49+
- ex. https://docs.github.com/en/rest/using-the-rest-api/using-pagination-in-the-rest-api?apiVersion=2022-11-28
50+
51+
서비스에서 한 번에 모든 데이터를 모두 보낸다면 작업의 속도가 굉장히 느려지고 서버에도 부담이 커질 것이다. 그렇기 때문에 데이터 전체를 보내지 않고, 데이터의 일부만 보내는 페이지네이션이라는 방식을 사용한다.
52+
53+
GitHub에서는 per_page와 page 쿼리 파라미터 방식을 널리 사용하는데 per_page는 한 번에 받을 항목 개수(최대 100개), page는 몇 번째 페이지를 요청할지를 의미한다. ex) ?per_page=10&page=1 → 첫 번째 페이지의 10개를 불러온다.
54+
55+
Link 헤더에 next, prev, last, first 같은 링크들이 있어서 API 요청을 보낼 때 응답 헤더에 다음 요청 주소를 같이 보내서 다음 페이지 여부를 알려줄 수 있다.
56+
57+
- ex. https://developers.notion.com/reference/intro#pagination
58+
59+
Notion API은 Cursor 기반의 Pagination 방식을 주로 사용한다. start_cursor는 “어디서부터 시작할지”를 알려주는 포인터이고, has_more는 다음 데이터가 더 있는지를 알려주는 boolean 값이다. next_cursor는 다음 요청에서 사용할 수 있는 start_cursor 값을 의미한다. 요청을 하면 기본적으로 100개의 데이터를 주고, start_cursor부터 데이터를 전달하고 has_more가 false가 될 때 까지 next_cursor를 start_cursor로 변경하여 데이터를 계속 전달하는 방식을 사용한다.

week06/mission/mission.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
1. 기존에 구현했던 API의 Repository 함수들을 모두 Prisma ORM을 이용하도록 변경해주세요.
2+
3+
했어염
4+
5+
2. 내 리뷰 조회
6+
7+
GET
8+
9+
![image.png](attachment:b65db8cf-b0e5-4646-b390-a9f41e4ad7da:image.png)
10+
11+
cursor를 1로 설정했을 때
12+
13+
![image.png](attachment:c9156a93-acd1-4ce0-b554-6ea8e0e639c8:image.png)
14+
15+
3. 특정 가게 미션 조회하기
16+
17+
![image.png](attachment:b26fe73e-b58e-42b7-a117-fadef2472ecd:image.png)
18+
19+
4. 내가 진행 중인 미션 목록
20+
21+
![image.png](attachment:20754108-9f51-4c19-a388-5ebe9f22385f:image.png)
22+
23+
데이터가 이런식으로 들어가 있을 때, 내가 진행중인 미션 목록을 조회하기 위해 is_progress가 1인 애들만 조회하게끔 함.
24+
25+
![image.png](attachment:1bcd9914-d682-4b0c-a373-07864e784a9e:image.png)
26+
27+
user-id를 1로 해서 해당 유저의 미션 중 진행중인 미션만 조회함.
28+
29+
5. 내가 진행 중인 미션을 진행 완료로 바꾸기
30+
31+
노진행 → 진행
32+
33+
![image.png](attachment:ce7d5820-8e51-4453-a493-7d2f33f09062:image.png)
34+
35+
진행 → 완료
36+
37+
![image.png](attachment:a5e78745-3fc3-4f30-8240-b465bf21a4d5:image.png)

0 commit comments

Comments
 (0)