Skip to content

letsgetit-hanwha-be15/be15-2nd-letsgetit-newbit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2,174 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NewBit - ๊ฐœ๋ฐœ์ž ๋ฉ˜ํ† ๋ง ํ”Œ๋žซํผ


๐Ÿ“‹ ๋ชฉ์ฐจ

๐ŸŽ™๏ธ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํŒ€์› ์†Œ๊ฐœ

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

๐Ÿ“ก ๋ฌธ์„œ ๋งํฌ

๐Ÿ‘€ ERD

๐Ÿ“ ์•„ํ‚คํ…์ณ

๐Ÿ“Œ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿซก ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๐ŸŽจ ํ™”๋ฉด ui

๐Ÿ“ƒ ํšŒ๊ณ ๋ก

๐Ÿ“œ ๋ผ์ด์„ผ์Šค




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

Newbit์€ ์‚ฌํšŒ ์ดˆ๋…„์ƒ๊ณผ ์ง€์‹๊ณผ ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ IT ์ „๋ฌธ๊ฐ€๋“ค์ด ์ž์œ ๋กญ๊ฒŒ ์†Œํ†ตํ•˜๊ณ  ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ง€์‹ ๋ฉ˜ํ† ๋ง ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋ฉ˜ํ† ๋Š” ์ž์‹ ์˜ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์นผ๋Ÿผ๊ณผ ์ปคํ”ผ์ฑ—(1:1 ์ƒ๋‹ด) ํ˜•์‹์œผ๋กœ ๊ณต์œ ํ•˜๊ณ , ๋ฉ˜ํ‹ฐ(์ผ๋ฐ˜ ์‚ฌ์šฉ์ž)๊ฐ€ ์ด๋ฅผ ๊ตฌ๋งคํ•˜๊ฑฐ๋‚˜ ๊ตฌ๋…ํ•˜์—ฌ ์„ฑ์žฅ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด์— ๋ง‰ ๋ฐœ์„ ๋””๋”˜ ์‹ ์ž… ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์‹ค์ œ ๊ฒฝํ—˜์ด ๋‹ด๊ธด ์กฐ์–ธ์ด ๊ฐ€์žฅ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ ์ •๋ณด๋Š” ๊ฒ€์ƒ‰์œผ๋กœ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
Newbit์€ ์‹ค๋ฌด ๊ฒฝํ—˜์ด ๋‹ด๊ธด ์ฝ˜ํ…์ธ ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ๋” ๋‚˜์•„๊ฐ€ ์‚ฌ๋žŒ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค

๐Ÿ™‹โ€โ™€๏ธ ๋ฉ˜ํ‹ฐ์—๊ฒŒ๋Š”

  • ์นผ๋Ÿผ/์‹œ๋ฆฌ์ฆˆ์™€ 1:1 ์ปคํ”ผ์ฑ—์„ ํ†ตํ•ด ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ˜ํ† ์˜ ์‹ค๋ฌด ์ง€์‹์„ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž…์‚ฌ ์ดˆ๊ธฐ์— ์–ด๋ ค์›€์„ ๊ฒช๋Š” ๋ฌธ์„œ ์ž‘์„ฑ, ์–‘์‹ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ IT ๊ด€๋ จ ์ฃผ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘จโ€๐Ÿซ ๋ฉ˜ํ† ์—๊ฒŒ๋Š”

  • ๋ณธ์ธ์˜ ์ปค๋ฆฌ์–ด ๊ฒฝํ—˜์„ ์ •๋ฆฌํ•ด ์ฝ˜ํ…์ธ ๋กœ ๋งŒ๋“ค๊ณ  ์ˆ˜์ตํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ปคํ”ผ์ฑ—์„ ํ†ตํ•ด ๋ฉ˜ํ‹ฐ์™€ ๊นŠ์ด ์žˆ๋Š” ๊ต๋ฅ˜๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ํ•œํ™” BEYOND ๋ถ€ํŠธ์บ ํ”„ 15๊ธฐ 'LetsGetIt' ํŒ€์˜ ํ•™์Šต๊ณผ ํ˜‘์—…์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ๋ฌธ์„œ์™€ ์ฝ”๋“œ์— ์„œ์ˆ ๋œ ๋‚ด์šฉ์€ ํ•™์Šต ๋ชฉ์ ์œผ๋กœ ์„ค์ •๋œ ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ์™€ ํ™˜๊ฒฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํŒ€์› ์†Œ๊ฐœ

์ด๋ฆ„ ์—ญํ•  GitHub
๊น€๊ฒฝ๋ฏผ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ gyeongmin03
๊น€๊ธฐํ™ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ Kihong12
๊น€์ง„์˜ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ kimjy8937
๊น€์ฑ„์› ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ sezeme
๋ฐ•์–‘ํ•˜ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ 64etuor
์˜ค์œ ๊ฒฝ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ oyk0510

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

Backend & Database

Frontend

Communication Protocols

Tools & Communication

๐Ÿ”— ๋ฌธ์„œ ๋งํฌ

ํ”„๋ ˆ์  ํ…Œ์ด์…˜

API ๋ฌธ์„œ

์„ค๊ณ„ ๋ฌธ์„œ

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ

BE ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ

FE ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ

์œ ์ €

ํšŒ์›๊ฐ€์ž… -> ์•„์ด๋””์ฐพ๊ธฐ -> ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ -> ๋กœ๊ทธ์ธ -> ๋กœ๊ทธ์•„์›ƒ
์œ ์ € ํ”„๋กœํ•„ ์กฐํšŒ
๋ฉ˜ํ†  ํ”„๋กœํ•„ ์กฐํšŒ

์นผ๋Ÿผ

์นผ๋Ÿผ ์กฐํšŒ, ๋“ฑ๋ก ์š”์ฒญ
์นผ๋Ÿผ ์ˆ˜์ • ์š”์ฒญ(๋ฉ˜ํ† )
์นผ๋Ÿผ ์š”์ฒญ ๊ด€๋ฆฌ(์Šน์ธ, ๋ฐ˜๋ ค)
์นผ๋Ÿผ ๊ตฌ๋งค
์นผ๋Ÿผ/์‹œ๋ฆฌ์ฆˆ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ์‹œ๋ฆฌ์ฆˆ ๋ฐœํ–‰

๊ฒŒ์‹œ๊ธ€

๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ โ†’ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • โ†’ ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ
๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์กฐํšŒ โ†’ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ์กฐํšŒ โ†’ ๋Œ“๊ธ€ ์กฐํšŒ โ†’ ๋Œ“๊ธ€ ์ž‘์„ฑ โ†’ ๋Œ“๊ธ€ ์‚ญ์ œ
๊ฒŒ์‹œ๊ธ€ ์‹ ๊ณ  โ†’ ๋Œ“๊ธ€ ์‹ ๊ณ 
๊ณต์ง€์‚ฌํ•ญ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ
๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰

์ปคํ”ผ์ฑ—

๋ฉ˜ํ†  ๋ชฉ๋ก ์กฐํšŒ โ†’ ์ปคํ”ผ์ฑ— ์‹ ์ฒญ โ†’ ๋‚ด๊ฐ€ ์‹ ์ฒญํ•œ ์ปคํ”ผ์ฑ— ๋ชฉ๋ก ์กฐํšŒ
๋ฉ˜ํ† ๊ฐ€ ์ปคํ”ผ์ฑ— ์Šน์ธ
๋ฉ˜ํ‹ฐ๊ฐ€ ๋‹ค์ด์•„ ๊ฒฐ์ œ
๋ฉ˜ํ† ๊ฐ€ ์ปคํ”ผ์ฑ— ์ข…๋ฃŒ
์ปคํ”ผ์ฑ— ๊ตฌ๋งค ํ™•์ • โ†’ ๋ฆฌ๋ทฐ ์ž‘์„ฑ โ†’ ๋ฉ˜ํ†  ํ”„๋กœํ•„ ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ๋ฆฌ๋ทฐ ์กฐํšŒ

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

ํ”„๋กœํ•„ ์ˆ˜์ •
๋ฉ˜ํ†  ํ”„๋กœํ•„ ์ˆ˜์ •

์ปคํ”ผ๋ ˆํ„ฐ

์ฑ„ํŒ…๋ฐฉ

๊ฒฐ์ œ

๊ฒฐ์ œ์ง„ํ–‰
๊ฒฐ์ œ์ทจ์†Œ

์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ

์œ ๋ฃŒ์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ
๋ฌด๋ฃŒํ…Œ์ŠคํŠธ
ํฌ์ธํŠธ๊ตฌ๋งค์‹คํŒจ

์‹ ๊ณ 

์‹ ๊ณ  ์กฐํšŒ

๐Ÿ’พ ERD

ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๐Ÿ— ์•„ํ‚คํ…์ฒ˜

  • MSA ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ๋„

๐Ÿ“‹ ์ฃผ์š” ๊ธฐ๋Šฅ

ํšŒ์› ๊ด€๋ฆฌ

  • ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
  • ํšŒ์› ์ •๋ณด ๊ด€๋ฆฌ

๋ฉ˜ํ† ๋ง ์‹œ์Šคํ…œ

  • ๋ฉ˜ํ†  ํ”„๋กœํ•„ ๋ฐ ๊ฒ€์ƒ‰
  • ์ปคํ”ผ์ฑ— ์˜ˆ์•ฝ ๋ฐ ๊ด€๋ฆฌ
  • ๋ฉ˜ํ†  ๋“ฑ๊ธ‰ ๋ฐ ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ

์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ

  • ์นผ๋Ÿผ ์ž‘์„ฑ ๋ฐ ์กฐํšŒ
  • ์‹œ๋ฆฌ์ฆˆ ๊ด€๋ฆฌ
  • ์œ ๋ฃŒ ์ฝ˜ํ…์ธ  ๊ฒฐ์ œ

๊ฒฐ์ œ ์‹œ์Šคํ…œ

  • ๋‹ค์ด์•„๋ชฌ๋“œ(๊ฐ€์ƒํ™”ํ) ์ถฉ์ „
  • ์ฝ˜ํ…์ธ  ๋ฐ ๋ฉ˜ํ† ๋ง ์„œ๋น„์Šค ๊ฒฐ์ œ
  • ๊ฒฐ์ œ ๋‚ด์—ญ ๊ด€๋ฆฌ

์ปค๋ฎค๋‹ˆํ‹ฐ

  • ๊ฒŒ์‹œํŒ ์šด์˜
  • ๋Œ“๊ธ€ ์‹œ์Šคํ…œ
  • ์•Œ๋ฆผ ์„œ๋น„์Šค

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Back-End

๐Ÿ“ฆ newbit-gateway/
โ””โ”€โ”€ src/
โ””โ”€โ”€ main/
โ””โ”€โ”€ java/com/newbit/newbitgateway/
โ”œโ”€โ”€ dto/ # API ์‘๋‹ต DTO
โ”œโ”€โ”€ error/ # JWT ์—๋Ÿฌ ์ฝ”๋“œ
โ”œโ”€โ”€ exception/ # ๊ณตํ†ต ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ
โ”œโ”€โ”€ filter/ # ์š”์ฒญ ํ•„ํ„ฐ
โ””โ”€โ”€ jwt/ # JWT ํ† ํฐ ๋ฐœ๊ธ‰/๊ฒ€์ฆ

๐Ÿง‘โ€๐Ÿ’ป newbit-user-service/
โ””โ”€โ”€ src/
โ””โ”€โ”€ main/
โ””โ”€โ”€ java/com/newbit/newbituserservice/
โ”œโ”€โ”€ auth/ # ์ธ์ฆ ๊ธฐ๋Šฅ
โ”œโ”€โ”€ client/ # ์™ธ๋ถ€ ํ†ต์‹  (Feign ๋“ฑ)
โ”œโ”€โ”€ common/
โ”‚ โ”œโ”€โ”€ config/ # Feign, Swagger, JPA ์„ค์ •
โ”‚ โ”œโ”€โ”€ dto/ # ๊ณตํ†ต DTO
โ”‚ โ””โ”€โ”€ exception/ # ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
โ”œโ”€โ”€ security/
โ”‚ โ”œโ”€โ”€ config/
โ”‚ โ”œโ”€โ”€ filter/
โ”‚ โ””โ”€โ”€ model/ # JWT ํ† ํฐ, ํ•ธ๋“ค๋Ÿฌ ๋“ฑ
โ””โ”€โ”€ user/
โ”œโ”€โ”€ controller/
โ”œโ”€โ”€ dto/
โ”œโ”€โ”€ entity/
โ”œโ”€โ”€ mapper/
โ”œโ”€โ”€ repository/
โ”œโ”€โ”€ service/
โ””โ”€โ”€ support/

๐Ÿงฉ newbit-feature-service/
โ””โ”€โ”€ src/
โ””โ”€โ”€ main/
โ””โ”€โ”€ java/com/newbit/newbitfeatureservice/
โ”œโ”€โ”€ client/ # Feign ํ†ต์‹ 
โ”œโ”€โ”€ coffeechat/ # ์ปคํ”ผ์ฑ—
โ”œโ”€โ”€ coffeeletter/ # ์ปคํ”ผ์ฑ— ํ›„๊ธฐ/๋ฉ”์‹œ์ง€
โ”œโ”€โ”€ column/ # ์นผ๋Ÿผ ๋„๋ฉ”์ธ
โ”œโ”€โ”€ like/ # ์ข‹์•„์š”
โ”œโ”€โ”€ notification/ # ์•Œ๋ฆผ
โ”œโ”€โ”€ payment/ # ๊ฒฐ์ œ
โ”œโ”€โ”€ post/ # ๊ฒŒ์‹œํŒ
โ”œโ”€โ”€ product/ # ์ƒํ’ˆ ์ •๋ณด
โ”œโ”€โ”€ purchase/ # ๊ฒฐ์ œ ๋‚ด์—ญ
โ”œโ”€โ”€ report/ # ์‹ ๊ณ 
โ”œโ”€โ”€ s3/ # S3 ํŒŒ์ผ ์—…๋กœ๋“œ
โ”œโ”€โ”€ security/ # ๋ณด์•ˆ ์„ค์ •
โ”œโ”€โ”€ settlement/ # ์ •์‚ฐ ๊ธฐ๋Šฅ
โ””โ”€โ”€ subscription/ # ์‹œ๋ฆฌ์ฆˆ ๊ตฌ๋…

Front-End

src/
โ”œโ”€โ”€ api/ # ๊ธฐ๋Šฅ๋ณ„ API ๋ชจ๋“ˆ (column.js, user.js ๋“ฑ)
โ”œโ”€โ”€ components/ # ๊ณต์šฉ UI ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ config/ # Toast UI, ์•Œ๋ฆผ ๋“ฑ ์„ค์ • ํŒŒ์ผ
โ”œโ”€โ”€ router/ # Vue Router ์„ค์ •
โ”œโ”€โ”€ stores/ # Pinia ์ƒํƒœ ๊ด€๋ฆฌ
โ”œโ”€โ”€ views/ # ๊ธ€๋กœ๋ฒŒ ๋ทฐ (AdminPage ๋“ฑ)
โ”œโ”€โ”€ App.vue # ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ
โ”‚
โ””โ”€โ”€ features/ #
โ”œโ”€โ”€ admin/ # ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ (์Šน์ธ/๋ฐ˜๋ ค)
โ”œโ”€โ”€ column/ # ์นผ๋Ÿผ ๋“ฑ๋ก/์ˆ˜์ •/์š”์ฒญ/์กฐํšŒ
โ”œโ”€โ”€ series/ # ์‹œ๋ฆฌ์ฆˆ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ
โ”œโ”€โ”€ coffeechat/ # ์ปคํ”ผ์ฑ— ์‹ ์ฒญ ๋ฐ ๊ด€๋ฆฌ
โ”œโ”€โ”€ coffeeletter/ # ์ปคํ”ผ์ฑ— ํ›„์† ๋ฉ”์‹œ์ง€/ํ”ผ๋“œ๋ฐฑ
โ”œโ”€โ”€ mypage/ # ๋งˆ์ดํŽ˜์ด์ง€ (๋‚ด ์ •๋ณด, ๊ตฌ๋งค๋‚ด์—ญ)
โ”œโ”€โ”€ payment/ # ๊ฒฐ์ œ ๋ฐ ๋‹ค์ด์•„๋ชฌ๋“œ ์ถฉ์ „
โ”œโ”€โ”€ notification/ # ์•Œ๋ฆผ ๊ธฐ๋Šฅ
โ”œโ”€โ”€ post/ # ์ž์œ  ๊ฒŒ์‹œํŒ
โ”œโ”€โ”€ product/ # ์ƒํ’ˆ ์ •๋ณด
โ”œโ”€โ”€ perk/ # ๋ฉ˜ํ†  ํ˜œํƒ/๋“ฑ๊ธ‰ ์‹œ์Šคํ…œ
โ”œโ”€โ”€ profile/ # ํ”„๋กœํ•„ ๋ณด๊ธฐ/์ˆ˜์ •
โ”œโ”€โ”€ report/ # ์‹ ๊ณ  ๊ธฐ๋Šฅ
โ””โ”€โ”€ user/ # ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…, ์œ ์ € ๊ด€๋ฆฌ

ํ™”๋ฉด ui

ํšŒ์›/๋กœ๊ทธ์ธ

ํšŒ์› ์ •๋ณด ์ˆ˜์ •

ํšŒ์› ์ •๋ณด ์ˆ˜์ •.png

๋กœ๊ทธ์ธ/์•„์ด๋””์ฐพ๊ธฐ/๋น„๋ฐ€๋ฒˆํ˜ธ์ฐพ๊ธฐ/ํšŒ์›๊ฐ€์ž…

๋กœ๊ทธ์ธ/์•„์ด๋””์ฐพ๊ธฐ/๋น„๋ฐ€๋ฒˆํ˜ธ์ฐพ๊ธฐ/ํšŒ์›๊ฐ€์ž….png
๋งˆ์ดํŽ˜์ด์ง€

๋‚ด ์ฝ˜ํ…์ธ 

๋‚ด ์ฝ˜ํ…์ธ .png

ํ™œ๋™๋‚ด์—ญ

ํ™œ๋™๋‚ด์—ญ.png

์œ ์ €ํ”„๋กœํ•„/๋ฉ˜ํ† ํ”„๋กœํ•„

์œ ์ €ํ”„๋กœํ•„๋ฉ˜ํ† ํ”„๋กœํ•„.png
์นผ๋Ÿผ/๊ฒŒ์‹œ๊ธ€

์นผ๋Ÿผ

์นผ๋Ÿผ.png

๊ฒŒ์‹œํŒ

๊ฒŒ์‹œํŒ.png
์ปคํ”ผ์ฑ—/๋ฆฌ๋ทฐ

์ปคํ”ผ์ฑ—

์ปคํ”ผ์ฑ—.png

๋ฆฌ๋ทฐ

๋ฆฌ๋ทฐ.png

์ปคํ”ผ๋ ˆํ„ฐ

์ปคํ”ผ๋ ˆํ„ฐ.png
์ƒํ’ˆ

์ƒํ’ˆ

์ƒํ’ˆ.png

์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ

์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ.png
์‹ ๊ณ /๊ด€๋ฆฌ์ž

์‹ ๊ณ /๊ด€๋ฆฌ์ž

์‹ ๊ณ ๊ด€๋ฆฌ์ž.png

ํšŒ๊ณ ๋ก

์ด๋ฆ„ COMMENT
๊น€๊ฒฝ๋ฏผ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋„˜์–ด, Spring ๊ธฐ๋ฐ˜์˜ MSA ๊ตฌ์กฐ, JWT ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ  Vue.js ํ”„๋ก ํŠธ์—”๋“œ๊นŒ์ง€ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์•„์šฐ๋ฅด๋Š” ์ž‘์—…์ด์—ˆ๋‹ค. ๋‚˜๋Š” ์œ ์ € ๋„๋ฉ”์ธ์˜ ๋ฐฑ์—”๋“œ ๊ตฌํ˜„์„ ํ–ˆ๊ณ , ํ”„๋ก ํŠธ์—”๋“œ ์—ญ์‹œ ์œ ์ € ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋งก์•„ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๋“ฑ ํšŒ์›์˜ ๊ธฐ๋ณธ์ ์ธ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์€ ๋‹จ์—ฐ Spring Security์˜€๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ฒ ์ง€๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ทธ ์ด์ƒ์ด์—ˆ๋‹ค. Spring Security๋Š” Filter ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)๋ฅผ ๋ถ„๋ฆฌํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ฝค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ , SecurityContextHolder, OncePerRequestFilter, PreAuthenticatedAuthenticationToken๊ณผ ๊ฐ™์€ ๋‚ฏ์„  ๊ฐœ๋…๋“ค๊ณผ๋„ ๋งˆ์ฃผํ•ด์•ผ ํ–ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํ† ํฐ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ, Spring์ด ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ํ๋ฅด๊ฒŒ ํ•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด์•ผ๋งŒ ์ œ๋Œ€๋กœ ๋œ ์ธ์ฆ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•„์ง๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ, ์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ค„์•ผ ํ• ์ง€ ๊ฐ์€ ํ™•์‹คํžˆ ์žก๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋‚˜์—๊ฒŒ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ด์ƒ์˜ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๊ฐ ๊ธฐ๋Šฅ์„ ๋‚˜๋ˆ„๊ณ  ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ˜‘์—…๊ณผ ์„ค๊ณ„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์ œ๋Œ€๋กœ ์ฒด๊ฐํ–ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ๊ทธ ๊ณผ์ •์—์„œ ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ๋А๋‚€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ์ฑ„์›Œ์ฃผ๊ณ  ํ•จ๊ป˜ ๊ณ ๋ฏผํ•ด์ค€ ํŒ€์›๋“ค์—๊ฒŒ ์—„์ฒญ ๊ณ ๋งˆ์›€์„ ๋А๋ผ๊ณ  ์žˆ๋‹ค. ์•ž์œผ๋กœ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ ๋” ๋งŽ์€ ๋…ธ๋ ฅ์„ ํ•ด์•ผ๊ฒ ๋‹ค.
์˜ค์œ ๊ฒฝ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” MSA ๊ตฌ์กฐ๋กœ ์„œ๋ฒ„๋ฅผ ๋‚˜๋ˆ„๊ณ , ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ๋ฅผ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณธ ์˜๋ฏธ์žˆ๋Š” ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. User, Feature, Gateway๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌ์„ฑํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด Feign Client์™€ JWT ์ธ์ฆ์„ ์ ์šฉํ•˜๋ฉด์„œ ์‹ค์ œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์€ ๋ฐฑ์—”๋“œ ๋กœ์ง์ด ํ”„๋ก ํŠธ์™€ ์—ฐ๋™๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. DTO์— ๊ฐ’์ด ์—†์–ด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•ˆ ๋œจ๋Š” ๊ฒฝ์šฐ, null ํ•„๋“œ ๋•Œ๋ฌธ์— ๋žœ๋”๋ง์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐ˜๋ณต์ด ๋˜์—ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฑ์—”๋“œ ์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ๋‹ค๋“ฌ๊ณ , ํ”„๋ก ํŠธ์—์„œ๋Š” fallback ์ฒ˜๋ฆฌ๋ฅผ ์‹ ๊ฒฝ ์ผ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ฐฑ์—”๋“œ ์ž‘์—…์„ ๋จผ์ € ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ์™€์„œ์•ผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ํ•„๋“œ๋“ค์ด ๋ˆˆ์— ๋“ค์–ด์˜ค๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ๋ฐฑ์—”๋“œ ์„ค๊ณ„๋Š” ๊ฒฐ๊ตญ ํ”„๋ก ํŠธ ์‚ฌ์šฉ์„ฑ๊ณผ ํ•จ๊ป˜ ๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ๋ชธ์†Œ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ PM ์—ญํ• ์„ ๋งก์œผ๋ฉด์„œ, ์ƒ๊ฐ๋ณด๋‹ค ๋” ์ฒด๊ณ„์ ์ธ ๊ณ„ํš ์ˆ˜๋ฆฝ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ๋ง‰์—ฐํžˆ ๋ˆˆ์•ž์˜ ์ผ์ •๋งŒ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋‹จ๊ธฐ, ์ค‘๊ธฐ, ์žฅ๊ธฐ ๋ชฉํ‘œ๋ฅผ ์„ธ๋ถ„ํ™”ํ•ด์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ–ˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ ํŒ€์› ์—ญํ•  ๋ถ„๋ฐฐ, ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •, ์ผ์ • ์กฐ์œจ๊นŒ์ง€ ์ฑ™๊ธฐ๋Š” ๊ฒŒ PM์˜ ํ•ต์‹ฌ์ด๋ผ๋Š” ๊ฑธ ์ง์ ‘ ๊ฒช์œผ๋ฉฐ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•˜๋Š” ์—ญํ• ์ด ์•„๋‹ˆ๋ผ, ์ „์ฒด ๋ฐฉํ–ฅ์„ ์„ค๊ณ„ํ•˜๊ณ , ํŒ€์˜ ์ „๋ฐ˜์ ์ธ ์ค‘์‹ฌ์„ ์žก์•„์ฃผ๋Š” ์‚ฌ๋žŒ์ด PM์ด๋ผ๋Š” ๊ฑธ ์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์‹ค๊ฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด, ์‹ค์ œ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ์„œ๋น„์Šค ์ „์ฒด์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒฝํ—˜๊นŒ์ง€ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์ „์ฒด์ ์œผ๋กœ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ์˜ค๊ฐ€๋ฉฐ ์ง์ ‘ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•˜๊ณ , ์„ค๊ณ„๊นŒ์ง€ ์ฑ™๊ฒจ๋ณธ ๊ฒฝํ—˜์ด๋ผ ์ •๋ง ๋งŽ์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊น€์ฑ„์› ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” spring boot๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ vue.js๊นŒ์ง€ ์•„์šฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜€๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ msa๊ตฌ์กฐ๋ฅผ ์ ์šฉ์‹œ์ผœ ์ง„ํ–‰ํ–ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์กฐ๊ธˆ ๋” ์ž์ฃผ ๋‚ฌ์ง€๋งŒ ๊ทธ๋งŒํผ msa ๊ตฌ์กฐ์— ์ต์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ด ๊ฐ€์žฅ ์–ด๋ ค์› ๋‹ค. ๊ผผ๊ผผํ•˜์ง€ ๋ชปํ•ด ๊ฒฝ๋กœ๋ฅผ ํ‹€๋ฆฌ๊ฑฐ๋‚˜ request/response ๊ฐ์ฒด๋ฅผ ์ œ๋Œ€๋กœ ๋‹ค๋ฃจ์ง€ ๋ชปํ•ด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ธ. ๋‚˜์ค‘์—๋Š” ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์„ ๋•Œ ๊ฒฝ๋กœ๋‚˜ ๊ฐ์ฒด ํ๋ฆ„์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…ํ•˜๋‹ˆ ์‹ค์ˆ˜๋„ ์ค„๊ณ  ์†๋„๋„ ๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋„๋ฉ”์ธ ์ธก๋ฉด์—์„œ๋Š” ์ปคํ”ผ์ฑ— ๊ธฐ๋Šฅ์„ ๋งก์•˜๊ณ  ์œ ์ €์˜ ํ–‰๋™์— ๋”ฐ๋ผ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์ง€ ์•Š์•„ ์ดˆ๋ฐ˜์— ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค. ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ฆฌ๋”๋ผ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ •๋ฆฌ๋œ ๊ธฐํš์˜ ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊นจ๋‹ฌ์•˜๋‹ค. ๋‚ด๊ฐ€ ๋งก์€ ์ปคํ”ผ์ฑ— ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐฑ์—”๋“œ์—์„œ ์‹ ๊ฒฝ ์ผ๋˜ ๋ถ€๋ถ„์€ ui์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋ ์ง€ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด๋ณธ ๊ฒƒ์ด์—ˆ๊ณ  ํ”„๋ก ํŠธ ๊ตฌํ˜„๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ์ด๋ฏธ ๊ตฌํ˜„ํ•ด๋‘” ๋ฐฑ์—”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋„๋ก ํ•œ ๋ถ€๋ถ„์ด์—ˆ๊ณ  ํ”„๋ก ํŠธ ์ž‘์—… ์ค‘์— ํฐ ์ˆ˜์ • ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜์—ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋А๋‚€๋‹ค. ์–ด๋ ดํ’‹ํ•˜๊ฒŒ ์–ด๋–ค ๊ธฐ๋Šฅ์ธ์ง€๋งŒ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ๋๋‚˜๊ณ  ๋ณต๊ธฐํ•˜๋ฉด์„œ ์ง€์‹์„ ๊ณ„์† ๋ถˆ๋ ค๋‚˜๊ฐ€๊ณ ์‹ถ๋‹ค. ํŒ€์›๋ถ„๋“ค๊ณผ ํ˜‘์—…ํ•˜๋ฉด์„œ ์‚ฌํšŒ์—์„œ ์‹ ๋ขฐ๋ฅผ ์Œ“๊ณ  ์›๋งŒํ•œ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋˜ ์˜๋ฏธ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜€๋‹ค.
๋ฐ•์–‘ํ•˜ ์ธ๊ฐ„์˜ ์„ ํƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์‹ ๊ฒฝ๊ณผํ•™๊ณผ ํ–‰๋™๊ฒฝ์ œํ•™ ๊ด€์ ์—์„œ ๋ถ„์„ํ•  ๋•Œ ํฅ๋ฏธ๋กœ์šด ํŒจํ„ด์„ ๋ณด์ธ๋‹ค. ๋‡Œ์˜ ๊ธฐ์ €ํ•ต๊ณผ ์ „์ „๋‘์—ฝ ํ”ผ์งˆ์˜ ์ƒํ˜ธ์ž‘์šฉ์€ ์Šต๊ด€์  ํ–‰๋™ ํŒจํ„ด์„ ํ˜•์„ฑํ•˜๋Š”๋ฐ, ์ด๋Š” ์ผ์ƒ์  ์„ ํƒ์—์„œ '์ตœ์†Œ ์—๋„ˆ์ง€ ์›์น™'์„ ๋”ฐ๋ฅด๋Š” ๊ฒฝํ–ฅ์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ฆ‰, ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์˜์‚ฌ๊ฒฐ์ •์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ฒ ์ด์ง€์•ˆ ์ถ”๋ก  ๋ชจ๋ธ์— ๋”ฐ๋ฅด๋ฉด, ๊ฐœ์ธ์˜ ๊ณผ๊ฑฐ ํ–‰๋™ ํŒจํ„ด์€ ์‚ฌ์ „ ํ™•๋ฅ (prior probability)๋กœ ์ž‘์šฉํ•˜์—ฌ ์ดํ›„ ์„ ํƒ์˜ ํ™•๋ฅ  ๋ถ„ํฌ๋ฅผ ์กฐ๊ฑดํ™”ํ•œ๋‹ค. ์ด๋Š” ๋งˆ์น˜ ์ž๊ธฐ๊ฐ•ํ™” ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, ํ•œ๋ฒˆ ํ˜•์„ฑ๋œ ํ–‰๋™ ํŒจํ„ด์ด ์ง€์†์ ์œผ๋กœ ๊ฐ•ํ™”๋˜๋Š” ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ†ต๊ณ„์ ์œผ๋กœ '๊ฒŒ์œผ๋ฅธ' ํ–‰๋™ ํŒจํ„ด์„ ๋ณด์ธ ๊ฐœ์ธ์€ ๋ฏธ๋ž˜์—๋„ ๋™์ผํ•œ ํŒจํ„ด์„ ๋ฐ˜๋ณตํ•  ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค. ์ž์œ ์˜์ง€์— ๋Œ€ํ•œ ํ™˜์ƒ์€ ์ธ์ง€์‹ฌ๋ฆฌํ•™์—์„œ 'ํ†ต์ œ๋ ฅ ์ฐฉ๊ฐ(illusion of control)'์œผ๋กœ ์„ค๋ช…๋œ๋‹ค. ๋‹ค๋‹ˆ์—˜ ์›จ๊ทธ๋„ˆ(Daniel Wegner)์˜ ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด, ์˜์‹์  ์˜๋„์™€ ํ–‰๋™ ์‚ฌ์ด์˜ ์ผ์‹œ์  ์—ฐ๊ด€์„ฑ์ด ์ธ๊ณผ๊ด€๊ณ„๋กœ ์˜ค์ธ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ์‹ค์ œ๋กœ fMRI ์—ฐ๊ตฌ๋“ค์€ ์˜์‚ฌ๊ฒฐ์ •์ด ์˜์‹์  ์ธ์‹๋ณด๋‹ค ์ตœ๋Œ€ 7์ดˆ ์ „์— ์‹ ๊ฒฝํ•™์ ์œผ๋กœ ์ด๋ฏธ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ์Œ์„ ์‹œ์‚ฌํ•œ๋‹ค. ์ž์œ  ์˜์ง€๋กœ ๋ฏฟ๋Š” ๋‚˜์˜ ์„ ํƒ์ด ์‹ค์ƒ ๋งŒ์„ฑ์  ์Šต๊ด€์— ์˜์กด์— ์˜ํ•œ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.์ž๊ธฐํ•ฉ๋ฆฌํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ธ์ง€๋ถ€์กฐํ™” ์ด๋ก ์œผ๋กœ ์„ค๋ช… ๊ฐ€๋Šฅํ•˜๋‹ค. ์ธ๊ฐ„์€ ์ž์‹ ์˜ ํ–‰๋™๊ณผ ๋ฏฟ์Œ ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜๋ฅผ ๊ฒฝํ—˜ํ•  ๋•Œ ์‹ฌ๋ฆฌ์  ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ์š”์ธ์— ์ฑ…์ž„์„ ์ „๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋Œ€์‘ํ•œ๋‹ค. ์ด๋Š” ์ž๊ธฐ๋ณด์กด์  ๊ท€์ธ ์˜ค๋ฅ˜(self-serving attribution bias)์˜ ํ•œ ํ˜•ํƒœ๋กœ, ์‹คํŒจ๋Š” ์™ธ๋ถ€ ์š”์ธ์—, ์„ฑ๊ณต์€ ๋‚ด๋ถ€ ์š”์ธ์— ๊ท€์ธํ•˜๋Š” ์ฒด๊ณ„์  ํŽธํ–ฅ์ด๋‹ค.๊ฒฐ๊ตญ ์ž๊ธฐ์ธ์‹๊ณผ ๋ฉ”ํƒ€์ธ์ง€๋Š” ์ด๋Ÿฌํ•œ ๊ฒฐ์ •๋ก ์  ํŒจํ„ด์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ œ์‹œํ•œ๋‹ค. ์‹ ๊ฒฝ๊ฐ€์†Œ์„ฑ(neuroplasticity)์˜ ์›๋ฆฌ์— ๋”ฐ๋ฅด๋ฉด, ์ž๊ธฐ์ธ์‹์„ ํ†ตํ•œ ์˜๋„์  ๊ฐœ์ž…์€ ๋‡Œ์˜ ์‹ ๊ฒฝํšŒ๋กœ๋ฅผ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž์‹ ์˜ ํ–‰๋™ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฐ๊ด€์  ๊ด€์ฐฐ๊ณผ ์ž๊ธฐ๋น„ํŒ์  ์‚ฌ๊ณ ๋Š” ๊ธฐ์กด์˜ ๊ฒฐ์ •๋ก ์  ๊ฒฝ๋กœ์—์„œ ๋ฒ—์–ด๋‚˜ ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ์„ ํƒ์  ์ž์œ ๋ฅผ ํ–ฅํ•œ ์ฒซ๊ฑธ์Œ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.๊ฒฐ๋ก ์ ์œผ๋กœ, ์ธ๊ฐ„์˜ ์„ ํƒ์€ ์™„์ „ํ•œ ์ž์œ ์™€ ์™„์ „ํ•œ ๊ฒฐ์ •๋ก  ์‚ฌ์ด์˜ ์ŠคํŽ™ํŠธ๋Ÿผ ์ƒ์— ์กด์žฌํ•œ๋‹ค. ์ž๊ธฐ์ธ์‹์˜ ๊นŠ์ด์™€ ๋ฉ”ํƒ€์ธ์ง€ ๋Šฅ๋ ฅ์ด ์ด ์ŠคํŽ™ํŠธ๋Ÿผ ์ƒ์—์„œ ์šฐ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์ด๋Š” ๊ถ๊ทน์ ์œผ๋กœ ์ž์‹ ์˜ ํ–‰๋™์— ๋Œ€ํ•œ ์ฑ…์ž„์˜ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์‚ฌ์‹ค์„ ๋ฐ˜๋Œ€๋กœ ๋งํ•˜์ž๋ฉด, ์ฑ…์ž„์˜ ๋ฒ”์œ„์— ๋Œ€ํ•œ ์ธ์‹์ด ์ž๊ธฐ์ธ์‹์˜ ๊นŠ์ด๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๋กœ ์„ ํƒ์€ ์šด๋ช…์ด ์•„๋‹ˆ๋ผ, ์Šค์Šค๋กœ์˜ ์ธ์‹์— ๊ฐ€๊น๋‹ค.
๊น€๊ธฐํ™ ์ด๋ฒˆ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ธฐ์ˆ ์ด๋ผ ์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋‚˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ–ˆ๊ณ , ์ดˆ๋ฐ˜์—๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ• ์ง€์กฐ์ฐจ ๋ง‰๋ง‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒ€์›๋“ค์˜ ์ ๊ทน์ ์ธ ํ”ผ๋“œ๋ฐฑ๊ณผ ์ง€์†์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ๊ทธ๋ฆฌ๊ณ  ํ•จ๊ป˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ ์ฐจ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ๊ตฌ์กฐ์ ์ธ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฒŒ์‹œํŒ์˜ CRUD ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด์„œ Swagger์™€ Postman์„ ์ด์šฉํ•ด API๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ , ์‹ค์ œ๋กœ ์ž…๋ ฅํ•œ ๊ฐ’์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝํ—˜์€ ๊ต‰์žฅํžˆ ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์„ ํ†ตํ•ด "๋‚ด๊ฐ€ ๋งŒ๋“  ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•œ๋‹ค"๋Š” ์‹ค๊ฐ์ด ๋“ค์—ˆ๊ณ , ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ์ ์€ MSA ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•ด ๋ณธ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ์™€ ๋‹ฌ๋ฆฌ, ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•˜๊ณ  ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•˜๋ฉฐ ์„œ๋น„์Šค ๊ฐ„ ์ฑ…์ž„ ๋ถ„๋ฆฌ, ๋…๋ฆฝ ๋ฐฐํฌ, ํ™•์žฅ์„ฑ์˜ ๊ฐœ๋…์„ ์‹ค๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, Feign Client๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ์—ฐ๊ฒฐ ๋ฐฉ์‹๊ณผ ์žฅ๋‹จ์ ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Jira, GitHub, Discord๋ฅผ ํ™œ์šฉํ•œ ํ˜‘์—… ๋ฐฉ์‹๋„ ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Jira๋ฅผ ํ†ตํ•ด ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•  ์ผ์„ ์„ธ๋ถ„ํ™”ํ•˜๊ณ , ํ˜„์žฌ ์–ด๋–ค ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ธ์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, GitHub์™€ Discord๋ฅผ ์—ฐ๋™ํ•˜์—ฌ PR์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ž๋™ ์•Œ๋ฆผ์ด ์ „์†ก๋˜๋„๋ก ์„ค์ •ํ•ด, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์†๋„์™€ ์—…๋ฌด ์ง„ํ–‰ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด, ํ˜„์—…์—์„œ ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ํ˜‘์—… ๋„๊ตฌ๋ฅผ ์ง์ ‘ ์ฒดํ—˜ํ•ด ๋ณธ ์†Œ์ค‘ํ•œ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์Šคํ”„๋ง์— ๋Œ€ํ•œ ์ดํ•ด๋„์™€ ์ž์‹ ๊ฐ์„ ์–ป๊ฒŒ ๋œ ์ , ๊ทธ๋ฆฌ๊ณ  ํŒ€์›๋“ค๊ณผ์˜ ์›ํ™œํ•œ ํ˜‘์—… ๊ฒฝํ—˜์ด ์•ž์œผ๋กœ์˜ ๊ฐœ๋ฐœ ์ปค๋ฆฌ์–ด์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
๊น€์ง„์˜ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ์ธ NEWBIT์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ๊ณผ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด, ์‹ค์ œ ์‚ฌ์šฉ์ž ํ๋ฆ„์— ๋งž๋Š” ์„œ๋น„์Šค ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” Spring Boot๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ JPA์™€ MyBatis๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋“ฑ๋ก, ์ˆ˜์ •์€ JPA๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ณต์žกํ•œ ์กฐํšŒ๋‚˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋Š” MyBatis๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ CQRS ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๊ณ„์ธต์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ Spring Cloud Gateway์— ํ†ตํ•ฉํ•จ์œผ๋กœ์จ MSA ๊ตฌ์กฐ์—์„œ๋„ ์•ˆ์ •์ ์ธ ์ธ์ฆ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ๋Š” ์ฃผ๋กœ ๊ตฌ๋งค ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜์˜€๋Š”๋ฐ ๊ฐ€์žฅ ๊ณ ๋ฏผ์ด ๊นŠ์—ˆ๋˜ ๋ถ€๋ถ„์€ ์žฌํ™”(๋‹ค์ด์•„๋ชฌ๋“œ, ํฌ์ธํŠธ) ๊ด€๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ฐ’ ์ฆ๊ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋„˜์–ด์„œ, ํŠธ๋žœ์žญ์…˜ ์•ˆ์ •์„ฑ๊ณผ ์ด๋ ฅ ์ถ”์ ์ด ํ•„์ˆ˜์ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์นผ๋Ÿผ ๊ตฌ๋งค๋‚˜ ์ปคํ”ผ์ฑ— ์‹ ์ฒญ ์‹œ ์‚ฌ์šฉ์ž ์žฌํ™”๋ฅผ ์ฐจ๊ฐํ•˜๊ณ  ํžˆ์Šคํ† ๋ฆฌ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋ฉฐ, ์ƒํƒœ ์ „์ด๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๊ณผ์ œ์˜€์Šต๋‹ˆ๋‹ค. MSA ๊ตฌ์กฐ๋‚˜ Gateway ์ธ์ฆ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ๊ตฌ์กฐ ์„ค๊ณ„์— ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ , ์ผ๋ถ€ ๋„๋ฉ”์ธ์—์„œ๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ถฉ๋ถ„ํžˆ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ์—ฐ๋™ ๊ณผ์ •์—์„œ ๋ช‡ ์ฐจ๋ก€ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์กฐ์ •์ด ํ•„์š”ํ–ˆ๋˜ ์ ๋„ ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ํ˜‘์—…์€ Jira์™€ Discord, Github๋ฅผ ์—ฐ๋™ํ•ด์„œ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ ์ด ๋•๋ถ„์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ด์Šˆ์™€ ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋งค์šฐ ํŽธ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์งง์€ ์‹œ๊ฐ„์•ˆ์— ํ”„๋กœ์ ํŠธ ์„ค๊ณ„๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ, ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ๊นŒ์ง€ ๋๋งˆ์ณ์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ผผ๊ผผํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๊ธฐ๋„ ํ–ˆ๊ณ  ์ดˆ๊ธฐ ์„ค๊ณ„์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋œ ๋ถ€๋ถ„์ด๋‚˜ ์™„์„ฑ๋˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„๋„ ์žˆ์–ด์„œ ์•„์‰ฝ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ „์ฒด์ ์œผ๋กœ ์›น ๊ฐœ๋ฐœ์ด ์–ด๋–ค์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š”์ง€ ํ๋ฆ„์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€๊ณ  ํŒ€์›๋ถ„๋“ค๋„ ๋‹ค๋“ค ํ”„๋กœ์ ํŠธ์— ์—ด์‹ฌํžˆ ์ฐธ์—ฌํ•˜์‹œ๊ณ  ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๊ผผ๊ผผํžˆ ๋„์™€์ฃผ์…”์„œ ๋งŽ์ด ๋ฐฐ์›Œ๊ฐ€๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ ๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

About

๐Ÿปโ€โ„๏ธ๊น€๊ฒฝ๋ฏผ ๐Ÿฏ๊น€๊ธฐํ™ ๐ŸฆŠ๊น€์ง„์˜ ๐Ÿน๊น€์ฑ„์› ๐Ÿฆ๋ฐ•์–‘ํ•˜ ๐Ÿฐ์˜ค์œ ๊ฒฝ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors