Skip to content

YoungHwan90s/Project_Final_HomeParty

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

MOAVA-HOMEPARTY (๋ชจ์•„๋ฐ”)

๐Ÿ“ ๋ชฉ์ฐจ

โ… . ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ
โ…ก. ๊ฐœ๋ฐœํŒ€ ์†Œ๊ฐœ
โ…ข. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
โ…ฃ. ์•„ํ‚คํ…์ฒ˜
โ…ค. ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •
โ…ฅ. ์ฃผ์š” ๊ธฐ์ˆ  ๋ฐ ๊ธฐ๋Šฅ
โ…ฆ. ERD
โ…ง. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ
โ…จ. ํ™”๋ฉด ๊ตฌ์„ฑ
โ…ฉ. ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…


๐Ÿ“ข ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿ’ก ๋ชจ์•„๋ฐ”(MOAVA)- ํ™ˆํŒŒํ‹ฐ ์ฃผ์ตœ ๋ฐ ์ฐธ๊ฐ€

์ฆ๊ฐ€ํ•˜๋Š” 1์ธ ์„ธ๋Œ€! ํŒŒํ‹ฐ๋ฅผ ์—ด์–ด ์ƒˆ๋กœ์šด ์นœ๊ตฌ๋ฅผ ์‚ฌ๊ท€์„ธ์š”!
๋ชจ์•„๋ฐ”๋Š” ํŒŒํ‹ฐ๋ฅผ ์ฆ๊ธฐ๊ณ  ์‹ถ์ง€๋งŒ 1์ธ ๊ฐ€๊ตฌ์ด๊ฑฐ๋‚˜ ๋™๋„ค ์นœ๊ตฌ๊ฐ€ ์—†์–ด ์ฆ๊ธธ ์ˆ˜ ์—†์„ ๋•Œ,
๋‚ด๊ฐ€ ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๊ฒŒ์ŠคํŠธ๊ฐ€ ๋˜์–ด ์ทจํ–ฅ์— ๋งž๊ฒŒ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค!


Moava Logo


๐Ÿ›๏ธ Moava Wev Page v1.0

์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ๋ถ€ํŠธ์บ ํ”„ node.js 4๊ธฐ
๊ฐœ๋ฐœ๊ธฐ๊ฐ„: 2023.02.27 ~ 2023.04.02


๐Ÿก ๋ฐฐํฌ ์ฃผ์†Œ

http://moava-homeparty.site


๐Ÿงฉ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

๊ตฌ์กฐ ๋ณด๊ธฐ
Project_Final_HomeParty
โ”œโ”€ package-lock.json
โ”œโ”€ package.json
โ”œโ”€ src
โ”‚  โ”œโ”€ app.controller.ts
โ”‚  โ”œโ”€ app.module.ts
โ”‚  โ”œโ”€ app.service.ts
โ”‚  โ”œโ”€ chat.gateway.ts
โ”‚  โ”œโ”€ config
โ”‚  โ”‚  โ”œโ”€ config.jwt.ts
โ”‚  โ”‚  โ”œโ”€ config.nodemailer.ts
โ”‚  โ”‚  โ”œโ”€ config.redis.ts
โ”‚  โ”‚  โ”œโ”€ config.s3.ts
โ”‚  โ”‚  โ””โ”€ config.typeorm.ts
โ”‚  โ”œโ”€ main.ts
โ”‚  โ”œโ”€ modules
โ”‚  โ”‚  โ”œโ”€ admin
โ”‚  โ”‚  โ”‚  โ”œโ”€ admin.controller.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ admin.module.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ admin.service.ts
โ”‚  โ”‚  โ”œโ”€ auth
โ”‚  โ”‚  โ”‚  โ”œโ”€ auth.controller.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ auth.module.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ auth.service.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ dto
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ authenticate-code.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ authenticate-email.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ find-email.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ kakao-login.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ login.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ reset-password.dto.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ guards
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ auth.guard.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ jwt-auth.guard.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ kakao-auth.guard.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ strategies
โ”‚  โ”‚  โ”‚     โ”œโ”€ jwt.strategy.ts
โ”‚  โ”‚  โ”‚     โ”œโ”€ kakao.strategy.ts
โ”‚  โ”‚  โ”‚     โ””โ”€ local.strategy.ts
โ”‚  โ”‚  โ”œโ”€ party
โ”‚  โ”‚  โ”‚  โ”œโ”€ dto
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ create-party.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ create-thumbnail.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ update-party.dto.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ entity
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ party-member.entity.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ party.entity.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ tag.entity.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ thumbnail.entity.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ party.controller.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ party.module.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ party.service.ts
โ”‚  โ”‚  โ”œโ”€ review
โ”‚  โ”‚  โ”‚  โ”œโ”€ dto
โ”‚  โ”‚  โ”‚  โ”‚  โ”œโ”€ create-review.dto.ts
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ update-review.dto.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ entity
โ”‚  โ”‚  โ”‚  โ”‚  โ””โ”€ review.entity.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ review.controller.ts
โ”‚  โ”‚  โ”‚  โ”œโ”€ review.module.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ review.service.ts
โ”‚  โ”‚  โ””โ”€ user
โ”‚  โ”‚     โ”œโ”€ dto
โ”‚  โ”‚     โ”‚  โ”œโ”€ create-user-profile.dto.ts
โ”‚  โ”‚     โ”‚  โ”œโ”€ create-user.dto.ts
โ”‚  โ”‚     โ”‚  โ””โ”€ update-user.dto.ts
โ”‚  โ”‚     โ”œโ”€ entity
โ”‚  โ”‚     โ”‚  โ”œโ”€ kakao.entitiy.ts
โ”‚  โ”‚     โ”‚  โ”œโ”€ user.entity.ts
โ”‚  โ”‚     โ”‚  โ””โ”€ wish-list.entity.ts
โ”‚  โ”‚     โ”œโ”€ user.controller.ts
โ”‚  โ”‚     โ”œโ”€ user.module.ts
โ”‚  โ”‚     โ””โ”€ user.service.ts
โ”‚  โ”œโ”€ util
โ”‚  โ”‚  โ”œโ”€ cache
โ”‚  โ”‚  โ”‚  โ”œโ”€ cache.module.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ cache.service.ts
โ”‚  โ”‚  โ”œโ”€ joi
โ”‚  โ”‚  โ”‚  โ”œโ”€ joi-validation.pipe.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ joi-validation.ts
โ”‚  โ”‚  โ”œโ”€ node-mailer
โ”‚  โ”‚  โ”‚  โ”œโ”€ mail.service.ts
โ”‚  โ”‚  โ”‚  โ””โ”€ node-mailer.module.ts
โ”‚  โ”‚  โ””โ”€ s3
โ”‚  โ”‚     โ”œโ”€ image-upload.controller.ts
โ”‚  โ”‚     โ”œโ”€ image-upload.module.ts
โ”‚  โ”‚     โ””โ”€ image-upload.service.ts
โ”‚  โ””โ”€ views
โ”‚     โ”œโ”€ 404-page.ejs
โ”‚     โ”œโ”€ admin-page.ejs
โ”‚     โ”œโ”€ admin-party.ejs
โ”‚     โ”œโ”€ admin-review.ejs
โ”‚     โ”œโ”€ admin-tag.ejs
โ”‚     โ”œโ”€ admin-user.ejs
โ”‚     โ”œโ”€ alert-modal.ejs
โ”‚     โ”œโ”€ auth-authentication.ejs
โ”‚     โ”œโ”€ auth-find-email.ejs
โ”‚     โ”œโ”€ auth-find-password.ejs
โ”‚     โ”œโ”€ auth-login.ejs
โ”‚     โ”œโ”€ auth-profile-upload.ejs
โ”‚     โ”œโ”€ auth-reset-password.ejs
โ”‚     โ”œโ”€ auth-sign-up.ejs
โ”‚     โ”œโ”€ index.ejs
โ”‚     โ”œโ”€ main.ejs
โ”‚     โ”œโ”€ party-detail.ejs
โ”‚     โ”œโ”€ party-edit.ejs
โ”‚     โ”œโ”€ party-host-message.ejs
โ”‚     โ”œโ”€ party-new.ejs
โ”‚     โ”œโ”€ party-review.ejs
โ”‚     โ”œโ”€ party.ejs
โ”‚     โ”œโ”€ public
โ”‚     โ”‚  โ”œโ”€ css
โ”‚     โ”‚  โ”‚  โ”œโ”€ admin-page.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ common.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ login.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ main.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ modal.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ party-host-detail.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ party-new.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ partyGrid.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ partyPage.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ profile-upload.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ reset.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ signup.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ user-edit.css
โ”‚     โ”‚  โ”‚  โ”œโ”€ user-menu.css
โ”‚     โ”‚  โ”‚  โ””โ”€ user-mypage.css
โ”‚     โ”‚  โ”œโ”€ imgs
โ”‚     โ”‚  โ”‚  โ”œโ”€ calendar.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ error-404.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ house.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ inbox.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ jjim.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ kakao.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ kakaologo.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ logo.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ map.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ party.ico
โ”‚     โ”‚  โ”‚  โ”œโ”€ party.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ party.png
โ”‚     โ”‚  โ”‚  โ”œโ”€ partymain.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ phone.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ review.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ select.jpg
โ”‚     โ”‚  โ”‚  โ”œโ”€ temporary.png
โ”‚     โ”‚  โ”‚  โ””โ”€ welcome.jpg
โ”‚     โ”‚  โ”œโ”€ js
โ”‚     โ”‚  โ”‚  โ””โ”€ common.js
โ”‚     โ”‚  โ””โ”€ library
โ”‚     โ”‚     โ”œโ”€ carousel
โ”‚     โ”‚     โ”‚  โ””โ”€ carousel.js
โ”‚     โ”‚     โ””โ”€ datePicker
โ”‚     โ”‚        โ”œโ”€ base.css
โ”‚     โ”‚        โ”œโ”€ calendar.css
โ”‚     โ”‚        โ”œโ”€ calendar.js
โ”‚     โ”‚        โ”œโ”€ datePicker.css
โ”‚     โ”‚        โ””โ”€ datePicker.js
โ”‚     โ”œโ”€ user-check.ejs
โ”‚     โ”œโ”€ user-detail.ejs
โ”‚     โ”œโ”€ user-edit.ejs
โ”‚     โ”œโ”€ user-history.ejs
โ”‚     โ”œโ”€ user-host.ejs
โ”‚     โ”œโ”€ user-menu.ejs
โ”‚     โ”œโ”€ user-mypage.ejs
โ”‚     โ”œโ”€ user-party.ejs
โ”‚     โ””โ”€ user-wish-list.ejs
โ”œโ”€ tsconfig.build.json
โ””โ”€ tsconfig.json



๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ์›น ๊ฐœ๋ฐœํŒ€ ์†Œ๊ฐœ

ํŒ€ ๋…ธ์…˜ view
์˜ค์˜ํ™˜(ํŒ€์žฅ) ์ด์ •๊ธฐ(๋ถ€ํŒ€์žฅ) ์ด์„ค์ธ(ํŒ€์›) ์ด์ง€์˜(ํŒ€์›) ์œก์ค€ํ˜ธ(ํŒ€์›)

@Young-hwan @Jeong-gi @Seol-in @Ji-young @Jun-ho
์†Œ์…œ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์ธ ์ธ์ฆ์ „๋žต, ์บ์‹ฑ์ ์šฉ, S3 ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, Nodemailer,
EC2๋ฐฐํฌ ๋ฐ Github action ์ž๋™๋ฐฐํฌ
ํŒŒํ‹ฐ ์กฐํšŒ, ํŒŒํ‹ฐ ์ƒ์„ธ ์กฐํšŒ,
ํŒŒํ‹ฐ ์ƒ์„ฑ, ํŒŒํ‹ฐ ์Šน์ธ/๊ฑฐ์ ˆ
์ „๋ฐ˜์ ์ธ ๋””์ž์ธ, CSS, ๋ฐ˜์‘ํ˜• ์ ์šฉ ํšŒ์›์ •๋ณด ์กฐํšŒ, ์ˆ˜์ •, ํƒˆํ‡ด
ํŒŒํ‹ฐ ๋ชฉ๋ก ๊ฒ€์ƒ‰ ๋ฐ” ํ™œ์„ฑํ™” (3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„)
(๊ด€๋ฆฌ์ž) ํšŒ์›์ •๋ณด ์กฐํšŒ, ์‚ญ์ œ - API๋งŒ ๊ตฌํ˜„
์นด์นด์˜ค ๋งต, ๋ฆฌ๋ทฐCRUD,
๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋ฐ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ ๊ตฌํ˜„



๐Ÿ“š ๊ฐœ๋ฐœํ™˜๊ฒฝ

Envrionment

Config


Development

Front-end

Back-end

DevOps

Communication



๐Ÿš€ ์•„ํ‚คํ…์ฒ˜



๐Ÿ”ง ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •

์‚ฌ์šฉ ๊ธฐ์ˆ  ๊ธฐ์ˆ  ์„ค๋ช…
Nest.js Javascript๋ณด๋‹ค ์—„๊ฒฉํ•œ ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ•˜๋Š” typescript ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ ์—ฌ๋Ÿฌ ์˜ˆ์™ธ ์ƒํ™ฉ(์—๋Ÿฌ ๋“ฑ)์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ธฐ ์šฉ์ดํ•จ
jQuery HTML DOM์„ ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•ด ์†์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , Ajax๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ
MySQL ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ, ๋ณธ ํ”„๋กœ์ ํŠธ ์„œ๋น„์Šค์˜ ๋ณต์žกํ•œ ๊ด€๊ณ„ ์„ค์ •์„ ์›ํ• ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด TypeORM๊ณผ MySQL์„ ์‚ฌ์šฉ
JWT ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์ด ํ™•์ธ๋˜์—ˆ์„ ๊ฒฝ์šฐ์— Access-token ๊ณผ Refresh-token์„ ๋ฐœ๊ธ‰ํ•˜์—ฌ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•  ๋•Œ ํ•„์š”ํ•œ ํ† ํฐ์„ ๋งŒ๋“œ๋Š” ๋„๊ตฌ๋กœ ์‚ฌ์šฉ
Redis Cloud ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ. ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™” ๋˜์–ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ๋กœ ๋นˆ๋ฒˆํžˆ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ ์ฒ˜๋ฆฌํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
Nodemailer ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ ๊ธฐ๋Šฅ - ๋ณธ์ธ์ด ํšŒ์›๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€ ์ž„์˜์˜ ์ˆซ์ž์™€ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์ž…๋ ฅํ•œ ์ˆซ์ž๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •
RDS ํด๋ผ์šฐ๋“œ์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐฐํฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ
S3 ํ”„๋กœํ•„ ๋ฐ ํŒŒํ‹ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Amazons์˜ S3 Object Storage๋ฅผ ์ด์šฉ
Github actions ํšจ์œจ์ ์ธ ๋ฐฐํฌ - workflow script๋ฅผ ์ •์˜ํ•˜๊ณ  main branch๊ฐ€ merged & closed๋˜์—ˆ์„ ๋•Œ ssh action์ด ์‹คํ–‰๋˜์–ด ์ž๋™ ๋ฐฐํฌ ๋  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ • ๋ฐ ์‚ฌ์šฉ



๐Ÿ€ย ์ฃผ์š” ๊ธฐ์ˆ  ๋ฐ ๊ธฐ๋Šฅ

๐Ÿƒย PassportStrategy

  • ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•œ Jwt tokend ์ธ์ฆ ์ „๋žต ๊ตฌํ˜„
  • ์‚ฌ์šฉ์ž๊ฐ€ header์— ์ธ์ฆ ์ •๋ณด(ํ† ํฐ)์™€ ํ•จ๊ป˜ ์š”์ฒญํ•˜๋ฉด, ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  payload๋ฅผ ๋ฐ˜ํ™˜
  • ์‚ฌ์ „์— ์ •์˜ํ•ด๋†“์€ payload์˜ ๊ฐ’์— ์ผ์น˜ํ•˜๋Š” ์œ ์ €๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์œ ์ € ์ •๋ณด ๋ฐ˜ํ™˜

๐Ÿƒย Nodemailer

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ API์— ์ ์šฉ
  • ๋ณธ์ธ์ด ํšŒ์›๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜์—ฌ, ์ผ์น˜ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๋‹จ๊ณ„์— ์‚ฌ์šฉ

๐Ÿƒย ์บ์‹ฑ ์ฒ˜๋ฆฌ

  • ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐ ์†๋„ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • Redis Cloud(30MB ๋ฌด๋ฃŒ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ๋ฒˆํžˆ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ ์ฒ˜๋ฆฌ
  • ์ธ์ฆ ์ „๋žต์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ์ € ๊ฐ’, Refresh Token, ๋ฉ”์ธ ํ™”๋ฉด์— ์ ‘์†ํ–ˆ์„ ๋•Œ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ ์บ์‹ฑ ์ ์šฉ

๐Ÿƒย Task Scheduling

  • Schedule Module์„ import ๋ฐ @Cron ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ฃผ์ž…
  • Party.service์— ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธ ๋ฐ ํ•ด๋‹น ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ, ์‹œ์ž‘ ๋‚ ์งœ๊ฐ€ ์ง€๋‚œ ํŒŒํ‹ฐ๋Š” ์ž์ •์— ๋งž์ถฐ โ€˜๋งˆ๊ฐโ€™ ์ฒ˜๋ฆฌ

๐Ÿƒย ์†Œ์…œ ๋กœ๊ทธ์ธ

  • ์นด์นด์˜คํ†ก ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ
  • ์นด์นด์˜คํ†ก ์ •๋ณด๋“ค๋„ ํšŒ์› ์ •๋ณด์— ํ‘œ์‹œ

๐Ÿƒย ์นด์นด์˜ค ๋งต

  • ์นด์นด์˜ค๋งต API๋ฅผ ์‚ฌ์šฉํ•ด ์œ„์น˜ ํ‘œ์ถœ
  • ํŒŒํ‹ฐ ์ƒ์„ธ๋ณด๊ธฐ - ํŒŒํ‹ฐ ์ฃผ์†Œ ๋งˆ์ปค ํ‘œ์‹œ
  • ์ฐœํ•œ ๋ชฉ๋ก๋“ค์˜ ํŒŒํ‹ฐ ์ฃผ์†Œ๋ฅผ ํ•œ ๋งต์— ๋งˆ์ปค ํ‘œ์‹œ



ERD



๐Ÿ“บ ํ™”๋ฉด ๊ตฌ์„ฑ

๋ฉ”์ธ ํŽ˜์ด์ง€ ์œ„์‹œ๋ฆฌ์ŠคํŠธ

ํŒŒํ‹ฐ ํƒ์ƒ‰ ํŽ˜์ด์ง€ ํŒŒํ‹ฐ ๊ฐœ์ตœ ํŽ˜์ด์ง€



ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

โ—๏ธย ๊ด€๊ณ„ ํ…Œ์ด๋ธ” ์ €์žฅ / ์—…๋ฐ์ดํŠธ ์ด์Šˆ

๐Ÿ–Š๏ธย ์‚ฌ์‹ค ์ˆ˜์ง‘

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๊ด€๊ณ„ ํ…Œ์ด๋ธ”์ด ์กฐํšŒ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ
  • ์ผ๋ถ€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด์— update ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์„ ๋•Œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜๋Š” ๋ฌธ์ œ

๐Ÿค”ย ์›์ธ ์ถ”๋ก 

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ด€๊ณ„ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ
  • ์ฆ‰, ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์— ๊ด€๊ณ„ํ…Œ์ด๋ธ” ์ •๋ณด๋ฅผ ๋งตํ•‘ํ•ด์ฃผ์ง€ ์•Š์•„ ์กฐํšŒ ์‹œ ๋ฌธ์ œ ๋ฐœ์ƒ
  • ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งตํ•‘ํ•ด์ฃผ์ง€ ์•Š์•„์„œ update ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์‚ญ์ œ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

๐Ÿ’ฌย ์กฐ์น˜ ๋ฐ ๊ฒฐ๊ณผ

  • ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค์—์„œ ํŒŒํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์— ๊ด€๊ณ„๋˜์–ด ์žˆ๋Š” ์ธ๋„ค์ผ, ํŒŒํ‹ฐ ๋ฉค๋ฒ„, ํƒœ๊ทธ, ์œ ์ € ํ…Œ์ด๋ธ”์˜ ์ •๋ณด ๊ด€๊ณ„๋ฅผ ๋งตํ•‘ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๋ฐฐ์—ด ์•ˆ์—(OneToMany) ๊ธฐ์กด ์ •๋ณด๋ฅผ ๋ณต์‚ฌ(โ€ฆ)ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ •๋ณด์™€ ํ•จ๊ป˜ ๊ด€๊ณ„ ํ…Œ์ด๋ธ”์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งตํ•‘
  • TypeORM์˜ relations๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ๊ด€๊ณ„ ํ…Œ์ด๋ธ”๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์ด ์ถœ๋ ฅ๋˜์–ด ํ•ด๊ฒฐ

โ—๏ธ ์‚ฌ์šฉ์ž ๊ฒ€์ฆ ๋กœ์ง์˜ DB ์ ‘๊ทผ ํšŸ์ˆ˜ ์ด์Šˆ

๐Ÿ–Š๏ธย ์‚ฌ์‹ค ์ˆ˜์ง‘

  • @UseGuards(JWTAuthGuard)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๊ถŒํ•œ์ด ํ•„์š”ํ•œ API์— ํ•ด๋‹น ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ
  • ๋ฐœ๊ธ‰ํ•œ ํ† ํฐ์ด ์œ ํšจํ•˜๋‹ค๋ฉด ๋กœ๊ทธ์ธ ํ•œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ DB์—์„œ ํ•ด๋‹น๋œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ฐพ๊ณ  ๋ฐ˜ํ™˜

๐Ÿค”ย ๋ฌธ์ œ ์ถ”๋ก 

  • ๋งค๋ฒˆ DB์—์„œ ์œ ์ € ์ •๋ณด๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋น„ํšจ์œจ์ ์ž„

๐Ÿ’ฌย ์กฐ์น˜ ๋ฐ ๊ฒฐ๊ณผ

  • @UseGuards(LocalAuthGuard)๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜๋˜๋Š” ์œ ์ € ์ •๋ณด์˜ id(PK)์™€ ์ด๋ฉ”์ผ์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ RefreshToken๊ณผ ์œ ์ € ์ •๋ณด๋ฅผ redis-cloud์— ์บ์‹ฑ์ฒ˜๋ฆฌ
  • Jwt ์ „๋žต์˜ fromAuthHeaderAsBearerToken ์—์„œ ๋ฐ˜ํ™˜ํ•œ payload์˜ email์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ€ ์žˆ๋Š”์ง€ redis์— ๋จผ์ € ํ™•์ธํ•˜๊ณ  ์œ ์ €๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ „ํ™˜
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ ‘๊ทผ ํšŸ์ˆ˜๊ฐ€ ํ˜„์ €ํžˆ ๊ฐ์†Œํ•˜๊ฒŒ ๋˜์–ด ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐฉ์ง€ ๋ฐ ์†๋„ ๊ฐœ์„ 

โ—๏ธ Github actions ์ž๋™๋ฐฐํฌ Pull request permission denied ์ด์Šˆ

๐Ÿ–Š๏ธย ์‚ฌ์‹ค ์ˆ˜์ง‘

  • main branch์— PR merged & closed ๋˜์—ˆ์„ ๋•Œ workflow์— ์„ค์ •ํ•œ ssh action์ด ์‹คํ–‰๋˜๋„๋ก ์„ค์ •
  • ์•ก์…˜์ด ์‹คํ–‰๋˜๊ณ , ์—…๋ฐ์ดํŠธ ๋œ main branch๋ฅผ ์ƒˆ๋กœ pull ํ• ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ถŒํ•œ ๋ฌธ์ œ(git pull origin main)

๐Ÿค”ย ๋ฌธ์ œ ์ถ”๋ก 

  • ๊ธฐ์กด์— sudo -s๋กœ ์ ‘์†ํ•˜์—ฌ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰
  • ํ„ฐ๋ฏธ๋„์—์„œ ubuntu์— ์ ‘์†ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋‹น์‹œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋‚˜, workflow์˜ script์—์„œ ์‹คํ–‰ํ•˜๋Š” sudo์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
  • ํ”„๋กœ์ ํŠธ ๊นƒํ—™ ์„ค์ •์— ์™ธ๋ถ€ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ’ฌย ์กฐ์น˜ ๋ฐ ๊ฒฐ๊ณผ

  • ์›๊ฒฉ์— ์žˆ๋Š” git pull ๋ฐ pm2๋ฅผ kill ๋ฐ restart ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” root ๊ถŒํ•œ์ด ํ•„์š”
  • git pull์„ ์œ„ํ•ด chmod ํผ๋ฏธ์…˜์„ 644๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ชจ๋‘ sudo๋กœ ์‹คํ–‰

About

Sparta_Project_Final_HomeParty

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published