โ . ํ๋ก์ ํธ ์๊ฐ
โ ก. ๊ฐ๋ฐํ ์๊ฐ
โ ข. ๊ฐ๋ฐ ํ๊ฒฝ
โ ฃ. ์ํคํ ์ฒ
โ ค. ๊ธฐ์ ์ ์์ฌ๊ฒฐ์
โ ฅ. ์ฃผ์ ๊ธฐ์ ๋ฐ ๊ธฐ๋ฅ
โ ฆ. ERD
โ ง. ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
โ จ. ํ๋ฉด ๊ตฌ์ฑ
โ ฉ. ํธ๋ฌ๋ธ ์ํ
๐ก ๋ชจ์๋ฐ(MOAVA)- ํํํฐ ์ฃผ์ต ๋ฐ ์ฐธ๊ฐ
์ฆ๊ฐํ๋ 1์ธ ์ธ๋! ํํฐ๋ฅผ ์ด์ด ์๋ก์ด ์น๊ตฌ๋ฅผ ์ฌ๊ท์ธ์!
๋ชจ์๋ฐ๋ ํํฐ๋ฅผ ์ฆ๊ธฐ๊ณ ์ถ์ง๋ง 1์ธ ๊ฐ๊ตฌ์ด๊ฑฐ๋ ๋๋ค ์น๊ตฌ๊ฐ ์์ด ์ฆ๊ธธ ์ ์์ ๋,
๋ด๊ฐ ํธ์คํธ ๋๋ ๊ฒ์คํธ๊ฐ ๋์ด ์ทจํฅ์ ๋ง๊ฒ ์ฐธ์ฌํ ์ ์๋ ์์ ๋คํธ์ํฌ ์๋น์ค์ ๋๋ค!
์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ถํธ์บ ํ node.js 4๊ธฐ
๊ฐ๋ฐ๊ธฐ๊ฐ: 2023.02.27 ~ 2023.04.02
๊ตฌ์กฐ ๋ณด๊ธฐ
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, ๊ด๋ฆฌ์ ํ์ด์ง ๋ฐ ๊ฒ์๊ธฐ๋ฅ ๊ตฌํ |
์ฌ์ฉ ๊ธฐ์ | ๊ธฐ์ ์ค๋ช |
---|---|
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์ด ์คํ๋์ด ์๋ ๋ฐฐํฌ ๋ ์ ์๊ฒ ์ค์ ๋ฐ ์ฌ์ฉ |
- ์ฌ์ฉ์ ์ธ์ฆ์ ์ํ Jwt tokend ์ธ์ฆ ์ ๋ต ๊ตฌํ
- ์ฌ์ฉ์๊ฐ header์ ์ธ์ฆ ์ ๋ณด(ํ ํฐ)์ ํจ๊ป ์์ฒญํ๋ฉด, ํ ํฐ์ ๊ฒ์ฆํ๊ณ payload๋ฅผ ๋ฐํ
- ์ฌ์ ์ ์ ์ํด๋์ payload์ ๊ฐ์ ์ผ์นํ๋ ์ ์ ๊ฐ ์๋์ง ํ์ธ ํ ์ ์ ์ ๋ณด ๋ฐํ
- ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ API์ ์ ์ฉ
- ๋ณธ์ธ์ด ํ์๊ฐ์ ํ ์ด๋ฉ์ผ๋ก ์ธ์ฆ๋ฒํธ๋ฅผ ์ ์กํ์ฌ, ์ผ์น ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํ๋ ๋จ๊ณ์ ์ฌ์ฉ
- ์๋ฒ ๋ถํ ๋ฐ ์๋ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ
- Redis Cloud(30MB ๋ฌด๋ฃ)๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฒํ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ ์ฒ๋ฆฌ
- ์ธ์ฆ ์ ๋ต์์ ๋ฐํํ๋ ์ ์ ๊ฐ, Refresh Token, ๋ฉ์ธ ํ๋ฉด์ ์ ์ํ์ ๋ ์์ฒญ๋๋ ๋ฐ์ดํฐ ์บ์ฑ ์ ์ฉ
- Schedule Module์ import ๋ฐ @Cron ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฃผ์
- Party.service์ ๋ฉ์๋๋ฅผ ์ ์ธ ๋ฐ ํด๋น ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ฃ์ด์, ์์ ๋ ์ง๊ฐ ์ง๋ ํํฐ๋ ์์ ์ ๋ง์ถฐ โ๋ง๊ฐโ ์ฒ๋ฆฌ
- ์นด์นด์คํก ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ฐ๋ฅ
- ์นด์นด์คํก ์ ๋ณด๋ค๋ ํ์ ์ ๋ณด์ ํ์
- ์นด์นด์ค๋งต API๋ฅผ ์ฌ์ฉํด ์์น ํ์ถ
- ํํฐ ์์ธ๋ณด๊ธฐ - ํํฐ ์ฃผ์ ๋ง์ปค ํ์
- ์ฐํ ๋ชฉ๋ก๋ค์ ํํฐ ์ฃผ์๋ฅผ ํ ๋งต์ ๋ง์ปค ํ์
๋ฉ์ธ ํ์ด์ง | ์์๋ฆฌ์คํธ |
ํํฐ ํ์ ํ์ด์ง | ํํฐ ๊ฐ์ต ํ์ด์ง |
- ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๊ด๊ณ ํ ์ด๋ธ์ด ์กฐํ๋์ง ์๋ ๋ฌธ์
- ์ผ๋ถ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์์ฑ๋์ด ์๋ ๊ฐ์ฒด์ update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์์ ๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ญ์ ๋๋ ๋ฌธ์
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ํด๋น ์ํฐํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ด๊ณ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ง ์์์ ๊ฐ๋ฅ์ฑ
- ์ฆ, ์์ฑํ๋ ๊ฐ์ฒด์ ๊ด๊ณํ ์ด๋ธ ์ ๋ณด๋ฅผ ๋งตํํด์ฃผ์ง ์์ ์กฐํ ์ ๋ฌธ์ ๋ฐ์
- ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ๋งตํํด์ฃผ์ง ์์์ update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋ ์ญ์ ๋๋ ๋ฌธ์ ๋ฐ์
- ํ๋ก์ ํธ์ ์๋น์ค์์ ํํฐ๋ฅผ ์์ฑํ ๋ ์๋ก ์์ฑํ๋ ๊ฐ์ฒด์ ๊ด๊ณ๋์ด ์๋ ์ธ๋ค์ผ, ํํฐ ๋ฉค๋ฒ, ํ๊ทธ, ์ ์ ํ ์ด๋ธ์ ์ ๋ณด ๊ด๊ณ๋ฅผ ๋งตํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๋ฐฐ์ด ์์(OneToMany) ๊ธฐ์กด ์ ๋ณด๋ฅผ ๋ณต์ฌ(โฆ)ํ๊ณ , ์๋ก์ด ์ ๋ณด์ ํจ๊ป ๊ด๊ณ ํ ์ด๋ธ์ ์ธ์คํด์ค๋ฅผ ์๋กญ๊ฒ ๋งตํ
- TypeORM์ relations๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์กฐํ ์ ๊ด๊ณ ํ ์ด๋ธ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ด ์ถ๋ ฅ๋์ด ํด๊ฒฐ
- @UseGuards(JWTAuthGuard)๋ฅผ ์ฌ์ฉํ์ฌ, ๊ถํ์ด ํ์ํ API์ ํด๋น ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉ
- ๋ฐ๊ธํ ํ ํฐ์ด ์ ํจํ๋ค๋ฉด ๋ก๊ทธ์ธ ํ ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฐํํ๊ธฐ ์ํด ๋งค๋ฒ DB์์ ํด๋น๋ ์ ์ ์ ์ ๋ณด๋ฅผ ์ฐพ๊ณ ๋ฐํ
- ๋งค๋ฒ DB์์ ์ ์ ์ ๋ณด๋ฅผ ์ฐพ์ ๋ฐํํ๋ ๊ฒ์ ์๋ฒ์ ๋ถํ๋ฅผ ์ค ์ ์์ผ๋ฉฐ ๋นํจ์จ์ ์
- @UseGuards(LocalAuthGuard)๋ฅผ ํตํด ๋ฐํ๋๋ ์ ์ ์ ๋ณด์ id(PK)์ ์ด๋ฉ์ผ์ ํค ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ RefreshToken๊ณผ ์ ์ ์ ๋ณด๋ฅผ redis-cloud์ ์บ์ฑ์ฒ๋ฆฌ
- Jwt ์ ๋ต์
fromAuthHeaderAsBearerToken
์์ ๋ฐํํ payload์ email์ ํด๋นํ๋ value๊ฐ ์๋์ง redis์ ๋จผ์ ํ์ธํ๊ณ ์ ์ ๋ฅผ ๋ฐํํ๋๋ก ์ ํ - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ ํ์๊ฐ ํ์ ํ ๊ฐ์ํ๊ฒ ๋์ด ์๋ฒ ๋ถํ ๋ฐฉ์ง ๋ฐ ์๋ ๊ฐ์
- 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๋ก ์คํ