From ffd70c9e5a7fbf4b004b1f9def9cd26d8e6e014c Mon Sep 17 00:00:00 2001 From: yaongmeow Date: Wed, 13 Dec 2023 14:33:41 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=EB=8F=84=20=EA=B0=99=EC=9D=B4=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/users/dto/user-info.dto.ts | 4 ++++ BE/src/users/users.service.ts | 4 ++-- BE/src/users/users.swagger.ts | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/BE/src/users/dto/user-info.dto.ts b/BE/src/users/dto/user-info.dto.ts index 563d47f..242aa03 100644 --- a/BE/src/users/dto/user-info.dto.ts +++ b/BE/src/users/dto/user-info.dto.ts @@ -11,4 +11,8 @@ export class UserInfoDto { @IsString() @ApiProperty({ nullable: true }) avatar: string; + + @IsString() + @ApiProperty({ nullable: true }) + avatarPath: string; } diff --git a/BE/src/users/users.service.ts b/BE/src/users/users.service.ts index 179e06d..c6fc479 100644 --- a/BE/src/users/users.service.ts +++ b/BE/src/users/users.service.ts @@ -56,13 +56,13 @@ export class UsersService { return this.userRepository.findById(id); } - async getUserInfoById(id: string): Promise { + async getUserInfoById(id: string) { const user = await this.userRepository.findById(id); const avatarPath = user.avatar; if (user.avatar !== null) { user.avatar = await this.storageService.getImageUrl(avatarPath); } - return { name: user.name, avatar: user.avatar }; + return { name: user.name, avatar: user.avatar, avatarPath }; } async getUserInfoByResourceId(resourceId: string) { diff --git a/BE/src/users/users.swagger.ts b/BE/src/users/users.swagger.ts index 7f61317..9a14523 100644 --- a/BE/src/users/users.swagger.ts +++ b/BE/src/users/users.swagger.ts @@ -2,6 +2,7 @@ export const Users = { name: '๋ ˆ๋ชฌ', avatar: 'https://traveline.kr.object.ncloudstorage.com/123456789012345678901234567890123456/bd67709e-0a62-4cb2-acb5-a26d539f90e5.jpg?AWSAccessKeyId=qjvpzL57YZV54DgXNdvd&Expires=1701542436&Signature=PLHDtpwQVMT0SeM5hsGWl%2F7JV2w%3D', + avatarPath: '123456789012345678901234567890123456/lemon.jpg', }; export const getUsersDuplicate = { From 8d28c3f27ab9cec3146845920b7bb24d000ea0a3 Mon Sep 17 00:00:00 2001 From: kmi0817 Date: Thu, 14 Dec 2023 14:44:50 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20BE=20=EA=B8=B0=EC=88=A0=20=EC=8A=A4?= =?UTF-8?q?=ED=83=9D=20=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 134 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 54a1265..b9e50aa 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,138 @@ -# iOS07-Trapture +# ๐ŸŒŽ traveline -## ๐ŸŒŽ Trapture ํŒ€ ์†Œ๊ฐœ -|S009 ๊น€์˜์ธ|S013 ๊น€ํƒœํ˜„|S041 ํ™๊ธฐ์›…|J048 ๋ฐ•๊ฒฝ๋ฏธ|J170 ํ™ฉ์ •๋ฏผ| -|:-:|:-:|:-:|:-:|:-:| -|||||| -|[@0inn](https://github.com/0inn)|[@kth1210](https://github.com/kth1210)|[@otoolz](https://github.com/otoolz)|[@kmi0817](https://github.com/kmi0817)|[@yaongmeow](https://github.com/yaongmeow)| +> ์—ฌํ–‰ ์ผ์ •์„ ํƒ€์ž„๋ผ์ธ์œผ๋กœ **๊ธฐ๋ก**ํ•˜๊ณ  **๊ณต์œ **ํ•˜๋Š” **์—ฌํ–‰ SNS ์„œ๋น„์Šค**์ž…๋‹ˆ๋‹ค. +> ๋‚˜๋งŒ์˜ ์—ฌํ–‰์„ ๊ณต์œ ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์—ฌํ–‰๋“ค์„ ๋งŒ๋‚˜๋ณด์•„์š” :)
-|๐Ÿ“š ๋ฌธ์„œ|[๊ทธ๋ผ์šด๋“œ ๋ฃฐ](https://github.com/boostcampwm2023/iOS07-Trapture/wiki/%E2%9C%A8-%ED%8C%80-%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A3%B0)|[์ปจ๋ฒค์…˜](https://github.com/boostcampwm2023/iOS07-Trapture/wiki/%F0%9F%93%81-%EC%BB%A8%EB%B2%A4%EC%85%98)|[ํšŒ์˜๋ก](https://www.notion.so/bd676cad762c4cffa7b081c65939b0c5?v=76fe42efa9f1497b98764bf47ff47598&pvs=4)| -|:-:|:-:|:-:|:-:| +![แ„€แ…ตแ„‚แ…ณแ†ผ แ„‰แ…ฉแ„€แ…ข แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต](https://github.com/boostcampwm2023/iOS07-traveline/assets/51712973/f39271ee-26a8-41d2-b18d-32d44f79fd43) + +
+ +#### ๋‚˜๋ž‘ ๋น„์Šทํ•œ ์ทจํ–ฅ๊ณผ ํ™˜๊ฒฝ์„ ๊ฐ€์ง„ ๋‹ค์–‘ํ•œ ์—ฌํ–‰๋“ค์„ ๋งŒ๋‚˜๊ณ  ๋‚˜๋งŒ์˜ ์—ฌํ–‰ ๊ณ„ํš์„ ์งœ๋ณด์•„์š” ! + +- ์ง€์—ญ, ๊ธฐ๊ฐ„, ํ…Œ๋งˆ ๋“ฑ ์ด 8 ๊ฐ€์ง€์˜ ํ•„ํ„ฐ๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์—ฌํ–‰์„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”. +- ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์›ํ•˜๋Š” ์—ฌํ–‰์„ ๋ฐ”๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์š”. +- ๋งค ๋‚ ์งœ๋งˆ๋‹ค ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ๊ธฐ๋ก๋œ ์—ฌํ–‰๋“ค์„ ํ†ตํ•ด ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ผ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. +- ์ง€๋„๋กœ ๋ณด๊ธฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์–ด๋–ค ์žฅ์†Œ์— ๋จธ๋ฌผ๋ €๋Š”์ง€ ์ง€๋„๋กœ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. + +
+ +#### Traveline ํŒ€ ์†Œ๊ฐœ + +| S009 ๊น€์˜์ธ | S013 ๊น€ํƒœํ˜„ | S041 ํ™๊ธฐ์›… | J048 ๋ฐ•๊ฒฝ๋ฏธ | J170 ํ™ฉ์ •๋ฏผ | +| :------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | +| | | | | | +| [@0inn](https://github.com/0inn) | [@kth1210](https://github.com/kth1210) | [@otoolz](https://github.com/otoolz) | [@kmi0817](https://github.com/kmi0817) | [@yaongmeow](https://github.com/yaongmeow) | +| iOS | iOS | iOS | BE | BE | + +
+ +## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ + +| iOS | ![แ„‘แ…ณแ„…แ…ฉแ„Œแ…ฆแ†จแ„แ…ณ แ„€แ…ฎแ„Œแ…ฉแ„ƒแ…ฉ](https://github.com/boostcampwm2023/iOS07-traveline/assets/74968390/d4477585-eac2-481c-baf7-80d394eacaae) | +| :-: | :---------------------------------------------------------------------------------------------------------------------------------: | +| BE | ![image](https://github.com/boostcampwm2023/iOS07-traveline/assets/62174395/79d2c0a6-4e8c-4547-acd6-a2b4ea95ce68) | + +
+ +## iOS ๊ธฐ์ˆ  ์Šคํƒ + +#### MVVM + CleanArchitecture + +- ํ˜„์žฌ ์„œ๋น„์Šค ๊ธฐํš ๊ฐ„ ๋ณต์žกํ•œ ์•„ํ‚คํ…์ฒ˜์˜ ํ•„์š”์„ฑ์„ ๋Š๋ผ์ง€ ๋ชปํ–ˆ๊ณ , ์ž‘์—… ๊ฐ„ ๋กœ์ง ๋ถ„๋ฆฌ์˜ ์šฉ์ดํ•จ์„ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. +- ๋˜ํ•œ ์—ฌ๋Ÿฌ ๋ช…์ด ๋™์‹œ์— ๊ฐœ๋ฐœํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— CleanArchitecture๋ฅผ ํ™œ์šฉํ•ด ์—ญํ•  ๋ถ„๋ฆฌ๋ฅผ ํ™•์‹คํžˆ ํ•ด๋‘์–ด ์ฝ”๋“œ์˜ ํ†ต์ผ์„ฑ์„ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. +- Repository ํŒจํ„ด์„ ํ†ตํ•ด Data Source๋ฅผ ์บก์Šํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , RepositoryMock์„ ์ด์šฉํ•ด ์„œ๋ฒ„ ๊ฐœ๋ฐœ ์ƒํ™ฉ์— ๊ด€๊ณ„์—†์ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + +#### Combine + +- Third-party์ธ RxSwift์— ๋น„ํ•ด ์‹œ๊ฐ„, ๊ณต๊ฐ„์  ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— First-party์ธ Combine์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. +- ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์กฐ์ž‘ํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์— ์ตœ์ ํ™”๋œ Combine์„ UI Binding์— ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. + +#### Swift Concurrency + +- Concurrency๋ฅผ ํ™œ์šฉํ•ด ๋‹จ๋ฐœ์„ฑ ๋น„๋™๊ธฐ ์‘๋‹ต์ธ ๋„คํŠธ์›Œํฌ ๋กœ์ง์„ ๋ณด๋‹ค ์ง๊ด€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. +- Repository - Network์˜ ํ๋ฆ„์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + +#### MapKit + +- ์ง€๋„ ์œ„์— ๋งˆ์ปค๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +- ์œ„์น˜ ์ขŒํ‘œ ์ •๋ณด๋งŒ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ Third-party ์ง€๋„๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด ์• ํ”Œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ MapKit์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. + +#### Keychain + +- ๋กœ๊ทธ์ธ ์ดํ›„ ํ† ํฐ ๋“ฑ ๋ฏผ๊ฐํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. + +
+ +## BE ๊ธฐ์ˆ  ์Šคํƒ + +#### NestJS + TypeORM + +- ์›ํ™œํ•œ ํ˜‘์—…๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด ์ž์œจ์„ฑ์ด ๋†’์€ Express๋Š” ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ฐ–์ถฐ์ง€๊ณ , TypeScript๊ฐ€ ๊ธฐ๋ฐ˜์ธ NestJS๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. +- ์ผ์ธ์ž TypeORM๊ณผ ์š”์ฆ˜ ํ•ซํ•œ Prisma. TypeORM ์‚ฌ์šฉ์ž์—๊ฒŒ Prisma๊ฐ€ ์ธ๊ธฐ ์žˆ๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด TypeORM์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €ํฌ๋Š” ๋จผ์ € TypeORM์„ ๊ฒฝํ—˜ํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค. + +#### RDB + +- traveline ์•ฑ์€ ํ•˜๋‚˜์˜ ๊ฒŒ์‹œ๊ธ€์— ์—ฌ๋Ÿฌ ํƒ€์ž„๋ผ์ธ ๊ธ€์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ๊ฒŒ์‹œ๊ธ€์—๋Š” ์ข‹์•„์š”์™€ ์‹ ๊ณ  ์ •๋ณด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. +- ํ…Œ์ด๋ธ” ๊ฐ„ join ์—ฐ์‚ฐ์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ฏ€๋กœ NoSQL๋ณด๋‹จ RDB๊ฐ€ ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. + +#### GitHub Actions + Docker + +- ์›๋ž˜ ์ˆ˜๋™ ๋ฐฐํฌ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ, node ๋ฒ„์ „ ์ด์Šˆ์™€ systemd service ๋“ฑ๋ก ๊ณผ์ •์— ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ์ปฌ ์ž‘์—… ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ด์‹์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ์ง€์†์ ์ธ ๋ฐฐํฌ์—๋„ ์œ ์šฉํ•œ Docker๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +- Swagger API๋ฅผ ์„œ๋‘˜๋Ÿฌ iOS ์ธก์— ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ๊ณ , ์‹ ์†ํ•œ ์„ธํŒ…์ด ๊ฐ€๋Šฅํ•œ GitHub Actions๋กœ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. + +#### Letโ€™s Encrypt + Nginx + +- ์• ํ”Œ ์ •์ฑ…์ƒ ipa๋Š” https์—์„œ๋งŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์—, 90์ผ๋งˆ๋‹ค SSL ์ธ์ฆ์„œ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜์ง€๋งŒ ๋ฌด๋ฃŒ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” Letโ€™s Encrypt๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +- Nest ์„œ๋ฒ„์—์„œ ์ง์ ‘ SSL ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ”ผํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์›น ์„œ๋ฒ„๋ฅผ Reverse Proxy๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ SSL ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— SSL ๊ด€๋ จ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„, ๋”์šฑ ํ•ต์‹ฌ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +#### AWS SES (Simple Email Service) + +- traveline์€ ์ƒˆ๋กœ์šด IP๋กœ ๋กœ๊ทธ์ธ ์‹œ ๋ณธ์ธ ํ™•์ธ ๋ฉ”์ผ์„ ์ „์†กํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. +- Nest ๋‚ด์žฅ ๋ชจ๋“ˆ์ธ `nodemailer`๋Š” ๋ณด์•ˆ์ƒ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์–ด ์‹ค์„œ๋น„์Šค์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NCP์˜ `Cloud Outbound Mailer`๋Š” ์–ด๋ทฐ์ง• ๋ฌธ์ œ๋กœ ์ธํ•ด ํ˜„์žฌ _(2023.12)_ ์„œ๋น„์Šค ์‹ ์ฒญ์ด ๋ง‰ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์—, AWS SES๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. + +
+ +## ๐Ÿ”ฅ ์šฐ๋ฆฌ์˜ ๋„์ „๋“ค + +### iOS + +#### - [๋‹จ๋ฐฉํ–ฅ ํ”Œ๋กœ์šฐ ViewModel ๊ตฌํ˜„๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-%EB%8B%A8%EB%B0%A9%ED%96%A5-%ED%94%8C%EB%A1%9C%EC%9A%B0-ViewModel-%EA%B5%AC%ED%98%84%EA%B8%B0) + +#### - [Concurrency์™€ Combine์˜ ๊ณต์กด](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-Concurrency%EC%99%80-Combine%EC%9D%98-%EA%B3%B5%EC%A1%B4) + +#### - [traveline์˜ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-traveline%EC%9D%98-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0) + +#### - [traveline ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-traveline-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%EA%B8%B0) + +#### - [KeychainWrapper๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ด€๋ฆฌํ•˜๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-KeychainWrapper%EB%A1%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EB%B3%B4-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0) + +#### - [๊ถŒํ•œ ์„ค์ • ์—†์ด ์‚ฌ์ง„์˜ ์‹œ๊ฐ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-%EA%B6%8C%ED%95%9C-%EC%84%A4%EC%A0%95-%EC%97%86%EC%9D%B4-%EC%82%AC%EC%A7%84%EC%9D%98-%EC%8B%9C%EA%B0%84-%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0) + +#### - [์‚ฌ์ด๋“œ ๋ฐ” ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ ๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%B0%94%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%84%B1-%EA%B0%9C%EC%84%A0%EA%B8%B0) + +#### - [MapKit์œผ๋กœ ํƒ€์ž„๋ผ์ธ ๋ณด์—ฌ์ฃผ๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-MapKit%EC%9C%BC%EB%A1%9C-%ED%83%80%EC%9E%84%EB%9D%BC%EC%9D%B8-%EB%B3%B4%EC%97%AC%EC%A3%BC%EA%B8%B0) + +#### - [์ž‘์—…์„ ์„œ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๋ณด์ž!](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BiOS%5D-%EC%9E%91%EC%97%85%EC%9D%84-%EC%84%9C%EB%A1%9C-%EB%B0%94%EA%BF%94%EC%84%9C-%ED%95%B4%EB%B3%B4%EC%9E%90!) + +### BE + +#### - [์ƒ์•  ์ฒซ CI CD ๋„์ „๊ธฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-%EC%83%9D%EC%95%A0-%EC%B2%AB-CI-CD-%EB%8F%84%EC%A0%84%EA%B8%B0) + +#### - [@nestjs/swagger๋กœ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ form์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€?](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-@nestjs-swagger%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C-form%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%A7%8C%EB%93%A4%EC%A7%80%3F) + +#### - [ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” 413 Content Too Large ์—๋Ÿฌ?](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%97%90%EC%84%9C%EB%A7%8C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-413-Content-Too-Large-%EC%97%90%EB%9F%AC%3F) + +#### - [ํŠธ๋žœ์žญ์…˜์€ ์ฟผ๋ฆฌ๋ฌธ๋งŒ ๋‹ค๋ฃจ์ง€, ์Šคํ† ๋ฆฌ์ง€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„์š”](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%80-%EC%BF%BC%EB%A6%AC%EB%AC%B8%EB%A7%8C-%EB%8B%A4%EB%A3%A8%EC%A7%80,-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EB%8A%94-%EC%8B%A0%EA%B2%BD-%EC%93%B0%EC%A7%80-%EC%95%8A%EC%95%84%EC%9A%94) + +#### - [์• ํ”Œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๊ณผ์ •](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-์• ํ”Œ-๋กœ๊ทธ์ธ-๊ตฌํ˜„-๊ณผ์ •) + +#### - [์ด๋ฉ”์ผ ์„œ๋น„์Šค ์ ์šฉ ๊ณผ์ •](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-์ด๋ฉ”์ผ-์„œ๋น„์Šค-์ ์šฉ-๊ณผ์ •) + +#### - [๋กœ๊ทธ์ธ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%5BBE%5D-๋กœ๊ทธ์ธ-๋กœ๊ทธ์•„์›ƒ-์ฒ˜๋ฆฌ) + +
+ +| ๐Ÿ“š ๋ฌธ์„œ | [Wiki](https://github.com/boostcampwm2023/iOS07-traveline/wiki) | [ํŒ€ ๋…ธ์…˜](https://spiky-rat-16e.notion.site/6b9791faac7e4b9d9a31d225ce8cd157?pvs=4) | [๊ทธ๋ผ์šด๋“œ ๋ฃฐ](https://github.com/boostcampwm2023/iOS07-traveline/wiki/%ED%8C%80-%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A3%B0) | [์ปจ๋ฒค์…˜](https://github.com/boostcampwm2023/iOS07-traveline/wiki/GitHub-%EC%BB%A8%EB%B2%A4%EC%85%98) | [ํšŒ์˜๋ก](https://www.notion.so/bd676cad762c4cffa7b081c65939b0c5?v=76fe42efa9f1497b98764bf47ff47598&pvs=4) | [๊ธฐํš/๋””์ž์ธ](https://www.figma.com/file/RrmfjBTxuLMAYRiXrbKQSW/traveline?type=design&node-id=2%3A2&mode=design&t=AD0PpylqwYoldl8g-1) | +| :-----: | :-------------------------------------------------------------: | :---------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: |