J1Yun
ZU-TECHLOG
J1Yun
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ“‘ Category (135)
    • Algorithm (61)
      • ๐Ÿ“š Concept (6)
      • ๐Ÿ“˜ Baekjoon Judge (53)
      • ๐Ÿ“— Programmers (2)
    • Computer Science (42)
      • ๐Ÿ”’ Operating System (14)
      • ๐Ÿ“ก Network (15)
      • ๐Ÿ’พ Database (8)
      • ๐Ÿงฉ Design Pattern (4)
      • ๐Ÿ”‘ Security (1)
    • Activities (12)
      • ๐Ÿฆ ๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ 9๊ธฐ (6)
      • ๐Ÿ’ป SW๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ (6)
    • Infra (1)
      • โ˜๏ธ AWS (1)
    • Languages (1)
      • ๐Ÿ’™ Python (1)
    • Backend (7)
      • ๐Ÿ”ต Django (4)
      • ๐ŸŸข Node.js (3)
    • Ect. (8)
      • ๐Ÿ’ฌ Talk (0)
      • ๐Ÿ—‚๏ธ ๊ฐœ๋ฐœ์ง๊ตฐ ์ทจ์—… ์ค€๋น„์ž๋ฃŒ (8)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

250x250
hELLO ยท Designed By ์ •์ƒ์šฐ.
J1Yun

ZU-TECHLOG

[SWM] ์†Œ๋งˆ 7์›” ํšŒ๊ณ  - ๊ธฐ์ˆ  ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ์Šคํ”„๋ฆฐํŠธ ์‹œ์ž‘
Activities/๐Ÿ’ป SW๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ

[SWM] ์†Œ๋งˆ 7์›” ํšŒ๊ณ  - ๊ธฐ์ˆ  ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ์Šคํ”„๋ฆฐํŠธ ์‹œ์ž‘

728x90

1. ๊ธฐ์ˆ  ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

ํ”„๋ŸฐํŠธ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๊ฒฝ์šฐ์—๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋‹ด๋‹น์ธ ์—ฐ์ˆ˜์ƒB๊ฐ€ ๊ตฌ์„ฑ ํ›„ ์šฐ๋ฆฌ์—๊ฒŒ ๊ณต์œ ํ•˜์˜€๋‹ค. ๋‚˜์™€ ์—ฐ์ˆ˜์ƒA๋Š” ๋ฐฑ์—”๋“œ ํŒŒํŠธ ๊ธฐ์ˆ  ์Šคํƒ ๊ตฌ์„ฑ๊ณผ AWS ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๋‹ด๋‹นํ•˜์˜€๋‹ค. AWS ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์˜ ๊ฒฝ์šฐ, ์šฐ๋ฆฌ์˜ ๋‹ด๋‹น ๋ฉ˜ํ† ๋‹˜์ด์‹  ๋ฉ˜ํ† ๋‹˜A์˜ ๋„์›€์„ ๋ฐ›์•˜๋‹ค. ๋ฉ˜ํ† ๋‹˜A๋Š” ํ˜„์žฌ AWS ์ปค๋ฎค๋‹ˆํ‹ฐ ๋นŒ๋”(Community Builder)๋กœ ํ™œ๋™ํ•˜์‹œ๋Š” AWS ์ „๋ฌธ๊ฐ€์ด์‹œ๋‹ค. ๋•๋ถ„์— ์ด์ „์— ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ ๋ณด์•ˆ๊ณผ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ๊ณ ๋ คํ•œ ์„œ๋ฒ„/DB ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

1.1. ๊ธฐ์ˆ  ์Šคํƒ ์„ ํƒํ•˜๊ธฐ

ํ”„๋ก ํŠธ์—”๋“œ ํŒŒํŠธ์—์„œ ์„ ์ •๋œ ๊ธฐ์ˆ  ์Šคํƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • TypeScript/ReactJS
  • React-Router
  • Styled-Components
  • Zustand

 

๋ฐฑ์—”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒํŠธ์—์„œ ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•œ ๊ธฐ์ˆ  ์Šคํƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • TypeScript/Nest.js
  • Socket.io
  • TypeORM/MySQL
  • (+) Redis

์—ฐ์ˆ˜์ƒA์™€ ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ ์„ ํƒ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„์–ด๋ณธ ๊ฒฐ๊ณผ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์™€ ์—ฐ์ˆ˜์ƒA ๋ชจ๋‘ Node.js์™€ Express์„ ์ฃผ๋กœ ํ™œ์šฉํ•ด์™”๋Š”๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ JavaScript๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ธฐ์—๋Š” ๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„๋“ค์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๋ฌธ๋ฒ•๊ณผ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋Š” TypeScript๋ฅผ ํ™œ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ธ Java๋ฅผ ๊ณ ๋ คํ•ด๋ณด๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ์งง์€ ๊ธฐ๊ฐ„ ๋‚ด์— ์ƒˆ๋กœ์šด ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ตํ˜€ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ ์™„์„ฑ๋„ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ๋„์ถœํ•ด์•ผํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ ์ƒ ํ•œ๊ณ„๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. TypeScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ JavaScript๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ์ตํžˆ๊ณ  ํ™œ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ–ˆ์œผ๋ฉฐ, ํƒ€์ž… ์‹œ์Šคํ…œ์œผ๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๋Š” ๋“ฑ์˜ ์žฅ์ ๋„ ์žˆ๋‹ค. ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” TypeScript์™€ ๊ถํ•ฉ์ด ์ข‹์€ NestJS๋ฅผ ์„ ํƒํ–ˆ๋‹ค. NestJS๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” Node.js์˜ ์žฅ์ ์€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๋ฉด์„œ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์€ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋˜ํ•œ ๊ฒฐ๊ตญ์—” ์™„๋ฒฝํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์œ„ํ•œ ์„ ํƒ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. '์ง€๊ธˆ๊ฐˆ๊ฒŒ' ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ '์‹ค์‹œ๊ฐ„์„ฑ'์ด ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๊ตฌํ˜„ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์›น์†Œ์ผ“์œผ๋กœ Socket.io๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒฝ์šฐ ๊ด€๊ณ„ํ˜• DB์ธ MySQL์„ ์‚ฌ์šฉํ•˜๋˜ TypeORM์œผ๋กœ ๋งคํ•‘ํ•  ์˜ˆ์ •์ด๋‹ค.  


1-2. AWS ๋Œ€์šฉ๋Ÿ‰ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑํ•˜๊ธฐ

์ตœ์ข…์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ AWS ์‹œ์Šคํ…œ ๊ตฌ์„ฑ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Amazon S3/CloudFront
  • Amazon EC2/ELB/NatGateway
  • Amazon AutoScalingGroup
  • Amazon Route53/CertificateManager
  • Amazon RDS/ElasticCacheForRedis

์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ณด์•ˆ, ๊ณ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ ๊ตฌ์„ฑํ•ด๋ดค๋‹ค. ์†Œ๋งˆ์—์„œ ํŒ€๋ณ„๋กœ ํด๋ผ์šฐ๋“œ ์ง€์›๊ธˆ์„ ์ง€๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— AWS ํ™˜๊ฒฝ์— ์ง์ ‘ ๊ตฌ์ถ•๋„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์šฐ์„  ์—ฐ์ˆ˜์ƒA์™€ ํ•จ๊ป˜ ๋ฉ˜ํ† ๋‹˜A์˜ ๋„์›€์„ ๋ฐ›์•„ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋  ์ŠคํŽ™๊ณผ ๋™์ผํ•˜๊ฒŒ ์—ฐ์Šต์šฉ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก์€ S3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ–ˆ๊ณ , ์ด์— ์ „์†ก ์†๋„์™€ ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๊ณ ์ž CDN ์„œ๋น„์Šค์ธ Cloudfront๋ฅผ ๋ง๋ถ™ํ˜”๋‹ค. ์„œ๋ฒ„ ์ธก์€ ๋‘ ๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค์™€ ELB๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ถ„์‚ฐ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค. ์ด๋•Œ, ๋ณด์•ˆ์„ ๊ณ ๋ คํ•˜์—ฌ ๋‘ ๊ฐœ์˜ EC2 ์ธ์Šคํ„ด์Šค๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ€์šฉ์˜์—ญ ๋‚ด ๊ฐ๊ฐ์˜ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท ์˜์—ญ์— ์œ„์น˜์‹œํ‚ค๊ณ , ์™ธ๋ถ€ ์ธํ„ฐ๋„ท ํ†ต์‹ ์„ ์œ„ํ•œ Nat Gateway์™€ ํ”„๋ผ์ด๋น— ์ธ์Šคํ„ด์Šค ์ ‘๊ทผ์„ ์œ„ํ•œ bastion host๊นŒ์ง€ ๊ตฌ์ถ•ํ–ˆ๋‹ค. ์ด๋“ค์€ Auto Scaling Group์œผ๋กœ ์ธ์Šคํ„ด์Šค ์ˆ˜์™€ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒฝ์šฐ RDS๋ฅผ ์ด์ค‘ํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฅ์•  ๋“ฑ์— ๋Œ€๋น„ํ•˜๊ณ , ์ฝ๊ธฐ ์ „์šฉ ๋ณต์ œ๋ณธ(Replica)์œผ๋กœ ๋ถ„์‚ฐ DB๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ์„ฑ๋Šฅ์„ ๋†’ํ˜”๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ์ดํ„ฐ ์บ์‹ฑ๊ณผ ๋ฉ”์‹œ์ง€ PUP/SUB์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ElastiCache for Redis๋ฅผ Master-Slave ๊ตฌ์กฐ๋กœ ์ด์ค‘ํ™”ํ–ˆ๋‹ค.

 

 

2. ์Šคํ”„๋ฆฐํŠธ ์‹œ์ž‘

์ฒซ ์Šคํ”„๋ฆฐํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค. ๋จผ์ €, Jira ํŒ€ ํŽ˜์ด์ง€์— ์ „๋ฐ˜์ ์€ ๋กœ๋“œ๋งต๊ณผ ๋ฐฑ๋กœ๊ทธ๋ฅผ ์ •์˜ํ•œ ํ›„ ๋‹ด๋‹น์ž๊นŒ์ง€ ์ง€์ •ํ•ด์„œ ๋“ฑ๋กํ•˜์˜€๋‹ค. ์ด์ „๊นŒ์ง€๋Š” ์ค‘๊ตฌ๋‚œ๋ฐฉ์œผ๋กœ ํ•  ์ผ์„ ์ •์˜ํ•˜๊ณ , ์•„๋ฌด๋‚˜ ํ•ด๋‹น ์ผ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ์• ์ž์ผ(์Šคํฌ๋Ÿผ) ๊ฐœ๋ฐœ ๋ฐฉ์‹ ๋„์ž… ํ›„์—๋Š” ๋Šฅ๋ฅ ์ด ํ™•์‹คํžˆ ์˜ฌ๋ž๋‹ค. ์šฐ์„ , ์Šคํ”„๋ฆฐํŠธ์™€ ๋ฐฑ๋กœ๊ทธ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋‘๊ฒŒ ๋˜์–ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ํ˜„ํ™ฉ์ด๋‚˜ ๋‚ด๊ฐ€ ํ•ด์•ผํ•  ์ผ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค ๋ณด๋‹ˆ ์ž‘์—…๋“ค์ด ๋’ค๋กœ ๋ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ์ฒด๊ณ„์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋œ๋‹ค๋Š” ๋А๋‚Œ์„ ๋ฐ›์•˜๋‹ค. ๋˜, ์ค‘๊ฐ„์ค‘๊ฐ„ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋“ค์— ๋Œ€ํ•ด ์ผ์ • ๋”œ๋ ˆ์ด ์—†์ด ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

2-1. Socket.io๋ฅผ ํ™œ์šฉํ•œ ์ฑ„ํŒ…๋ฐฉ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

๋‚˜์™€ ์—ฐ์ˆ˜์ƒA ๋ชจ๋‘ Socket.io์™€ ๊ฐ™์€ ์›น์†Œ์ผ“์€ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค. ์ž์„ธํ•œ ํ†ต์‹  ๋ฐฉ๋ฒ•์ด๋‚˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์ดํ•ด๋„ ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Socket.io๋ฅผ ๋ณธ ํ”„๋กœ์ ํŠธ์— ๋ฐ”๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด ์›น์†Œ์ผ“(Socket.io)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ง€์‹ ๋ฐ ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•˜๊ณ , ์ฑ„ํŒ…๋ฐฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์ธ์ ์œผ๋กœ ์ง„ํ–‰ํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์Šคํ„ฐ๋””๋Š” Socket.io ๊ณต์‹๋ฌธ์„œ(https://socket.io)์™€ ์œ ํŠœ๋ธŒ ๊ฐ•์˜ ๋“ฑ์˜ ํ•™์Šต์ž๋ฃŒ๋กœ ๊ณต๋ถ€ํ•œ ํ›„ ๊ทธ ๋‚ด์šฉ์„ ๋ ˆํผ๋Ÿฐ์Šค์™€ ํ•จ๊ป˜ ๋…ธ์…˜์— ์ •๋ฆฌํ•ด์„œ ๊ณต์œ ํ–ˆ๋‹ค. ์ดํ›„ ์†Œ์ผ“ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ฑ„ํŒ…๋ฐฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. namespace์™€ room์˜ ๊ฐœ๋…, ๊ทธ๋ฆฌ๊ณ  ๋ฐœํ–‰(Publish)์— ํ•ด๋‹นํ•˜๋Š” emit๊ณผ ๊ตฌ๋…(Subscribe)์— ํ•ด๋‹นํ•˜๋Š” on ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ–ˆ๋‹ค. ๋ฐฑ์—”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒํŠธ ๋˜ํ•œ ๊ณต์‹ ๋ฌธ์„œ ๋“ฑ์„ ํ™œ์šฉํ•ด NestJS์™€ TypeORM/MySQL๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜€ ์ ์šฉํ–ˆ๋‹ค. 

https://github.com/J1Yun/simple-chatting-web

 

GitHub - J1Yun/simple-chatting-web: NestJS, TypeORM, Socket.io๋ฅผ ํ™œ์šฉํ•œ ์ฑ„ํŒ… ๊ตฌํ˜„ ์‹ค์Šต

NestJS, TypeORM, Socket.io๋ฅผ ํ™œ์šฉํ•œ ์ฑ„ํŒ… ๊ตฌํ˜„ ์‹ค์Šต. Contribute to J1Yun/simple-chatting-web development by creating an account on GitHub.

github.com

 

2-2. JWT์™€ Passport๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

๋ณธ๊ฒฉ์ ์ธ MVP ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ด์ „์— ๋จผ์ € ์„œ๋น„์Šค ๋กœ์ง๊ณผ ๊ด€๊ณ„์—†๋Š” ๋กœ๊ทธ์ธ ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ธฐ์กด์— ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ฃผ๋กœ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ํ†ตํ•ด ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์™”์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด ํ† ํฐ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ JWT ํ† ํฐ์„ ํ™œ์šฉํ•ด ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ์„œ๋ฒ„๋Š” JWT ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„˜๊ฒจ์ค€๋‹ค. ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹ ๋ฐ JWT์™€ ๊ด€๋ จํ•œ ์ƒ์„ธ ๋‚ด์šฉ์€ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค. JWT์™€ ๋”๋ถˆ์–ด Passport.js๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. Passport.js JWT ํ† ํฐ์œผ๋กœ '์ธ์ฆ'์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Node.js์˜ ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค. passport์—๋Š” ์—ฌ๋Ÿฌ strategy(์ „๋žต)์ด ์žˆ๋Š”๋ฐ ๋‹จ์ˆœํžˆ JWT ํ† ํฐ์„ ์ฝ์–ด์™€ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋„๋ก ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด JwtStrategy๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์ด์™€ํ•จ๊ป˜ @UseGuards() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด ํ™•์ธ์ด ํ•„์š”ํ•œ API ํ˜ธ์ถœ ์‹œ ์ธ์ฆ ๊ณผ์ •์ด ์ˆ˜ํ–‰๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

JwtStrategy

 

728x90

'Activities > ๐Ÿ’ป SW๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[SWM] ์†Œ๋งˆ 6์›” ํšŒ๊ณ  - ์„œ๋น„์Šค ๊ตฌ์ฒดํ™”, ๊ธฐํš ์‹ฌ์‚ฌ, ๊ฐœ๋ฐœ ์ค€๋น„  (0) 2022.07.15
[SWM] ์†Œ๋งˆ 5์›” ํšŒ๊ณ  - ํŒ€ ๋นŒ๋”ฉ, ํ”„๋กœ์ ํŠธ ์ฃผ์ œ ์„ ์ •, ๋ฉ˜ํ†  ๋งค์นญ  (0) 2022.07.05
[SWM] ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ ํ•ฉ๊ฒฉ ํ›„๊ธฐ - ์‹ฌ์ธต ๋ฉด์ ‘ ํŒ, ์งˆ๋ฌธ ๋ณต๊ธฐ  (1) 2022.04.29
[SWM] ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ ํ•ฉ๊ฒฉ ํ›„๊ธฐ - ์ฝ”๋”ฉํ…Œ์ŠคํŠธ(1์ฐจ/2์ฐจ) ํŒ, ๋ฌธ์ œ ์œ ํ˜•  (0) 2022.04.20
[SWM] ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ ํ•ฉ๊ฒฉ ํ›„๊ธฐ - ์ง€์›์„œ ์„œ๋ฅ˜(์ž๊ธฐ์†Œ๊ฐœ์„œ) ์ž‘์„ฑ๋ฒ•  (1) 2022.04.11
    'Activities/๐Ÿ’ป SW๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€์ด๋‹ค
    • [SWM] ์†Œ๋งˆ 6์›” ํšŒ๊ณ  - ์„œ๋น„์Šค ๊ตฌ์ฒดํ™”, ๊ธฐํš ์‹ฌ์‚ฌ, ๊ฐœ๋ฐœ ์ค€๋น„
    • [SWM] ์†Œ๋งˆ 5์›” ํšŒ๊ณ  - ํŒ€ ๋นŒ๋”ฉ, ํ”„๋กœ์ ํŠธ ์ฃผ์ œ ์„ ์ •, ๋ฉ˜ํ†  ๋งค์นญ
    • [SWM] ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ ํ•ฉ๊ฒฉ ํ›„๊ธฐ - ์‹ฌ์ธต ๋ฉด์ ‘ ํŒ, ์งˆ๋ฌธ ๋ณต๊ธฐ
    • [SWM] ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ 13๊ธฐ ํ•ฉ๊ฒฉ ํ›„๊ธฐ - ์ฝ”๋”ฉํ…Œ์ŠคํŠธ(1์ฐจ/2์ฐจ) ํŒ, ๋ฌธ์ œ ์œ ํ˜•
    J1Yun
    J1Yun
    ๊ฐœ๋ฐœ ๊ด€๋ จ ๊ธฐ์ˆ  ๋ฐ ๊ณต๋ถ€ ๋‚ด์šฉ ๊ธฐ๋ก์žฅ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”