Skip to content

E-GaeMuYac/socket_BE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

๐ŸฅœPILLNUTS - Backend๐Ÿฅœ




๐Ÿ—‚๏ธ ๋ชฉ์ฐจ



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

์ด ์•ฝ๐Ÿ’Š์ด๋ž‘ ์ € ์•ฝ๐Ÿ’‰์ด๋ž‘ ๋งค์ผ ๋˜‘๊ฐ™๋‹ค๊ณ  ์ฃผ๋Š”๋ฐ ๋ญ๊ฐ€ ๋˜‘๊ฐ™๊ณ  ์–ด๋–ค๊ฒŒ ๋‹ค๋ฅธ ๊ฑด์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด!

  • ๐Ÿ“Œ Pillnuts๋Š” ์•Œ์•ฝ(pill)๊ณผ ๋•…์ฝฉ(peanuts)์˜ ํ•ฉ์„ฑ์–ด๋กœ, ๋•…์ฝฉ์˜ ๊ป์งˆ์„ ๊นŒ์„œ ๋จน๋Š” ๊ฒƒ์„ ๋ชจํ‹ฐ๋ธŒ๋กœ ํ•˜์—ฌ โ€˜์•ฝ์˜ ์†(์„ฑ๋ถ„)์„ ํŒŒํ—ค์ณ๋ณด์žโ€™ ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

๐Ÿ—“ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

  • 2022๋…„ 12์›” 30์ผ ~ 2023๋…„ 2์›” 10์ผ

๐Ÿง‘โ€๐Ÿ’ป ํŒ€ ๊ตฌ์„ฑ

Backend
๊น€์˜์žฌ(ํŒ€์žฅ)
Github

๋…ธ์—ฐ์ˆ˜
Github

๊น€ํ˜œ๋ž€
Github


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

๊ธฐ์ˆ ์Šคํƒ ์„ค๋ช…
Node.js ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„
Express ์›น ํ”„๋ ˆ์ž„์›Œํฌ
MySQL MySQL
MongoDB NoSQL
Docker ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ
Grafana ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ
Github actions WebServer CI/CD
Code pipeline ChatServer CI/CD
swagger API ๋ฌธ์„œํ™”

๐Ÿ“– ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ’ป ์›น์„œ๋ฒ„

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค๋ช…
axios HTTP ๋น„๋™๊ธฐ ํ†ต์‹ 
bcrypt ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”
cors ๊ต์ฐจ ๋ฆฌ์†Œ์Šค ๊ณต์œ 
dotenv ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ
express ์„œ๋ฒ„
express-rate-limit ์š”์ฒญ ํšŸ์ˆ˜ ์ œํ•œ
joi ์ž…๋ ฅ๋ฐ์ดํ„ฐ ๊ฒ€์ถœ
jsonwebtoken ์„œ๋ช… ์•”ํ˜ธํ™”
mysql MySQL
node-cron ์Šค์ผ€์ฅด ์—…๋ฌด ์ž๋™ํ™”
passport User Authenticate
sequelize MySQL ORM
sequelize-cli MySQL ORM Console

๐Ÿ’ฌ ์ฑ„ํŒ…์„œ๋ฒ„

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค๋ช…
socket.io/admin-ui ์†Œ์ผ“ ๊ด€๋ฆฌ UI
cors ๊ต์ฐจ ๋ฆฌ์†Œ์Šค ๊ณต์œ 
dayjs ๋‚ ์งœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
dotenv ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ
express ์„œ๋ฒ„
mongoose ODM
socket.io ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
winston Log ํŒŒ์ผ ์ƒ์„ฑ
winston-daily-rotate-file Log ํŒŒ์ผ ๊ด€๋ฆฌ

๐Ÿ•น๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž…

  • ์˜๋ฌธ ์†Œ๋ฌธ์ž, ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€, ์นด์นด์˜ค๋ฅผ ํ†ตํ•ด ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ž๋กœ ๋ณธ์ธ์ธ์ฆ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒ€์ƒ‰

  • ์•ฝ์˜ ์ œํ’ˆ๋ช…๊ณผ ํƒ€์ž… (์ง„ํ†ต, ์†Œ์—ผ ๋“ฑ)์˜ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ์œ ์ €๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ค€๋‹ค.
  • ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ํ†ตํ•ด ํ•œ ํŽ˜์ด์ง€์— ์ œ๊ณต๋˜๋Š” ์ •๋ณด์˜ ์ˆ˜๋ฅผ ์ œํ•œ ํ•˜์˜€๋‹ค.
  • ์•ฝ์„ ์ฐœํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•ฝ๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๊ด€ํ•จ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ธํŽ˜์ด์ง€

  • ์„ฑ๋ถ„์„ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.
  • ์„ฑ๋ถ„์˜ ์ƒ์„ธ ๋‚ด์šฉ์„ ๊ฐ™์ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•ฝ์„ ์ฐœํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•ฝ๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๊ด€ํ•จ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํšจ๋Šฅํšจ๊ณผ, ์ฃผ์˜์‚ฌํ•ญ๋“ฑ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹์•ฝ์ฒ˜ api๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋น„๊ตํŽ˜์ด์ง€

  • ๋‘๊ฐ€์ง€ ์•ฝ์„ ๊ฐ™์€ ํฌ๋งท์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ฑ๋ถ„์˜ ์ƒ์„ธ ๋‚ด์šฉ์„ ๊ฐ™์ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํšจ๋Šฅํšจ๊ณผ, ์ฃผ์˜์‚ฌํ•ญ๋“ฑ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•ฝ์„ ์ฐœํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•ฝ๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๊ด€ํ•จ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์‹์•ฝ์ฒ˜ api๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋งˆ์ดํŽ˜์ด์ง€

  • ๋‹‰๋„ค์ž„, ํ”„๋กœํ•„์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์œ ์ €์—๊ฒŒ ์†Œ๊ฐœํ•œ๋‹ค.
  • ๊ฑด๊ฐ•์— ๋Œ€ํ•œ ํ•œ์ค„ ๊ธ€๊ท€๋ฅผ ๋žœ๋ค์œผ๋กœ ์œ ์ €์—๊ฒŒ ์†Œ๊ฐœ์‹œ์ผœ์ค€๋‹ค.
  • ์œ ์ €๊ฐ€ ์ฐœํ•œ ์˜์•ฝํ’ˆ์„ ๋ชจ์•„์„œ ๋ณด์—ฌ์ค€๋‹ค.
  • ํšŒ์›ํƒˆํ‡ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•Œ๋ ˆ๋ฅด๊ธฐ ๋“ฑ๋ก

  • ์œ ์ €๊ฐ€ ๊ฐ€์ง„ ์•Œ๋ ˆ๋ฅด๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํ•ด๋‹น ์•Œ๋ ˆ๋ฅด๊ธฐ ์„ฑ๋ถ„์ด ๋“  ์•ฝํ’ˆ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•Œ๋ ˆ๋ฅด๊ธฐ ๊ฒ€์ƒ‰ ์‹œ ์ž๋™์™„์„ฑ๊ธฐ๋Šฅ์ด ์ ์šฉ๋˜์–ด์žˆ๋‹ค.
  • ์•Œ๋ ˆ๋ฅด๊ธฐ ๋“ฑ๋ก ์‹œ ํ•ด๋‹น ์„ฑ๋ถ„์ด ํฌํ•จ๋œ ์•ฝํ’ˆ์„ ์กฐํšŒํ•  ๋•Œ ์œ„ํ—˜ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.

์ฑ—๋ด‡

  • ์œ ์ €์— ๋”ฐ๋ผ ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋กœ๊ทธ์ธ์„ ํ•˜์ง€์•Š์•„๋„ ์ฑ„ํŒ…์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ „์— ํ–ˆ๋˜ ์ฑ„ํŒ…์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅ ์‹œ ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด๋ฅผ ๋‹ต๋ณ€์œผ๋กœ ์ค€๋‹ค.
  • โ€œ์ฑ„ํŒ…โ€์„ ์ž…๋ ฅ ํ›„ ์ƒ๋‹ด ์—ฐ๊ฒฐํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ด€๋ฆฌ์ž์™€ ์‹ค์‹œ๊ฐ„ ์ƒ๋‹ด์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ์ƒ๋‹ด ์š”์ฒญ์ด ์žˆ์„ ์‹œ ์Šฌ๋ž™์œผ๋กœ ์•Œ๋ฆผ์ด ๊ฐ„๋‹ค.


๐Ÿงฑ ๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 3 43 50

์ธํ”„๋ผ ์•„ํ‚คํ…์ณ

์ตœ์ข…๋ณธ


๐Ÿ—„๏ธ DB ERD

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-05 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 3 00 18

๐ŸŽฌ ๋ชจ๋‹ˆํ„ฐ๋ง

ELB Metrics

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-08 แ„‹แ…ฉแ„’แ…ฎ 3 46 47

ECS

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-08 แ„‹แ…ฉแ„’แ…ฎ 2 34 15

๐ŸŽฌ ์ตœ์ข… ์„ฑ๊ณผ

์ถ”ํ›„์— ์ถ”๊ฐ€

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

1. CI/CD

๋™์ ํฌํŠธ๋งคํ•‘

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    CI/CD ๊ตฌ์ถ• ํ›„ ํ…Œ์ŠคํŠธ ์ค‘ ECS ์„œ๋น„์Šค ์ด๋ฒคํŠธ ์ฐฝ์—์„œ ํ˜ธ์ŠคํŠธํฌํŠธ๊ฐ€ ์ค‘๋ณต๋˜์—ˆ๋‹ค๋Š” ์ด์Šˆ ๋ฐœ์ƒ

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    ๋ฌด์ค‘๋‹จ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ์— ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊บผ์ง€๊ณ  ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผœ์ง€๋Š”๊ฒŒ ์•„๋‹Œ ๋™์‹œ์— ์ผœ์ ธ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒจ ํ˜ธ์ŠคํŠธ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•ด์ค„์‹œ์— ๊ฒน์น  ์ˆ˜ ๋ฐ–์— ์—†์Œ

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    ๋™์ ํฌํŠธ๋งคํ•‘์„ ์ด์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ๋ฒˆํ˜ธ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ํœ˜๋ฐœ์„ฑํฌํŠธ๋ฒˆํ˜ธ(49153~65535)์—์„œ ๋žœ๋คํ•˜๊ฒŒ ๋งคํ•‘ํ•ด์ฃผ๊ณ  ์„œ๋น„์Šค์—์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์„ค์ •์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํƒ€์ผ“๊ทธ๋ฃน์œผ๋กœ ๋ฐ”๋กœ ์žก์•„ ๋„๋งค์ธ ์ฃผ์†Œ๋กœ ๋ฌธ์ œ์—†์ด ์ ‘์†์ด ๊ฐ€๋Šฅ

์˜คํ† ์Šค์ผ€์ผ๋ง

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

CI/CD ๊ตฌ์ถ• ํ›„ ํ…Œ์ŠคํŠธ ์ค‘ ECS ์„œ๋น„์Šค ์ด๋ฒคํŠธ ์ฐฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ CPU, Memory๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ด์Šˆ ๋ฐœ์ƒ

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    1. ๋ฌด์ค‘๋‹จ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ์— ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊บผ์ง€๊ณ  ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผœ์ง€๋Š”๊ฒŒ ์•„๋‹Œ ๋™์‹œ์— ์ผœ์ ธ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒจ ์ž‘์—…์ •์˜์—์„œ ์„ค์ •ํ•œ CPU, Memory * ๋Œ์•„๊ฐ€๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜๊ฐ€ EC2์˜ Instance์˜ CPU, Memory๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด์„œ ์ƒ๊ธฐ๋Š” ์ด์Šˆ

    2. ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ CPU, Memory๋ฅผ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์žก์œผ๋ฉด EC2์˜ ์‚ฌ์–‘์„ ์ œ๋Œ€๋กœ ๋‹ค ์‚ฌ์šฉํ•˜์ง€ ๋ชป ํ•˜๋Š” ์ƒํ™ฉ

    3. SeverLess์ธ ECS Fargate๋ฅผ ์“ฐ๋ฉด ๋”ฐ๋กœ ์„œ๋ฒ„๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€์•Š๊ธฐ์— ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ง€๋งŒ ๋น„์šฉ์ด ๋น„๊ต์  ๋น„์Œˆ

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    1. ์ปจํ…Œ์ด๋„ˆ์˜ CPU,Memory๋ฅผ EC2์˜ Instance์˜ CPU, Memory์˜ 1/4๋กœ ํ• ๋‹นํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‘๊ฐœ ๋Œ๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ CI/CD๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ดค์„ ๋•Œ ๋กค๋ง๋ฐฐํฌ๊ฐ€ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ

    2. ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค์„ ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ํฌ๊ฒŒ ๋Š˜์ง€์•Š๊ณ  CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์˜ค๋ฒ„๋˜์–ด ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธ

    3. ECS์˜ ์ปจํ…Œ์ด๋„ˆ CPU ์‚ฌ์šฉ๋Ÿ‰์ด 40ํผ ์ด์ƒ์ด ๋„˜์–ด๊ฐ€๋ฉด Scale-Out, 30ํผ ์ดํ•˜๊ฐ€ ๋˜๋ฉด Scale-In์ด ๋˜๊ฒŒ ์„ค์ •

    4. Scale-Out์ด ๋˜์—ˆ์„ ๋• ๋ฐฐํฌ๋ฅผ ํ”ผํ•ด์•ผํ•˜๊ธฐ์— Cloud Watch Alarm - SNS - Lambda - discord WebHook์„ ํ†ตํ•ด ์˜คํ† ์Šค์ผ€์ผ๋ง์ด ์‹คํ–‰๋  ๋•Œ ๋””์Šค์ฝ”๋“œ๋กœ ํ•ด๋‹น ๋กœ๊ทธ๊ฐ€ ์ „์†ก๋จ

    5. ํ˜น์‹œ ๋ชจ๋ฅผ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž๋ฅผ ์„ค์ •ํ•ด Scale-Out์ด ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  CPU ์ƒค์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด์ง€๋ฉด ๋ฏธ๋ฆฌ Task๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  EC2๋ฅผ Scale-Out์„ ํ•˜์—ฌ ์‹คํ–‰๋˜๋ฉด ๊ณ„ํš๋œ Task๋ฅผ ๋ฐ”๋กœ ๋ฐฐ์น˜

      แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-08 แ„‹แ…ฉแ„’แ…ฎ 9 26 30

ํ™˜๊ฒฝ๋ณ€์ˆ˜

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    Dockerfile ๋ฅผ ๋นŒ๋“œํ•  ๊ฒฝ์šฐ, .envํŒŒ์ผ์„ ์ฐธ์กฐํ•ด์˜ค์ง€ ๋ชปํ•ด์„œ CI/CD ๋ฐฐํฌ ํ›„ ์ปจํ…Œ์ด๋„ˆ์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ .env๊ฐ€ ์—†๋Š” ์ด์Šˆ

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    1. .env์€ ๋ณด์•ˆ์ƒ ์˜ˆ๋ฏผํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ์–ด Public ์ €์žฅ์†Œ์— ์˜ฌ๋ฆด ์ˆ˜ ์—†์—ˆ๋‹ค.

      ์ž‘์—… ์ •์˜์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋Œ€๋กœ ๋‹ค ๋…ธ์ถœ์ด ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ

    2. CD ๋‹จ๊ณ„์—์„œ DockerFile๋ฅผ buildํ•  ๋•Œ .env๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ ๊ทธ ๊ฒฐ๊ณผ ํ•ด๋‹น image๋กœ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ์•ˆ์—๋Š” .env๊ฐ€ ์—†์—ˆ๋‹ค.

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    AWS Systems Manager Parameter Store๋ฅผ ์ด์šฉํ•˜์—ฌ env๊ฐ’์„ parameter๋กœ ๋“ฑ๋ก ํ›„ arn์„ ์ž‘์—…์ •์˜ secrets์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ

2. ์›น์„œ๋ฒ„, ์ฑ„ํŒ…์„œ๋ฒ„ ๋ถ„๋ฆฌ

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    ์ฑ„ํŒ…์„œ๋ฒ„๋ฅผ ์›น์„œ๋ฒ„์™€ ๊ฐ™์€ ์„œ๋ฒ„์— ๋ฐฐํฌํ•  ์‹œ ์›น์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์ฑ„ํŒ…์„œ๋ฒ„๋„ ๊ฐ™์ด ๋‹ค์šด๋˜์–ด ๊ฐ€์žฅ ํ•„์š”ํ•  ๋•Œ ์“ฐ์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ ๋ฐœ์ƒ

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    ๊ฐ™์€ ์„œ๋ฒ„์ด๊ธฐ์— ์›น, ์ฑ„ํŒ… ๋‘˜์ค‘ ํ•˜๋‚˜๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋‘˜ ๋‹ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋ฒ„๋ฆฐ๋‹ค.

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    ์›น์„œ๋ฒ„๋ฅผ t3a.small๋กœ ๋ฐฐํฌํ•˜๊ธฐ์— ํ”„๋ฆฌํ‹ฐ์–ด์ธ t2.micro๋ฅผ ์“ธ ์ˆ˜ ์žˆ์–ด EC2 ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐํฌํ•˜์˜€๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๋ถ„๋ฆฌํ•˜์—ฌ ์›น์„œ๋ฒ„์— ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ์ฑ„ํŒ…์„œ๋ฒ„๋Š” ๋ฌธ์ œ์—†์ด ๋™์ž‘

3. Lambda Rate Limit & Authorizer

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    ์ด๋ฉ”์ผ & ํœด๋Œ€ํฐ ์ธ์ฆ์„ ๋ณธ ์„œ๋ฒ„์— ๋‘์ง€์•Š๊ณ  ๋”ฐ๋กœ AWS API Gateway - AWS Lambda๋กœ ๋นผ๋‘” ์ƒํƒœ์—์„œ ๋ˆ„๊ตฐ๊ฐ€ ์š”์ฒญ์„ ์•…์˜์ ์œผ๋กœ ๋ฌด์ œํ•œ์œผ๋กœ ๋ณด๋‚ด๋ฉด ๊ทธ๋Œ€๋กœ ์š”๊ธˆ ํญํƒ„์„ ๋งž๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊น€

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    ์šฐ์„  ํœด๋Œ€ํฐ ์ธ์ฆ ์ž์ฒด๊ฐ€ ์œ ๋ฃŒ ์„œ๋น„์Šค๊ณ  Lambda๋„ ์“ด ๋งŒํผ ๋‚ด๋Š” ์œ ๋ฃŒ ์„œ๋น„์Šค์ด๊ณ  ๋”ฐ๋กœ ๊ถŒํ•œ ์„ค์ •์„ ํ•˜์ง€์•Š์„ ์‹œ์— ์•„๋ฌด๋‚˜ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

Express-Rate-Limit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด IP ๋‹น ์š”์ฒญ์„ ์ œํ•œ, AWS API Gateway์˜ ์„ค์ •์„ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ ์ œํ•œ, API KEY ์„ค์ •์„ ํ†ตํ•ด ์ด ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ, API KEY๋ฅผ ๋ณด์•ˆ์ ์ธ ์ด์œ ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜์ง€์•Š๊ธฐ์— ๋”ฐ๋กœ Lambda Authorizer ์„ค์ •์„ ํ†ตํ•ด ์š”์ฒญ ์‹œ JWT ํ† ํฐ์„ ์ƒ์„ฑํ•ด ๊ฐ™์ด ํ—ค๋”์— ๋‹ด์•„ API Gateway๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์œ ํšจํ•˜๋ฉด allow, ์œ ํšจํ•˜์ง€์•Š์œผ๋ฉด deny๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์—๋Ÿฌ๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

4. ๋กœ๊น… & ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฌธ์ œ

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    1. ๋กœ๊น… & ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋ฐฐํฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ํŒ€์›๋“ค์€ ๋ณด์ง€ ๋ชป ํ•˜๋Š” ๋ฌธ์ œ
    2. AWS Cloud Watch๋ฅผ ํ†ตํ•ด ๋กœ๊น… & ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ, ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ƒํ™ฉ
  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    ๋”ฐ๋กœ AWS ์กฐ์ง์„ ๋งŒ๋“ค์–ด ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐœ์ธ์ด ๋ฐฐํฌํ•˜์—ฌ ๋ฐฐํฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    ์‹œ๊ฐํ™” ํˆด์ธ Grafana๋ฅผ ์„ค์น˜ํ•˜์—ฌ EC2 ์„œ๋ฒ„์— ๋Œ๋ฆฌ๊ณ , ํ•ด๋‹น EC2 IP + 3000 ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๋ ค์ฃผ์—ˆ๊ณ  ํŒ€์›๋“ค๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ์— EC2์˜ ๋ณด์•ˆ๊ทธ๋ฃน์˜ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์œผ๋กœ ํ•ด๊ฒฐ

5. ์‹ค์‹œ๊ฐ„ ์ƒ๋‹ด ๋ฌธ์ œ

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    ๊ด€๋ฆฌ์ž์™€ ์œ ์ €๊ฐ€ 1๋Œ€1๋กœ ์ƒ๋‹ด์„ ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์ด๋ฉฐ, ๊ด€๋ฆฌ์ž๋Š” ์œ ์ €๊ฐ€ ์ƒ๋‹ด ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ์ˆ˜๋™์œผ๋กœ ํ™•์ธํ•ด์•ผ ์ฆ‰๊ฐ์ ์ธ ์ƒ๋‹ด์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๋น„ํšจ์œจ์ ์ž„

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    ๋”ฐ๋กœ ์•Œ๋žŒ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๊ณ , ์†Œ์ผ“์œผ๋กœ ์›นํŽ˜์ด์ง€์—์„œ ์•Œ๋žŒ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋‚˜ ์›นํŽ˜์ด์ง€๋ฅผ ์ผœ๋‘์ง€์•Š๊ฑฐ๋‚˜ ์ž๋ฆฌ์— ์—†์œผ๋ฉด ๋ฌด์šฉ์ง€๋ฌผ์ž„

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    MongoDB Atlas์— ํŠธ๋ฆฌ๊ฑฐ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์œ ์ €๊ฐ€ ์ƒ๋‹ด ์š”์ฒญ ์‹œ Room ํ…Œ์ด๋ธ”์— Insert๊ฐ€ ๋˜๊ณ  ํŠธ๋ฆฌ๊ฑฐ์— ์˜ํ•ด AWS Event Bridge๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์„ฑ, ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๋ฅผ AWS Lambda ํŠธ๋ฆฌ๊ฑฐ๋กœ ์ด์–ด์„œ Slack WebHook์„ ํ†ตํ•ด ์•Œ๋ฆผ์ด ์šธ๋ ค ์›นํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ ์žˆ์ง€์•Š๋”๋ผ๋„, ๋ชจ๋ฐ”์ผ๋กœ๋„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-08 แ„‹แ…ฉแ„’แ…ฎ 9 08 33

6. Token ๋ฌธ์ œ

  • ์–ด๋–ค ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ๋Š”๊ฐ€?

    JWT Token์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ด์Šˆ ๋ฐœ์ƒ

  • ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

    Access Token๊ณผ Refresh Token ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์‚ฌ์‹ค์ƒ Access Token์˜ ์—ญํ• ์„ ์ œ๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

  • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”๊ฐ€?

    Token์„ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ œ 3์ž์—๊ฒŒ ํƒˆ์ทจ ๋‹นํ–ˆ์„ ์‹œ์— ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค. ์œ ํšจ๊ธฐ๊ฐ„์ด ์งง์€ Token์ผ ๊ฒฝ์šฐ, ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ์ž์ฃผ ํ•ด์„œ ์ƒˆ๋กœ์šด Token์„ ๋ฐœ๊ธ‰ ๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํŽธํ•˜๊ณ  ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค DB์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋Š˜๋ฆฐ๋‹ค๋ฉด Token์ด ํƒˆ์ทจ ๋‹นํ–ˆ์„ ๊ฒฝ์šฐ, JWT๋Š” ๋ฐœ๊ธ‰ํ•œ ํ›„ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Token์„ ํš๋“ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ Token์˜ ๊ธด ์œ ํšจ๊ธฐ๊ฐ„๋™์•ˆ ๊ถŒํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด ์ด๋Š” ๋ณด์•ˆ์— ๋”์šฑ ์ทจ์•ฝํ•ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ Refresh Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ธธ๊ฒŒ, Access Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•˜๊ณ , Access Token์ด ๋งŒ๋ฃŒ๋  ๋•Œ๋งˆ๋‹ค ์žฌ๋ฐœ๊ธ‰ํ•ด์คŒ์œผ๋กœ์จ ๋ณด์•ˆ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ถˆํŽธํ•จ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ Access Token๊ณผ Refresh Token ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ


โœ Code Convention

  • ๋ณ€์ˆ˜ : lower case camel case
  • function: camel case, ๋™์‚ฌ+๋ช…์‚ฌ

๐Ÿฑ Git Rule

  • commit convention
    • feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • fix : ๋ฒ„๊ทธ ์ˆ˜์ •
    • edit : ๊ธฐ๋Šฅ ์ˆ˜์ •
    • docs : ๋ฌธ์„œ ์ˆ˜์ •
    • style : ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
    • refactor : ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
    • test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŒฉํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
    • chore : ๋นŒ๋“œ ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •
    • merge: pull ๋ฐ›์€ ํ›„ ๋ฐ”๋กœ ํ‘ธ์‹œ๋ฅผ ํ•ด์•ผ๋  ๊ฒฝ์šฐ
    • fire: ์ฝ”๋“œ ์ •๋ฆฌ
    • mig: migration
    • ์ œ๋ชฉ์€ 50์ž ๋ฏธ๋งŒ, ๋ฌธ์žฅ์˜ ๋์— ๋งˆ์นจํ‘œ ๋„ฃ์ง€ ์•Š์Œ. ๊ณผ๊ฑฐ ์‹œ์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ช…๋ น์–ด๋กœ ์ž‘์„ฑํ•˜๋„๋ก ํ•จ.
    • ์ œ๋ชฉ ์™ธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๋ณธ๋ฌธ์— ์ถ”๊ฐ€ ์ •๋ณด ๊ธฐ์ž…

      ์˜ˆ์‹œ : [feat] comment router CRUD ๊ธฐ๋Šฅ ์ถ”๊ฐ€ : ๋ณธ์ธ ์ด๋ฆ„

  • ๊ฐ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ํ›„ push โ€”> develop ๋ธŒ๋žœ์น˜์— merge๋Š” pull requests๋ฅผ ํ†ตํ•ด์„œ ํ•˜๊ธฐ.
    • ๋ชจ๋“  pull requests๋Š” ํŒ€์›๋“ค์˜ ํ™•์ธ ํ›„ merge
    • ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์‹œ issue ํƒญ ํ™œ์šฉ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •