wecode-bootcamp-korea / 41-2nd-PetWithU-backend

1 stars 1 forks source link

๐Ÿถ PetWithU

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €ํฌ๋Š” 'PetWithU' ํŒ€์ž…๋‹ˆ๋‹ค.

๐Ÿ–ฅ๏ธ Demo video


๐Ÿฉ ์„œ๋น„์Šค ์†Œ๊ฐœ


๐Ÿ—“ Project๊ธฐ๊ฐ„

2023/01/30 ~ 2023/02/10 (์•ฝ 2์ฃผ)


๐Ÿ‘ฅ ์ธ์› ๋ฐ ๊ตฌ์„ฑ

Back-End

๐Ÿ‘‘ ์ตœ๋ฏผ์ฃผ (Product Manager)

Front-End

๐Ÿ‘‘ ๊ฐ•์„œ์œค (Project Manager), ๋ฐฐ๊ฒฝ๋ฏผ, ๊ถŒ๋‚˜ํ˜„


๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Frond-End

Back-End

Common

Communication


๐Ÿ–ผ๏ธ ๊ตฌํ˜„ ์˜ˆ์‹œ

์ด๋ฏธ์ง€ ๋ณด๊ธฐ !2์›” ์ค‘ ์ด๋ฏธ์ง€ ์ผ๊ด„ ๊ต์ฒด ์˜ˆ์ •! | ํŽ˜์ด์ง€ | ๊ตฌํ˜„ ๋‚ด์šฉ ์บก์ณ | ๊ฐœ๋ฐœ ๋‹ด๋‹น | | --- | --- | --- | | DB ์„ค๊ณ„
Migration |


[Detail LINK](https://github.com/wecode-bootcamp-korea/41-2nd-PetWithU-backend/issues/5) | [BE] ์ตœ๋ฏผ์ฃผ | | ๋ฉ”์ธ ํ™”๋ฉด
Nav Bar
Footer |

| [FE] ๋ฐฐ๊ฒฝ๋ฏผ
[BE] ์ตœ๋ฏผ์ฃผ | | Kakao ๋กœ๊ทธ์ธ |

| [FE] ๋ฐฐ๊ฒฝ๋ฏผ
[BE] ์ตœ๋ฏผ์ฃผ | | ํ”ผ๋“œ ๋ฉ”์ธ |

| [FE] ๋ฐฐ๊ฒฝ๋ฏผ
[BE] ์ตœ๋ฏผ์ฃผ | | ํ”ผ๋“œ ๋””ํ…Œ์ผ |

| [FE] ๊ถŒ๋‚˜ํ˜„
[BE] ์ตœ๋ฏผ์ฃผ | | ํ”ผ๋“œ ์Šคํฌ๋žฉ
๋ชจ์•„๋ณด๊ธฐ |

| [FE] ๋ฐฐ๊ฒฝ๋ฏผ
[BE] ์ตœ๋ฏผ์ฃผ | | ํ”ผ๋“œ ๊ธ€์“ฐ๊ธฐ |

| [FE] ๊ถŒ๋‚˜ํ˜„
[BE] ์ตœ๋ฏผ์ฃผ | | ์ƒํ’ˆ ๊ฒ€์ƒ‰ |

| [FE] ๋ฐฐ๊ฒฝ๋ฏผ
[BE] ์ตœ๋ฏผ์ฃผ | | ์ƒํ’ˆ ๋””ํ…Œ์ผ |

| [FE] ๊ถŒ๋‚˜ํ˜„
[BE] ์ตœ๋ฏผ์ฃผ | | ์‚ฐ์ฑ…๋กœ ๋ฉ”์ธ |


| [FE] ๊ฐ•์„œ์œค
[BE] ์ตœ๋ฏผ์ฃผ | | ์‚ฐ์ฑ…๋กœ ๋””ํ…Œ์ผ |

| [FE] ๊ฐ•์„œ์œค
[BE] ์ตœ๋ฏผ์ฃผ | | ์‚ฐ์ฑ…๋กœ ์Šคํฌ๋žฉ
๋ชจ์•„๋ณด๊ธฐ |

| [FE] ๊ฐ•์„œ์œค
[BE] ์ตœ๋ฏผ์ฃผ | | ์žฅ๋ฐ”๊ตฌ๋‹ˆ | FE ์บก์ณ ๋ฏธ์ œ๊ณต | [FE] ๊ถŒ๋‚˜ํ˜„
[BE] ์ตœ๋ฏผ์ฃผ |


๐Ÿ“‘ API Documentation

Postman Link


๐Ÿ› ๏ธ ๊ตฌํ˜„ ์ƒ์„ธ

์ƒ์„ธ๋ณด๊ธฐ ### ๐Ÿ—„๏ธ Server & DataBase - AWS RDS ์— DB๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ FE ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์–ธ์ œ๋“ ์ง€ ์›ํ™œํ•˜๊ฒŒ DB๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›. ### ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Users #### Login / Sign Up - Kakao SDK for JavaScript ๋ฅผ ์ด์šฉํ•œ ์นด์นด์˜คํ†ก ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ - ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ์„œ๋ฒ„์—์„œ secret key ๋ฅผ ์ด์šฉํ•˜์—ฌ JWT ์ƒ์„ฑ - ๋กœ๊ทธ์ธ ํ›„ ์‚ฌ์šฉ์ž ์ธ์ฆ/์ธ๊ฐ€์— ํŒจ์Šค์›Œ๋“œ ๋Œ€์‹  JWT ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ - Bcrypt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ DB์— ์ €์žฅ - ์‚ฌ์šฉ์ž์˜ ๊ณ„์ • ์ •๋ณด๋ฅผ ๋”์šฑ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌ #### Follow / Following - ์‚ฌ์šฉ์ž ๊ฐ„ ํŒ”๋กœ์šฐ / ํŒ”๋กœ์ž‰ ์ง€์› ### ๐Ÿฆด Products #### Main page - ์˜ค๋Š˜์˜ ์ œํ’ˆ : ํŒ๋งค๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ์ƒ์œ„ 1๊ฐœ ์ œํ’ˆ๋งŒ DB์—์„œ ์ถ”์ถœ - ๋ชจ๋“  ์ œํ’ˆ : ๋ชจ๋“  ์ œํ’ˆ์„ ํŒ๋งค๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ DB์—์„œ ์ถ”์ถœ #### Detail page - ํŠน์ • ์ œํ’ˆ์˜ ์„ธ๋ถ€ ์ •๋ณด ์กฐํšŒ ### ๐Ÿ–ผ๏ธ Feed ๋ชจ๋“  API๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ JWT ๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์ธ๊ฐ€. #### Main Page - Request query ๋ฅผ ์ด์šฉํ•˜์—ฌ FE์—์„œ ์š”์ฒญํ•˜๋Š” ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์š”์ฒญ๋ฐ›์Œ - Pagination ์ง€์› - Request query๋ฅผ ์ด์šฉํ•˜์—ฌ FE์—์„œ ์š”์ฒญํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์š”์ฒญ๋ฐ›์Œ - FE ์˜ Pagination ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด DB์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ์‹œ Pagination ๋‹จ์œ„๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ FE์— ์ œ๊ณต - ํ•œ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๊ณผ๋ถ€ํ•˜ ๋ฐ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ํšจ๊ณผ๋„ ์žˆ์Œ. - ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํŒ”๋กœ์šฐํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€๋งŒ ์กฐํšŒ 1. ํŒ”๋กœ์šฐํ•˜๋Š” ์‚ฌ์šฉ์ž ID ๋ฅผ ์–ป์–ด์„œ 2. ํ•ด๋‹น ID๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์ตœ์‹  ์ˆœ์œผ๋กœ pagination ํฌ๊ธฐ๋งŒํผ ์ •๋ ฌ - Flag ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Feed Main ์— ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ฆฌํ„ด๋˜๋„๋ก ํ•˜์—ฌ ํšจ์œจ์„ฑ ์ฆ๋Œ€ - ์ข‹์•„์š” / ์Šคํฌ๋žฉ / ๋Œ“๊ธ€ ์กฐํšŒ ์ง€์› - ์ข‹์•„์š” ๋ฐ ์Šคํฌ๋žฉ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Toggle ํ˜•ํƒœ๋กœ FE ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ #### Detail Page - ์ข‹์•„์š” / ์Šคํฌ๋žฉ - ์ข‹์•„์š” ๋ฐ ์Šคํฌ๋žฉ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Toggle ํ˜•ํƒœ๋กœ FE ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ - ๋Œ“๊ธ€ ์กฐํšŒ / ๋“ฑ๋ก / ์‚ญ์ œ ์ง€์› - ๋Œ“๊ธ€ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ FE ์— ๋ฆฌํ„ดํ•˜์—ฌ ์ž‘์„ฑ์ž ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. #### Collection(Scraped posts) Page - ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋žฉํ•œ ๊ฒŒ์‹œ๊ธ€์„ ํ•œ ํŽ˜์ด์ง€์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ฆ๋Œ€ ### ๐Ÿ“ Feed (Special Options) #### ๊ธ€์“ฐ๊ธฐ - Bulk INSERT - Bulk Insert ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ INSERT ์ฟผ๋ฆฌ๋กœ DB์— ์ €์žฅ - ์ˆ˜ํ–‰์‹œ๊ฐ„ ์ตœ์†Œํ™”, ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํšจ์œจ์„ฑ ์ฆ๋Œ€ - Multer & AWS S3 - ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•ด Multer ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉ 1. FE๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ „๋‹ฌ๋ฐ›์•„ S3์— ์ €์žฅ 2. ์ด๋ฏธ์ง€ S3 url์„ DB ์— ์ €์žฅ #### ์ƒํ’ˆ ๊ฒ€์ƒ‰ - FE๋กœ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•  ํ‚ค์›Œ๋“œ๋ฅผ request ์ฟผ๋ฆฌ๋กœ ์ „๋‹ฌ๋ฐ›์•„ DB์—์„œ ๊ฒ€์ƒ‰ - ํ‚ค์›Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒํ’ˆ์ •๋ณด๋ฅผ ํŒ๋งค๋Ÿ‰ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ตœ๋Œ€ 10๊ฐœ ๋ฆฌํ„ด ### ๐Ÿž๏ธ Promenade ๋ชจ๋“  API๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ JWT ๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์ธ๊ฐ€. ์ง€๋„ API (์นด์นด์˜ค๋งต) ์„ ์ด์šฉํ•œ ์‚ฐ์ฑ…๋กœ ์œ„์น˜ ํ‘œ์‹œ #### Main Page - Request query ๋ฅผ ์ด์šฉํ•˜์—ฌ FE์—์„œ ์š”์ฒญํ•˜๋Š” ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์š”์ฒญ๋ฐ›์Œ - ์นดํ…Œ๊ณ ๋ฆฌ(์‹œ, ํ–‰์ •๊ตฌ) ๋ณ„ ์กฐํšŒ ์‹œ Query ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๋Œ€ - ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„(์‹œ, ํ–‰์ •๊ตฌ) ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ์‹œ ๋น„์Šทํ•œ SQL ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜๋ณตํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ์ค‘๋ณต๋˜๋Š” ์ฟผ๋ฆฌ๋Š” defaultQuery ๋ฌธ์ž์—ด๋กœ ํ•œ ๋ฒˆ๋งŒ ์„ ์–ธํ•œ ๋’ค ๊ฐ ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ถ™์—ฌ ์‚ฌ์šฉ - Pagination ์ง€์› - Request query๋ฅผ ์ด์šฉํ•˜์—ฌ FE์—์„œ ์š”์ฒญํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์š”์ฒญ๋ฐ›์Œ - FE ์˜ Pagination ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด DB์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ ์‹œ Pagination ๋‹จ์œ„๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ FE์— ์ œ๊ณต - ํ•œ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๊ณผ๋ถ€ํ•˜ ๋ฐ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ํšจ๊ณผ๋„ ์žˆ์Œ. - Flag ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฐ์ฑ…๋กœ Main ์— ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ฆฌํ„ด๋˜๋„๋ก ํ•˜์—ฌ ํšจ์œจ์„ฑ ์ฆ๋Œ€ - ์ข‹์•„์š” / ์Šคํฌ๋žฉ / ๋Œ“๊ธ€ ์กฐํšŒ ์ง€์› - ์ข‹์•„์š” ๋ฐ ์Šคํฌ๋žฉ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Toggle ํ˜•ํƒœ๋กœ FE ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ #### Detail Page - FE ์—์„œ ์นด์นด์˜ค๋งต API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์ €์žฅ (์žฅ์†Œ๋ช…, ์žฅ์†Œ ID, ์œ„๋„, ๊ฒฝ๋„ ์ €์žฅ) - ์ข‹์•„์š” / ์Šคํฌ๋žฉ - ์ข‹์•„์š” ๋ฐ ์Šคํฌ๋žฉ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Toggle ํ˜•ํƒœ๋กœ FE ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ - ๋Œ“๊ธ€ ์กฐํšŒ / ๋“ฑ๋ก / ์‚ญ์ œ ์ง€์› - ๋Œ“๊ธ€ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ FE ์— ๋ฆฌํ„ดํ•˜์—ฌ ์ž‘์„ฑ์ž ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. #### Collection(Scraped posts) Page - ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋žฉํ•œ ๊ฒŒ์‹œ๊ธ€์„ ํ•œ ํŽ˜์ด์ง€์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ฆ๋Œ€ - ์Šคํฌ๋žฉํ•œ ๊ฒŒ์‹œ๊ธ€์˜ ์ง€๋„ ์ •๋ณด(์žฅ์†Œ ์ขŒํ‘œ)๋ฅผ ๋ชจ๋‘ ๋ฆฌํ„ดํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ง€๋„ ์œ„์— ๋ชจ๋“  ์žฅ์†Œ ์ขŒํ‘œ๊ฐ€ ํ‘œ๊ธฐ๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›. ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ฆ๋Œ€. ### ๐Ÿ›’ Carts ๋ชจ๋“  API๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ JWT ๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์ธ๊ฐ€. #### ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€/์ˆ˜๋Ÿ‰ ๋ณ€๊ฒฝ - UPSERT ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ API ๋ฐ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ ๋‚ด์—์„œ INSERT์™€ UPDATE๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๋„๋ก ๊ตฌํ˜„ #### ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์กฐํšŒ / ์‚ญ์ œ - INNER JOIN ์ฟผ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ JWT ๋‹จ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‚ฌ์šฉ์ž ์žฅ๋ฐ”๊ตฌ๋‹ˆ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ (์ •๋ณด ๋…ธ์ถœ ์ตœ์†Œํ™” ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”) - Bulk Delete ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์‚ญ์ œ๋ฅผ ํ•˜๋‚˜์˜ Query ๋กœ ์ˆ˜ํ–‰


๐Ÿค” ์•„์‰ฌ์› ๋˜ ์  & ๊ฐœ์„ ๋ฐฉ๋ฒ•

๋”๋ณด๊ธฐ ### JWT ๋งŒ์œผ๋กœ๋Š” ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•˜๋‹ค - ๐Ÿ’ก ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•œ๋‹ค. - Kakao SDK for JavaScript ๋ฅผ ์ด์šฉํ•œ ์นด์นด์˜คํ†ก ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž…์„ ๋„์ž…ํ•˜์—ฌ ๋ณด์•ˆ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ๋ชจ๋‘ ํ–ฅ์ƒ ### ํŒ€ ๋ฉค๋ฒ„๋“ค์ด ์™„์ „ํžˆ ๋™์ผํ•œ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค - ๐Ÿ’ก AWS RDS ๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  ํŒ€์›์ด ํ•˜๋‚˜์˜ DB๋ฅผ ์‚ฌ์šฉ - ๐Ÿ’ก AWS S3 ๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ ํ•˜๋‚˜์˜ DB๋ฅผ ๊ณต์œ  ### ๋น„ํšจ์œจ์ ์ธ FE-BE ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ - ํ•œ ๋ฒˆ์— ์„œ๋ฒ„ 1๊ฐœ๋งŒ ์ผค ์ˆ˜ ์žˆ์—ˆ๋‹ค - ๐Ÿ’ก ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊ฟ”์„œ ์„œ๋ฒ„๋ฅผ ์ผ ๋‹ค. - ๊ด€๋ฆฌ์ž(๋ฉ˜ํ† ) ๊ฐ€ PR์— ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ  Main ๋ธŒ๋žœ์น˜์— merge ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ๋‹ค. - ๊ธฐ๋Šฅ์ด ๊ฐ ๋ธŒ๋žœ์น˜์— ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๊ณ„์† ์ „ํ™˜ํ•ด์•ผ ํ–ˆ๋‹ค. - ๐Ÿ’ก ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•œ ๊ฐœ ์ƒ์„ฑํ•˜์—ฌ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. - ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊ฟ”์„œ ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ๋””๋ฒ„๊ฑฐ ์‹คํ–‰ ์‹œ ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜ ํ”„๋กœ์„ธ์Šค์— ๋ถ™๋Š”๋‹ค. - ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜๋ฅผ ์ „ํ™˜ํ•˜๋Š” ์ž‘์—…์ด ๋ฒˆ๊ฑฐ๋กญ๊ณ , ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ์—๋„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“ ๋‹ค. - ๐Ÿ’ก AWS EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ git ์„ ์ด์šฉํ•ด GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์†Œ์Šค์ฝ”๋“œ๋ฅผ pull ๋ฐ›์•„์™€์„œ ํ…Œ์ŠคํŠธํ•œ๋‹ค. - FE ์™€ BE ๋ชจ๋‘ ์–ธ์ œ๋“ ์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ. ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜ ์‚ฌ์šฉ ์ด์Šˆ ํ•ด๊ฒฐ ### Dao Layer ์—์„œ ํŠธ๋žœ์žญ์…˜(Query Runner) ์ด ๊ฐ„ํ—์ ์œผ๋กœ ๋น„์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. - FE ์—ฐ๊ฒฐํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต ์‹œ ๊ฐ„ํ—์ ์œผ๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ - โ˜ ๏ธ ์›์ธ์„ ์•Œ ์ˆ˜ ์—†๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ. ์ถ”ํ›„ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ํ•„์š” ๐Ÿ˜‚ ### Multer ํ…Œ์ŠคํŠธ ์‹œ Postman ์—์„œ Malform Header ์ด์Šˆ ๋ฐœ์ƒ - ๐Ÿ’ก Postman ์ž์ฒด ๋ฒ„๊ทธ์ด๋ฏ€๋กœ Insomenia ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ ### AWS EC2 ์„œ๋ฒ„์— VScode SSH Remote ์‹œ๋„ํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„ ์‘๋‹ต์ด ํ˜„์ €ํžˆ ๋Š๋ ค์ง€๋Š” ์ด์Šˆ - โ˜ ๏ธ ์›์ธ์„ ์•Œ ์ˆ˜ ์—†์Œ. ์ถ”ํ›„ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ํ•„์š” ### API ๊ด€๋ฆฌ - ์ž‘์„ฑํ•œ API ๊ฐ€ 20๊ฐœ๊ฐ€ ๋„˜์œผ๋‹ˆ ๋‚˜๋„ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๊ฐœ๋ฐœํ–ˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค ๐Ÿ˜‚ - ๐Ÿ’ก ๋ฌธ์„œํ™” ํˆด์„ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค - Postman Team Workspace ๋ฅผ ์ƒ์„ฑ ํ›„ ๋ชจ๋“  ํŒ€์› ์ดˆ๋Œ€ - Postman ์—์„œ ๋ชจ๋“  API ์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ - ๐Ÿ’ก Postman ์ด์™ธ์— ๋‹ค๋ฅธ API Documentation ํˆด์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. - ex) Swagger ### ๊ฐœ๋ฐœ ์™„์„ฑ๋„ - ๊ฐœ๋ฐœ ํ›„ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ ๋ฒ„๊ทธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค ๐Ÿž - ๐Ÿ’ก ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ Jest ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค. - ๐Ÿ’ก FE ์—์„œ BE ์— ์ด์Šˆ ์ „๋‹ฌ ์‹œ Error status code ์™€ Error message ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ๋น ๋ฅธ ์ด์Šˆ ํŒŒ์•…์„ ๋•๋Š”๋‹ค.