Skip to content

dailyge/dailyge-server

Repository files navigation




Dailyge๋กœ ์ผ์ • ๊ด€๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ!
์„ฑ์‹คํ•œ ํ•˜๋ฃจ์˜ ์—ฐ์†์ด ํฐ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๐Ÿƒ

Release Release
Release Coverage







Table of Contents.

  1. ์„œ๋น„์Šค ์†Œ๊ฐœ
  2. Contents
  3. Skills
  4. CI/CD
  5. Architecture
  6. Monitoring
  7. Moduels
  8. Package








1. ์„œ๋น„์Šค ์†Œ๊ฐœ.

Dailyge๋Š” ์ผ์ •์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ํ•˜๋ฃจ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ณ„ํšํ•˜์—ฌ ์ค‘์š”ํ•œ ์ผ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ด์šฉํ•˜๊ธฐ
โ€ป ํ˜„์žฌ ์›น ์„œ๋น„์Šค๋งŒ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image

image

image

image

image

image








2. Contents.

์ƒ์„ธ ๋‚ด์šฉ์€ ์—ฐ๊ด€ PR์ด๋‚˜ Discussion์„ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.








3. Skills.

Backend, Infra, ํ˜‘์—…์— ์‚ฌ์šฉ๋œ ๊ธฐ์ˆ  ์Šคํƒ/ํˆด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Backend

  • Infra

  • Collaboration




๐Ÿ–ฅ๏ธ Backend.

Java/SpringBoot๋ฅผ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. Liquibase๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ถ”์ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, API ๋ฌธ์„œ๋Š” Swagger์™€ RestDocs๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image







โ˜๏ธ Infra.

์„œ๋น„์Šค ๊ตฌ์ถ•์„ ์œ„ํ•ด AWS๋ฅผ ํ™œ์šฉํ–ˆ์œผ๋ฉฐ, Terraform์„ ์‚ฌ์šฉํ•ด ์ž์›์„ ํ”„๋กœ๋น„์ €๋‹ ํ–ˆ์Šต๋‹ˆ๋‹ค. Terraform์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์ž์›์€ Route53, CloudFront, S3, ALB, ECS, EC2( Application), RDB ์ด๋ฉฐ, ์ผ๋ถ€ ์ž์›๋“ค์€ ์„ค์น˜ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง์€ Prometheus์™€ Grafana๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์šด์˜ ๋ฐ ์‹œ์Šคํ…œ ๋กœ๊ทธ๋Š” ๋ชจ๋‘ AWS CloudWatch๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋Š” Grafana Alert ๋˜๋Š” AWS Lambda๋ฅผ ํ†ตํ•ด ์Šฌ๋ž™์œผ๋กœ ๋ณด๊ณ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image

์ธํ”„๋ผ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๋งํฌ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.







๐Ÿ‘ฌ Collaboration.

ํ˜‘์—… ํˆด์€ ์ด์Šˆ ํŠธ๋ž˜ํ‚น์„ ์œ„ํ•ด Jira/Confluencer๋ฅผ, ์ž๋™ํ™” ํˆด์€ Zapier์™€ AWS EventBridge, Lambda, SNS/SQS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€์› ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์€ Slack์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๋˜ํ•œ CI/CD ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ๋ฆฌํฌํŠธ, AWS ๋น„์šฉ ๊ฒฐ๊ณผ๋„ Slack์œผ๋กœ ๋ณด๊ณ  ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€์› ๊ฐ„ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ๊ด€๋ฆฌ ๋ฐ ์ฝ”๋“œ ์Šค๋ฉœ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด CheckStyle, PMD, SonarCloud์™€ ๊ฐ™์€ ์ •์  ์ฝ”๋“œ ๋ถ„์„ ํˆด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image








๐Ÿ”€ Git Branch ์ „๋žต

Git branch ์ „๋žต์€ Git-Flow๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image

  1. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ, dev ๋ธŒ๋žœ์น˜์—์„œ feature ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  2. feature ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…์„ ๋๋‚ด๋ฉด ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•œ ํ›„ Merge๋ฅผ ํ†ตํ•ด dev ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž‘์—…์ด ์ทจ์†Œ๋˜๋ฉด, Revertํ•ฉ๋‹ˆ๋‹ค.
  4. dev ์„œ๋ฒ„์—์„œ QA๋ฅผ ๊ฑฐ์นœ ํ›„, ์ด์ƒ์ด ์—†๋‹ค๋ฉด prod ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, prod ๋ธŒ๋žœ์น˜์—์„œ hotfix ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•˜๊ณ  ์ˆ˜์ •ํ•œ ํ›„ prod์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.





4. CI/CD

PR์ด ์ƒ์„ฑ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ •์  ๋ถ„์„์„ ์‹œ์ž‘ํ•˜๋ฉฐ, Slack์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํŒ€์› ๊ฐ„ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์นœ ํ›„, dev ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ์ด ๋˜๋ฉด, ๊ฐœ๋ฐœ ์„œ๋ฒ„๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๋ฉฐ, ์ธ์ˆ˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ QA๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์˜ ๋™์ž‘ ์œ ๋ฌด, ๋ฒ„๊ทธ ๋ฆฌํฌํŒ…์„ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ main ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ์ด ๋˜๋ฉด ์ƒ์šฉ ์„œ๋ฒ„๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๊ณ  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.

image

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







5. Architecture

์ •์  ์ž์›์€ S3์™€ CloudFront๋ฅผ, ์„œ๋ฒ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ AWS ECS๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” VPC ๋‚ด๋ถ€ ๋ณ„๋„์˜ ์„œ๋ธŒ๋„ท(Public/Private)์— ์กด์žฌํ•˜๋ฉฐ, ALB์™€ NAT๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ๋Š” terraform์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ๋™์ ์œผ๋กœ ํ™•์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ‰์ƒ์‹œ์—๋Š” ์ตœ์†Œ ์ธ์Šคํ„ด์Šค๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image








6. Monitoring

๋ชจ๋‹ˆํ„ฐ๋ง์€ Prometheus์™€ Grafana๋ฅผ CloudWatch์™€ ์—ฐ๋™ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ธ ๋ฆฌ์†Œ์Šค๋Š” EC2 ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€ํ‘œ, RDS, Redis, MongoDB ์ด๋ฉฐ, CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ , Slow Query ๋“ฑ์„ ์ฒดํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image








7. Module

ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ์€ admin-api, dailyge-api, storage, support ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. admin-api: ๊ด€๋ฆฌ์ž API ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.
  2. dailyge-api: ์Šค์ผ€์ค„ ๊ด€๋ฆฌ ์„œ๋น„์Šค API ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.
  3. storage: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.
  4. support: ๋กœ๊น…, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ API ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.





๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ์˜์† ๋ชจ๋ธ์€ ๋ณ„๋„๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ์˜์† ๋ชจ๋ธ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ๋ชจ๋ธ๋กœ ์ธํ•ด ๋Š˜์–ด๋‚˜๋Š” ์ฝ”๋“œ๋Ÿ‰, ์ด๋กœ ์ธํ•œ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ๋” ํฌ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ”œโ”€ ๐Ÿ“storage
โ”‚    ......
โ”‚ย ย      โ””๐Ÿ“ dailyge
โ”‚ย ย            โ””๐Ÿ“ entity   # ์˜์† ๋ชจ๋ธ





๋ชจ๋“ˆ๊ฐ„ ์˜์กด๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ, ๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ์œ„ํ•ด ์œ„ํ•ด ๋Œ€์ฒด๋กœ runtimeOnly ๋˜๋Š” imeimplementation ๊ตฌ์„ฑ(Configuration)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


image








8. Package

core ํŒจํ‚ค์ง€๋Š” ์„œ๋น„์Šค์— ๊ด€ํ•œ ๊ธฐ๋Šฅ์„, common ํŒจํ‚ค์ง€๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ๋˜๋Š” ์„ค์ •์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ•˜์œ„ ๊ณ„์ธต์˜ ์กด์žฌ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

โ”œโ”€๐Ÿ“ dailyge-api
โ”‚     ......
โ”‚       โ””โ”€๐Ÿ“ app
โ”‚           โ”œโ”€๐Ÿ“ common                       # ํ”„๋กœ์ ํŠธ ๊ณตํ†ต ํŒจํ‚ค์ง€
โ”‚           โ””โ”€๐Ÿ“ core       
โ”‚             โ””โ”€๐Ÿ“ user                       # ๋„๋ฉ”์ธ
โ”‚                โ”œโ”€๐Ÿ“ external                # ์™ธ๋ถ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ณ„์ธต         - Optional
โ”‚                โ”œโ”€๐Ÿ“ presentation            # ํ‘œ๋ฉด ๊ณ„์ธต
โ”‚                โ”œโ”€๐Ÿ“ facade                  # ํผ์‚ฌ๋“œ ๊ณ„์ธต                 - Optional
โ”‚                โ”œโ”€๐Ÿ“ application             # ์„œ๋น„์Šค ๊ณ„์ธต
โ”‚                โ””โ”€๐Ÿ“ persistence             # ์˜์† ๊ณ„์ธต
โ””โ”€โ”€ 

......
๊ฐ ๊ณ„์ธต์˜ ์˜์กด์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
> Controller  -->  Facade  -->  Application, External  -->  Persistence








Contributors

beatmeJy devjun10 kmularise
Backend, Frontend Backend, Infra Backend

About

๐Ÿ“† ์—…๋ฌด/์ผ์ • ๊ด€๋ฆฌ๋ฅผ Dailyge๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ!

Topics

Resources

Stars

Watchers

Forks

Contributors 5

Languages