project-slack.jpg


LOTTERY ๐Ÿ€

1. ๊ฐœ๋ฐœ ๋ชฉ์ 

๊ฐœ์ธ์ ์ธ ์ทจ๋ฏธ(?)๋กœ ๋งค์ฃผ ๋ณต๊ถŒ์„ ๊ตฌ๋งคํ•˜๊ณ  ์žˆ๋‹ค. ๋กœ๋˜๋Š” QR์ฝ”๋“œ๋กœ ๋‹น์ฒจ ๊ฒฐ๊ณผ๋ฅผ ์†์‰ฝ๊ฒŒ ์ œ๊ณตํ•ด์ฃผ์ง€๋งŒ, (๋ฐฐ์•„ํ”„์ง€๋งŒ) ๋‹น์ฒจ ๊ธˆ์•ก ์ •๋ณด๋ฅผ ์ฐพ๊ณ ์ž ํ• ๋• ๋„ค์ด๋ฒ„๋‚˜ ๋™ํ–‰๋ณต๊ถŒ ์‚ฌ์ดํŠธ๋กœ ์ ‘๊ทผํ•ด์„œ ๋‹น์ฒจ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค.

๋˜ํ•œ, ์Šคํ”ผ๋˜ ๋ณต๊ถŒ๋„ ์ข…์ข… ํŒ๋งค์  ์ž…๊ณ ์œจ๊ณผ ๋‚จ์€ ๋‹น์ฒจ ๋งค์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ์ „๋žต์ (?)์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ๊ตฌ๋งคํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ™•์ธํ•˜๊ณ ์ž ๋™ํ–‰๋ณต๊ถŒ ์‚ฌ์ดํŠธ ์ ‘์†์ด ์ ์  ๋งŽ์•„์กŒ๋‹ค.

์ด๋Ÿฐ ํ–‰์œ„๊ฐ€ ๋น„ํšจ์œจ์ ์ด๋ผ ์ƒ๊ฐํ–ˆ๊ณ  ์ด๋Š” โ€œ๊ตฌ๋… ํ˜•ํƒœ๋กœ ๋ฐ›์•„๋ณด๊ฒŒํ•˜๋ฉด ๋˜๊ฒ ๋Š”๋ฐ?โ€๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.



2. ๊ตฌ์กฐ ์„ค๊ณ„


์šฐ์„  ๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค์ด๊ณ  ํ˜ผ์ž ๊ฐœ๋ฐœํ•˜๊ณ  ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์šด์˜ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†์‰ฝ๊ฒŒ ์„œ๋น„์Šค๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ, Kubernetes๋ฅผ ์ƒˆ๋กœ ํ•™์Šตํ•ด์„œ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉํ–ฅ๋ณด๋‹ค๋Š” ์ต์ˆ™ํ•œ Docker Compose ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์„ ์ •์˜ํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ณ ์žํ•˜์˜€๋‹ค.

AWS EC2๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ธ์Šคํ„ด์Šค์— ๋ชจ๋“  ์„œ๋น„์Šค๋“ค์„ Docker Compose ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ ์ž ํ•˜์˜€์œผ๋ฉฐ ๊ตฌ์„ฑํ•œ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


์‹ค์ œ ์œ„์™€๊ฐ™์€ ์•„ํ‚คํ…์ณ๋กœ EC2 ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ž‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์„ธ๋ถ€์ ์ธ ์‚ฌํ•ญ์€ ์•„๋ž˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.



2-1. ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„ (Traefik)


์šฐ์„  ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค(ํฌ๋กค๋ง ์„œ๋ฒ„, API ์„œ๋ฒ„ ๋“ฑ๋“ฑ)๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๊ณ  ์ด ์„œ๋น„์Šค๋“ค์„ ๋ฌถ๊ธฐ ์œ„ํ•œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์„ ํƒํ•ด์•ผ ํ–ˆ๋‹ค.

NginX์™€ Traefik์ด ๋ณดํŽธ์ ์ธ ์„ ํƒ์ง€์˜€์œผ๋ฉฐ ๊ทธ ์ค‘ ๋‚˜๋Š” Traefik์„ ์„ ํƒํ•˜์˜€๋‹ค.

  • ์†์‰ฌ์šด ์„ค์ •์œผ๋กœ ๋Œ€์‰ฌ๋ณด๋“œ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ 

    ์‹ค์ œ ์‚ฌ์šฉ ์ค‘์ธ ํ™”๋ฉด ์˜ˆ์‹œ ๐Ÿ‘

  • ์ž๋™์œผ๋กœ Letโ€™s Encrypt ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ฐฑ์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋œ ์ 

์ด ์™ธ์—๋„ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๊ธฐ์— ํ•™์Šต์„ ์œ„ํ•œ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š”์  ๋“ฑ๋“ฑ์˜ ์ด์œ ๋กœ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.



2-2. ํฌ๋กค๋ง ์„œ๋ฒ„ (Express)


ํฌ๋กค๋ง ์„œ๋ฒ„๋Š” ์–ด๋– ํ•œ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  365์ผ 24์‹œ๊ฐ„ ๋‚ด๋‚ด ์ง€์ •ํ•œ ์‹œ๊ฐ„์— ํŠน์ • ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผํ•˜๋ฏ€๋กœ API ์„œ๋ฒ„์™€ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.


  • ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API ์„œ๋ฒ„๊ฐ€ ๋ถ€ํ•˜๋ฅผ ๊ฒฌ๋””์ง€ ๋ชปํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žฌ ์‹œ์ž‘๋˜๋”๋ผ๋„ ํฌ๋กค๋ง ์„œ๋ฒ„๋Š” ํ•ญ์‹œ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค.
  • API ์„œ๋ฒ„๊ฐ€ ์˜๋„์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„๋„ ํฌ๋กค๋ง ์„œ๋ฒ„๋Š” ํ•ญ์‹œ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค.

์œ„ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผํ•˜๋ฏ€๋กœ API ์„œ๋ฒ„์™€ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํฌ๋กค๋ง ์„œ๋ฒ„๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์–ด๋– ํ•œ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹จ์ˆœํ•˜๋‹ค. (์•„๋ž˜ ๊ธฐ๋Šฅ๋งŒ์„ ์ฐฉ์‹คํžˆ ์ˆ˜ํ–‰ํ•œ๋‹ค.)

// Routes
app.use('/', indexRouter);
app.use('/health', healthRouter);

// Lotto Crawler
const lottoRule = new schedule.RecurrenceRule();

lottoRule.dayOfWeek = [0, new schedule.Range(0, 6)];
lottoRule.hour = 3;
lottoRule.minute = 0;
lottoRule.tz = 'Asia/Seoul';

lottoSchedule(lottoRule);

// Speetto Crawler
const speettoRule = new schedule.RecurrenceRule();
speettoRule.dayOfWeek = [0, new schedule.Range(0, 6)];
speettoRule.hour = 9;
speettoRule.minute = 0;
speettoRule.tz = 'Asia/Seoul';

๋”ฐ๋ผ์„œ, ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ (์ƒ๋Œ€์ ์œผ๋กœ) ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•œ NestJS๋ณด๋‹ค๋Š” ์ž์œ ๋กญ๊ณ  ๊ฐ„๋‹จํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Express๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€๋‹ค.



2-3. API ์„œ๋ฒ„ (NestJS)


๋‹ค์Œ์œผ๋กœ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API ์„œ๋ฒ„๋Š” ์ต์ˆ™ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ NestJS๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

API ์„œ๋ฒ„๋Š” LOTTERY๐Ÿ€์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋‹ด๋‹นํ•œ๋‹ค.


  • LOTTERY๐Ÿ€ Repository์˜ Watch๋ฅผ ํด๋ฆญํ•œ ์œ ์ €๋“ค์„ Github API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ธฐ ๋ฉ”์ผ๋ง ์„œ๋น„์Šค
  • Bolt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šฌ๋ž™ ์•ฑ์„ ํ†ตํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค
  • ์Šฌ๋ž™ ์•ฑ ์‚ฌ์ดํŠธ ๋ฌธ์˜ํ•˜๊ธฐ ๋ฐ ๊ธฐํƒ€ ์™ธ๋ถ€ API ์ œ๊ณต

์ •๊ธฐ์ ์ธ ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด์„œ ๋ฉ”์ผ์ด ๋ฐœ์†ก๋˜์–ด์•ผ ํ•˜๊ณ  ์Šฌ๋ž™ ์•ฑ์„ ํ†ตํ•ด ์™ธ๋ถ€์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค. (๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๊ณผ๊ฑฐ ํฌ์ŠคํŒ… ๊ธฐ์ˆ  ๋‚ด์šฉ์„ ๋„์ž…ํ•˜์˜€๋‹ค.)

๐Ÿ“Œ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Redis ๋ถ„์‚ฐ๋ฝ ๊ตฌํ˜„ํ•˜๊ธฐ


์ด ์™ธ์—๋„ ์•„์ง ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์ด ๊ณ„์† ๋„์ž…๋  ์˜ˆ์ •์ด๋ฏ€๋กœ ์•„์ง ๊พธ์ค€ํžˆ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰์ค‘์ด๊ธฐ๋„ ํ•˜๋‹ค.

  • โ€œ๋ฌธ์˜ํ•˜๊ธฐโ€ ์ž‘์„ฑ์‹œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ
  • ๋‹ต๋ณ€ ๋˜ํ•œ ์Šฌ๋ž™(๊ฐœ์ธ ์ฑ„๋„)์—์„œ ์ด๋ฉ”์ผ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ต๋ณ€ ๊ธฐ๋Šฅ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ


2-4. ์บ์‹ฑ ์„œ๋ฒ„ (Redis)


ํฌ๋กค๋ง ์„œ๋ฒ„์—์„œ ์–ป์€ ๋ณต๊ถŒ ๋‹น์ฒจ ์ •๋ณด๋“ค์€ ์ •๊ทœํ™”๋œ ํ›„ DB์— ์ €์žฅ๋œ๋‹ค.

์ตœ์‹  ํšŒ์ฐจ ์ •๋ณด๋“ค์€ ์ž์ฃผ ์‚ฌ์šฉ๋  ํ…๋ฐ, ๋งค๋ฒˆ DB์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์ปค๋„ฅ์…˜์ด ๋ฐœ์ƒํ•˜๊ณ  DB ์„œ๋ฒ„๊ฐ€ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์œผ๋ฏ€๋กœ (๊ฐœ์ธ NAS ์„œ๋ฒ„์— ์˜ฌ๋ ค๋‘๊ณ  ์‚ฌ์šฉ์ค‘์ด๋‹ค.) ์ •๋ณด ์ „๋‹ฌ์‹œ ๋‚ฎ์€ ์†๋„๋กœ ์ œ๊ณต๋  ์ˆ˜ ์žˆ๋‹ค.


์ •๋ณด ์ „๋‹ฌ ์†๋„๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Redis๋ฅผ ํ™œ์šฉํ•ด์„œ ๋น ๋ฅธ ์†๋„๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„ํ•˜์˜€๋‹ค.

  • ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์„œ๋ฒ„(ํฌ๋กค๋ง ์„œ๋ฒ„)์™€ ์ „๋‹ฌํ•˜๋Š” ์„œ๋ฒ„(API ์„œ๋ฒ„)๊ฐ€ ์„œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Redis ์บ์‹ฑ ๋ ˆ์ด์–ด๋ฅผ ๋‘์–ด ๋‘ ์„œ๋ฒ„๊ฐ„์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ฒฉ์ฐจ๋ฅผ ์ตœ๋Œ€ํ•œ ์ขํžˆ๊ณ ์ž ๋„์ž…ํ•˜์˜€๋‹ค.


2-5. ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ์„œ๋ฒ„ (NginX)


์ œ์ผ ๋งˆ์ง€๋ง‰์— ๊ตฌํ˜„๋œ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. (๊ธฐํš ๋‹จ๊ณ„์—์„œ๋Š” ๊ณ ๋ ค๋Œ€์ƒ์ด ์•„๋‹ˆ์—ˆ๋‹ค. ๐Ÿฅฒ)

์Šฌ๋ž™ ์•ฑ์„ ์Šฌ๋ž™ ์•ฑ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐํฌํ•˜๊ณ ์ž ์•ฑ์„ ์ถœ์‹œํ•˜๋ คํ•˜๋‹ˆ ์Šฌ๋ž™ ์•ฑ ์†Œ๊ฐœ ์›น ํŽ˜์ด์ง€๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์ œ์ถœ๋˜์–ด์•ผํ–ˆ๋‹ค.

  • ์•ฑ ์„ค์น˜ ๋ฒ„ํŠผ์„ ๋‚ดํฌํ•ด์•ผํ•˜๊ณ , ์–ด๋–ค ์ •๋ณด๋“ค์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ฐ ์ง€์› ํŽ˜์ด์ง€ ๋˜ํ•œ ๋‚ดํฌ๋˜์–ด์•ผํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์  ์›น ์‚ฌ์ดํŠธ๋กœ ์›น ์‚ฌ์ดํŠธ ํผ๋ธ”๋ฆฌ์‹ฑ ํ›„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์„ค๊ณ„์— ํฌํ•จ๋˜์—ˆ๋‹ค.



3. ๊ฐœ๋ฐœ ๊ณผ์ • ์ค‘ ์–ด๋ ค์›€


๋ชจ๋“  ๊ณผ์ •์ด ์ˆœํƒ„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํ•˜๋‚˜๋งŒ ๊ผฝ์ž๋ฉด ์Šฌ๋ž™ ์•ฑ์„ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์ด ์ œ์ผ ๋‚œ๊ด€์ด์—ˆ๋‹ค. (์•„์ง๋„ ์‹ฌ์‚ฌ ๋ฐ›๊ธฐ์œ„ํ•œ ์ตœ์†Œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๐Ÿ˜ฎโ€๐Ÿ’จ)

๊นŒ๋‹ค๋กœ์šด ์Šฌ๋ž™ ์•ฑ ์ถœ์‹œ ๊ณผ์ • ๐Ÿ˜‚


์‹ฌ์‚ฌ ํ”ผ๋“œ๋ฐฑ ๋ด‡์—์„œ ๋จผ์ € ์žกํ˜€์„œ ์ •์‹ ์‹ฌ์‚ฌ ์ œ์ถœ์€ ๋ชปํ•˜์˜€๋‹ค. (๋‚ด์šฉ์„ ์š”์•ฝํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.)

  • ์Šฌ๋ž™ ์•ฑ ์†Œ๊ฐœ ์›น ํŽ˜์ด์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ์–‘์‹์ด๋‹ค. (โœ… ์Šฌ๋ž™ ์•ฑ ์›น ํŽ˜์ด์ง€ ๋ฐฐํฌ ์™„๋ฃŒ)
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ถŒํ•œ์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค. (โœ… ๋ถˆํ•„์š” ๊ถŒํ•œ ์ •๋ฆฌ ์™„๋ฃŒ)
  • 10๊ฐœ ์ด์ƒ์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์„ค์น˜๋˜์–ด์•ผํ•œ๋‹ค.

๋‹ค๋ฅธ๊ฑด ์Šค์Šค๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, 10๊ฐœ ์ด์ƒ์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ค์น˜๋Š” ํƒ€์ธ์˜ ๋„์›€์„ ๋ฐ›์•„์•ผํ•œ๋‹ค. ๐Ÿฅฒ (ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ™์€ ๊ณณ์— ํ™๋ณด๋ฅผ ํ•ด๋ณผ๊นŒ ์ƒ๊ฐ์ค‘์ด๋‹ค.)




์ด ์™ธ์—๋„ โ€œํ˜ผ์žโ€ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ฑ์ด ํŽธํ•œ์ง€, ์‹ค์ œ๋กœ ์œ ์šฉํ•œ์ง€์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ธฐ๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ์–ด๋ ค์› ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„๋  ๋•Œ๋งˆ๋‹ค, ์ฃผ๋ณ€์— ์žˆ๋Š” ํŒ€์›๋“ค์—๊ฒŒ ๋จผ์ € ๋งŽ์ด ํ™๋ณด๋„ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ์„ ๋งŽ์ด ๋“œ๋ ธ๋˜๊ฑฐ ๊ฐ™๋‹ค.

ใ€Œ๊ทœ์น™ ์—†์Œใ€ ์˜ 4A ํ”ผ๋“œ๋ฐฑ์ด ์ด๋Ÿด ๋•Œ ์“ฐ๋Š”๊ฑด ์•„๋‹Œ๊ฑฐ๊ฐ™์€๋ฐ.. ๐Ÿคฃ

๊ฒฐ๊ตญ ์•„๋ฌด๋ฆฌ ์ž‘์€ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ผ๋„ โ€œํ˜ผ์žโ€์„œ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ถ„๋ช…ํžˆ ๋ฐœ์ƒํ•œ๋‹ค๋ผ๋Š” ์ ์ด ๊ฐ€์žฅ ์–ด๋ ค์šด ์ ์ด ์•„๋‹ˆ์—ˆ๋‚˜ ์‹ถ๋‹ค.



๐Ÿค” Understanding

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์ •๋ง ์ž‘์€ ์•„์ด๋””์–ด์ธ ๋ณต๊ถŒ ๋‹น์ฒจ ์ •๋ณด๋ฅผ โ€œ๊ตฌ๋… ํ˜•ํƒœ๋กœ ๋ฐ›์•„๋ณด๊ฒŒํ•˜๋ฉด ๋˜๊ฒ ๋Š”๋ฐ?โ€๋กœ ์‹œ์ž‘ํ•˜์˜€๋‹ค.

์‹ค์ œ๋กœ ์ฒ˜์Œ ๊ธฐํš ๋‹จ๊ณ„์—์„œ๋Š” ๋กœ๋˜ ๋‹น์ฒจ ๊ฒฐ๊ณผ๋งŒ LOTTERY๐Ÿ€ Repository์˜ Watch๋ฅผ ๋ˆŒ๋Ÿฌ์ค€ ์œ ์ €๋“ค์—๊ฒŒ ์ •๊ธฐ ๊ตฌ๋… ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ๋ฐœ์†กํ•ด์ฃผ๋Š” ํ˜•ํƒœ๋กœ ๊ธฐํš๋˜์—ˆ์—ˆ๋‹ค.

๊ฐœ๋ฐœ ํ›„ ์ฃผ๋ณ€์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋งŒ ์ถœ์‹œํ•ด๋ด๋„ ์ •๋ง ์—ฌ๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์€ ๊ฒƒ ๊ฐ™๋‹ค.

  • ์ €๋Š” ๊นƒํ—ˆ๋ธŒ ๊ณ„์ •์ด ์—†๋Š”๋ฐ์š”? (๋น„๊ฐœ๋ฐœ ์ง๊ตฐ)
  • ๋กœ๋˜ ๋ง๊ณ  ์Šคํ”ผ๋˜๋„ ์•Œ๋ ค์ฃผ์„ธ์š”.
  • ์•ฑ ์†Œ๊ฐœ ์›น ์‚ฌ์ดํŠธ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ๋„ˆ๋ฌด ๋ถˆํŽธํ•ด์š”.

์—ฌ๋Ÿฌ ๊ฑด์ „ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ํ† ๋Œ€๋กœ ๊พธ์ค€ํžˆ ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜๊ฑฐ ๊ฐ™๋‹ค.

์ข‹์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋จผ์ € ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋“ค๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐ€๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹(์• ์ž์ผ(Agile) ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก )์˜ ํ•„์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ชธ์œผ๋กœ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์•„์ง ์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์•„์ง ๊ฐœ๋ฐœํ•ด ๋‚˜๊ฐ€์•ผํ•  ๋ถ€๋ถ„๋“ค์ด ๋งŽ์ด ๋‚จ์•„์žˆ๊ณ , ์ •์‹์œผ๋กœ ์Šฌ๋ž™ ์•ฑ ๋””๋ ‰ํ† ๋ฆฌ์—๋„ ์‹ฌ์‚ฌ ๋ฐ›์€ LOTTERY๐Ÿ€ ์•ฑ์„ ๊ผญ ๋ฐฐํฌํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.