๐ ์ด ๊ธ์์ ๋ค๋ฃฐ ๋ด์ฉ
CJ์ฌ๋ฆฌ๋ธ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ทจ์ ํ๊ณ ์ถ์๋ฐ, ์ค์ ๋ก ์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋์ง ๊ถ๊ธํ์ ๊ฐ์? ๋งค์ถ 4์กฐ 7,900์ต์, ์ฑ MAU 950๋ง๋ช ์ ๋ท๋ฐ์นจํ๋ ์ฌ๋ฆฌ๋ธ์์ ๊ธฐ์ ์คํ์ ์์ ๋ถ์ํด ๋๋ฆด๊ฒ์.
์ด ๊ธ์์๋ ์ฌ๋ฆฌ๋ธ์ ๊ณต์ ๊ธฐ์ ๋ธ๋ก๊ทธ์ ์ปจํผ๋ฐ์ค ๋ฐํ ์๋ฃ๋ฅผ ๋ฐํ์ผ๋ก, ์ค์ ์ ๋ฌด์์ ์ฌ์ฉํ๋ ๊ธฐ์ ๋ค๊ณผ ์กฐ์ง ๋ฌธํ๊น์ง ์์ธํ ์ ๋ฆฌํ์ด์. ๋จ์ํ ๊ธฐ์ ๋์ด์ด ์๋, ์ทจ์ ์ค๋น์ ์ค์ง์ ์ผ๋ก ๋์์ด ๋๋ ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
์ฌ๋ฆฌ๋ธ์ ๊ธฐ์ ์คํ ๊ฐ์
๐๏ธ ๊ธฐ์ ์ํคํ ์ฒ ํํฉ
- ์ํคํ ์ฒ ์ ํ: Monolithic โ MSA (์งํ ์ค)
- ์ฃผ๋ ฅ ์ธ์ด: Kotlin + Spring Boot (์ฝํ๋ง)
- ํด๋ผ์ฐ๋: AWS + Oracle Cloud + Google Cloud
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์ผ์ผ ์ฒ๋ง ๊ฑด ์ด์ ์ฌ๊ณ ๋ณ๊ฒฝ ๋ฐ์ดํฐ
- ๋ชจ๋ํฐ๋ง: Datadog (450๊ฐ ์ด์ ๋์๋ณด๋)
์ฌ๋ฆฌ๋ธ์์ ๋ชจ๋ ์ ์ ์๊ฒ ์ต์ ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ธฐ์ ์ ์ผ๋ก ํฐ ๋ณํ๋ฅผ ๊ฒช๊ณ ์์ด์. ํนํ MSA ์ ํ๊ณผ ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต์ ํตํด ํ์ฅ์ฑ๊ณผ ์์ ์ฑ์ ๋์์ ์ถ๊ตฌํ๊ณ ์์ต๋๋ค.
์ ์ด๋ฐ ๊ธฐ์ ์คํ์ ์ ํํ์๊น?
์ฌ๋ฆฌ๋ธ์์ ๊ธฐ์ ์ ํ์๋ ๋ช ํํ ์ด์ ๊ฐ ์์ด์:
- ํ์ฅ์ฑ: ๊ธ์ฑ์ฅํ๋ ์ฌ์ฉ์ ์ (MAU 950๋ง๋ช )์ ๋์
- ์์ ์ฑ: 24์๊ฐ ์ค๋จ ์๋ ์๋น์ค ์ด์ ํ์
- ์ฑ๋ฅ: ๋์ฉ๋ ๋ฐ์ดํฐ ์ค์๊ฐ ์ฒ๋ฆฌ (์ฌ๊ณ ๋ณ๊ฒฝ ๋ฑ)
- ๊ธ๋ก๋ฒ ๋์: ๋ฏธ๊ตญ, ์ผ๋ณธ ์ง์ถ์ ๋ฐ๋ฅธ ์ธํ๋ผ ์๊ตฌ
๋ฐฑ์๋ ๊ฐ๋ฐ ํ๊ฒฝ
๋ฉ์ธ ๊ธฐ์ ์คํ: ์ฝํ๋ง (Kotlin + Spring Boot)
๐ฏ ํต์ฌ ํน์ง
์ฌ๋ฆฌ๋ธ์ ๋๋ถ๋ถ ํ์์๋ ์ฝํ๋ง(Kotlin + Spring Boot) ํํ์ ์ค์ผ๋ ํค ํ๋ก์ ํธ๋ฅผ ํ์ค์ผ๋ก ์ฌ์ฉํ๊ณ ์์ด์. ์คํ๋ผ์ธ ํ์ ๊ฒฝ์ฐ ํ์๋ค์ ๊ธฐ์ ์๋ จ๋๋ฅผ ๊ณ ๋ คํด ์ํ๋ง(Java + Spring Boot)๋ ๋ณํ ์ฌ์ฉํฉ๋๋ค.
์ค์ผ๋ ํค ํ๋ก์ ํธ ๊ตฌ์ฑ
๐ฆ ๊ธฐ๋ณธ ํฌํจ ๊ธฐ๋ฅ
- JPA: ORM ๊ธฐ๋ณธ ์ค์
- MyBatis: ๋ณต์กํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ
- Swagger: API ๋ฌธ์ํ
- Test Code: ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ
- DB Multi Datasource: ๋ค์ค DB ์ฐ๊ฒฐ ์ค์
- ์์ API: ์ ๊ท ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ์ฉ
ํ๋ก ํธ์๋ ์ฐ๋
ํ๋ก ํธ์๋๋ Next.js๋ฅผ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ฉฐ, Back-end/Front-end ๋ถ๋ฆฌ ํ๋ก์ ํธ๋ก ์ด์ํ๊ณ ์์ด์. ์ด๋ ํ๋ณ ๋ ๋ฆฝ์ ์ธ ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๐ ์ธ์ด ์ ํ ๊ธฐ์ค
ํ ์ ํ | ์ฃผ ์ฌ์ฉ ์ธ์ด | ์ ํ ์ด์ |
---|---|---|
์ ๊ท ํ๋ก์ ํธ | Kotlin + Spring Boot | ์์ฐ์ฑ, ์์ ์ฑ, ์ต์ ๊ธฐ๋ฅ |
๋ ๊ฑฐ์ ์ ์ง๋ณด์ | Java + Spring Boot | ๊ธฐ์กด ์ฝ๋ ํธํ์ฑ |
์คํ๋ผ์ธ ํ | Java + Spring Boot | ํ์ ์๋ จ๋ ๊ณ ๋ ค |
ํด๋ผ์ฐ๋ ์ธํ๋ผ
๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต
์ฌ๋ฆฌ๋ธ์์ ๋จ์ผ ํด๋ผ์ฐ๋๊ฐ ์๋ ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต์ ์ฌ์ฉํด์. ๊ฐ ํด๋ผ์ฐ๋์ ๊ฐ์ ์ ํ์ฉํด ์ต์ ์ ์ฑ๋ฅ์ ๋์ด๋ด๊ณ ์์ต๋๋ค.
๐ถ AWS (Amazon Web Services)
- ECS Fargate: ์ปจํ ์ด๋ ์๋น์ค ์ด์
- MSK: Apache Kafka ๊ด๋ฆฌํ ์๋น์ค
- OpenSearch: ๊ฒ์ ๋ฐ ๋ก๊ทธ ๋ถ์
- Bedrock + Claude 3.5: AI ์ด๋ฏธ์ง ๊ฒ์ ์์คํ
์ฑ๊ณผ: ์ด๋ฏธ์ง ๊ฒ์ 5์ด ์ด๋ด ์ฒ๋ฆฌ, 95% ์ ํ๋
๐ด Oracle Cloud Infrastructure
- Oracle DB ์๋น์ค: ํต์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Scale Up/Out: ์ ์ฐํ ์์ ํ์ฅ
์ฑ๊ณผ: Heavy Query 50-200ms โ 3-4ms (50๋ฐฐ ๊ฐ์ )
๐ต Google Cloud Platform
- BigQuery: ํตํฉ ๋ฐ์ดํฐ ๋ถ์ ํ๋ซํผ
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ: ์ค์๊ฐ ๋ถ์
์ฑ๊ณผ: ๋ฐ์ดํฐ ์์ง/์ด๋ ์๊ฐ 55% ๋จ์ถ
๋ฉ์์ง ์์คํ : AWS MSK
๐ MSK ์ฑ๋ฅ ์งํ
- Peak Throughput: 605MB/s
- P99 Latency: 5ms
- ๋ฉ์์ง ์ ์ง: ๊ธฐ๋ณธ 7์ผ
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ: ๋ณด์ฅ
- ๋น๋๊ธฐ ํต์ : ์ง์
AI ๊ธฐ์ ๋์
๐ค AWS Bedrock + Claude 3.5 Sonnet
2024๋ 9์ ๊ตฌ์ถํ ์๋ ์ํ ์ด๋ฏธ์ง ๊ฒ์ ์์คํ ์ด ์ ๋ง ์ธ์์ ์ด์์:
- ์ฒ๋ฆฌ ์๊ฐ: ์ด๋ฏธ์ง ์ ๋ก๋๋ถํฐ ๊ฒ์ ์๋ฃ๊น์ง 5์ด ์ด๋ด
- ์ ํ๋: 95% ์ด์์ ๊ฐ์ด๋๋ผ์ธ ์ค์ ์ฌ๋ถ ํ๋จ
- ํจ์จ์ฑ: ๊ธฐ์กด ์๋ ๊ฒ์ ๋๋น ๋ํญ ๊ฐ์
MSA ์ ํ ํํฉ
์ MSA๋ก ์ ํํ๊ณ ์์๊น?
๐๏ธ Monolithic์ ํ๊ณ
- Scale-out ์ด๋ ค์: ํน์ ๋ถ๋ถ๋ง ํ์ฅํ๊ธฐ ์ด๋ ค์ด ๊ตฌ์กฐ
- ๊ตฌ์กฐ ํ์ ์ด๋ ค์: ์ ์ฒด ์์คํ ์ดํด๋ ์ ํ
- ๋ฐฐํฌ ๋ฆฌ์คํฌ: ์์ ๋ณ๊ฒฝ๋ ์ ์ฒด ์์คํ ์ฌ๋ฐฐํฌ
- ๊ธฐ์ ์คํ ์ ์ฝ: ์๋ก์ด ๊ธฐ์ ๋์ ์ด๋ ค์
์ ํ ์๋ฃ ์์ญ
2023๋ 10์ ์จ๋ผ์ธ๋ชฐ Home ์์ญ์ด ์ ๊ท MSA ์ํคํ ์ฒ๋ก ์ ํ ์๋ฃ๋์์ด์. ์ด๋ฅผ ํตํด ๋๋ผ์ด ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋์ต๋๋ค.
๐ Home ์์ญ MSA ์ ํ ์ฑ๊ณผ
- ํ๊ท ์๋ต ์๋: 99.5% ํฅ์ (6์ ๋๋น 9์)
- ์ต๋ ์๋ต ์๋: 99.8% ํฅ์
- ์์คํ ์์ ์ฑ: ๋ํญ ๊ฐ์
- ๊ฐ๋ฐ ์์ฐ์ฑ: ํ๋ณ ๋ ๋ฆฝ ๋ฐฐํฌ ๊ฐ๋ฅ
๋ฐ์ดํฐ ์๋น ์ ๋ต
๐ฏ 2-Tier ๋ฐ์ดํฐ ๊ตฌ์กฐ
Static Data
๋ชจ๋ ์ ์ ์๊ฒ ๋์ผํ๊ฒ ์ ๊ณต๋๋ ๋ฐ์ดํฐ
- ์บ์ฑ ๋ฐ์ดํฐ ์กฐํ ํ ๋ฐ๋ก ์๋น
- ๋น ๋ฅธ ์๋ต ์๋ ํ๋ณด
- ์๋ฒ ๋ฆฌ์์ค ํจ์จ์ ์ฌ์ฉ
Personal Data
ํน์ ์ ์ ์๊ฒ ์ฐจ๋ณํ๋์ด ์ ๊ณต๋๋ ๋ฐ์ดํฐ
- ๋น์ฆ๋์ค ๋ก์ง ํฌํจ
- ์ฌ๋ฌ ์์คํ ๊ฐ ๋ํ๋์ ๊ณ ๋ ค
- ๊ฐ์ธํ ์๋น์ค ์ ๊ณต
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์คํ ๋ฆฌ์ง
๋ค์ํ DB ๊ธฐ์ ํ์ฉ
์ฌ๋ฆฌ๋ธ์์ ํด๋ฆฌ๊ธ๋ ํผ์์คํด์ค ์ ๋ต์ ์ฌ์ฉํด์. ๊ฐ ์ฉ๋์ ์ต์ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๐๏ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
Oracle Database (OCI)
- ์ฉ๋: ํต์ฌ ๋น์ฆ๋์ค ๋ฐ์ดํฐ
- ์ฑ๋ฅ: Heavy Query 50-200ms โ 3-4ms
- ์ฅ์ : ์ ์ฐํ Scale Up/Out
๐ NoSQL - MongoDB
- ์ฉ๋: ์ ์ ์์ญ ์ฝํ ์ธ ๊ด๋ฆฌ
- ํน์ง: ์ ๋์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์ ๋ต: ๋ฐ์ดํฐ ๋ฒ์ ํ ๊ด๋ฆฌ
โก ์บ์ - Redis
- ์ฉ๋: ์ปค๋ฎค๋ํฐ ์๋น์ค '์ ํฐ'
- ํ์ฉ: Sorted Set ๊ธฐ๋ฐ ๋ญํน
- ์ญํ : ๊ณ ์ ๋ฐ์ดํฐ ์ก์ธ์ค
๐ ๊ฒ์ - AWS OpenSearch
- ์ฉ๋: ์ฌ๊ณ ๋ณ๊ฒฝ ์ด๋ ฅ ๊ด๋ฆฌ
- ์ฒ๋ฆฌ๋: ์ผ์ผ ์ฒ๋ง ๊ฑด ์ด์
- ๊ตฌ์ฑ: EFK ์คํ (ElasticSearch, FluentBit, Kibana)
๋ฐ์ดํฐ ์์ถ ์ต์ ํ
๐๏ธ Avro Format + AWS Glue Schema Registry
๋ฐ์ดํฐ ํฌ๋งท | ์ฉ๋ (238๋ง ๊ฑด ๊ธฐ์ค) | ์์ถ๋ฅ |
---|---|---|
JSON Format | 12GB | - |
Avro Format | 538MB | 24๋ฐฐ ์์ถ |
DevOps ๋ฐ ์ด์ ๋๊ตฌ
CI/CD: TeamCity
๐ง TeamCity ์ ํ ์ด์
- ํธ๋ฆฌํ UI: ์ง๊ด์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- Kotlin Script: CI/CD ํ์ดํ๋ผ์ธ ์ปค์คํฐ๋ง์ด์ง
- Container ์นํ์ : Docker ํ๊ฒฝ ์ต์ ํ
- ํด๋ผ์ฐ๋ ํตํฉ: ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ
์ปจํ ์ด๋ ์ด์
Docker + ECS Fargate ํ๊ฒฝ์์ ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์์ด์. ์ด๋ฅผ ํตํด ํ์ฅ์ฑ๊ณผ ๊ด๋ฆฌ ํจ์จ์ฑ์ ๋์์ ํ๋ณดํ์ต๋๋ค.
๋ชจ๋ํฐ๋ง: Datadog
๐ Datadog ํ์ฉ ํํฉ
- ๋์๋ณด๋: 450๊ฐ ์ด์ ์ด์
- ์ ์ฉ ๋ฒ์: ์จ๋ผ์ธ๋ชฐ๋ถํฐ ์คํ๋ผ์ธ ๋งค์ฅ๊น์ง
- QA ํ์ฉ: APM ๋ก๊ทธ, ์ฑ๋ฅ ๋น๊ต, ์ด์ ์ถ์
- AWS ์ฐ๋: MSK Prometheus ๋ฉํธ๋ฆญ ์์ง
๐ QA์์์ Datadog ํ์ฉ
- APM ๋ก๊ทธ ํ์ธ: ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
- ๊ฐํ์ ์ด์ ์ถ์ : ์ฌํํ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ ๋ฐ๊ฒฌ
- ๋ฐฐํฌ ์ ํ ์ฑ๋ฅ ๋น๊ต: ๋ฆด๋ฆฌ์ค ์ํฅ๋ ๋ถ์
- ์๋น์ค ์์ ์ฑ ํ๋ณด: ํ์ง ๊ด๋ฆฌ ๋๊ตฌ๋ก ํ์ฉ
์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก
์ ๋ง ๋๋ผ์ด ์ฑ๊ณผ๋ค์ด์์
์ฌ๋ฆฌ๋ธ์์ ๊ธฐ์ ํ์ด ๋ฌ์ฑํ ์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก๋ค์ ๋ณด๋ฉด, ๊ธฐ์ ์ ์ญ๋์ด ์ผ๋ง๋ ๋ฐ์ด๋์ง ์ ์ ์์ด์.
๐ ์๋ต ์๋ ๊ฐ์
MSA ์ ํ (Home ์์ญ)
- ํ๊ท ์๋ต ์๋: 99.5% ํฅ์
- ์ต๋ ์๋ต ์๋: 99.8% ํฅ์
- ๊ธฐ๊ฐ: 6์ ๋๋น 9์ (3๊ฐ์)
โก DB ์ฟผ๋ฆฌ ์ฑ๋ฅ
OCI ์ด๊ด + ํ๋
- Heavy Query: 50-200ms โ 3-4ms
- ๊ฐ์ ๋ฅ : ์ฝ 50๋ฐฐ ํฅ์
- ๋ฐฉ๋ฒ: ๋ฌผ๋ฆฌ DB โ ํด๋ผ์ฐ๋ DB
๐๏ธ ๋ฐ์ดํฐ ์์ถ
Avro Format ๋์
- ์์ถ๋ฅ : JSON ๋๋น 24๋ฐฐ
- ์ฉ๋: 12GB โ 538MB
- ๋ฐ์ดํฐ: 238๋ง ๊ฑด ๊ธฐ์ค
๐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
GCP BigQuery ๋์
- ์์ง/์ด๋ ์๊ฐ: 55% ๋จ์ถ
- ๋ฒ์: ํตํฉ ๋ฐ์ดํฐ ๋ถ์
- ํจ๊ณผ: ์ค์๊ฐ ์์ฌ๊ฒฐ์ ๊ฐ๋ฅ
์กฐ์ง ๋ฌธํ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ
์ค์ฟผ๋ ์กฐ์ง ๊ตฌ์ฑ
์ฌ๋ฆฌ๋ธ์์ ์ค์ฟผ๋ ๋จ์๋ก ํ์ ๊ตฌ์ฑํด ์ด์ํ๊ณ ์์ด์. ๊ฐ ์ค์ฟผ๋๋ ๋ ๋ฆฝ์ ์ธ ์ฑ ์๊ณผ ๊ถํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๐ช ์คํ ์ด์ ์ ์ค์ฟผ๋
- ๋ฉ์ธ, ํ, ์คํน ๋ฑ GNB ์์ญ
- ์จ๋ผ์ธ๋ชฐ ์ ์ ์๋น์ค
- ๊ณ ๊ฐ ๊ฒฝํ ์ต์ ํ
๐ฆ B2B ๋ฌผ๋ฅ ์ค์ฟผ๋
- ์คํ๋ผ์ธ ๋ฐ์ฃผ ์์คํ
- ๋ฌผ๋ฅ ์์คํ ๊ฐ๋ฐ
- MSA ์ ํ ์ฃผ๋
๐ ์ธ๋ฒคํ ๋ฆฌ ์ค์ฟผ๋
- ์ฌ๊ณ ๊ด๋ฆฌ ์์คํ
- ์ผ์ผ ์ฒ๋ง ๊ฑด ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ์ค์๊ฐ ์ฌ๊ณ ๋๊ธฐํ
์ธ๋ถ ์ปค๋ฎค๋ํฐ ์ฐธ์ฌ
๐ 2025๋ ์ฃผ์ ํ๋
- SpringCamp 2025: ๊ณจ๋ ํ์์ฌ, ๋ฌผ๋ฅ ์์คํ ๊ฐ์ ๊ธฐ ๋ฐํ
- Let'Swift 2024: ํ๋ํฐ๋ ํ์, iOS ์ํ๊ณ ํ์ฑํ
- ๊ฐ๋ฐ์ ์ํต: ์ฝ 500๋ช ์ ์ธ๋ถ ๊ฐ๋ฐ์์ ๊ต๋ฅ
๋ด๋ถ ์ํฌ์ ๋ฐ ๊ต์ก
๐ฏ 2024๋ ํ ํฌํ๋ซํผ์ผํฐ ์ํฌ์
- ์ฐธ์ฌ์: ํ ํฌํ๋ซํผ์ผํฐ ๊ตฌ์ฑ์ ์ ์
- ํ๋ก๊ทธ๋จ: ์์ด๋์ดํค ์งํ
- ์ฃผ์ : ์ฌ๋ฆฌ๋ธ์ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์
- ๋ชฉํ: ์คํ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ๋์ถ
ํ์ ์ญ๋ ๋ถ์
๊ธฐ์ ์ ์ญ๋
๐ฏ ํ์ ๊ธฐ์ (Must Have)
- Kotlin + Spring Boot: ์ฃผ๋ ฅ ๊ฐ๋ฐ ์คํ
- JPA & MyBatis: ๋ฐ์ดํฐ ์ก์ธ์ค ๋ ์ด์ด
- Docker: ์ปจํ ์ด๋ํ ํ์
- AWS ๊ธฐ๋ณธ: ECS, MSK, OpenSearch ์ดํด
- MSA ์ดํด: ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๊ฒฝํ
โญ ์ฐ๋ ๊ธฐ์ (Nice to Have)
- Kafka: ๋์ฉ๋ ๋ฉ์์ง ์์คํ ๊ฒฝํ
- MongoDB & Redis: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฉ
- Oracle Cloud: OCI ํ๊ฒฝ ๊ฒฝํ
- Datadog: ๋ชจ๋ํฐ๋ง ๋๊ตฌ ํ์ฉ
- TeamCity: CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
๋น์ฆ๋์ค ์ญ๋
๐ผ ์ฌ๋ฆฌ๋ธ์์ด ์ค์ํ๊ฒ ๋ณด๋ ์ญ๋
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์ผ์ผ ์ฒ๋ง ๊ฑด ์ด์ ์ฒ๋ฆฌ ๊ฒฝํ
- ์ฑ๋ฅ ์ต์ ํ: 99% ์ด์ ์ฑ๋ฅ ๊ฐ์ ๊ฒฝํ
- ์์คํ ์์ ์ฑ: 24/7 ๋ฌด์ค๋จ ์๋น์ค ์ด์
- ๊ธ๋ก๋ฒ ๋์: ๋ฉํฐ ๋ฆฌ์ ์๋น์ค ๊ตฌ์ถ ๊ฒฝํ
- ๋ ๊ฑฐ์ ์ ํ: Monolithic โ MSA ์ ํ ๊ฒฝํ
- ํ์ ๋ฅ๋ ฅ: ์ค์ฟผ๋ ๋จ์ ์ ์์ผ ๊ฐ๋ฐ
์ํํธ ์คํฌ
๐ค ์ค์ํ ์ํํธ ์คํฌ
- ๋ฌธ์ ํด๊ฒฐ: ๋ณต์กํ ๊ธฐ์ ์ ์ด์ ํด๊ฒฐ ๋ฅ๋ ฅ
- ํ์ต ๋ฅ๋ ฅ: ๋น ๋ฅด๊ฒ ๋ณํ๋ ๊ธฐ์ ํธ๋ ๋ ๋ฐ๋ผ๊ฐ๊ธฐ
- ์ปค๋ฎค๋์ผ์ด์ : ๊ธฐ์ ์ ๋ด์ฉ์ ๋น๊ฐ๋ฐ์์๊ฒ ์ค๋ช
- ์ค๋์ญ: ํ๋ก์ ํธ ์ฑ ์๊ฐ๊ณผ ์ฃผ๋์ ์ฐธ์ฌ
- ์ฐฝ์์ฑ: ์๋ก์ด ์์ด๋์ด์ ์๋ฃจ์ ์ ์
์ทจ์ ์ ๋ต ๊ฐ์ด๋
ํฌํธํด๋ฆฌ์ค ์ค๋น ์ ๋ต
๐ฏ ์ฌ๋ฆฌ๋ธ์ ์คํ์ผ ํ๋ก์ ํธ ์์
1. ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ก์ ํธ
- ์ฃผ์ : "์ค์๊ฐ ์ฌ๊ณ ๊ด๋ฆฌ ์์คํ ๊ตฌ์ถ"
- ๊ธฐ์ : Kotlin + Spring Boot + Kafka + Redis
- ํฌ์ธํธ: ์ผ์ผ 100๋ง ๊ฑด ์ด์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ์ฑ๊ณผ: ์๋ต ์๊ฐ 90% ๊ฐ์ ๋ฑ ๊ตฌ์ฒด์ ์์น
2. MSA ์ ํ ํ๋ก์ ํธ
- ์ฃผ์ : "๋ชจ๋๋ฆฌ์ โ ๋ง์ดํฌ๋ก์๋น์ค ๋ฆฌํฉํ ๋ง"
- ๊ธฐ์ : Spring Boot + Docker + AWS ECS
- ํฌ์ธํธ: ๋ ๋ฆฝ ๋ฐฐํฌ ๊ฐ๋ฅํ ์๋น์ค ๋ถ๋ฆฌ
- ์ฑ๊ณผ: ๋ฐฐํฌ ์๊ฐ ๋จ์ถ, ์ฅ์ ์ํฅ ๋ฒ์ ์ถ์
3. ์ฑ๋ฅ ์ต์ ํ ํ๋ก์ ํธ
- ์ฃผ์ : "DB ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ต์ ํ"
- ๊ธฐ์ : JPA + MyBatis + Redis ์บ์ฑ
- ํฌ์ธํธ: ์ธ๋ฑ์ค ํ๋, ์บ์ ์ ๋ต
- ์ฑ๊ณผ: ์๋ต ์๊ฐ 50๋ฐฐ ๊ฐ์ (์ฌ๋ฆฌ๋ธ์๊ณผ ์ ์ฌ)
์์์ ์์ฑ ํฌ์ธํธ
โ ๊ฐ์กฐํด์ผ ํ ๊ฒฝํ
๐ฅ ๊ธฐ์ ์ ์ฑ๊ณผ ์ดํ
- "๊ธฐ์กด 50ms ์๋ต ์๊ฐ์ 3ms๋ก ๊ฐ์ " (๊ตฌ์ฒด์ ์์น)
- "์ผ์ผ 100๋ง ๊ฑด ๋ฐ์ดํฐ ์ค์๊ฐ ์ฒ๋ฆฌ ์์คํ ๊ตฌ์ถ"
- "๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ MSA๋ก ์ ํํ์ฌ ๋ฐฐํฌ ํจ์จ์ฑ 300% ํฅ์"
๐ฏ ๋น์ฆ๋์ค ์ํฉํธ ์ฐ๊ฒฐ
- "์์คํ ์์ ์ฑ ํฅ์์ผ๋ก ๊ณ ๊ฐ ๋ง์กฑ๋ ๊ฐ์ ์ ๊ธฐ์ฌ"
- "์ฑ๋ฅ ์ต์ ํ๋ฅผ ํตํ ์๋ฒ ๋น์ฉ 30% ์ ๊ฐ"
- "์๋ํ ๋์ ์ผ๋ก ๊ฐ๋ฐํ ์์ฐ์ฑ 2๋ฐฐ ํฅ์"
๐ ์ฌ๋ฆฌ๋ธ์ ๊ฐ์น ์ฐ๊ฒฐ
- "๊ณ ๊ฐ ๊ฒฝํ ๊ฐ์ ์ ์ํ ๊ธฐ์ ์ ์๋ฃจ์ ์ ์"
- "๊ธ๋ก๋ฒ ์๋น์ค ํ์ฅ์ ๊ณ ๋ คํ ์ํคํ ์ฒ ์ค๊ณ"
- "ํ ๋ด ๊ธฐ์ ๊ณต์ ์ ํ์ ๋ฌธํ ์กฐ์ฑ"
๋ฉด์ ์ค๋น ์ ๋ต
๐ค ์์ ์ง๋ฌธ ๋ฐ ๋ต๋ณ ๊ฐ์ด๋
๊ธฐ์ ๋ฉด์ ์์ ์ง๋ฌธ
- Q: "Kotlin์ ์ ํํ ์ด์ ๋?"
- A: "Null Safety, ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ, Java 100% ํธํ์ฑ์ผ๋ก ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ๋์์..."
- Q: "MSA ์ ํ ์ ๊ฐ์ฅ ์ด๋ ค์ด ์ ์?"
- A: "์๋น์ค ๊ฐ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ถ์ฐ ํธ๋์ญ์ ๊ด๋ฆฌ. Saga ํจํด์ผ๋ก ํด๊ฒฐ..."
- Q: "๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฒฝํ์?"
- A: "Kafka๋ฅผ ์ด์ฉํ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ์ ๋ฐฐ์น ์ฒ๋ฆฌ ์กฐํฉ์ผ๋ก ์ผ์ผ ์ฒ๋ง ๊ฑด..."
๋ฌธํ ์ ํฉ์ฑ ์ง๋ฌธ
- Q: "์ฌ๋ฆฌ๋ธ์์์ ์ด๋ค ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์ถ๋?"
- A: "K-๋ทฐํฐ ๊ธ๋ก๋ฒ ํ์ฐ์ ๊ธฐ์ ์ ์ผ๋ก ๊ธฐ์ฌํ๊ณ , 950๋ง MAU๊ฐ ๋ ํธ๋ฆฌํ..."
- Q: "๊ธฐ์ ์ ๋์ ์ ๋ํ ์๊ฐ์?"
- A: "๋์์๋ ํ์ต๊ณผ ์คํ์ ํตํด ๊ณ ๊ฐ ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฐ์์..."
ํ์ต ๋ก๋๋งต
๐ ๋จ๊ณ๋ณ ํ์ต ๊ณํ
1๋จ๊ณ: ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ (3๊ฐ์)
- Kotlin ๋ง์คํฐ: Java ๋๋น Kotlin ์ฅ์ ์ดํด
- Spring Boot ์ฌํ: JPA, Security, Test ์ฝ๋
- Docker ๊ธฐ์ด: ์ปจํ ์ด๋ํ ๊ฐ๋ ๊ณผ ์ค์ต
- AWS ๊ธฐ๋ณธ: EC2, RDS, S3 ๋ฑ ๊ธฐ๋ณธ ์๋น์ค
2๋จ๊ณ: ์ค์ ํ๋ก์ ํธ (3๊ฐ์)
- Kafka ํ๋ก์ ํธ: ๋ฉ์์ง ์์คํ ๊ตฌ์ถ ๊ฒฝํ
- Redis ์บ์ฑ: ์ฑ๋ฅ ์ต์ ํ ํ๋ก์ ํธ
- MSA ์ค๊ณ: ์๋น์ค ๋ถ๋ฆฌ์ API Gateway
- ๋ชจ๋ํฐ๋ง ๊ตฌ์ถ: ๋ก๊ทธ ์์ง๊ณผ ๋์๋ณด๋
3๋จ๊ณ: ์ฌํ ์ญ๋ (3๊ฐ์)
- ์ฑ๋ฅ ํ๋: ํ๋กํ์ผ๋ง๊ณผ ์ต์ ํ
- ๋์ฉ๋ ์ฒ๋ฆฌ: ๋ฐฐ์น ์ฒ๋ฆฌ์ ์คํธ๋ฆฌ๋ฐ
- ํด๋ผ์ฐ๋ ์ํคํ ์ฒ: ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต
- DevOps: CI/CD ํ์ดํ๋ผ์ธ ์๋ํ
๐ฏ ๋น์ฅ ์์ํ ์ ์๋ ์ก์ ํ๋
- ์ฌ๋ฆฌ๋ธ์ ๊ธฐ์ ๋ธ๋ก๊ทธ ํ๋ก์ฐ: ์ต์ ๊ธฐ์ ๋ํฅ ํ์
- Kotlin + Spring Boot ํ ์ด ํ๋ก์ ํธ: ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ
- ์ธ๋ถ ์ปจํผ๋ฐ์ค ์ฐธ์ฌ: SpringCamp, Let'Swift ๋ฑ ์ฐธ์
- ์คํ์์ค ๊ธฐ์ฌ: GitHub ํ๋์ผ๋ก ์ฝ๋ ํ์ง ์ดํ
- ๊ธฐ์ ๋ธ๋ก๊ทธ ์ด์: ํ์ต ๊ณผ์ ๊ณผ ํ๋ก์ ํธ ๊ฒฝํ ๊ณต์
๋ง์น๋ฉฐ
CJ์ฌ๋ฆฌ๋ธ์์ ๋จ์ํ ์ด์ปค๋จธ์ค ํ์ฌ๊ฐ ์๋๋ผ, ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ๊ธ๋ก๋ฒ ๊ธฐ์ ๊ธฐ์ ์ผ๋ก ์งํํ๊ณ ์์ด์. ์ผ์ผ ์ฒ๋ง ๊ฑด ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , 950๋ง MAU๋ฅผ ์ง์ํ๋ ๊ธฐ์ ๋ ฅ์ ์ ๋ง ์ธ์์ ์ ๋๋ค.
ํนํ MSA ์ ํ๊ณผ ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต, ๊ทธ๋ฆฌ๊ณ 99% ์ด์์ ์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก๋ค์ ๋ณด๋ฉด, ๊ธฐ์ ์ ์ผ๋ก ๋งค์ฐ ๋์ ์ ์ด๊ณ ์ฑ์ฅํ ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ ๊ฑธ ์ ์ ์์ด์.
๐ฏ ๋ง์ง๋ง ์กฐ์ธ
์ฌ๋ฆฌ๋ธ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ๋ค๋ฉด, Kotlin + Spring Boot ๊ธฐ๋ฐ์ ๋์ฉ๋ ์ฒ๋ฆฌ ๊ฒฝํ์ ์๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํด์. ๋จ์ํ ๊ธฐ์ ์ ์๋ ๊ฒ๋ณด๋ค๋, ์ค์ ๋น์ฆ๋์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฑ๊ณผ๋ฅผ ๋ธ ๊ฒฝํ์ ์ดํํ์ธ์.
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฆฌ๋ธ์์ ๋น์ ์ธ "K-๋ทฐํฐ ๊ธ๋ก๋ฒ ํ๋ซํผ"์ ๊ธฐ์ ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ธฐ์ฌํ ์ ์๋์ง๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํ๋ค๋ฉด, ๋ฉด์ ์์ ํฐ ์ดํ ํฌ์ธํธ๊ฐ ๋ ๊ฑฐ์์.