ํ๋ ์ฑ์ฉ ์์ฅ์์ ๊ฐ๋ฐ์์ ์ด๋ ฅ์ GitHub, ๊ธฐ์ ๋ธ๋ก๊ทธ, LinkedIn ๋ฑ์ผ๋ก ๋ถ์ฐ๋์ด ๊ด๋ฆฌ์ ๋ฒ๊ฑฐ๋ก์์ด ์กด์ฌํฉ๋๋ค. LinkFolio๋ ์ด๋ฌํ ์ ๋ณด์ ํํธํ(Fragmentation)๋ฅผ ํด๊ฒฐํ๊ณ , ๊ตฌ์ง์๊ฐ ์์ ์ ์ ๋ฌธ์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์ฆ๋ช ํ ์ ์๋๋ก ๋๋ ํผ์ค๋ ๋ธ๋๋ฉ ๋ฐ ์ฑ์ฉ ํตํฉ ๊ด๋ฆฌ ํ๋ซํผ์ ๋๋ค.
๋จ์ํ ๋งํฌ ๋ชจ์(Link-in-Bio) ์๋น์ค๋ฅผ ๋์ด, ํ๋ก์ ํธ ๊ฒฝํ๊ณผ ๊ธฐ์ ์คํ์ ์๊ฐ์ ์ผ๋ก ๊ตฌ์กฐํํ์ฌ ๋ณด์ฌ์ค๋๋ค. ๋ํ, ๊ธฐ์ ๊ณผ ๊ตฌ์ง์๊ฐ ์ง์ ์ํตํ ์ ์๋ ์ค์๊ฐ ์ฑํ ๊ณผ ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฅ์ ํตํด, ์ ์ ์ธ ์ด๋ ฅ์ ์ ์ถ ๋ฐฉ์์ ๋์ด์ ์๋ฐฉํฅ ์ฑ์ฉ ์ํ๊ณ๋ฅผ ์งํฅํฉ๋๋ค.
![]() ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก ์กฐํ |
![]() ํฌํธํด๋ฆฌ์ค ์์ธ ์กฐํ |
- ์ธ๊ธฐ ๊ฐ๋ฐ์ ๋ญํน: ๋จ์ ์กฐํ์๋ฟ๋ง ์๋๋ผ ์ต์ ํธ๋ ๋๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด Hacker News์ ์๊ณ ๋ฆฌ์ฆ์ ๋ณํํ '์ธ๊ธฐ ์ ์(Popularity Score)' ๋ก์ง์ ์ ์ฉํ์ฌ ๋ฉ์ธ ํ์ด์ง์ ๋ ธ์ถํฉ๋๋ค.
- ํํฐ๋ง: QueryDSL์ ํ์ฉํ์ฌ ์ง๊ตฐ(Frontend, Backend ๋ฑ) ๋ฐ ๊ธฐ์ ์คํ๋ณ ๋์ ํํฐ๋ง์ ๊ตฌํํ์ต๋๋ค.
![]() ๊ฒ์๊ธ ๋๊ธ ์์ฑ |
![]() ๊ฒ์๊ธ ๋ต๋ณ ์ฑํ |
![]() ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ ์์ฑ |
![]() ํ์ ๋ชจ์ง ์ ์ฒญ |
- ์นดํ
๊ณ ๋ฆฌ๋ณ ๊ฒ์ํ: QnA(์ง๋ฌธ/๋ต๋ณ), ์ ๋ณด ๊ณต์ , ํ์ ๋ชจ์ง ๋ฑ ๋ชฉ์ ์ ๋ง๋ ๊ฒ์ํ์ ์ ๊ณตํฉ๋๋ค. QnA ๊ฒ์ํ์ ์ง๋ฌธ ํด๊ฒฐ ์ฌ๋ถ(
isSolved)์ ๋ต๋ณ ์ฑํ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. - ํ์ ๋ชจ์ง ํ๋ก์ธ์ค: ์์ฑ์๋ ์ํด๋ฆญ์ผ๋ก ๋ชจ์ง ์ํ(
OPENโCLOSED)๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์ง์์๋ ๊ฒ์๊ธ ๋ด์์ ์ฆ์ ์์ฑ์์ 1:1 ์ฑํ ์ ์์ํ์ฌ ์ง์ํ ์ ์์ต๋๋ค. - ๊ณ์ธตํ ๋๊ธ: ๋๋๊ธ ๊ตฌ์กฐ๋ฅผ ์ง์ํ์ฌ ์ฌ์ฉ์ ๊ฐ์ ๊น์ด ์๋ ํ ๋ก ๊ณผ ์ํต์ด ๊ฐ๋ฅํฉ๋๋ค.
![]() ์ฑํ (1) |
![]() ์ฑํ (2) |
- ์ค์๊ฐ ์ํต: WebSocket๊ณผ STOMP ํ๋กํ ์ฝ์ ํ์ฉํ์ฌ ์ง์ฐ ์๋ ๋ํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. Redis Pub/Sub์ ๋์ ํ์ฌ ๋ค์ค ์๋ฒ ํ๊ฒฝ์์๋ ๋ฉ์์ง ์ ์ก์ ๋ณด์ฅํฉ๋๋ค.
- ์ฌ์ฉ์ ๋๊ธฐํ: ํ ์๋น์ค์ ํ๋กํ ๋ณ๊ฒฝ ์ฌํญ์ Kafka CDC๋ก ์ค์๊ฐ ๋๊ธฐํํ์ฌ, ์ฑํ ๋ชฉ๋ก ์กฐํ ์ ๋ฐ์ํ๋ N+1 ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
![]() ํฌํธํด๋ฆฌ์ค ๊ด๋ฆฌ |
![]() ์ปค๋ฎค๋ํฐ ๊ด๋ฆฌ |
- ๋ด ์ ๋ณด ๊ด๋ฆฌ: ํ๋กํ ์ฌ์ง, ์ค๋ช
, ์๋
์์ผ ๋ฑ์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ๋ ์ ๋ณด๋ Kafka ์ด๋ฒคํธ๋ฅผ ํตํด ํ ์๋น์ค(
Portfolio,Chat)์ ์ค์๊ฐ์ผ๋ก ์ ํ๋์ด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค. - ํฌํธํด๋ฆฌ์ค ๊ด๋ฆฌ: ์์ฑํ ํฌํธํด๋ฆฌ์ค์ ๊ณต๊ฐ/๋น๊ณต๊ฐ ์ ํ ๋ฐ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ด๋ ฅ ๊ด๋ฆฌ๋ฅผ ๋์ต๋๋ค.
- ํ๋ ๋ด์ญ ์กฐํ: ๋ด๊ฐ ์์ฑํ ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ๊ณผ ๋ถ๋งํฌํ ํฌํธํด๋ฆฌ์ค/๊ฒ์๊ธ์ ํ๋์ ๋ชจ์๋ณผ ์ ์์ด, ๊ด์ฌ ์ฝํ ์ธ ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
![]() ๊ณต์ง์ฌํญ (USER) |
![]() FAQ (USER) |
![]() ๊ณต์ง์ฌํญ (ADMIN) |
![]() FAQ (ADMIN) |
- ๊ณต์ง์ฌํญ ๋ฐ FAQ: ์๋น์ค ์ด์ฉ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฝ๊ธฐ ์์ฒญ์ด ๋ง์ ํน์ฑ์ ๊ณ ๋ คํ์ฌ Redis Caching์ ์ ๊ทน์ ์ผ๋ก ํ์ฉ, ์กฐํ ์ฑ๋ฅ์ ๊ทน๋ํํ์ต๋๋ค.
- ๊ด๋ฆฌ์ ๊ธฐ๋ฅ: ๊ด๋ฆฌ์(Admin) ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ง์ด ๊ณต์ง์ฌํญ์ ์์ฑ ๋ฐ ์์ ํ ์ ์๋๋ก ๊ถํ์ ๋ถ๋ฆฌํ์ต๋๋ค.
![]() ๋ก๊ทธ์ธ |
![]() ์ธ์ฆ์ฝ๋ |
![]() ์์ด๋ ์ฐพ๊ธฐ |
![]() ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ |
- ์์ฒด ํ์๊ฐ์ (์ด๋ฉ์ผ ์ธ์ฆ ๊ธฐ๋ฐ): ์ฌ์ฉ์๋ ์ด๋ฉ์ผ ์ธ์ฆ(SMTP)์ ๊ฑฐ์ณ ์์ ํ๊ฒ ๊ณ์ ์ ์์ฑํฉ๋๋ค. Redis๋ฅผ ํ์ฉํ์ฌ ์ธ์ฆ ์ฝ๋์ ์ ํจ ์๊ฐ์ ์๊ฒฉํ๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
- ์์ ๋ก๊ทธ์ธ: ์ฌ์ฉ์๋ ์นด์นด์ค, ๋ค์ด๋ฒ, ๊ตฌ๊ธ์ ํตํด ์์ ๋ก๊ทธ์ธ์ ํ ์ ์์ต๋๋ค.
- ๊ณ์ ์ฐพ๊ธฐ: ์ค๋ช ๊ณผ ์ด๋ฉ์ผ ๊ฒ์ฆ์ ํตํด ์์ด๋ฒ๋ฆฐ ์์ด๋๋ฅผ ์ฐพ๊ฑฐ๋, ์์ ๋น๋ฐ๋ฒํธ ๋ฐ๊ธ ๋์ ์์ ํ๊ฒ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ์ต๋๋ค.
LinkFolio๋ On-Premise Kubernetes ํ๊ฒฝ๊ณผ ์ธ๋ถ ๋ฉ์์ง ์ธํ๋ผ๊ฐ ๊ฒฐํฉ๋ ํ์ด๋ธ๋ฆฌ๋ ์ํคํ ์ฒ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์์คํ ์ ์์ ์ฑ๊ณผ ๋ฆฌ์์ค ํจ์จ์ฑ์ ์ํด Kubernetes ํด๋ฌ์คํฐ์ ๋ฉ์์ง ์์คํ ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ตฌ์ถํ์ต๋๋ค.
- Kubernetes Cluster (Self-Hosted On-Premise)
- VirtualBox VM ์์ 3๊ฐ์ ๋ ธ๋(1 Master, 2 Worker)๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ฅผ ์ง์ ๊ตฌ์ถํ์ฌ ์ด์ํฉ๋๋ค.
- ๋ชจ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๊ณณ์์ ๊ตฌ๋๋๋ฉฐ,
NodePort๋ฅผ ํตํด ์ธ๋ถ ๋คํธ์ํฌ(Kafka VM)์ ํต์ ํฉ๋๋ค.
- External Messaging Server (Ubuntu VM)
- Kafka, Zookeeper, Kafka Connect ๋ฑ ์ด๋ฒคํธ ๋ธ๋ก์ปค ์ํ๊ณ๊ฐ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ์ด์๋ฉ๋๋ค.
- K8s ๋ฆฌ์์ค ๋ถํ์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์์ ์ ์ธ ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ArgoCD๊ฐ Manifest ๋ฆฌํฌ์งํ ๋ฆฌ(
linkfolio-manifest)๋ฅผ ๊ฐ์ํ๋ฉฐ, ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์ ์ Kubernetes ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์๋์ผ๋ก ๋๊ธฐํ(Sync)ํฉ๋๋ค.
์ด์ ํ๊ฒฝ์ ๋ํ ๊น์ ์ดํด๋ฅผ ์ํด ๊ด๋ฆฌํ ๋๊ตฌ(Minikube ๋ฑ)๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , VirtualBox VM ๊ธฐ๋ฐ์ 3-Node ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ์ต๋๋ค.
| ํญ๋ชฉ | ๊ตฌ์ฑ ๋ด์ฉ | ๋น๊ณ |
|---|---|---|
| OS / Environment | Ubuntu 22.04 LTS (VirtualBox) | 1 Master + 2 Worker Nodes |
| Provisioning | Kubeadm, Kubelet, Kubectl | ํด๋ฌ์คํฐ ์๋ ํ๋ก๋น์ ๋ |
| Container Runtime | Containerd | Docker Shim ์ ๊ฑฐ ํธ๋ ๋ ๋ฐ์ (CRI ํ์ค ์ค์) |
| Network (CNI) | Calico | Pod ๋คํธ์ํฌ ํต์ ๋ฐ ์ ์ฑ ๊ด๋ฆฌ |
| Node Spec | 2GB RAM, 1 vCPU per Node | Swap ๋นํ์ฑํ ๋ฐ Kernel ํ๋ผ๋ฏธํฐ ํ๋ |
๐ [Blog] VirtualBox ๊ธฐ๋ฐ On-Premise Kubernetes 3-Node ํด๋ฌ์คํฐ ๊ตฌ์ถ ๊ณผ์ ์์ธ ๋ณด๊ธฐ
๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ ๊ตฌ์ฑํ์ต๋๋ค.
| Component | Role |
|---|---|
| Apache Kafka | โข ์ด๋ฒคํธ ๋ธ๋ก์ปค (Topic ํํฐ์ ๋์ ํตํ ๋ณ๋ ฌ ์ฒ๋ฆฌ) |
| Kafka Connect | โข DB์ Kafka ๊ฐ์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ (Source Connector) |
| Schema Registry | โข Avro Serialization์ ํตํ ์คํค๋ง ๊ฒ์ฆ ๋ฐ ๋ฐ์ดํฐ ํ์ ์์ ์ฑ ๋ณด์ฅ |
| Debezium | โข MySQL Binlog๋ฅผ ๊ฐ์งํ์ฌ ์ค์๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ ์บก์ฒ (CDC) |
| Category | Technology |
|---|---|
| Frontend | |
| Backend | |
| Database | |
| Messaging | |
| Infra & DevOps | |
| Monitoring | |
| Tools |
๋ณธ ํ๋ก์ ํธ์ ์ฃผ์ ๊ณ ๋ํ ๊ตฌํ ๊ธฐ์ ์ ์์ฝํฉ๋๋ค. ์์ธ ์ค๊ณ ๋ฐ ๊ตฌํ ๋ด์ฉ์ ์๋์ ์๋
'์๋น์ค ๊ตฌ์ฑ ๋ฐ ์์ธ ๋ฌธ์'๋ฅผ ํ์ธํด์ฃผ์ธ์.
- ๋ฌธ์ : ์๋น์ค ๊ฐ ๊ฐํ ๊ฒฐํฉ๋์ ๋ฐ์ดํฐ ๋ถ์ผ์น, ๊ทธ๋ฆฌ๊ณ 'Dual Write' ๋ฌธ์ .
- ํด๊ฒฐ: DB ํธ๋์ญ์
๋ก๊ทธ๋ฅผ ๊ฐ์งํ๋ Debezium(CDC) ์ ๋์
ํ์ฌ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถ.
- CDC Pattern (
user-profile-connector):User Service์ ํ๋กํ ๋ณ๊ฒฝ ์ฌํญ(Update)์ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ์ฌChat,Portfolio์๋น์ค๋ก ์๋ ์ ํ.
- CDC Pattern (
- ํจ๊ณผ: Feign Client ํธ์ถ ์ ๊ฑฐ๋ฅผ ํตํ ์ฅ์ ๊ฒฉ๋ฆฌ ๋ฐ ์๋น์ค ๊ฐ ๊ฒฐํฉ๋ ์ต์ํ.
- ๋ฌธ์ : ํฌํธํด๋ฆฌ์ค ์์ธ ์กฐํ ์ ๋น๋ฒํ DB ๋ถํ ๋ฐ์.
- ํด๊ฒฐ: ๋ณ๊ฒฝ ์ฃผ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์บ์ฑ.
- ์ ์ ๋ฐ์ดํฐ(๋ณธ๋ฌธ): Redis Cache-Aside ํจํด (TTL 1์๊ฐ)
- ๋์ ๋ฐ์ดํฐ(์กฐํ์/์ข์์): Redis Write-Back ํจํด (์ค์๊ฐ ์ธ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ ํ ๋ฐฐ์น ๋๊ธฐํ)
- ์ฑ๊ณผ: ์์ธ ์กฐํ ์ฑ๋ฅ ์ต์ ํ ๋ฐ DB Write Lock ์ต์ํ.
- ๊ตฌ์กฐ:
WebSocket+STOMP+Redis Pub/Sub+MongoDB - ํน์ง:
- Gateway์์ ๊ฒ์ฆ๋
X-User-Id๋ฅผ WebSocket Handshake ๋จ๊ณ์์ ๊ฐ๋ก์ฑ์ด ์ธ์ ์ ์ฃผ์ , ์๋ฒฝํ ์ธ์ฆ ์ฒ๋ฆฌ. - Redis Pub/Sub์ ํตํด Scale-out ๋ ์๋ฒ ํ๊ฒฝ์์๋ ๋ฉ์์ง ์ค์๊ฐ ์ ์ก ๋ณด์ฅ.
- ์ฌ์ฉ์ ํ๋กํ์ ๋ก์ปฌ MongoDB(
chat_user_profile)์ ์บ์ฑํ์ฌ ๋ชฉ๋ก ์กฐํ ์ N+1 ๋ฌธ์ ํด๊ฒฐ.
- Gateway์์ ๊ฒ์ฆ๋
- ์๋๋ฆฌ์ค: ํ์๊ฐ์
์
Auth DB(๊ณ์ )์User DB(ํ๋กํ)์ ์์์ฑ ๋ณด์ฅ ํ์. - ํด๊ฒฐ: Transactional Outbox Pattern์ ์ ์ฉํ Orchestration ๊ธฐ๋ฐ SAGA ๊ตฌํ.
- Event Router (
auth-outbox-connector): ๋น์ฆ๋์ค ๋ก์ง์์outboxํ ์ด๋ธ์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๋ฉด, Debezium์ด ์ด๋ฅผ ๊ฐ์งํ์ฌoutbox.event.{EventType}ํ ํฝ์ผ๋ก ๋ผ์ฐํ . - Flow: Auth Service(Pending) โ Kafka โ User Service(Create) โ Kafka โ Auth Service(Completed/Cancelled).
- Event Router (
- ํจ๊ณผ: ๋ถ์ฐ ํ๊ฒฝ์์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ ๋ฐ ๋ณด์ ํธ๋์ญ์ ์ฒ๋ฆฌ.
| ์๋น์ค ๋ช | ์ญํ ๋ฐ ์ฃผ์ ๊ธฐ์ | ์์ธ ๋ฌธ์ |
|---|---|---|
| API Gateway | โข ์ง์ ์ ๊ด๋ฆฌ, ๋ผ์ฐํ , JWT ์ธ์ฆ/์ธ๊ฐ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Auth Service | โข ๋ก๊ทธ์ธ(OAuth2/Local), ํ ํฐ ๊ด๋ฆฌ, SAGA ์ฃผ๊ด | ๋ฐ๋ก๊ฐ๊ธฐ |
| User Service | โข ์ฌ์ฉ์ ํ๋กํ ๊ด๋ฆฌ, SAGA ์ฐธ์ฌ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Portfolio Service | โข ํฌํธํด๋ฆฌ์ค ๊ด๋ฆฌ, Split Caching ์ ์ฉ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Community Service | โข ๊ฒ์ํ/๋๊ธ ๊ด๋ฆฌ, Redis Batch ์ฒ๋ฆฌ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Chat Service | โข ์ค์๊ฐ ์ฑํ (WebSocket + Redis Pub/Sub) | ๋ฐ๋ก๊ฐ๊ธฐ |
| Support Service | โข ๊ณต์ง์ฌํญ/FAQ ๊ด๋ฆฌ (Read-Heavy ์บ์ฑ) | ๋ฐ๋ก๊ฐ๊ธฐ |
| Common Module | โข ๊ณตํต DTO, ์์ธ ์ฒ๋ฆฌ, ์ ํธ๋ฆฌํฐ | ๋ฐ๋ก๊ฐ๊ธฐ |
๋ณธ ํ๋ก์ ํธ ์๋น์ค(๋ชจ๋)๋ค์ ์ ์ฒด์ ์ธ ์ฑ๋ฅ ์งํ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ฐ ์๋น์ค๋ณ ๋ถํ ํ ์คํธ ์๋๋ฆฌ์ค, ๋ณ๋ชฉ ๊ตฌ๊ฐ ๋ถ์ ๋ฐ ๊ตฌ์ฒด์ ์ธ ํ๋ ๊ณผ์ ์ ์๋
'์์ธ ๋ถ์ ๋ณด๊ณ ์'์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
| ์๋น์ค | ์งํ | Before | After | ๊ฐ์ ํจ๊ณผ |
|---|---|---|---|---|
| User Service | ํ๊ท ์๋ต์๊ฐ (ms) | 2287.37 | 1040.11 | โผ 54.5% ๊ฐ์ |
| ์ฒ๋ฆฌ๋ (TPS) | 6.78 | 10.90 | โฒ 60.7% ์ฆ๊ฐ | |
| ์ค๋ฅ์จ (%) | 0.36 | 0.00 | โผ 100% ๊ฐ์ | |
| Portfolio Service | ํ๊ท ์๋ต์๊ฐ (ms) | 210.08 | 385.60 | โฒ 83.5% ์ฆ๊ฐ |
| ์ฒ๋ฆฌ๋ (TPS) | 15.81 | 14.56 | โผ 7.8% ๊ฐ์ | |
| ์ค๋ฅ์จ (%) | 58.62 | 0.04 | โผ 99.9% ๊ฐ์ | |
| Community Service | ํ๊ท ์๋ต์๊ฐ (ms) | 1796.24 | 656.58 | โผ 63.4% ๊ฐ์ |
| ์ฒ๋ฆฌ๋ (TPS) | 12.13 | 12.62 | โฒ 4.0% ์ฆ๊ฐ | |
| ์ค๋ฅ์จ (%) | 12.13 | 0.00 | โผ 100% ๊ฐ์ | |
| Support Service | ํ๊ท ์๋ต์๊ฐ (ms) | 2579.43 | 1043.60 | โผ 59.5% ๊ฐ์ |
| ์ฒ๋ฆฌ๋ (TPS) | 12.65 | 22.04 | โฒ 74.2% ์ฆ๊ฐ | |
| ์ค๋ฅ์จ (%) | 0.00 | 0.00 | โ ๋ณํ ์์ |
๐ก Note (Portfolio Service): ํ๊ท ์๋ต ์๊ฐ์ ์ฆ๊ฐ๋ ์์คํ ์์ ํ์ ๋ฐ๋ฅธ Trade-off์ ๋๋ค. ๊ฐ์ ์ (Before)์๋ 58%์ ์์ฒญ์ด ์ฆ์ ์ค๋ฅ๋ฅผ ๋ฐํ(Fail-fast)ํ์ฌ ์๊ฐ์ด ์งง๊ฒ ์ธก์ ๋์์ผ๋, ๊ฐ์ ํ(After)์๋ ์ ์์ ์ธ ๋น์ฆ๋์ค ๋ก์ง(์บ์ฑ ๋ฐ DB ์กฐํ)์ ์ํํ๊ฒ ๋์ด ์ค์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋ฐ์๋ ๊ฒฐ๊ณผ์ ๋๋ค.
| ์ฃผ์ | ๋ถ์ ๋ด์ฉ ์์ฝ | ์์ธ ๋ฌธ์ |
|---|---|---|
| User Service | โข DB Lock ํด์: ํ๋กํ ์์ ํธ๋์ญ์ ์ต์ ํ ๋ฐ ์ปค๋ฅ์ ํ ํ๋ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Portfolio Service | โข Split Caching ํจ๊ณผ: ์ ์ /๋์ ๋ฐ์ดํฐ ๋ถ๋ฆฌ ์บ์ฑ ์ ๋ต์ Trade-off ๋ถ์ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Community Service | โข ์กฐํ์ ๋๊ธฐํ: Redis HyperLogLog ๋ฐ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ํตํ DB ๋ถํ ๊ฐ์ | ๋ฐ๋ก๊ฐ๊ธฐ |
| Support Service | โข Read-Heavy ์ต์ ํ: @Cacheable ์ ๋ต๊ณผ ์บ์ ๋ง๋ฃ ์ ์ฑ
(TTL) ํ๋ |
๋ฐ๋ก๊ฐ๊ธฐ |
๊ฐ๋ฐ ๊ณผ์ ์์ ๋ง์ฃผ์น ์ฃผ์ ๊ธฐ์ ์ ๋๊ด๊ณผ ์ด๋ฅผ ํด๊ฒฐํ ์์ธํ ๊ณผ์ ์ ์๋
'ํธ๋ฌ๋ธ ์ํ ๋ฌธ์'๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
| ์ฃผ์ | ์ด์ ๋ฐ ํด๊ฒฐ ์์ฝ | ์์ธ ๋ฌธ์ |
|---|---|---|
| API Gateway | โข JWT ๋ฒ์ ๋ถ์ผ์น: ์๋น์ค ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ์ธ์ฆ ์คํจ ํด๊ฒฐ | ๋ฐ๋ก๊ฐ๊ธฐ |
| OAuth2 / Redis | โข ์ง๋ ฌํ ์ด์: OAuth2 ์ธ์ฆ ๊ฐ์ฒด์ Redis ์ ์ฅ ์ ์ญ์ง๋ ฌํ ์คํจ ํด๊ฒฐ | ๋ฐ๋ก๊ฐ๊ธฐ |
| QueryDSL | โข ๋ฉํฐ ๋ชจ๋ ์์: ๊ณตํต ๋ชจ๋(BaseEntity)์ ์์ ํ๋ ๋ฏธ์ธ์ ๋ฌธ์ ํด๊ฒฐ |
๋ฐ๋ก๊ฐ๊ธฐ |
| WebSocket | โข ๋ณด์ ์ปจํ
์คํธ: STOMP ์ฐ๊ฒฐ ์ ์ธ์ฆ ๊ฐ์ฒด(Principal) ์ ์ค ๋ฌธ์ ํด๊ฒฐ |
๋ฐ๋ก๊ฐ๊ธฐ |
| Redis Cache | โข Page ๊ฐ์ฒด ์บ์ฑ: Page<T> ์ง๋ ฌํ ์ ClassCastException ํด๊ฒฐ |
๋ฐ๋ก๊ฐ๊ธฐ |
| Dependency | โข ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถฉ๋: Swagger์ Kafka Avro Serializer ๊ฐ ์์กด์ฑ ์ถฉ๋ ํด๊ฒฐ | ๋ฐ๋ก๊ฐ๊ธฐ |
.png)







.gif)











