Skip to content

Latest commit

ย 

History

History
252 lines (182 loc) ยท 14.1 KB

README.md

File metadata and controls

252 lines (182 loc) ยท 14.1 KB

๐Ÿณ RECIPIA_RECIPE

๋ ˆ์‹œํ”ผ์•„ ์„œ๋น„์Šค์˜ [๋ ˆ์‹œํ”ผ ์„œ๋ฒ„]

๋ฐฐํฌ(์›์Šคํ† ์–ด): https://m.onestore.co.kr/mobilepoc/apps/appsDetail.omp?prodId=0000774118
์†Œ๊ฐœ ํŽ˜์ด์ง€ (๋…ธ์…˜): https://upbeat-willow-06b.notion.site/7ece9e5f602a43f583d7f4cf101e7d69?pvs=4

แ„…แ…ฆแ„‰แ…ตแ„‘แ…ตแ„‹แ…ก_แ„‹แ…ตแ†ซแ„แ…ณแ„…แ…ฉ

๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ
  2. ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„
  3. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
  4. ์ฃผ์š” ๊ธฐ๋Šฅ
  5. ์ธํ”„๋ผ
  6. ERD
  7. ์•„ํ‚คํ…์ฒ˜
  8. ๊ฐœ๋ฐœ ์ „๋žต
  9. ๊ธฐ๋Šฅ ์„ค๋ช…
  10. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
  11. ์„ฑ๋Šฅ(๋ถ€ํ•˜) ํ…Œ์ŠคํŠธ: nGrinder ์‚ฌ์šฉ



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

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

๐Ÿ”ถ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

  • 2023.05 ~ 2023.02 (๋ฒ ํƒ€๋ฒ„์ „ ์ถœ์‹œ)
  • ๊ณ„์†ํ•ด์„œ ์ถ”๊ฐ€๊ฐœ๋ฐœ์„ ์ง„ํ–‰์ค‘์ž…๋‹ˆ๋‹ค.

๐Ÿ”ถ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • ์–ธ์–ด: Java 17
  • ํ”„๋ ˆ์ž„์›Œํฌ: Spring Boot 3.1.2, Spring Security 6
  • ORM: JPA, Querydsl
  • ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง: JUnit, Mockito, P6Spy, Zipkin
  • API ๋ฐ ์„œ๋น„์Šค ํ†ต์‹ : JWT, Feign Client
  • ํด๋ผ์šฐ๋“œ: AWS SDK
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: PostgreSQL (RDS), MongoDB, Redis
  • ๊ฐœ๋ฐœ ๋„๊ตฌ: IntelliJ IDEA, DataGrip
  • ํ˜‘์—… ๋„๊ตฌ: Jira, Confluence, Notion

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

์ตœ์ง„์•ˆ, ๊น€์ด์ค€ (ํŽ˜์–ด)

  1. JWT๋กœ ์‚ฌ์šฉ์ž ๊ฒ€์ฆ
  2. ๋ ˆ์‹œํ”ผ CRUD (S3์— ์ด๋ฏธ์ง€ ์ €์žฅ, ์นดํ…Œ๊ณ ๋ฆฌ, ์žฌ๋ฃŒ, ํ•ด์‹œํƒœ๊ทธ, ์˜์–‘์†Œ ์ €์žฅ)
  3. ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€ ์ž‘์„ฑ๊ธฐ๋Šฅ
  4. ํšŒ์›ํƒˆํ‡ด์‹œ ์œ ์ €์˜ ๋ ˆ์‹œํ”ผ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

์ตœ์ง„์•ˆ

  1. ๋ ˆ์‹œํ”ผ ๋‚ด๋ถ€์˜ ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ
  2. ์žฌ๋ฃŒ, ํ•ด์‹œํƒœ๊ทธ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ
  3. ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ
  4. ์ข‹์•„์š” ๊ธฐ๋Šฅ
  5. ์กฐํšŒ์ˆ˜ ๊ธฐ๋Šฅ

๐Ÿ”ถ ์ธํ”„๋ผ

MSA ์ธํ”„๋ผ ๊ตฌ์„ฑ

  • ํ”„๋กœ์ ํŠธ๋Š” MSA๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด 3๊ฐœ(๋ฉค๋ฒ„, ๋ ˆ์‹œํ”ผ, ์ง€ํ”„ํ‚จ)์˜ ์„œ๋น„์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ์ค‘ ๋ ˆ์‹œํ”ผ์„œ๋ฒ„ ECS ํด๋Ÿฌ์Šคํ„ฐ์— RECIPE ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” RDS(PostgreSQL), Redis, MongoDB, S3๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • MessageQueue๋กœ๋Š” SNS, SQS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 3 45 08

ECS ๊ตฌ์„ฑ

  • ECS ์ธํ”„๋ผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ECR์— ์ €์žฅ๋œ ์Šคํ”„๋ง๋ถ€ํŠธ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋™์ž‘์‹œํ‚ต๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ECS์—๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค, ํ•˜๋‚˜์˜ ํƒœ์Šคํฌ ์ •์˜๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • SpringBoot์—๋Š” Zipkin์„œ๋ฒ„๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 4 08 23

CI/CD ์„ค๊ณ„

  • CI/CD๋Š” AWS์˜ CodePipeline์œผ๋กœ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • main ๋ธŒ๋žœ์น˜์— merge ๋ฐœ์ƒ ์‹œ AWS CodePipeline์ด ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ณผ์ •์€ GitHub ์›นํ›…์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, GitHub์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • GitHub์—์„œ ์›นํ›…์ด ํŠธ๋ฆฌ๊ฑฐ ๋˜๋ฉด CodeBuild๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ SpringBoot์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ Docker ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜๊ณ , ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ECR์— ์•ˆ์ „ํ•˜๊ฒŒ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • CodeDeploy๊ฐ€ ECR์— ์ €์žฅ๋œ Docker ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ECS์— ๋กค๋ง ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ƒˆ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ ์ง„์ ์œผ๋กœ ๋ฐฐํฌํ•˜๋ฉด์„œ ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์—…๋ฐ์ดํŠธ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ci-cd



๐Ÿ”ถ ERD

AQuery๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์‹œํ”ผ ์„œ๋ฒ„์˜ ERD๋ฅผ ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

แ„…แ…ฆแ„‰แ…ตแ„‘แ…ต_ERD



๐Ÿ”ถ ์•„ํ‚คํ…์ฒ˜

ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ๋„์ž…

แ„…แ…ฆแ„‰แ…ตแ„‘แ…ตแ„‹แ…ก_แ„’แ…ฆแ†จแ„‰แ…กแ„€แ…ฉแ„‚แ…กแ†ฏ

MSA์˜ DB ์ •ํ•ฉ์„ฑ ๋ณด์žฅ ๊ณผ์ •

  • ์œ ์ €๊ฐ€ ๋‹‰๋„ค์ž„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉค๋ฒ„ ์„œ๋ฒ„์—์„œ๋Š” ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฉค๋ฒ„ DB์— ๋ฐ˜์˜ํ•˜๊ณ  Spring Event๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. (์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” 2๊ฐœ๋ฅผ ์„ ์–ธ)
  • ์Šคํ”„๋ง ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ค‘ 1๊ฐœ๊ฐ€ ๋™์ž‘ํ•˜์—ฌ ๋ฉค๋ฒ„ DB์˜ Outbox ํ…Œ์ด๋ธ”์— ์ด๋ฒคํŠธ ๋ฐœํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  DB ์ปค๋ฐ‹์„ ํ•ฉ๋‹ˆ๋‹ค.(ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹์™„๋ฃŒ)
  • ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋˜๋ฉด AFTER_COMMIT์„ ์ ์–ด์ค€ ๋˜ ๋‹ค๋ฅธ ์Šคํ”„๋ง ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋™์ž‘ํ•˜์—ฌ ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ํ† ํ”ฝ์œผ๋กœ SNS ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • SNS ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœํ–‰๋˜๋ฉด 2๊ฐœ์˜ SQS๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋™์‹œ์— ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ ˆ์‹œํ”ผ ์„œ๋ฒ„์—์„œ ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ํ† ํ”ฝ์„ ๋ฆฌ์Šค๋‹ํ•˜๊ณ  ์žˆ๋˜ SQS๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋ฉค๋ฒ„ ์„œ๋ฒ„์—์„œ ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ํ† ํ”ฝ์„ ๋ฆฌ์Šค๋‹ํ•˜๊ณ  ์žˆ๋˜ SQS๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ Outbox ํ…Œ์ด๋ธ”์— ์ด๋ฒคํŠธ ๋ฐœํ–‰ ์—ฌ๋ถ€(published ์นผ๋Ÿผ)๋ฅผ true๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ ˆ์‹œํ”ผ ์„œ๋ฒ„์˜ SQS ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋™์ž‘ํ•  ๋•Œ FeignClient๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„ ์„œ๋ฒ„์— ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์œ ์ € ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉค๋ฒ„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์œ ์ € ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ๋ ˆ์‹œํ”ผ DB์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
spring-event

ZeroPayload ์ •์ฑ…

  • ๋ฐ์ดํ„ฐ ์ „์†ก์‹œ ๋ฉ”์‹œ์ง€ ๋‚ด๋ถ€์—๋Š” memberId๋งŒ์„ ํฌํ•จํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„์‚ฐ์ถ”์ ์„ ์œ„ํ•œ traceId๋Š” SNS์˜ messageAttributes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
zero-payload

๋ฏธ๋ฐœํ–‰๋œ SNS ๋ฉ”์‹œ์ง€๋Š” ์žฌ๋ฐœํ–‰

  • Spring Batch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 5๋ถ„๋งˆ๋‹ค ๋ฏธ๋ฐœํ–‰๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌ๋ฐœํ–‰ ํ•ฉ๋‹ˆ๋‹ค.
  • Outbox ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐœํ–‰์—ฌ๋ถ€(published)๊ฐ€ false๊ฒƒ์„ ์กฐํšŒํ•˜์—ฌ ๋ฐฐ์น˜๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
batch-event

Redis ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ์ „๋žต (RDBMS)

  • Redis์˜ ๊ธฐ๋ณธ์ ์ธ ๋ณต๊ตฌ์ „๋žต์€ AOF, RDB(Redis Database)๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Redis์— ์ €์žฅ๋œ ์กฐํšŒ์ˆ˜, ์ข‹์•„์š” ๋ฐ์ดํ„ฐ๋Š” ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋งค์ผ 6์‹œ๊ฐ„๋งˆ๋‹ค PostgreSQL์— ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    1. 6์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฑ์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ตœ๊ทผ ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
    2. ๋งŒ์•ฝ Redis ์ธ์Šคํ„ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๋”๋ผ๋„, PostgreSQL์— ์ €์žฅ๋œ ์ตœ๋Œ€ 6์‹œ๊ฐ„ ์ „์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ฐฑ์—…์€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ๋‹นํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ 6์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฑ์—…์„ ์‹คํ–‰ํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ํ”ผํฌ ์‹œ๊ฐ„ ์™ธ์— ๋ฐฑ์—… ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์ •์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Redis_แ„‡แ…ฉแ†จแ„€แ…ฎ



๐Ÿ”ถ ๊ฐœ๋ฐœ ์ „๋žต

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•œ JWT ์ธ์ฆ๊ธฐ๋Šฅ ๊ตฌํ˜„

แ„‰แ…ตแ„แ…ฒแ„…แ…ตแ„แ…ต_แ„ƒแ…ฉแ†ผแ„Œแ…กแ†จ

์ปค์Šคํ…€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„

แ„…แ…ฆแ„‰แ…ตแ„‘แ…ต_แ„แ…ฅแ„‰แ…ณแ„แ…ฅแ†ท_แ„‹แ…จแ„‹แ…ฌแ„Žแ…ฅแ„…แ…ต
  • ์—๋Ÿฌ์ฝ”๋“œ ์ž‘์„ฑ
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 6 17 02
  • ๋ ˆ์‹œํ”ผ์•„ ์ „์šฉ ์˜ˆ์™ธ์ฝ”๋“œ ์ž‘์„ฑ
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 6 18 33
  • ์ค‘์•™์ง‘์ค‘ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ControllerAdvice ์ฝ”๋“œ ์ž‘์„ฑ (์ด๋•Œ NPE๋Š” ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ž‘์„ฑ)
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 6 18 45
  • ์ฝ”๋“œ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์˜ˆ์™ธ๋ฅผ throwํ•ด์„œ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ์ ์šฉ์‹œ์ผฐ๋‹ค.
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 6 20 46



๐Ÿ”ถ ๊ธฐ๋Šฅ ์„ค๋ช…

๋ ˆ์‹œํ”ผ ์ƒ์„ฑ

  • ์žฌ๋ฃŒ, ํ•ด์‹œํƒœ๊ทธ๋Š” RDB์— ์ €์žฅ๊ณผ ๋™์‹œ์— MongoDB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • MongoDB์—๋Š” ์žฌ๋ฃŒ, ํ•ด์‹œํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์—์„œ ์—ฐ๊ด€๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
แ„…แ…ฆแ„‰แ…ตแ„‘แ…ต_แ„Œแ…กแ†จแ„‰แ…ฅแ†ผ

๋ ˆ์‹œํ”ผ ์ƒ์„ธ์กฐํšŒ

  • ์ข‹์•„์š” ํšŸ์ˆ˜, ์กฐํšŒ์ˆ˜๋Š” Redis์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • S3์— ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด pre-signed-url๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
แ„…แ…ฆแ„‰แ…ตแ„‘แ…ต_แ„‰แ…กแ†ผแ„‰แ…ฆแ„Œแ…ฉแ„’แ…ฌ

์ด๋ฏธ์ง€ pre-signed-url ๋ณ€ํ™˜๊ณผ์ • ์„ค๋ช…

  • ํŒŒ์ผ ํ…Œ์ด๋ธ”์—๋Š” S3๋ฒ„ํ‚ท์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ด๋ฏธ์ง€์˜ ์ €์žฅ ๊ฒฝ๋กœ(path)๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AWS SDK๋ฅผ ํ†ตํ•ด url์„ pre-signed-url๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. (S3์— ์ ‘๊ทผํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ˜ํ™˜๋ฐ›๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง ๋‚ด๋ถ€์˜ SDK ์ฝ”๋“œ๋กœ ์ฒ˜๋ฆฌ)
pre-signed-url

๋ ˆ์‹œํ”ผ ์‚ญ์ œ

  • ๊ธฐ๋ณธ์ •๋ณด, ๋Œ“๊ธ€, ํŒŒ์ผ์€ soft delete ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • soft delete๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•œ๋‹ฌ์ด ์ง€๋‚˜๋ฉด ๋ฐฐ์น˜๋ฅผ ํ†ตํ•ด ์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
แ„…แ…ฆแ„‰แ…ตแ„‘แ…ต_แ„‰แ…กแ†จแ„Œแ…ฆ

๋ถ๋งˆํฌ

แ„‡แ…ฎแ†จแ„†แ…กแ„แ…ณ_แ„‹แ…งแ„‡แ…ฎ

์ข‹์•„์š”

  • ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
แ„Œแ…ฉแ‡‚แ„‹แ…กแ„‹แ…ญ_แ„‹แ…งแ„‡แ…ฎ



๐Ÿ”ถ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

  • ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ (238๊ฐœ)
  • Junit5, mockito, S3Mock, BddMockito ์‚ฌ์šฉ
  • ์™ธ๋ถ€ DB (MongoDB, Redis)๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ๋„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-10 แ„‹แ…ฉแ„’แ…ฎ 6 13 08



๐Ÿ”ถ ์„ฑ๋Šฅ(๋ถ€ํ•˜) ํ…Œ์ŠคํŠธ: nGrinder ์‚ฌ์šฉ

์ƒ์šฉ ๋ ˆ์‹œํ”ผ ์„œ๋ฒ„ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ

  • ์ƒ์šฉ ECS์˜ ๋ ˆ์‹œํ”ผ SpringBoot์„œ๋ฒ„์— ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ๋‹ค.
recipe-detail-test-296

๋กœ์ปฌ vs ์ƒ์šฉ ์„ฑ๋Šฅ ๋น„๊ตํ‘œ

  • ๋กœ์ปฌ (Mac): m1(16GB), m2 max(64GB)
  • ์ƒ์šฉ (ECS): t4g.small
  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ:
    • M2 Max 64GB ๋ชจ๋ธ์ด ๊ฐ€์žฅ ๋†’์€ TPS(์ดˆ๋‹น ์ฒ˜๋ฆฌ ๊ฑด์ˆ˜)๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•˜๋‹ค.
    • M1 16GB ๋ชจ๋ธ์€ M2 Max์— ๋น„ํ•ด ๋‚ฎ์€ TPS๋ฅผ ๊ธฐ๋กํ–ˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.
    • ๋ฐ˜๋ฉด, AWS t4g.small ์ธ์Šคํ„ด์Šค๋Š” ๋งค์šฐ ๋‚ฎ์€ TPS๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์ด ๋ถ€์กฑํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค.
    • ์ด ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ๋งŒ์•ฝ ์œ ์ €๊ฐ€ 100๋ช…์ด ๋„˜์–ด๊ฐ”๋‹ค๋ฉด ์„ฑ๋Šฅ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์šฐ๋ฆฌ๋Š” ์˜คํ†  ์Šค์ผ€์ผ๋ง์„ ์ ์šฉํ–ˆ์œผ๋‹ˆ ์‹ค์ œ๋กœ๋Š” ํ›จ์”ฌ ์ž˜ ๋ฒ„ํ‹ฐ๊ฒ ์ง€๋งŒ ์œ ์ €๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์ ๋‹นํžˆ ์‚ฌ์–‘์„ ๋†’์—ฌ์ฃผ๋Š”๊ฒƒ๋„ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.
recipe-detail-test-result-table