Project

[ํ”„๋กœ์ ํŠธ ํšŒ๊ณ ] 2์ฐจ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๋ฉฐ

giraffe_ 2023. 4. 9. 18:25

  6์ฃผ ๊ฐ„, 2023.2.27 ~ 2023.4.7 ๊ธฐํš๋ถ€ํ„ฐ ์„ค๊ณ„, ๊ฐœ๋ฐœ, ๋ฐœํ‘œ๊นŒ์ง€ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์˜€์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ์™€๋Š” ๋งŽ์ด ๋‹ฌ๋ž๋‹ค.

 

 ์šฐ์„  ๊ฐœ๋ฐœ์ ์œผ๋กœ๋Š” ํŒ€์ด ์„ ํƒํ•œ ํŠธ๋ž™์— ๋งž๋Š” '๋น…๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ' ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ–ˆ์—ˆ๋‹ค๋Š” ์ ์—์„œ ๊ธฐํš๊ณผ ๊ธฐ์ˆ ์  ์ œ์•ฝ ๋•Œ๋ฌธ์— ๋‚œ์ด๋„๊ฐ€ ๋†’์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ ๋๋‚˜์ž๋งˆ์ž ๋ฐ”๋กœ ๋‘ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์— ํˆฌ์ž…์ด ๋˜์–ด์„œ ์ฒด๋ ฅ์ ์œผ๋กœ๋„ ์ง€์ณค์—ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์š”์ธ์ด ํ•ฉ์ณ์ ธ์„œ ํž˜๋“ค๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

 ์„ธ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์— ๋ฐ”๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด์„œ ๋ฐ”๋น ์ง€๊ธฐ ์ „์—, ๊ทธ๋ฆฌ๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ์ „์— ์ง€๋‚œ 6์ฃผ ๊ฐ„์˜ ํ”„๋กœ์ ํŠธ ๊ณผ์ •์„ ๋Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. (๐Ÿฅ•์‰ฌ๊ณ  ์‹ถ์–ด์š”..๐Ÿฅ•)

 

 

 

 

 

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

  • ํ”„๋กœ์ ํŠธ ์ธ์› : 6๋ช… (ํ”„๋ก ํŠธ์—”๋“œ 2๋ช…, ๋ฐฑ์—”๋“œ 4๋ช… (๋ฐฑ์—”๋“œ 1๋ช…์ด ์ธํ”„๋ผ๋„ ํ•จ))
  • ํ”„๋กœ์ ํŠธ : ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰ ๋ฐ ์—ฌํ–‰ ๋ฌผํ’ˆ ๊ฑฐ๋ž˜ ์›น์„œ๋น„์Šค
  • ๊นƒํ—ˆ๋ธŒ ๋งํฌ : ๋งํฌ ๋‚ด๋ฆผ

  • ํ˜‘์—… : Gitlab, Jira,  Notion, Mattermost, Slack
  • ๊ธฐ์ˆ  ์Šคํƒ
    • Frontend : React, Redux, Style components, Javascript
    • Backend : Spring Boot, Spring Cloud, JPA, QueryDsl, MySQL, Websocket, Redis
    • Data : Selenium, Hadoop, Spark
    • Infra : AWS EC2, Docker, Jenkins, Nginx

 

 

 

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋‚˜์˜ ์—ญํ• 

  • ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(Selenium, Hadoop)
  • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ(Spring boot, MySQL, JPA, QueryDsl)
  • PPT, UCC, ์‹œ์—ฐ ๋‹ด๋‹น

 

 

 

 

 

๐Ÿšฉ ํ”„๋กœ์ ํŠธ ๊ณผ์ •

1. ๊ธฐํš

 

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

 

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

 

์ง€๋‚œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๊ฑฐ์˜ 2์ฃผ์ฐจ๊นŒ์ง€ ๊ธฐํš์„ ํ•˜๊ฒŒ ๋˜์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์€ '๋น…๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ'์ด๋ผ๋Š” ์ฃผ์ œ ๋•Œ๋ฌธ์— ๊ธฐํš์ด ๋”์šฑ ํž˜๋“ค์–ด์„œ ์‹œ์ž‘ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ธฐํš์„ ์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๋ฅผ ์Ÿ๊ฒŒ ๋˜์—ˆ๋‹ค. ํŒ€์›๋“ค ๋ชจ๋‘ ๊ธฐํš์ด ๋„๋ฌด์ง€ ๋‚˜์˜ค์ง€ ์•Š์•„์„œ ์ง€์ณ๊ฐ”๋‹ค.

 

 ์—ฌ๋Ÿฌ ์•„์ด๋””์–ด ์ค‘, ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋ฅผ ์ฃผ์ œ๋กœ ์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋งค์ผ ๊พธ์ค€ํžˆ ํ•ญ๊ณต๊ถŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ž…์ด ๋˜๊ณ  ์žˆ๊ณ , ์ด๊ฑธ ์Œ“๋Š”๋‹ค๋ฉด  ์œ ์˜๋ฏธํ•œ ๋น…๋ฐ์ดํ„ฐ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์—์„œ๋„ ํ•ด๊ฒฐํ•ด์•ผ ๋  ์ ์ด ์žˆ์—ˆ๋‹ค. ํ•ญ๊ณต๊ถŒ API๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ(์Šค์นด์ด์Šค์บ๋„ˆ API) ํ•˜๋ฃจ์— ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฑด ์ˆ˜๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๊ณ , ๋ชจ์„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ํ•œ์ •์ ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ญ๊ณต๊ถŒ ์‚ฌ์ดํŠธ๋ฅผ ํฌ๋กค๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

 

 

 

2. ์„ค๊ณ„

 

 ๋‹ค๊ฐ™์ด ๋””์ž์ธ๊ณผ ์ปจ์…‰ ํšŒ์˜๋ฅผ ํ•˜๊ณ  ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋งก์€ ํŒ€์›๋“ค์€ ํ”ผ๊ทธ๋งˆ๋กœ UX/UI ์„ค๊ณ„๋ฅผ ํ•˜๊ณ , ๋ฐฑ์—”๋“œ๋ฅผ ๋งก๊ฒŒ ๋œ ํŒ€์›๋“ค์€ ERD ์„ค๊ณ„, API ์„ค๊ณ„, ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค.

 

 

 

  • ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

 

 ๋‹ค๊ฐ™์ด ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ธฐํš์„ ๊ตฌ์ฑ„ํ™”ํ•˜๊ณ , ๋™์‹œ์— ๋””์ž์ธ ์ปจ์…‰ UX/UI ๋“ฑ์„ ์ด์•ผ๊ธฐํ–ˆ์—ˆ๋‹ค.

 

 

 

 

  • ํ”ผ๊ทธ๋งˆ

 

 ์ €๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์›น์•ฑ์ด์–ด์„œ ๋ชจ๋ฐ”์ผ ๋ทฐ๋กœ ์„ค๊ณ„๋ฅผ ํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์™„์ „ํžˆ ์›น์— ๋งž๊ฒŒ ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์›น์ด ํ™”๋ฉด์ด ๋„“์–ด์„œ ์„ค๊ณ„ํ•˜๊ธฐ์—๋Š” ๋” ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜๋Š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋””์ž์ธ๊ณผ UX/UI์— ๊ด€์—ฌ๋ฅผ ๋งŽ์ด ์•ˆ ํ–ˆ๊ณ , ํ”ผ๊ทธ๋งˆ๋ฅผ ํ•˜๋‚˜๋„ ์•ˆ ๋งŒ์ง€๊ณ  ์™„์ „ํžˆ ํ”„๋ก ํŠธ์—”๋“œ์—๊ฒŒ ๋งก๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

  • ERD

 

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

 

 

 

 

 

  • API ๋ช…์„ธ์„œ

 

 ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Swagger๋ฅผ ์ ๊ทน ํ™œ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— API ๋ช…์„ธ์„œ์— response๋Š” ๋ง๊ณ , url ํŒจํ„ด๊ณผ request ์œ„์ฃผ๋กœ ์ ์—ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŒ€์›๋“ค์ด Swagger๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , ์ง์ ‘ Json ํ˜•ํƒœ์˜ request, response๋ฅผ ์จ ๋ฌธ์„œ๋กœ ๊ด€๋ฆฌํ•ด Postman์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํŒ€์˜ ๊ฐœ๋ฐœ ๋ฌธํ™”์— ๋งž๊ฒŒ API ๋ช…์„ธ์„œ๋ฅผ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 Swagger๋ฅผ ์“ฐ๋ฉด ์•Œ์•„์„œ JSON ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ, JSON์— ๋‹ด์„ ํ•„์š”ํ•œ ๊ฐ์ฒด ๋ฐ ํ•„๋“œ๋“ค์„ ์ง์ ‘ ํƒ€์ดํ•‘ํ•ด์•ผ ๋ผ์„œ ๊ท€์ฐฎ์•˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹๋„ ์žฅ์ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. Swagger๋Š” ๋”ฐ๋กœ Entity์™€ Controller์— ๋ช…์‹œ๋ฅผ ํ•ด์•ผ ํ•˜๊ณ , ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํŒ€์›์ด ๋ฌธ์„œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์„œ๋กœ ๋”ฐ๋กœ ์ •๋ฆฌํ•ด ๋‘”๋‹ค๋ฉด ๋ฐฐํฌ๊ฐ€ ์•ˆ๋˜์–ด๋„ ์„œ๋กœ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 

 

  • ์•„ํ‚คํ…์ฒ˜

์ตœ์ข… ์•„ํ‚คํ…์ฒ˜

 

 ์ง€๋‚œ ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋„ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ Spring Cloud๋ฅผ ํ™œ์šฉํ•˜์—ฌ MSA๋กœ ์„ค๊ณ„๊ฐ€ ๋˜์—ˆ๊ณ , Docker์™€ Jenkins๋ฅผ ํ™œ์šฉํ•˜์—ฌ CI/CD ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์€ ํฌ๋กค๋งํ•œ ๋ฐ์ดํ„ฐ์…‹๋ถ€ํ„ฐ DB๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋˜ํ•œ, ํ”„๋กœ์ ํŠธ ๋ง‰๋ฐ”์ง€์—๋Š” ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋‚˜ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋„ ์ถ”๊ฐ€๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

 

 

 

  • ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ

 

 

 ํ•ญ๊ณต๊ถŒ ์ •๋ณด๋ฅผ Selenium์„ ํ™œ์šฉํ•ด ํฌ๋กค๋งํ•ด์„œ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , ํฐ ์šฉ๋Ÿ‰์˜ ํŒŒ์ผ(๋น…๋ฐ์ดํ„ฐ)๋ฅผ Hadoop์—์„œ ์ฝ์–ด ์ฒ˜๋ฆฌํ•ด์„œ ์ €์žฅํ•˜๊ณ , Spark๋ฅผ ํ†ตํ•ด ๊ณ ์†์œผ๋กœ ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ , RDB๋กœ ์ด๊ด€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ–ˆ๋‹ค.

 

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ์œผ๋กœ ๋น…๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ค„๋ณด๊ธฐ๋„ ํ•˜๊ณ , ๊ด€๋ จ ์ง€์‹์ด ์ „๋ฌดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋น…๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์—„์ฒญ ์ฐพ์•„ ๋ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ด€๋ จ ์ž๋ฃŒ๋„ ๋งŽ์ด ์—†์–ด์„œ ์–ด๋ ค์› ๋‹ค.

 

 

 

 

 

3. ๊ฐœ๋ฐœ

  • ํฌ๋กค๋ง

 Selenium์„ ์ด์šฉํ•˜์—ฌ ํ•ญ๊ณต๊ถŒ ์‚ฌ์ดํŠธ์—์„œ ๋งค์ผ ์•ฝ 40๋งŒ ๊ฑด์˜ ํ•ญ๊ณต๊ถŒ ์ •๋ณด๋ฅผ ํฌ๋กค๋งํ–ˆ๋‹ค. ํฌ๋กค๋งํ•˜๊ณ ์žํ•˜๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋ถ„์„ํ•ด ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰์‹œ ์ถœ๋ ฅํ•ด๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์„ ํƒํ•ด์„œ ๊ฐ€์ ธ์˜ค๋„๋ก ํ–ˆ๋‹ค.

 

 ์ „์„ธ๊ณ„ ๋ชจ๋“  ์ฃผ์š” ๋…ธ์„ ์— ๋Œ€ํ•ด ํฌ๋กค๋งํ•ด์•ผ ํ–ˆ๊ณ , ๊ทธ ์–‘์ด ๋ฐฉ๋Œ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กค๋งํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์–ด ํŒ€์›๋ผ๋ฆฌ ๋ถ„๋Ÿ‰์„ ์ž˜ ๋‚˜๋ˆ  ํฌ๋กค๋ง์„ ํ•ด์•ผ ๋์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ค๋žœ ์‹œ๊ฐ„ ํฌ๋กค๋งํ•˜๊ฒŒ ๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฐจ๋‹จ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๋‹จ๋˜๋Š” ์ฃผ๊ธฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ผ์ • ๋ถ„๋Ÿ‰๋งˆ๋‹ค ์‰ฌ์—ˆ๋‹ค๊ฐ€ ํฌ๋กค๋งํ•ด์•ผ ๋๋‹ค.

 

 

  • Hadoop

 ๋งค์ผ ์•ฝ 40๋งŒ ๊ฑด์— ๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋น…๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ธ Hadoop์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ํฉ์–ด์ ธ ์žˆ๋Š” ๊ฐ™์€ ๋‚ ์— ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„(GB ๋‹จ์œ„์˜€๋‹ค) Hadoop์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์ „์ฒ˜๋ฆฌํ•ด HDFS์— ์ €์žฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ๊ณต๊ถŒ ์ถ”์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์† ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” Spark ์„œ๋ฒ„์— ์ œ๊ณตํ–ˆ๋‹ค.

 

 ํ•˜๋‘ก์„ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค. ์›๋ž˜ ๊ต์œก ์ธก์—์„œ ์ œ๊ณตํ•œ ํ•˜๋‘ก ๊ณต์šฉ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํŒ€์ด ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ๊ณต์šฉ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํŒ€ EC2 ์„œ๋ฒ„๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. Hadoop์„ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

  • Querydsl

 ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰์€ ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๊ณ , ์„ธ๋ถ€ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ๋Š” ๊ฒฝ์œ  ํšŸ์ˆ˜์™€ ๊ฐ€๊ฒฉ ๋ฒ”์œ„๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •๋ ฌ(๊ธˆ์•ก์ˆœ, ๊ฒฝ์œ ์ง€์ˆœ)๊ณผ ํŽ˜์ด์ง•, ์นด์šดํŒ…๊นŒ์ง€ ํ•ด์•ผ ๋๋‹ค. JPA๋งŒ์œผ๋กœ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ๋ณต์žกํ•ด์ง€๊ณ , ๋งŽ์€ ์กฐ๊ฑด ๋ถ„๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์•ˆ ์ข‹์•„์กŒ๋‹ค.

 

 ๊ทธ๋ž˜์„œ ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ •๋ ฌ, ํŽ˜์ด์ง• ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” QueryDsl์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. QueryDsl์„ ์“ฐ๋‹ˆ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€ํ–ˆ๋‹ค.

 

 

  • ์ธ๋ฑ์Šค ์ถ”๊ฐ€

 ํ•ญ๊ณต๊ถŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๊ณ  DB์— ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ฒ€์ƒ‰ ํ•„์ˆ˜ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ๋“ค์„ ์กฐํ•ฉํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ Query Cost๊ฐ€ ์ž‘์€ ์กฐํ•ฉ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ฒฐ๊ตญ ์•ฝ 240ms๊ฐ€ ๊ฑธ๋ฆฌ๋˜ ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰ API๋ฅผ ์•ฝ 40ms๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

 

๊ทธ ์™ธ

  • ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

 ๋งค์ผ ์•„์นจ์— ์ผ๊ณผ ์‹œ์ž‘ ์ „, ํŒ€์—์„œ ์Šคํฌ๋Ÿผ ๋ฏธํŒ…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ปจ์„คํ„ดํŠธ๋‹˜๊ป˜์„œ ์–ด๋А ํšŒ์‚ฌ์˜ ๊ฐœ๋ฐœ ๋ฌธํ™”๋กœ ์Šคํƒ ๋”ฉ ๋ฏธํŒ…์„ ์˜์ƒ์œผ๋กœ ์†Œ๊ฐœํ•ด์ฃผ์…จ๋‹ค. ๋ฏธํŒ… ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์„œ์„œ ๋ฏธํŒ…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฌธํ™”๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋„ ๋งค์ผ ์•„์นจ์— ์„œ์„œ ๊ฐ์ž์˜ ๊ฐœ๋ฐœ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ํ•ด์•ผ ํ•  ์ผ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ฉฐ ๋ฏธํŒ…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์•„์นจ์— ํ™œ๊ธฐ์ฐจ๊ฒŒ ๋ฏธํŒ…์„ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜๊ธฐ์— ์ข‹์•˜๋‹ค.

 

 

  • ๋ธŒ๋žœ์น˜ ์ „๋žต

  ์ž์ฃผ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฐํฌ๋ฅผ ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ์šฐ์„  ํฌ๊ฒŒ Master, Develop, Feature 3๊ฐ€์ง€ ๋ ˆ๋ฒจ๋กœ ๋‚˜๋ˆด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Feature ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆด๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๋กœ๋„ ๋‚˜๋ˆ„๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ˆ ์ธํ”„๋ผ ๋‹จ์—์„œ CI/CD๋ฅผ ๊ตฌ์„ฑํ•ด ๋ฐฐํฌํ•˜๊ธฐ๋„ ํŽธํ–ˆ๋‹ค.

 

 

  • ๊ฐœ๋ฐœ ์ปจ๋ฒค์…˜

 ํŒ€์—์„œ ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ํ™•์‹คํ•œ ์ปจ๋ฒค์…˜์„ ์ •ํ–ˆ๋‹ค. Jira์˜ ๋ฐฑ๋กœ๊ทธ ์ด๋ฆ„ ๊ทœ์น™๋ถ€ํ„ฐ Git์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€, ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์˜ ํŒจํ‚ค์ง€์™€ ํด๋ž˜์Šค๋ช…๊นŒ์ง€ ์ •ํ•œ ๋’ค, Notion์— ์ •๋ฆฌ๋ฅผ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋“  ํŒ€์›์ด ์ผ๊ด€๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค.

 

๋•๋ถ„์— Jira์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๊ฐ™์€ ๋ฐฑ์—”๋“œ ํŒ€์›์˜ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ์— ์ข‹์•˜๋‹ค. ์‚ฌ์†Œํ•œ ๊ฒƒ์ด์ง€๋งŒ ํŒ€ ๋‚ด์—์„œ ์ปจ๋ฒค์…˜์„ ์ •ํ•œ ๋•๋ถ„์— ๊ฐœ๋ฐœ ์™ธ์— ๋“œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ฐœ๋ฐœ ์ปจ๋ฒค์…˜์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์‹ค๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

4. ๋ฐœํ‘œ

 

 

 

 

 

๐Ÿ“– ๋ฐฐ์šด ์  / ๋А๋‚€ ์ 

  • ํ˜‘์—…์˜ ์ค‘์š”์„ฑ

 

 

 

๐Ÿ“– ์•„์‰ฌ์šด ์ 

  • ์„ค๊ณ„

 

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ