- MSA ํ๋ก์ ํธ ๋ ์ํผ์ ์๋น์ค์ ๋ฉค๋ฒ ์๋ฒ ํ๋ก์ ํธ
- ๋ฐฐํฌ URL (์์คํ ์ด): https://m.onestore.co.kr/mobilepoc/apps/appsDetail.omp?prodId=0000774118
- ์๊ฐ ํ์ด์ง (๋ ธ์ ): https://upbeat-willow-06b.notion.site/7ece9e5f602a43f583d7f4cf101e7d69?pvs=4
- ํ๋ก์ ํธ ์๊ฐ
- ๊ฐ๋ฐ ๊ธฐ๊ฐ
- ๊ฐ๋ฐ ํ๊ฒฝ
- ์ฃผ์ ๊ธฐ๋ฅ
- ์ธํ๋ผ
- ERD
- ์ํคํ ์ฒ
- ๊ฐ๋ฐ ์ ๋ต
- ์ฃผ์ ๊ธฐ๋ฅ ์์ธ ์ค๋ช
- ํ ์คํธ ์ฝ๋
- ์ฑ๋ฅ ํ ์คํธ
- ๋ ์ํผ์๋ ๋ ์ํผ๋ฅผ ์ด๋ฏธ์ง์ ํจ๊ป ์์ฑํ๊ณ ๊ณต์ ํ ์ ์๋ SNS์ ๋๋ค.
- ๊ฒ์์ ํตํด ์ฐพ๊ณ ์ถ์ ๋ ์ํผ ์ด๋ฆ์ ๊ฒ์ํ์ฌ ๊ตฌ๊ฒฝํ ์ ์์ต๋๋ค.
- ๋ค์ํ ํ์์ ํ๋ก์ฐํ๋ฉฐ ๋ง์์ ๋๋ ๋ ์ํผ์ ๋๊ธ์ ์์ฑํ ์ ์๊ณ , ์ข์์, ๋ถ๋งํฌ๋ฅผ ํ ์ ์์ต๋๋ค.
- ๋ฉค๋ฒ ์๋ฒ๋ ๊ทธ์ค ํ์ ๊ด๋ จ ํ๋ก์ธ์ค๋ฅผ ๋ด๋นํ๊ณ ์์ต๋๋ค.
- 2023.05 ~ 2023.02 (๋ฒ ํ๋ฒ์ ์ถ์)
- ๊ณ์ํด์ ์ถ๊ฐ๊ฐ๋ฐ์ ์งํ์ค์ ๋๋ค.
- Java 17
- Spring Boot 3.1.2, Spring Security6
- IDE: Intellij, Datagrip
- Database: RDS(PostgreSQL), Redis
- ORM: JPA
- ํ์ ํด: Jira, Confluence, Notion, Slack
- ๋ก๊ทธ์ธ (Spring Security, JWT)
- Access Token ์ฌ๋ฐํ
- ํ์๊ฐ์ (ํด๋ํฐ ๋ฒํธ/์ด๋ฉ์ผ/๋๋ค์ ์ค๋ณต์ฒดํฌ, S3 ์ด๋ฏธ์ง ์ ์ฅ, SNS)
- ๋ก๊ทธ์์
- ์ด๋ฉ์ผ ์ฐพ๊ธฐ
- ๋น๋ฐ๋ฒํธ ์ฌ์ค์ (Java Mail Sender๋ก ๋ฉ์ผ ์ ์ก)
- ํ์ ํํด(SNS)
- ๋ง์ดํ์ด์ง ์กฐํ/์์ (SNS)
- ํ๋ก์ฐ ์์ฒญ(SNS)/ํ๋ก์ฐ ์ทจ์
- ํ๋ก์ฐ/ํ๋ก์ ๋ชฉ๋ก ์กฐํ
- ํ์ ์ ๊ณ
- ๋น๋ฐ๋ฒํธ ์์
- ๋ฌธ์์ฌํญ ๋ฑ๋ก/์กฐํ
- ํ๋ก์ ํธ๋ MSA๋ก ๊ตฌ์ฑ๋์ด์์ผ๋ฉฐ ์ด ์ธ๊ฐ(๋ฉค๋ฒ, ๋ ์ํผ, ์งํํจ)์ ์๋น์ค๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค.
- ๊ทธ ์ค ๋ฉค๋ฒ์๋ฒ ECS ํด๋ฌ์คํฐ์ MEMBER ์๋ฒ๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค.
- ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ RDS(PostgreSQL), Redis, S3๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ฒคํธ ๋๋ฆฌ๋ธ, ๋ฉ์์ง ๋๋ฆฌ๋ธ์ผ๋ก๋ SNS, SQS๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ECS ์ธํ๋ผ๋ ๋ค์๊ณผ ๊ฐ์ด ECR์ ์ ์ฅ๋ ์คํ๋ง๋ถํธ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ ์ปจํ ์ด๋๋ก ๋์์ํต๋๋ค.
- ํ๋์ ECS์๋ ํ๋์ ์๋น์ค, ํ๋์ ํ์คํฌ ์ ์๋ก ์คํ๋ฉ๋๋ค.
- SpringBoot์๋ Zipkin์๋ฒ๋ก ๋ก๊ทธ๋ฅผ ์ ์กํ๋๋ก ์ค๊ณํ์์ต๋๋ค.
- CI/CD๋ AWS์ CodePipeline์ผ๋ก ๊ตฌ์ถํ์์ต๋๋ค.
- main ๋ธ๋์น์ merge ๋ฐ์ ์ AWS CodePipeline์ด ์๋์ผ๋ก ํ์ฑํ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ GitHub ์นํ ์ ํตํด ์ด๋ฃจ์ด์ง๋ฉฐ, GitHub์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ์ฌ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
- CodeBuild๋ฅผ ์ฌ์ฉํด Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ํ ECR์ ์ ์ฅํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ์์ค ์ฝ๋๋ฅผ Docker ์ด๋ฏธ์ง๋ก ๋น๋ํ๊ณ , ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ECR์ ์์ ํ๊ฒ ์ ๋ก๋ํฉ๋๋ค.
- CodePipeline์ด ECR์ ์ ์ฅ๋ Docker ์ด๋ฏธ์ง๋ฅผ ๊ฐ์งํ๊ณ , ECS์ ๋กค๋ง ์ ๋ฐ์ดํธ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ์งํํฉ๋๋ค. ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง์ ์ผ๋ก ๋ฐฐํฌํ๋ฉด์ ์๋น์ค ์ค๋จ ์์ด ์ ๋ฐ์ดํธ๋ฅผ ์๋ฃํ ์ ์์ต๋๋ค.
- ์ ์ ๊ฐ ๋๋ค์์ ๋ณ๊ฒฝํ๋ฉด ๋ฉค๋ฒ ์๋ฒ์์๋ ๋๋ค์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฉค๋ฒ DB์ ๋ฐ์ํ๊ณ Spring Event๋ฅผ ๋ฐํํฉ๋๋ค. (์ด๋ฒคํธ ๋ฆฌ์ค๋๋ 2๊ฐ๋ฅผ ์ ์ธ)
- ์คํ๋ง ์ด๋ฒคํธ ๋ฆฌ์ค๋์ค 1๊ฐ๊ฐ ๋์ํ์ฌ ๋ฉค๋ฒ DB์ Outbox ํ ์ด๋ธ์ ์ด๋ฒคํธ ๋ฐํ ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ DB ์ปค๋ฐ์ ํฉ๋๋ค.(ํธ๋์ญ์ ์ปค๋ฐ์๋ฃ)
- ํธ๋์ญ์ ์ปค๋ฐ์ด ์๋ฃ๋๋ฉด AFTER_COMMIT์ ์ ์ด์ค ๋๋ค๋ฅธ ์คํ๋ง ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋์ํ์ฌ ๋๋ค์ ๋ณ๊ฒฝ ํ ํฝ์ผ๋ก SNS๏ฟฝ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
- SNS ๋ฉ์์ง๊ฐ ๋ฐํ๋๋ฉด 2๊ฐ์ SQS๋ฆฌ์ค๋๊ฐ ๋์์ ๋์ํ๊ฒ ๋ฉ๋๋ค.
- ๋ ์ํผ ์๋ฒ์์ ๋๋ค์ ๋ณ๊ฒฝ ํ ํฝ์ ๋ฆฌ์ค๋ํ๊ณ ์๋ SQS๊ฐ ์คํ๋ฉ๋๋ค.
- ๋ฉค๋ฒ ์๋ฒ์์ ๋๋ค์ ๋ณ๊ฒฝ ํ ํฝ์ ๋ฆฌ์ค๋ํ๊ณ ์๋ SQS๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ Outbox ํ ์ด๋ธ์ ์ด๋ฒคํธ ๋ฐํ ์ฌ๋ถ(published ์ปฌ๋ผ)๋ฅผ true๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ ์ํผ ์๋ฒ์ SQS ๋ฆฌ์ค๋๊ฐ ๋์ํ ๋ FeignClient๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉค๋ฒ ์๋ฒ์ ๊ฐ์ฅ ์ต์ ์ ์ ์ ๋๋ค์ ์ ๋ณด๋ฅผ ์์ฒญํฉ๋๋ค.
- ๋ฉค๋ฒ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์จ ๊ฐ์ฅ ์ต์ ์ ์ ์ ๋๋ค์ ์ ๋ณด๋ฅผ ๋ ์ํผDB์ ๋ฐ์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก์ ๋ฉ์์ง ๋ด๋ถ์๋ memberId๋ง์ ํฌํจํ๋๋ก ํฉ๋๋ค.
- ๋ถ์ฐ์ถ์ ์ ์ํ traceId๋ SNS์ messageAttributes๋ฅผ ์ฌ์ฉํ์ฌ ์ ์กํฉ๋๋ค.
- Spring Batch๋ฅผ ์ฌ์ฉํ์ฌ 5๋ถ๋ง๋ค ๋ฏธ๋ฐํ๋ ๋ฉ์์ง๋ฅผ ์ฌ๋ฐํ ํฉ๋๋ค.
- Outbox ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐํ์ฌ๋ถ(published)๊ฐ false๊ฒ์ ์กฐํํ์ฌ ๋ฐฐ์น๊ฐ ๋์ํฉ๋๋ค.
- ์ด ํ๋ก์ ํธ์ ์๋ฌ ์ฒ๋ฆฌ ์ ๋ต์ @RestControllerAdvice๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ ์์ธ๋ฅผ ์ค์์์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ด๋ฅผ ํตํด, ์ปค์คํ ์ผ๋ก ์ ์๋ ErrorCode ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌ ์ฝ๋ ๋ฐ ๋ฉ์์ง ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํฉ๋๋ค.
- ๋จ์/ํตํฉ ํ ์คํธ ์งํ (171๊ฐ)
- Junit5, mockito, S3Mock, BddMockito ์ฌ์ฉ
- ์ธ๋ถ DB (Redis)๋ฅผ ์ฌ์ฉํ ํ ์คํธ๋ ์งํํ์ต๋๋ค.
- ์์ฉ ์๋ฒ ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ
- ๋ค์ํ ํ๊ฒฝ์์์ ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ ๋ถ์
-
ํ๋์จ์ด ์ฑ๋ฅ์ ์ํฅ: ๋ก์ปฌ M2 Max 64GB ํ๊ฒฝ์์์ ์ฑ๋ฅ์ด M1 16GB ํ๊ฒฝ๋ณด๋ค ์๋ฑํ ๋๋ค. ์ด๋ M2 Max์ ๋ ๋์ CPU ์ฑ๋ฅ๊ณผ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ์ฑ๋ฅ ํฅ์์ ๊ธฐ์ฌํ์์ ์์ฌํ๋ค. TPS(Transactions Per Second) ํ๊ท ๊ณผ ์ต๊ณ ์น ๋ชจ๋์์ M2 Max ํ๊ฒฝ์ด M1 ํ๊ฒฝ์ ํฌ๊ฒ ์์๋ฉฐ, ํ๊ท ํ ์คํธ ์๊ฐ๋ ์๋นํ ๋จ์ถ๋๋ค.
-
์์ฉ ํ๊ฒฝ์์์ ์ฑ๋ฅ ์ ์ฝ: EC2 t4g.small ํ๊ฒฝ์์์ ์ฑ๋ฅ์ ๋ก์ปฌ ํ๊ฒฝ๊ณผ ๋น๊ตํ์ฌ ํ์ ํ ๋ฎ๋ค. TPS ํ๊ท ๊ณผ ์ต๊ณ ์น๊ฐ ๋งค์ฐ ๋ฎ๊ณ , ํ๊ท ํ ์คํธ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํ๋ค. ์ด๋ EC2 t4g.small ์ธ์คํด์ค์ ๋ฆฌ์์ค ์ ์ฝ๊ณผ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ ๋ฑ ์ธ๋ถ ์์ธ ๋๋ฌธ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
-
์ฑ๊ณตํ ํ ์คํธ ๋น์จ: ๋ชจ๋ ํ๊ฒฝ์์ ์๋ฌ ์์ด ์ฑ๊ณตํ ํ ์คํธ์ ๋น์จ์ด 100%๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ ํ๊ฒฝ์ ๊ด๊ณ์์ด ์ผ๊ด๋๊ฒ ์ ์ง๋๊ณ ์๋ค๋ ๊ฒ์ ๋ํ๋ธ๋ค.
-
์ฑ๋ฅ ์ต์ ํ์ ์ค์์ฑ: ํนํ ์์ฉ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋, ํ๋์จ์ด ์ฑ๋ฅ, ๋คํธ์ํฌ ์ค์ , JVM ์ต์ ํ ๋ฑ ๋ค์ํ ์์๋ค์ ๊ณ ๋ คํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
(๋ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์๋ค.)








