Project

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

giraffe_ 2023. 2. 26. 19:14

 ์•ฝ 6~7์ฃผ ๊ฐ„ 2022.01.09 ~ 2022.02.17 + (~ 2022.02.22) ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. (๊ธฐํš๋ถ€ํ„ฐ ๋ฐœํ‘œ๊นŒ์ง€ ๋‹ค ํฌํ•จ) ๊ฐœ๋ฐœํ•˜๋Ÿฌ ์˜จ 6๋ช…์ด์„œ ๊ธฐํš๋ถ€ํ„ฐ ๋””์ž์ธ, ์„ค๊ณ„, ๊ฐœ๋ฐœ, ๋ฐœํ‘œ๊นŒ์ง€ ๋‹ค ํ•ด์•ผ ๋ผ์„œ ํž˜๋“ค์—ˆ๊ณ  ๋นก๋นกํ•œ ์ผ์ •์ด์—ˆ๋‹ค.

 

 ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š” ๋™์•ˆ ์—ฌ๋Ÿฌ ์ผ๋“ค์ด ์žˆ์—ˆ๊ณ  ํž˜๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌด์‚ฌํžˆ ๋งˆ์น˜๊ณ , ์ˆ˜์ƒ๊นŒ์ง€ ํ•˜๊ฒŒ ๋˜๋ฉฐ ์œ ์˜๋ฏธํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ธ ๊ฒƒ ๊ฐ™์•„ ๋ฟŒ๋“ฏํ•˜๋‹ค.

 

 ์ •์‹ ์—†์ด ๊ฐœ๋ฐœํ•˜๋А๋ผ ์ค‘๊ฐ„์ค‘๊ฐ„ ๊ธฐ๋ก์„ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ ๋๋‚˜๊ณ  ํž˜๋“ค์—ˆ๋˜ ์ ์ด๋‚˜ ์•„์‰ฌ์› ๋˜ ์ ๋“ค์ด ๋ง๊ฐ๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ์ „์— ์ง€๋‚œ 6~7์ฃผ ๊ฐ„์˜ ํ”„๋กœ์ ํŠธ ๊ณผ์ •์„ ๋Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

 

 

 

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

  • ํ”„๋กœ์ ํŠธ ์ธ์› : 6๋ช… (ํ”„๋ก ํŠธ์—”๋“œ 3๋ช…, ๋ฐฑ์—”๋“œ 3๋ช… (๋ฐฑ์—”๋“œ 1๋ช…์ด ์ธํ”„๋ผ๋„ ํ•จ))
  • ํ”„๋กœ์ ํŠธ : ์†Œ์…œ ์šด๋™ ๋ชจ์ž„ ๋งค์นญ ์„œ๋น„์Šค
  • ๊นƒํ—ˆ๋ธŒ ๋งํฌ : ๋งํฌ ๋‚ด๋ฆผ

  • ํ˜‘์—… : GitLab, Jira,  Notion, Mattermost, Webex, Discord
  • ๊ธฐ์ˆ  ์Šคํƒ
    • Frontend : React, Redux, Tailwind, Typescript
    • Backend : Spring Boot, Spring Cloud, JPA, MySQL, Websocket, Redis, Oauth2
    • Infra : AWS EC2, Docker, Jenkins, Nginx

 

 

 

 

 

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

  • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
  • DB ์„ค๊ณ„/๊ตฌ์ถ•
  • PPT ๋‹ด๋‹น

 

 

 

 

 

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

1. ๊ธฐํš

 ์šฐ๋ฆฌ ํŒ€์ด ์„ ํƒํ•œ ํŠธ๋ž™์ด ์›น๋””์ž์ธ์ธ ๋งŒํผ UX/UI์ ์œผ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์ด ์žˆ์–ด์•ผ ํ–ˆ๊ณ , ์›นRTC๋ฅผ ์„ ํƒํ•œ ๋‹ค๋ฅธ ํŒ€๊ณผ๋Š” ๋‹ค๋ฅธ ๊ธฐ์ˆ ์  ์ฐจ๋ณ„์ ์„ ์คฌ์–ด์•ผ ํ–ˆ๋‹ค.

 

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

 

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

 

 ์ฒซ๋ฒˆ์งธ ๊ธฐํš์˜ ์ฃผ์ œ์—์„œ ๋ฐฉํ–ฅ์„ฑ์„ ๋ฐ”๊ฟ”, ํ•œ ํŒ€์›์˜ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๊ธฐํš์ด ๋‚˜์™”๋‹ค. ์šด๋™ ๋ชจ์ž„ ์„œ๋น„์Šค์ด๋‹ค. ๊ฐœ์ธ๋“ค์ด ์šด๋™ ๋ชจ์ž„์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐœํ•ด ์ฃผ๊ณ , ํŒ€์„ ๊พธ๋ ค ์ง€์†์ ์œผ๋กœ ํŒ€๋“ค ๊ฐ„ ๊ฒฝ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์ž๋™ ๋งค์นญ, ํŒ€ ํ†ต๊ณ„๊นŒ์ง€ ์ง€์›ํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.

 

 ์ปจ์„คํ„ดํŠธ๋‹˜๊ป˜ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์œผ๋กœ๋„ ๊ธฐ์ˆ ์˜ ๊ตฌํ˜„๋„๋‚˜ ๊ฐœ๋ฐœ๋Ÿ‰์ด ๋งŽ๋‹ค๋Š” ์กฐ์–ธ๋„ ๋ฐ›์•˜๋‹ค. (๋ณดํ†ต ํ”„๋ก ํŠธ+๋ฐฑ ํ•ฉ์ด 100์ด๋ผ๊ณ  ์ณค์„ ๋•Œ, ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ํ”„๋ก ํŠธ 70, ๋ฐฑ 70, ๋„ํ•ฉ 140์˜ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ๋ง์”€ํ•ด์ฃผ์…จ๋‹ค๐Ÿ˜ฑ ์•ผ๊ทผ ํ•„์ˆ˜..)

 

 

 

 

 

2. ์„ค๊ณ„

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

 

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

 

 

 

  • ํ”ผ๊ทธ๋งˆ

 ๋‹ค๋“ค ๋””์ž์ธ๊ณผ๋Š” ๋จผ.. ๊ณต๋Œ€ ์ถœ์‹ ์ด์ง€๋งŒ, ๊ผผ๊ผผํ•˜๊ฒŒ ์„ค๊ณ„๋ฅผ ์ž˜ํ–ˆ๋‹ค. ํ‰์†Œ ํ† ์Šค ์–ดํ”Œ์„ ์ž์ฃผ ์“ฐ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ UX/UI๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ๊น”๋”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ํ† ์Šค ์–ดํ”Œ์„ ์ฐธ๊ณ ํ•˜๋ฉฐ ๋””์ž์ธ๊ณผ UX/UI ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค. ํŽ˜์ด์ง€ ์ˆ˜๋„ ์—„์ฒญ ๋งŽ๋‹ค! ๋ฐฑ์—”๋“œ ์„ค๊ณ„ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์งˆ ๋•Œ์ฏค ์ค‘๊ฐ„์— ๋‚˜๋„ ์ผ๋ถ€๋ถ„(ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€, ๋งˆ์ดํŽ˜์ด์ง€ ์ผ๋ถ€) ์ฐธ์—ฌํ–ˆ๋‹ค. ์ปจ์„คํ„ดํŠธ๋‹˜๊ป˜์„œ ํ”„๋ก ํŠธ๋Š” ์ด๋Œ€๋กœ ๊ฐœ๋ฐœ๋งŒ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค๋ฉฐ, ํ”„๋ก ํŠธ ์„ค๊ณ„๊ฐ€ ํ›Œ๋ฅญํ•˜๋‹ค๋Š” ํ‰์„ ๋“ค์—ˆ๋‹ค.

 

 

๊ทผ๋ฐ ๋ฐฑ์—”๋“œ ์„ค๊ณ„๋Š”? ํ”„๋ก ํŠธ์— ๋น„ํ•ด์„œ๋Š” ๊ผผ๊ผผํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ํ‰์„ ๋“ค์—ˆ๋‹ค..

 

 ๋ฐฑ์—”๋“œ์—์„œ ๊ตฌ์กฐ์ ์œผ๋กœ ๋งŽ์€ ์‹œ๋„๋ฅผ ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๋ชจ๋†€๋ฆฌํ‹ฑ์ด ์•„๋‹ˆ๋ผ MSA ๊ตฌ์กฐ๋ฅผ ์“ฐ๊ฒŒ ๋˜์—ˆ๊ณ , CI/CD๋„ ๋„์ž…ํ•ด์•ผ ๋๋‹ค. ์•„๋ฌด๋„ ์ด์ „์— ์ด๋Ÿฐ ๊ตฌ์กฐ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๋ณธ ์ ์ด ์—†์–ด์„œ ํŠนํžˆ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์— ์• ๋ฅผ ๋จน์—ˆ๋‹ค. 

 

 

 

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

Notion์— ์ž‘์„ฑ์„ ํ–ˆ๋‹ค

 

UX/UI ์„ค๊ณ„๋ฅผ ๋ณด๋ฉฐ ์ž‘์„ฑ์„ ํ–ˆ๋‹ค. ์ด๋•Œ ํ”„๋ก ํŠธ ํŒ€๊ณผ ๊ธฐํš์„ ํ•œ ํŒ€์›๊ณผ ๋งŽ์ด ์†Œํ†ต์„ ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ํฐ ๊ธฐ๋Šฅ๋ณ„๋กœ Epic๋ฅผ ๋‚˜๋ˆด์œผ๋ฉฐ, ํ™”๋ฉด๊ณผ ์ปดํฌ๋„ŒํŠธ, ์„ธ๋ถ€ ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•ญ๋ชฉ์„ ๋‚˜๋ˆ  ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

 

  • ERD

ERD Cloud์—์„œ ์ž‘์„ฑํ•œ ์ดˆ๊ธฐ ์„ค๊ณ„ / ์ตœ์ข… ERD

 

 ์ฒ˜์Œ์—๋Š” ERD Cloud์—์„œ ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค. ์„ค๋ช…๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ํ˜‘์—… ๊ธฐ๋Šฅ๋„ ์žˆ์–ด์„œ ๋™์‹œ ํŽธ์ง‘๋„ ๊ฐ€๋Šฅํ•˜๊ณ  ์ข‹์€๋ฐ.. FK ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ๋ถˆํŽธํ–ˆ๋‹ค. ์ œ๋Œ€๋กœ ํ‘œ์‹œ๊ฐ€ ์•ˆ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ต์ˆ™ํ•œ MySQL Workbench๋กœ ๊ฐˆ์•„ํƒ€์„œ ์—ฌ๊ธฐ์„œ ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค. ์–ด์ฐจํ”ผ ๋‚˜์ค‘์— DB ๊ตฌ์ถ•๋„ ํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ..

 

 1์ฐจ๋กœ ERD ์„ค๊ณ„ํ•œ ๊ฑฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ปจ์„คํ„ดํŠธ๋‹˜๊ป˜ ๊ฐ”์„ ๋•Œ Table๋“ค์„ ์ข€ ๋” ์ชผ๊ฐœ๋ผ๋Š” ์กฐ์–ธ์„ ๋“ค์—ˆ๋‹ค. ์ž์ฃผ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์ •๋ณด์™€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š” ์ •๋ณด๋ฅผ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•˜์…จ๊ณ , ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณต์šฉ์œผ๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ ค๋˜ Table์€ ๊ตณ์ด ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋‚˜๋ˆ ์„œ ์“ฐ๋Š”๊ฒŒ ์ข‹๋‹ค๋ผ๊ณ  ํ•˜์…จ๋‹ค.

 

  ERD๋Š” ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ถ”๊ฐ€๋˜๋Š” ๋ถ€๋ถ„์ด๋‚˜ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธฐ๋ฉด์„œ ๋งŽ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค. ์ด๊ฑด ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ DB๋ฅผ ์–ผ๋งˆ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ณ  ์žฌ๊ตฌ์ถ•ํ–ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค..

 

 

 

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

์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ตœ์ข…๋ณธ

 

 

 MSA์™€ CI/CD ๊ตฌ์ถ•๊ณผ ๊ฐ™์€ ์ „๋ฐ˜์ ์ธ ์ธํ”„๋ผ๋Š” ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ํŒ€์› ๋ถ„์ด ๋งก์•„์ฃผ์…จ๋‹ค.

 

 ์šฐ๋ฆฌ ํŒ€์€ MSA๋ฅผ Spring Cloud(API Gateway, Eureka)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ค๊ณ„ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค๋ฅผ ํฐ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํฌ๊ฒŒ 6๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆด๋‹ค. ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด Genkins์™€ Docker๋ฅผ ํ™œ์šฉํ•˜์—ฌ CI/CD๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค.

 

 

 

 

 

  • API ๋ฌธ์„œ

 

 ๊ทธ๋™์•ˆ ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฌธ์„œ๊นŒ์ง€ ์“ฐ๋ฉฐ API ์„ค๊ณ„๋ฅผ ํ•ด๋ณธ ์ ์ด ์—†์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  API๋“ค์„ ์ •๋ฆฌํ•˜๋‹ˆ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์œ ์šฉํ–ˆ๋‹ค. ๊ฐ ์„œ๋ฒ„ ๋ฐ ๊ธฐ๋Šฅ๋ณ„ ๊ตฌํ˜„ํ•ด์•ผ ํ•  API ๋ถ„๋Ÿ‰์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ฌธ์„œ๋Œ€๋กœ Controller ๊ตฌํ˜„์— ๋ฐ”๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.

 

 ๋‚˜๋Š” ์„œ๋น„์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ๋ถ€๋ถ„ API ์„ค๊ณ„๋ฅผ ๋งก์•˜์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ์ถ”๊ฐ€๊ธฐ๋Šฅ๋“ค์„ ๋‚ด๊ฐ€ ๋งก๊ฒŒ ๋˜๋ฉด์„œ ์ด ์•ฝ 40๊ฐœ์— ๋‹ฌํ•˜๋Š” API ์„ค๊ณ„๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค!

 

 

 

 ๊ทธ ์™ธ์— ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ๋„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์šฐ๋ฆฌ ํŒ€์ด ๊ธฐํš์„ ๋Šฆ๊ฒŒ ํ•ด์„œ ๋” ์ด์ƒ ๊ฐœ๋ฐœ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๋Šฆ์ถœ ์ˆ˜ ์—†์–ด์„œ ๊ทธ๋ฆฌ์ง€ ์•Š์•˜๋‹ค.

 

 

 

 

 

3. ๊ฐœ๋ฐœ

 ๋“œ๋””์–ด ๊ฐœ๋ฐœ ์‹œ์ž‘์ธ ๊ฒƒ์ธ๊ฐ€..? ์ค‘๊ฐ„์— ์„ค์—ฐํœด๋„ ๋ผ์—ฌ์žˆ๊ณ , ๋ฐ”๋กœ ์ค‘๊ฐ„๋ฐœํ‘œ๊ฐ€ ์žˆ์–ด ๋‚˜๋Š” PPT๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์•ผ ํ•ด์„œ ๊ฐœ๋ฐœ ์‹œ์ž‘์ผ์ด ๋Šฆ์ถฐ์กŒ๋‹ค. 1์›” 27์ผ๊นŒ์ง€ PPT๋ฅผ ์ˆ˜์ •ํ•˜๋А๋ผ ๊ฐœ๋ฐœ์„ ์ œ๋Œ€๋กœ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์€ 3์ฃผ + (์ถ”๊ฐ€ 2~3์ผ)์˜€๋‹ค. ์ „์ฒด์ ์œผ๋กœ ๊ธฐํš, ์„ค๊ณ„, ๋ฐœํ‘œ ์ค€๋น„ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์ด ์ค„์–ด๋“ค๊ณ  ์žˆ์—ˆ๋‹ค๐Ÿ˜ญ ๊ทธ๋ž˜๋„ ์ตœ์ข…์ ์œผ๋กœ๋Š” ์–ด์ฐŒ์–ด์ฐŒ ๋‚ด๊ฐ€ ๋งก์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ๊ฑฐ์˜ ๋‹คํ–ˆ๋‹ค.

 

 

 

 ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์„ ํฌ๊ฒŒ ๋‚˜๋ˆ„์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํšŒ์› ๊ด€๋ฆฌ / ์ธ์ฆ
  • ์•Œ๋ฆผ ๊ธฐ๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…
  • ์‹ค์‹œ๊ฐ„ ์šด๋™ ๋ชจ์ž„ / ์ผ๋ฐ˜ ์šด๋™ ๋ชจ์ž„
  • ํŒ€ ๊ฒฝ๊ธฐ / ํŒ€ ํ†ต๊ณ„ / ํŒ€ ๊ฒฝ๊ธฐ ์ž๋™ ๋งค์นญ

 

 

 ๋ฐฑ์—”๋“œ์—์„œ 1์ฐจ๋กœ ๊ฐ๊ฐ ํšŒ์› ๊ด€๋ฆฌ/์ธ์ฆ/์•Œ๋ฆผ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์‹ค์‹œ๊ฐ„ ์šด๋™ ๋ชจ์ž„ & ์ผ๋ฐ˜ ์šด๋™ ๋ชจ์ž„์„ ๋งก์•„ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ผ๋‹จ ํŒ€ ๊ด€๋ จ ๊ธฐ๋Šฅ์€ 2์ฐจ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚˜๋Š” 1์ฐจ๋กœ ์‹ค์‹œ๊ฐ„ ์šด๋™ ๋ชจ์ž„๊ณผ ์šด๋™ ๋ชจ์ž„์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์‹œ๊ฐ„ ์ง€๋„ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋ก ํŠธ 1๋ช…๊ณผ ์šด๋™ ๋ชจ์ž„ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ํ”„๋ก ํŠธ 1๋ช…๊ณผ ํ˜‘์—…์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

 ๊ฒฐ๊ตญ ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋‚˜๋Š” ์‹ค์‹œ๊ฐ„ ์šด๋™ ๋ชจ์ž„, ์šด๋™ ๋ชจ์ž„, ํŒ€ ๊ฒฝ๊ธฐ / ํŒ€ ๊ฒฝ๊ธฐ ์ž๋™ ๋งค์นญ, ํŒ€ ํ†ต๊ณ„ ๊ธฐ๋Šฅ์„ ๋งก์•„ ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ 1๋ช…์€ CI/CD์™€ ์†Œ์…œ ๋กœ๊ทธ์ธ, Firebase ๊ตฌ์ถ• ๋•Œ๋ฌธ์— ๋ฐ”์˜์…จ๊ณ , ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ 1๋ช…์€ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

 

 

๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฒช์€ ์ด์Šˆ๋‚˜ ๊ธฐ์ˆ ์  ํŠน์ง•์ด๋‹ค. 

 

  • Swagger

 ๋‚ด๊ฐ€ ๋งŒ๋“  ์„œ๋ฒ„ API๋ฅผ ์—ฐ๊ฒฐํ•  ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž์™€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด Swagger๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. Swagger๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœํ•˜๋Š” ํŒ€์›๊ณผ ์–ด๋–ค ํ˜•์‹์œผ๋กœ data๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•˜๋Š”์ง€ ์†Œํ†ตํ•˜๊ธฐ ํŽธํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Swagger์—์„œ API ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ธฐ๋„ ํŽธํ–ˆ๋‹ค.

 

Swagger Controller

 

 

 

  • JPA

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

 

 ํ•˜์ง€๋งŒ ์กฐ์ธ์œผ๋กœ ์—ฎ์—ฌ์žˆ๋Š” ํ…Œ์ด๋ธ”๋“ค์„ ๊ฐ™์ด INSERT, DELETE ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ž๋™์ฆ๊ฐ€๋œ ID ๊ฐ’์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. Oracle์—๋Š” Squence๊ฐ€ ์žˆ์–ด์„œ ์ž๋™์ฆ๊ฐ€๋œ ID ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋„ INSERT์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. (Oracle์— ์ต์ˆ™ํ–ˆ๋˜ ๋‚˜๋Š” MySQL์— Squence๊ฐ€ ์—†๋Š” ์ค„ ๋ชฐ๋ž๋‹ค..)

 

 ํ•ด๊ฒฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๊ธ€๋ง์„ ํ•œ ๊ฒฐ๊ณผ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งคํ•‘์„ ํ•˜๋ฉด ์ฟผ๋ฆฌ ํ•œ ๋ฒˆ๋งŒ์œผ๋กœ ํ•œ ๋ฒˆ์— INSERT๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ธฐ์กด Entity๋ฅผ ๋œฏ์–ด๊ณ ์ณ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งคํ•‘์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–‘๋ฐฉํ–ฅ DELETE ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งคํ•‘์ด ๋˜์–ด์žˆ์–ด ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค..๐Ÿ˜ญ ์ด๊ฑฐ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ์—„์ฒญํ•˜๋ฉฐ JPA ๊ด€๋ จ Annotation๊ณผ ์˜ต์…˜๋“ค์„ ์—„์ฒญ ์ฐพ์•„๋ดค๋‹ค. ์ด์ „๋ณด๋‹ค JPA์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€๋ฅผ ํ•˜๊ฒŒ ๋œ ๊ธฐํšŒ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

 

  • MySQL ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ

 ๊ฒŒ์‹œ๊ธ€์„ ๋“ฑ๋กํ•œ ์ง€ 30๋ถ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๊ฐ€ ๋˜๊ฒŒ ํ•ด์•ผ ํ–ˆ์—ˆ๋‹ค. MySQL์—์„œ ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์จ์„œ DB์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด๋ฒคํŠธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ฒ˜์Œ ์จ๋ด์„œ ์Šค์ผ€์ค„๋Ÿฌ ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•˜๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์• ๋ฅผ ๋จน์—ˆ๋‹ค.

 

delimiter |
CREATE EVENT delete_live
    ON SCHEDULE
        EVERY 10 SECOND
	ON COMPLETION PRESERVE
    ENABLE
    COMMENT '๋“ฑ๋ก ํ›„ 30๋ถ„์ด ์ง€๋‚˜๋ฉด ์‚ญ์ œ'
	DO
	BEGIN
		delete m
        from live_member m join live l
        on m.live_id = l.live_id
		where TIMESTAMPDIFF(MINUTE , l.regist_time, now()) >= 30;
        
		delete from live
		where TIMESTAMPDIFF(MINUTE , regist_time, now()) >= 30;
	END 
| delimiter ;

 

 

 

  • HTTPS

 ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ง€๋„ API๋ฅผ ์“ฐ๋Š”๋ฐ HTTPS๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๊ธฐ๋„ ํ•˜๊ณ , ๋ณด์•ˆ์„ฑ์„ ์œ„ํ•ด ๋ชจ๋“  API ํ˜ธ์ถœ์„ HTTPS๋กœ ํ†ต์ผํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€ HTTPS๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ, ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐ›์•„ ๋ณ„๋„๋กœ ์„ค์ •ํ•ด์•ผ ๋์—ˆ๋‹ค. ๋•๋ถ„์— SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๊ณผ์ •๊ณผ SSL์ด ์ ์šฉ๋˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

  • CORS

 ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์›์ด ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋กœ์ปฌ ์„œ๋ฒ„ API์™€ ์—ฐ๊ฒฐํ•˜๋˜ ์ค‘ CORS ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค๊ณ  ์•Œ๋ ค์คฌ๋‹ค. ์›์ธ์„ ์ฐพ์•„๋ณด๋‹ˆ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด์•ˆ์ ์ธ ์ด์œ ๋กœ cross-origin(๋„๋ฉ”์ธ ๋˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฆ„)์˜ ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์˜ React ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” localhost:3000์ธ๋ฐ, ๋ฐฑ์—”๋“œ์˜ ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” localhost:8080์œผ๋กœ ๋‘˜์˜ ์„œ๋ฒ„์˜ ํฌํŠธ๋ฒˆํ˜ธ๊ฐ€ ๋‹ฌ๋ผ์„œ ๋ฐœ์ƒํ•œ ์ผ์ด์—ˆ๋‹ค. CORS๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฑ์—”๋“œ์˜ ์Šคํ”„๋ง ์„œ๋ฒ„์—์„œ WebMvcConfigurer๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. Allow-Origin์„ ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

  • ELO ์•Œ๊ณ ๋ฆฌ์ฆ˜

 ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ํŒ€๊ณผ ๊ฒฝ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กค, ํ”ผํŒŒ๋žญํ‚น ๋“ฑ์—์„œ ๋งŽ์ด ์“ฐ๋Š” MMR ์‹œ์Šคํ…œ์„ ๋„์ž…ํ–ˆ๋‹ค. MMR์˜ ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ ELO ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ์„œ ๊ฒฝ๊ธฐ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ์ ์ˆ˜๋ฅผ ์‚ฐ์ •ํ–ˆ๋‹ค. ์ ์ˆ˜๊ฐ€ ๋†’์€ ํŒ€์„ ๋งŒ๋‚˜์„œ ์ด๊ธฐ๋ฉด ๋งŽ์€ ์ ์ˆ˜๋ฅผ ์–ป๊ฒŒ ๋˜๊ณ , ์ ์ˆ˜๊ฐ€ ๋‚ฎ์€ ํŒ€์„ ๋งŒ๋‚˜์„œ ์ง€๋ฉด ๋งŽ์€ ์ ์ˆ˜๋ฅผ ์žƒ๊ฒŒ ๋œ๋‹ค.

 

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

 

//1. ์˜ˆ์ƒ ์Šน๋ฅ  ๊ตฌํ•˜๊ธฐ
int Pme = teamMe.getPoint();
int Pop = teamOp.getPoint();

double Wme = 1.0 / (Math.pow(10, ((Pop - Pme) / 400)) + 1); //๋‚ด ํŒ€์˜ ์˜ˆ์ƒ ์Šน๋ฅ 
double Wop = 1.0 / (Math.pow(10, ((Pme - Pop) / 400)) + 1); //์ƒ๋Œ€ ํŒ€์˜ ์˜ˆ์ƒ ์Šน๋ฅ 

//2. ์ ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ
int K = 30; //๊ฐ€์ค‘์น˜
double W = 0; //๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ

//๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ ๋ณ„ W
String resultMe = teamMatchResultMe.getResult();
String resultOp = teamMatchResultOp.getResult();

W = getW(W, resultMe);
Pme += (int)(K * (W - Wme));

W = getW(W, resultOp);
Pop += (int)(K * (W - Wop));

//3. ํŒ€ ๊ฐ์ฒด์—์„œ ์ ์ˆ˜ ์ •๋ณด ๊ฐฑ์‹ ํ•˜๊ธฐ
teamMe.setPoint(Pme);
teamOp.setPoint(Pop);

 

 

 

  • ๋งค์นญ

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

 

 ํ”„๋กœ์ ํŠธ ๋งˆ๊ฐ์ด ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์•„์„œ MySQL DB์— '๋Œ€๊ธฐ๋ฐฉ'์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค์—ˆ๊ณ , ๋Œ€๊ธฐ์—ด ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ๋งค์นญ์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ํƒ์ƒ‰ํ•˜๋„๋ก ํ–ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ , ๋Œ€๊ธฐ์—ด์„ ์กฐํšŒํ•˜๊ณ , ๋Œ€๊ธฐ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์กฐ๊ฑด์„ ์™„ํ™”ํ•˜๊ณ , ๋งค์นญ๋˜๋ฉด ๋Œ€๊ธฐ์—ด์—์„œ ์‚ญ์ œํ•˜๊ณ , ๊ฒฝ๊ธฐ์— ๋“ฑ๋กํ•˜๊ณ , ์ƒ๋Œ€๋ฐฉ ํŒ€ ์ •๋ณด ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๊ณ .. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์œผ๋กœ ์‹ ๊ฒฝ์„ ๋งŽ์ด ์ผ์–ด์•ผ ํ–ˆ๋‹ค.

 

 ๊ตฌํ˜„์„ ํ•˜๊ธด ํ–ˆ์ง€๋งŒ Redis๊ฐ€ ์•„๋‹ˆ๋ผ RDB๋กœ ๊ตฌํ˜„์„ ํ•˜๊ฒŒ ๋˜์–ด์„œ ์ฐ์ฐํ–ˆ๋‹ค. ๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด Redis๋กœ ๋ฐ”๊ฟ”๋ณด๋Š” ์ž‘์—…์„ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

 

 

 

 

  • FCM ์•Œ๋ฆผ

 ๋งค์นญ์ด ์™„๋ฃŒ๋˜๋ฉด ๋งค์นญ์ด ๋œ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋งค์นญ๋œ ์ƒ๋Œ€๋ฐฉ์˜ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋งค์นญ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์— ๋งž๊ฒŒ ๋‹ค๋ฅธ ํŒ€์›์ด ๊ตฌ์ถ•ํ•œ FCM ์„œ๋ฒ„๋กœ Json ํ˜•์‹์œผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋ƒˆ์–ด์•ผ ํ–ˆ๋‹ค.

 

 FCM์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ์ฒด์— ์•Œ๋ฆผ์— ํ•„์š”ํ•œ ์ œ๋ชฉ, ๋‚ด์šฉ, ์œ ์ € ํ† ํฐ ๋ฆฌ์ŠคํŠธ, data (String์˜ map)๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด๊ธฐ๋กœ ํ–ˆ๋‹ค. data์—๋Š” ๋งค์นญ๋œ ์œ ์ €๋“ค์—๊ฒŒ ๋ณด๋‚ด์ค„ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํŒ€์˜ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์•ผ ํ–ˆ๋‹ค. data๋ฅผ String์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด Gson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด Jsonํ˜•์‹์˜ String์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค.

 

 

 

  • OpenFeign

 ํŒ€์„ ์ƒ์„ฑํ•˜๋ฉด ์ฑ„ํŒ…๋ฐฉ์ด ๋งŒ๋“ค์–ด์ง€๋„๋ก ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ MSA ๊ตฌ์กฐ๋กœ ์ฑ„ํŒ… ์„œ๋ฒ„๊ฐ€ ๋”ฐ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์–ด์„œ ์–ด๋–ป๊ฒŒ ์ฑ„ํŒ…์„œ๋ฒ„์˜ Service๋ฅผ ์‚ฌ์šฉ์„ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค. MSA ๊ตฌ์กฐ์—์„œ ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ์„œ๋น„์Šค ์‚ฌ์šฉ์„ ์•Œ์•„๋ณด๋‹ค๊ฐ€ OpenFeign์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 Feign Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ FeignClient interface๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฑ„ํŒ… ์„œ๋ฒ„ RestController์˜ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋“ค์„ ๊ฐ€์ ธ์™”๋‹ค. ๊ทธ๋ฆฌ๊ณ  Service์—์„œ FeignClient interface๋ฅผ ๋ถˆ๋Ÿฌ ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•˜์—ฌ ์ฑ„ํŒ… ์„œ๋ฒ„์˜ api๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

@FeignClient(name = "chat", url = "https://")
public interface ChattingServiceClient {

    @PostMapping("/GatheringChatRoom")
    String createGatheringChatRoom(@RequestBody Map<String, Object> map);

    @PostMapping("/TeamChatRoom")
    @Headers(value = "Content-Type: application/json")
    String createTeamChatRoom(@RequestBody Map<String, Object> map);
}

 

 

 

 

 

  • Builder ํŒจํ„ด

 

 

 

 

๊ทธ ์™ธ

  • ์—์ž์ผ, ์Šคํฌ๋Ÿผ & Jira

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

 

 

 

  • ํ•ดํ‚น

 ์šฐ๋ฆฌ ํŒ€์€ ํ•ดํ‚น์„ 2๋ฒˆ์ด๋‚˜ ๋‹นํ–ˆ๋‹ค! ์œ ์ถ”ํ•˜๊ธฐ ์‰ฌ์šด ์„œ๋ฒ„ url๊ณผ ๊ณ„์ • ID์™€ ํŒจ์Šค์›Œ๋“œ ์‚ฌ์šฉ์ด ๋ฌธ์ œ์˜€๋‹ค. ์ฒ˜์Œ ํ•ดํ‚น์„ ๋‹นํ–ˆ์„ ๋•Œ๋Š” DB๊ฐ€ ์ดˆ๊ธฐํ™”๋˜ ์žˆ์—ˆ๊ณ , ํ•ด์ปค๊ฐ€ ๋น„ํŠธ์ฝ”์ธ์„ ๋‚ด๋†“์œผ๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ฒฐ๊ตญ AWS์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ณ„์ •๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์คฌ๋‹ค.

 

 ํ•˜์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ๋˜ ํ„ธ๋ ธ๋‹ค.. ์‹ฌ์ง€์–ด ๋ฐœํ‘œ ๋‹น์ผ ์ƒˆ๋ฒฝ์—๐Ÿ˜ญ ๋‹น์žฅ ๋ช‡ ์‹œ๊ฐ„ ํ›„์— ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ ๋ฐœํ‘œํ•  ๋•Œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ์—ฐํ•ด์•ผ ํ•˜๋Š”๋ฐ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ ธ์„œ ์•ˆ ๋Œ์•„๊ฐ€๊ณ , ์šฐ๋ฆฌ์˜ ๋ฉ˜ํƒˆ๋„ ํ„ฐ์ง€๊ณ  ๋‚œ๋ฆฌ๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.

 

 ์„œ๋ฒ„ ๋ณต๊ตฌ์™€ ํ•ดํ‚น ๋Œ€์‘์„ ์œ„ํ•ด CI/CD ํ•˜๋Š” ํŒ€์›์ด ๊ณ ์ƒ์„ ํ–ˆ๋‹ค. ์˜คํžˆ๋ ค ํ•ดํ‚น๋‹นํ•ด์„œ ์ด๋ฅผ ์œ„ํ•ด ๋Œ€์‘์„ ํ–ˆ๋˜ ๊ฒŒ ์–ดํ•„ ํฌ์ธํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์กฐ์–ธ์„ ๋“ค์—ˆ๊ณ , ์ง„์ถœํ•œ ์ „๊ตญ ๋ฐœํ‘œํšŒ์—์„œ ์–ด๋–ป๊ฒŒ ํ•ดํ‚น์— ๋Œ€์‘ํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ์ˆ  ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

 

 

4. ๋ฐœํ‘œ

 ์šฐ๋ฆฌ ํŒ€์€ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ค‘๊ฐ„๋ฐœํ‘œ, ์ตœ์ข… ๋ฐœํ‘œ, ์ „๊ตญ ๋ฐœํ‘œํšŒ ์ด 3๋ฒˆ์˜ ๋ฐœํ‘œ๋ฅผ ํ–ˆ๋‹ค. ์ค‘๊ฐ„ ๋ฐœํ‘œ ๋•Œ๋Š” ๊ธฐํš๊ณผ ์„ค๊ณ„ํ•œ ๋‚ด์šฉ๋“ค ์œ„์ฃผ๋กœ ๋ฐœํ‘œํ–ˆ๊ณ , ์ตœ์ข… ๋ฐœํ‘œ์™€ ์ „๊ตญ ๋ฐœํ‘œํšŒ์—์„œ๋Š” ๊ธฐํš ๋ฐฐ๊ฒฝ, UCC์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ ๊ธฐ์ˆ ๊ณผ ์‹œ์—ฐ์„ ์œ„์ฃผ๋กœ ๋ฐœํ‘œ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

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

 

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

 

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

 

 

 

 

 

 ๐ŸŽ‰ ๊ฒฐ๊ณผ

 ์ตœ์ข…์ ์œผ๋กœ ๋ฐ˜ 1๋“ฑ์œผ๋กœ ์šฐ์ˆ˜ ํ”„๋กœ์ ํŠธ์— ์„ ์ •์ด ๋˜์–ด ์ˆ˜์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๐Ÿ˜€ ์ตœ์ข… ๋ฐœํ‘œ์—์„œ ํ•ดํ‚น์„ ๋‹นํ•œ ํƒ“์— ์˜์ƒ์œผ๋กœ ์‹œ์—ฐ์„ ํ•˜๊ฒŒ ๋˜์–ด์„œ ์ˆ˜์ƒ์ด ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ ๊ธฐ์ˆ  ๋ถ€๋ถ„์„ ์ข‹๊ฒŒ ๋ด์ฃผ์…”์„œ ๋ฐ˜์—์„œ ์ˆœ์œ„๊ถŒ ์•ˆ์— ๋“ค์–ด ์ „๊ตญ ๋ฐœํ‘œํšŒ์— ์ง„์ถœํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ „๊ตญ์˜ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค ์•ž์—์„œ ๋ฐœํ‘œํ•˜๋Š” ์ข‹์€ ๊ฒฝํ—˜๋„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

 

 

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

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

 

 

  • ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์—ด์‹ฌํžˆ ํ•˜๋ฉด ๋œ๋‹ค

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

 

 

 

  • ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋‹ค

 ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ค‘๊ฐ„์— ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„๋„ ์žˆ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ์ฐพ์•„๋ณด๋Š” ๊ณผ์ •์—์„œ ๋‚˜ ์Šค์Šค๋กœ๋„ ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒŒ ๋А๊ปด์กŒ๋‹ค. ์•„์ง์€ ๋ถ€์กฑํ•˜์ง€๋งŒ ์ด์ „๋ณด๋‹ค ๋” ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์งœ๋ ค๊ณ  ํ–ˆ๊ณ , JPA ๊ฐœ๋…๋„ ๋” ์ตํžˆ๊ฒŒ ๋˜์—ˆ๊ณ , MSA ๋“ฑ ์ƒˆ๋กญ๊ฒŒ ์ ์šฉํ•˜๋Š” ๋ถ€๋ถ„๋“ค๋„ ์žˆ์–ด์„œ ๋ฐฐ์›Œ๊ฐ€๋Š” ๊ฒƒ์ด ๋งŽ์•˜๋‹ค.

 

 

 

  • ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ณ  ์‹ถ๋‹ค

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

 

 

 

 

 

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

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

 ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, ๊ฒฐ๊ตญ ๋ชปํ–ˆ๋‹ค. ์ผ๋‹จ TDD์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค. ๊ธฐํš ๋ฐ ๋ฐœํ‘œ ์ค€๋น„ ์ œ์™ธ 3์ฃผ๋ผ๋Š” ์งง์€ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์— ๋งŽ์€ ๋ถ„๋Ÿ‰์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์— ์‹œ๊ฐ„์„ ์Ÿ์„ ์—ฌ์œ ๊ฐ€ ์—†์—ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ฒŒ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ž์ฒด์ ์œผ๋กœ API ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฒฐ๊ตญ ํ‰์ƒ์‹œ์— ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ ํ•จ์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค..

 

  • Redis ์‚ฌ์šฉ