๋ํ์ IT๊ฒฝ์ํํ ํ์์ฆ 32๊ธฐ ๋ฐ์
ํ๋ก์ ํธ 4์กฐ Starlight ๋ฐฑ์๋ ๋ ํฌ์งํ ๋ฆฌ

| ์ ์ฑํธ | ์ดํธ๊ทผ |
|---|---|
| @SeongHo5356 | @2ghrms |
| Category | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 3.3.10 |
| Databases | Postgresql, Redis |
| Authentication | JWT, Spring Security, OAuth2.0 |
| Development Tools | Lombok |
| API Documentation | Swagger UI (SpringDoc) |
| Storage | AWS S3, Naver Object Storage |
| Infrastructure | Terraform, NCP Server, HashiCorp Vault |
| Build Tools | Gradle |
| Monitoring | Prometheus, Grafana, Loki, Promtail |
https://www.erdcloud.com/d/bEeEkcvDoau3kf7W5

1๏ธโฃย Java 21
- Java 21์ ์ต์ ์ธ์ด ๊ธฐ๋ฅ(์: ํจํด ๋งค์นญ, ๋ ์ฝ๋, ๊ฐ์ ์ค๋ ๋ ๋ฑ)์ ์ ๊ณตํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ฉฐ, ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค.
- ์ต์ ๋ฒ์ ์ ์๋ฐ๋ ์ฑ๋ฅ ์ต์ ํ์ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ๊ฐ์ ๋์ด, ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์์ ์ ์ด๊ณ ๋น ๋ฅธ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ฅ๊ธฐ ์ง์ ๋ฒ์ ์ด๋ฏ๋ก, ์์ผ๋ก์ ์ ์ง๋ณด์์ ์์ ์ฑ ์ธก๋ฉด์์ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
2๏ธโฃ SpringBoot 3.4.9
- ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ต์ ํ: Jakarta EE ๊ธฐ๋ฐ์ ๋์ ์ฑ์๋๋ฅผ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ, ํฌ์ค์ฒดํฌยทActuatorยทMicrometer ๋ฑ ์ปจํ ์ด๋ ๋ฐ ํด๋ผ์ฐ๋ ์ด์์ ํ์์ ์ธ ๊ด์ธก์ฑ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ ๋ฐ ๋ณด์ ๊ฐํ: ๊ฐ์ ๋ AOT/Native ์ด๋ฏธ์ง ์ง์์ ํตํด ์ฝ๋์คํํธ๋ฅผ ์ต์ ํํ ์ ์์ผ๋ฉฐ, ์ ์ํ ๋ณด์ ํจ์น๋ก ์์ ์ ์ธ ์๋น์ค ์ด์์ ๋์ต๋๋ค.
- ์์ฐ์ฑ ๋ฐ ์ ์ง๋ณด์: ํ์คํ๋ ์คํํฐ์ ๊ฐ๋ ฅํ ์๋ ์ค์ (Auto Configuration)์ผ๋ก ๊ฐ๋ฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ , ํ ์จ๋ณด๋ฉ ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ์ ์ต์ํํฉ๋๋ค.
3๏ธโฃย SpringData JPA
- Spring Data JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธํฐ๋์ ์ ๋จ์ํํ๊ณ , ๋ถํ์ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ฌ ๊ฐ๋ฐ ํจ์จ์ฑ์ ๋์ฌ์ค๋๋ค.
4๏ธโฃ Spring AI
- LLM ํตํฉ ๋จ์ํ: Spring ์ํ๊ณ์ ํตํฉ๋ AI ํ๋ ์์ํฌ๋ก, ๋ณต์กํ LLM ์ฐ๋ ๊ณผ์ ์ ๊ฐ์ํํฉ๋๋ค.
- ์ ์ฐํ ์ถ์ํ ๋ ์ด์ด: OpenAI, Pinecone ๋ฑ ๋ค์ํ ์ ๊ณต์ ์ฒด์ ๋ํ ์ถ์ํ ๋ ์ด์ด๋ฅผ ์ ๊ณตํ์ฌ ๋ฒค๋ ๊ต์ฒด๊ฐ ์ฉ์ดํฉ๋๋ค.
- ๋์ ์์ฐ์ฑ: Spring Boot ์๋ ์ค์ ๋ฐ WebFlux๋ฅผ ์ง์ํ๋ฉฐ, ๋ฒกํฐ ๊ฒ์ยทํ๋กฌํํธ ํ ํ๋ฆฟยท์ฒด์ด๋ ๋ฑ RAG ํจํด์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
5๏ธโฃ MySQL
- ๊ฒ์ฆ๋ ์์ ์ฑ: ์ฑ์ํ InnoDB ์์ง๊ณผ ํ๋ถํ ์ด์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ, TCO(์ด ์์ ๋น์ฉ)๊ฐ ๋ฎ์ต๋๋ค.
- ๊ธฐ๋ฅ ๋ฐ ์ํ๊ณ: 8.x ๋ฒ์ ์ CTE์ ์๋์ฐ ํจ์๋ก ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋์ ๊ฐ๋ฅํ๋ฉฐ, ๋ฆฌํ๋ฆฌ์ผ์ด์ ยท๋ฐฑ์ ยท๋ชจ๋ํฐ๋ง ๋๊ตฌ๊ฐ ์ ๊ฐ์ถฐ์ ธ ์์ต๋๋ค.
- OLTP ์ต์ ํ: HikariCP ์ปค๋ฅ์ ํ๊ณผ ์ ์ ํ ์ธ๋ฑ์ฑ์ ํตํด ๋๊ท๋ชจ ํธ๋ํฝ์์๋ ์์ ์ ์ธ ์ด์์ด ๊ฐ๋ฅํฉ๋๋ค.
6๏ธโฃ NCP (CLOVA Studio, Server, Object Storage)
- ์์ ์ ์ธํ๋ผ: ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ(NCP)์ ์๋ฒ ์ธํ๋ผ์ Object Storage๋ฅผ ํ์ฉํ์ฌ ์์ ์ ์ด๊ณ ๋ณด์์ฑ์ด ๋ฐ์ด๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- AI ์๋น์ค ์ฐ๋: CLOVA Studio์์ ์ฐ๋์ ํตํด ํ๋ก์ ํธ์ AI ๊ธฐ๋ฅ์ ํจ์จ์ ์ผ๋ก ์ง์ํ๊ณ ์ด์ ํจ์จ์ฑ์ ๋์ ๋๋ค.
7๏ธโฃ ArgoCD, K3s
- ArgoCD (GitOps): Pull ๊ธฐ๋ฐ ๋ฐฐํฌ๋ก 'Git ์ํ=๋ฐฐํฌ ์ํ'๋ฅผ ๋ณด์ฅํ๋ฉฐ, ์๋ ๋๊ธฐํ ๋ฐ ์๊ฐ ์น์ (Self-healing)๋ก ์ด์ ๋ณต์ก๋๋ฅผ ์ค์ ๋๋ค.
- K3s (๊ฒฝ๋ K8s): ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์ด๋ ์คํ ์ด์ง/์๊ท๋ชจ ์๋น์ค์ ์ต์ ํ๋ ๊ฐ๋ฒผ์ด ์ฟ ๋ฒ๋คํฐ์ค์ ๋๋ค.
- ํ์ค ํธํ์ฑ: Helm, Ingress ๋ฑ ํ์ค K8s ๋๊ตฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ๊ณ , ์ถํ ๋งค๋์ง๋ ์๋น์ค๋ก์ ํ์ฅ์ด ์ฝ์ต๋๋ค.
8๏ธโฃ Promtail, Loki, Prometheus, Grafana
- ๋ก๊ทธ ์์ง ๋ฐ ๊ฒ์ (Loki): Promtail์ด ์์งํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์์คํ ๋ก๊ทธ๋ฅผ Loki๋ก ์ ์กํ์ฌ ๋์ฉ๋ ๋ก๊ทธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ธ๋ฑ์ฑํ๊ณ ๊ฒ์ํฉ๋๋ค.
- ๋ฉํธ๋ฆญ ๋ชจ๋ํฐ๋ง (Prometheus): Pull ๋ฐฉ์์ ํตํด API ์๋ต ์๊ฐ, CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค.
- ๋ฐ์ดํฐ ์๊ฐํ (Grafana): ์์ง๋ ๋ก๊ทธ์ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ํตํฉ ๋์๋ณด๋๋ก ์๊ฐํํ์ฌ ์์คํ ์ํ๋ฅผ ํ๋์ ํ์ ํฉ๋๋ค.
9๏ธโฃ Flannel + WireGuard VPN
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ฑ: ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ(VPC, IDC, ๊ณต์ธ๋ง)์ ๋ถ์ฐ๋ ๋ ธ๋ ๊ฐ์ ํต์ ์ ์ง์ํฉ๋๋ค.
- ๋ณด์ ํต์ ๋ณด์ฅ: K3s ํด๋ฌ์คํฐ ๋ด์์ WireGuard VPN์ ํตํด ๋น ๋ฅด๊ณ ์์ ํ Pod-to-Pod ๋ณด์ ํต์ ์ ๋ณด์ฅํฉ๋๋ค.
๐ Nginx
- ๊ณ ์ฑ๋ฅ ๋ฆฌ๋ฒ์ค ํ๋ก์: ๊ฒฝ๋ํ๋ ๊ตฌ์กฐ๋ก TLS ์ข ๋ฃ, ์ ์ ์์ฐ ์๋น, ๋ผ์ฐํ ๋ฐ ๋ฆฌ๋ผ์ดํธ ์ฒ๋ฆฌ์ ๊ฐ์ ์ ๊ฐ์ง๋๋ค.
- ๋ฐฑ์๋ ๋ณดํธ: ํฌ์ค์ฒดํฌ, ํ์์์, ๋ฒํผ๋ง ๋ฑ์ ์ธ๋ฐํ ํ๋์ ํตํด ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
- ์ ์ฐํ ๋ฐฐ์น: ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ Ingress Controller ๋๋ ์ฃ์ง ํ๋ก์๋ก ํ์ฉํ์ฌ ํธ๋ํฝ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
1๏ธโฃ1๏ธโฃ K6
- ์ฌ์ฉ์ ํ๋ฆ ํ ์คํธ: JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ์ฌ์ฉ์ ํ๋(๋ก๊ทธ์ธ โ API ํธ์ถ โ ์ค์ผ์ค๋ง)์ ์คํฌ๋ฆฝํธํํ๊ณ REST API ์ฑ๋ฅ์ ์ธก์ ํฉ๋๋ค.
- ์ปค์คํ ์๋๋ฆฌ์ค: vus(๊ฐ์ ์ฌ์ฉ์), stages ๋ฑ์ ์ต์ ์ผ๋ก ์คํ์ดํฌ ํ ์คํธ๋ ์ง์์ฑ ํ ์คํธ ๋ฑ ๋ค์ํ ๋ถํ ์๋๋ฆฌ์ค๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์๊ฐํ: ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋, ์๋ฌ์จ ๋ฑ์ ๋ฉํธ๋ฆญ์ ์์งํ๊ณ Grafana์ ์ฐ๋ํ์ฌ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ถ์ํฉ๋๋ค.
commit convention
#์ด์๋ฒํธ conventionType: ๊ตฌํํ ๋ด์ฉ
convention Type
| convention type | description |
|---|---|
feat |
์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ |
chore |
๋ถ์์ ์ธ ์ฝ๋ ์์ ๋ฐ ๊ธฐํ ๋ณ๊ฒฝ์ฌํญ |
docs |
๋ฌธ์ ์ถ๊ฐ ๋ฐ ์์ , ์ญ์ |
fix |
๋ฒ๊ทธ ์์ |
test |
ํ ์คํธ ์ฝ๋ ์ถ๊ฐ ๋ฐ ์์ , ์ญ์ |
refactor |
์ฝ๋ ๋ฆฌํฉํ ๋ง |
์ปจ๋ฒค์ ๋ช /#์ด์๋ฒํธ-์์ ๋ด์ฉ- pull request๋ฅผ ํตํด develop branch์ merge ํ, branch delete
- ๋ถ๋์ดํ๊ฒ develop branch์ ์ง์ commit ํด์ผ ํ ๊ฒฝ์ฐ,
!hotfix:์ฌ์ฉ
src/
โโโ main/
โ โโโ domain/
โ โ โโโ entity/
โ โ โโโ controller/
โ โ โโโ service/
โ โ โโโ repository/
โ โ โโโ dto/
โโโ request/
โโโ response/
โ โโโ global/
โ โ โโโ apiPayload/
โ โ โโโ config/
โ โ โโโ security/
๊ฐ ํ๋ซํผ(Instagram, Facebook, Threads) API์๋ ๊ณ์ /์๊ฐ ๋น ๋ฐํ ๊ฐ๋ฅํ ๊ฒ์๋ฌผ ์์ ์ ํ์ด ์์ด, ๋ถํ ํ ์คํธ์๋ ์ ์ฝ์ด ์กด์ฌํฉ๋๋ค. ์ด์ ๋ฐ๋ผ ์ ํฌ๋ ์ฆ์ ๋ฐํ์ด ์๋ "์์ฝ ๋ฐํ" API๋ฅผ ํ์ฉํ ๋ถํ ์๋ฎฌ๋ ์ด์ ๋ฐฉ์์ ๊ตฌ์ฑํ์์ต๋๋ค.
- ํ์ฌ ์์คํ
์ ๋์ ์ฝ
1,000๊ฑด์์ค๊น์ง๋ ์์ ์ ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์๋๋ฆฌ์ค โข์ฒ๋ผ ์ฌ์ฉ์ ์๊ฐ ์ ์ฐจ ์ฆ๊ฐํ๋ ์ํฉ์์๋ ํ๊ท ์๋ต ์๊ฐ์1.94์ด, ์ต๋ ์๋ต ์๊ฐ์7.88์ด๋ก, ๋๋ถ๋ถ์ ์์ฒญ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ต๋๋ค. - ํ์ง๋ง ์๋๋ฆฌ์ค โก์ฒ๋ผ
2,000๋ช์ ๋์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํ๊ท ์๋ต ์๊ฐ์ด7.74์ด, ์ต๋18.28์ด๊น์ง ์ฆ๊ฐํ๋ฉด์ ์๋ต ์ง์ฐ์ด ๋ฐ์ํ์์ต๋๋ค. ์ด ๊ฒฐ๊ณผ๋ ๋๊ท๋ชจ ํธ๋ํฝ์ ๋ํ ์ฑ๋ฅ ํ๊ณ๊ฐ ์์์ ๋ณด์ฌ์ฃผ๋ฉฐ, ์ถํ ์ด๋ฅผ ๊ฐ์ ํ ํ์๊ฐ ์์ต๋๋ค. - ์๋๋ฆฌ์ค โฃ์์๋
1000๋ช์ ์ฌ์ฉ์๊ฐ ๋์์ ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ, ์ด2,002๊ฑด์ ์์ฒญ์ด5์ด์ด๋ด์ ์ฒ๋ฆฌ๋์์ต๋๋ค. ์ด๋ ํ์ฌ ์์คํ ์ด ์ค์๊ฐ ๋์๋ณด๋ค๋ ์์ฝ ์ฒ๋ฆฌ์ ๋ ์ ํฉํ ๊ตฌ์กฐ์์ ๋ณด์ฌ์ค๋๋ค. - ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ดํ์ด ๋๊ธฐ ์์ํ๋ 5์ด ์ด๋ด ์๋ต์ ๊ธฐ์ค์ผ๋ก ์์ ์ ์์ ์ ์ฝ
1,000๋ช์ ๋์ ๋ํด์๋ ์ถฉ๋ถํ ์์ ์ ์ธ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์๋ค๊ณ ํ๋จ๋ฉ๋๋ค.



