๋ฉ”์ธ ์ปจํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Portfolio

์‹ค์ „ ํ”„๋กœ์ ํŠธ๋กœ ๊ฒ€์ฆํ•œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์—ญ๋Ÿ‰

2020.06 ~ ํ˜„์žฌ | ์ด 9๊ฐœ ์ฃผ์š” ํ”„๋กœ์ ํŠธ

6๊ฐœ์›” ์„ฑ๊ณผ ์š”์•ฝ (2025.06 ~ 2025.11)

4,959๊ฑด
์ด ์—…๋ฌด ํ•ญ๋ชฉ
470๊ฑด
๋ฐฐํฌ ํšŸ์ˆ˜
111๊ฑด
๋ฒ„๊ทธ ์ˆ˜์ •
9๊ฐœ
์ฃผ์š” ํ”„๋กœ์ ํŠธ

ํ•œ๊ตญ์‹ ์šฉ๋ฐ์ดํ„ฐ (KCD)

2025.01 ~ ์žฌ์ง ์ค‘ | ์žฅ๋ถ€ํŒ€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด & ๋ฐ์ดํ„ฐ์‹ค AI TF ๊ฒธ์ง

๋ถ€๊ฐ€์„ธ ์˜ˆ์ธก ์‹œ์Šคํ…œ

2025.06 ~ 2025.09 (4๊ฐœ์›”)โ€ข204๊ฑด ์ž‘์—…

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์‚ฌ์—…์ž์˜ ๋ถ€๊ฐ€์„ธ ์‹ ๊ณ ๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์˜ˆ์ธก ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ. ๊ธฐ์กด 19์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ 30๋ถ„์œผ๋กœ ๋‹จ์ถ•ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์กฐํšŒ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • ์„ฑ๋Šฅ ์ตœ์ ํ™” 97% ๊ฐœ์„ : ๋ถ€๊ฐ€์„ธ ์ง‘๊ณ„ ํ…Œ์ด๋ธ” ์„ค๊ณ„๋กœ ์ˆ˜์ฒœ๋งŒ ๊ฑด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ 19์‹œ๊ฐ„์—์„œ 30๋ถ„์œผ๋กœ ๋‹จ์ถ• (DB Sink Job ํ™œ์šฉ)
  • ์˜ˆ์ธก ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„: ๊ณ ์ •๋น„/๋ณ€๋™๋น„ ๋ถ„๋ฅ˜, N๊ฐœ์›” ์ถ”์ด ๋ถ„์„์„ ํ†ตํ•œ ๋ถ€๊ฐ€์„ธ ์˜ˆ์ƒ์„ธ์•ก ๊ณ„์‚ฐ ๋กœ์ง ์„ค๊ณ„
  • ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ: ์นด๋“œ๋งค์ถœ, ํ˜„๊ธˆ์˜์ˆ˜์ฆ, ์„ธ๊ธˆ๊ณ„์‚ฐ์„œ ๋“ฑ ๋‹ค์–‘ํ•œ ๋งค์ถœ/๋น„์šฉ ๋ฐ์ดํ„ฐ ์ž๋™ ์ ์žฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • ์•Œ๋ฆผํ†ก ์—ฐ๋™: ๋ถ€๊ฐ€์„ธ ๋‚ฉ๋ถ€ ์›”์— ๋งž์ถ˜ ์ž๋™ ์•Œ๋ฆผ ๋ฐœ์†ก์œผ๋กœ ์‹ ๊ณ  ๋ˆ„๋ฝ ๋ฐฉ์ง€

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ•ด๊ฒฐ

๋ฌธ์ œ: hometax_agency ๋งค์ถœ์„ธ์•ก 90๋งŒ์› ์ฐจ์ด ๋ฐœ์ƒ

์›์ธ: 5์›” ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ (date range ์ฟผ๋ฆฌ ์‚ฌ์šฉ)

ํ•ด๊ฒฐ: month ๊ธฐ์ค€ ์กฐํšŒ ๋กœ์ง์œผ๋กœ ๋ณ€๊ฒฝ

๊ฒฐ๊ณผ: ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ํ™•๋ณด ๋ฐ ์ •ํ™•ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅ

๋ฌธ์ œ: 9์›” 31์ผ ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ์˜ค๋ฅ˜

ํ•ด๊ฒฐ: LocalDate ๊ธฐ๋ฐ˜ ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋‚ ์งœ ์ฒ˜๋ฆฌ

๋ฐฐ์šด์ : ๋‚ ์งœ ์ฒ˜๋ฆฌ๋Š” ํ•ญ์ƒ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ํ•„์ˆ˜

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Spring BootKotlinPostgreSQLJDBC TemplateSpring BatchDB Sink Job

AI ๋น„์„œ ์บ์‹œ๋‹ˆ

2025.06 ~ 2025.09 (4๊ฐœ์›”)โ€ข123๊ฑด ์ž‘์—…

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

AI ๋น„์„œ ์บ์‹œ๋‹ˆ ์„œ๋น„์Šค์˜ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜์—ฌ ์„ฑ๊ณต์ ์œผ๋กœ ๋Ÿฐ์นญํ–ˆ์Šต๋‹ˆ๋‹ค. LLM ๊ธฐ๋ฐ˜ ๋Œ€ํ™”ํ˜• AI ์„œ๋น„์Šค๋กœ ์‚ฌ์—…์ž์˜ ๊ฒฝ์˜ ์งˆ๋ฌธ์— ๋‹ต๋ณ€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • AI TF ๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ฃผ๋„: Spring WebFlux ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • SSE ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต ๊ตฌํ˜„: Server-Sent Events ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์œผ๋กœ ์ดˆ๊ธฐ ์‘๋‹ต ์ˆ˜์‹  ๋ ˆ์ดํ„ด์‹œ 30% ๊ฐ์†Œ
  • ์–ด๋“œ๋ฏผ ์‹œ์Šคํ…œ ๊ตฌ์ถ•: ํ›„ํ‰๊ฐ€, ์ถ”์ฒœ์งˆ๋ฌธ, ํ”„๋กœ๋ชจ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๋กœ ์šด์˜ ํšจ์œจํ™”
  • ๊ตฌ๋… ๋ชจ๋ธ ๊ตฌ์ถ•: ํ”Œ๋žœ๋ณ„ ์ฑ„ํŒ… ํšŸ์ˆ˜ ์ •์ฑ… ๊ฐœ๋ฐœ ๋ฐ ์‘๋‹ต ํ’ˆ์งˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ•ด๊ฒฐ

Kotlin Coroutine ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

WebClient + Coroutine ์กฐํ•ฉ์œผ๋กœ ๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ ํ–ฅ์ƒ ๋ฐ ๋…ผ๋ธ”๋กœํ‚น ์ฒ˜๋ฆฌ ๊ตฌํ˜„

ArgoCD/PagerDuty ์ธํ”„๋ผ

๋ฐฐํฌ ์ž๋™ํ™” ๋ฐ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„ ๊ตฌ์ถ•์œผ๋กœ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ ํ™•๋ณด

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Spring WebFluxKotlin CoroutineLLM APISSEArgoCDPagerDutyLangfuse

๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

2025.07 ~ 2025.09 (3๊ฐœ์›”)โ€ข108๊ฑด ์ž‘์—…

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Ruby on Rails ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ Kotlin/Spring MSA๋กœ ๋ฌด์ค‘๋‹จ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜. Dual Write ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ Zero-downtime ์ด๊ด€์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • Dual Write ํŒจํ„ด ๊ตฌํ˜„: ์‹ ๊ทœ/๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ๋™์‹œ ์ €์žฅ์œผ๋กœ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•œ ์•ˆ์ „ํ•œ ๊ตฌ์กฐ ์„ค๊ณ„
  • Zero-downtime ๋‹ฌ์„ฑ: ์„œ๋น„์Šค ์ค‘๋‹จ 0%, ๋ฐ์ดํ„ฐ ์†์‹ค 0% ๋ฌด์ค‘๋‹จ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„ฑ๊ณต
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๊ฒ€์ฆ: ์ž๋™ํ™”๋œ ๊ฒ€์ฆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์œผ๋กœ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ณด์žฅ
  • JPA Optimistic Locking: ๋™์‹œ์„ฑ ์ œ์–ด ๋ฐ ๋ฒ„์ „ ์ถฉ๋Œ ์ฒ˜๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•๋ณด

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ•ด๊ฒฐ

๋ฌธ์ œ: Batch Insert ON CONFLICT ๋ฏธ๋™์ž‘

์›์ธ: PostgreSQL Batch Insert์™€ ON CONFLICT ๋™์‹œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

ํ•ด๊ฒฐ: Upsert ๋กœ์ง์„ ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ๋กœ ๋ณ€๊ฒฝ

๋ฐฐ์šด์ : DB ํŠน์„ฑ ์ดํ•ด์˜ ์ค‘์š”์„ฑ

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

KotlinSpring BootJPAJDBC TemplatePostgreSQLDual Write Pattern

์•Œ๋ฆผํ†ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ์‹œ์Šคํ…œ

2025.07 ~ 2025.11 (5๊ฐœ์›”)โ€ข99๊ฑด ์ž‘์—…

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

MSA ํ™˜๊ฒฝ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผํ†ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , Kafka ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ๋ฐœ์†ก ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆํ™”: engagement-libraries ์„ค๊ณ„ ๋ฐ Nexus ๋ฐฐํฌ ์ž๋™ํ™”๋กœ ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ
  • Kafka ํ†ตํ•ฉ: Event-Driven Architecture ๊ธฐ๋ฐ˜ produce/consume ๊ตฌํ˜„
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์–ด๋“œ๋ฏผ: React ๊ธฐ๋ฐ˜ ๋ฐœ์†ก ๋‚ด์—ญ ์ถ”์  ๋ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ
  • ๋‹ค์–‘ํ•œ ์•Œ๋ฆผํ†ก ๊ตฌํ˜„: ๋ถ€๊ฐ€์„ธ, ์ฃผ๊ฐ„/์›”๊ฐ„ ๋ฆฌํฌํŠธ, ๋งค์ถœ ์ด์ƒ์น˜ ํƒ์ง€ ์•Œ๋ฆผ ๋“ฑ

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ•ด๊ฒฐ

๋ฌธ์ œ: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ Kafka produce ๋กœ๊ทธ ๋ฏธ์ถœ๋ ฅ

์›์ธ: AutoConfiguration ์ฃผ์ž… ์‹คํŒจ

ํ•ด๊ฒฐ: bootstrap ์„ค์ • ๋ฐ Bean ๊ตฌ์„ฑ ์žฌ์„ค๊ณ„

ํ† ๋ก : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฑ…์ž„ ๋ฒ”์œ„์— ๋Œ€ํ•œ ํŒ€ ๋…ผ์˜ ์ง„ํ–‰

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

KotlinKafkaNexusGitHub ActionsHeadVerReact

๊ธฐํƒ€ ํ”„๋กœ์ ํŠธ

๋งค์ถœ ์ด์ƒ์น˜ ํƒ์ง€ ์‹œ์Šคํ…œ

ํ†ต๊ณ„ ๊ธฐ๋ฐ˜ ์ด์ƒ ๊ฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋งค์ถœ ํŒจํ„ด ๋ถ„์„ ๋ฐ ์ž๋™ ์•Œ๋ฆผํ†ก ๋ฐœ์†ก

Statistical Analysis์•Œ๋ฆผํ†ก ์—ฐ๋™

์ ์š” ๋ถ„์„ ์‹œ์Šคํ…œ

3๋‹จ๊ณ„ ์œ ์‚ฌ๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์™„์ „์ผ์น˜ โ†’ Jaccard โ†’ Jaro-Winkler)์œผ๋กœ ๊ฑฐ๋ž˜์ฒ˜ ์ž๋™ ๋งค์นญ

Jaccard SimilarityJaro-Winkler

AI ๊ฐœ๋ฐœ ๋„๊ตฌ (Automation, Dict-bot)

Slack Bot ๊ธฐ๋ฐ˜ DB ๋ฐฑ๊ณผ์‚ฌ์ „ ์‹œ์Šคํ…œ, ์—…๋ฌด ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•

PythonSlack BotClaude Code

๊ฐœ์ธ & ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ

Koin (ํ•œ๊ตญ๊ธฐ์ˆ ๊ต์œก๋Œ€ํ•™๊ต ์ปค๋ฎค๋‹ˆํ‹ฐ)

2020.06 ~ 2024.12 (4๋…„ 6๊ฐœ์›”)โ€ขBCSDLab

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

ํ•œ๊ตญ๊ธฐ์ˆ ๊ต์œก๋Œ€ํ•™๊ต ๊ต๋‚ด IT ๋™์•„๋ฆฌ์—์„œ ์šด์˜ํ•˜๋Š” ํ•™๊ต ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค๋กœ, ๊ต๋‚ด 75%์˜ ํ•™์ƒ ๋ฐ ๊ต์ง์›์ด ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. BackEnd ํŠธ๋ž™ ๋ฆฌ๋”๋กœ์„œ ๋ ˆ๊ฑฐ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ฃผ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • ATDD ๊ธฐ๋ฐ˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: Spring3์—์„œ SpringBoot๋กœ 100% ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์™„๋ฃŒ
  • ์‹ ๊ทœ ์ธ์› ์˜จ๋ณด๋”ฉ ๋‹จ์ถ•: 6๊ฐœ์›” โ†’ 1๋‹ฌ๋กœ ์˜จ๋ณด๋”ฉ ๊ธฐ๊ฐ„ 83% ๋‹จ์ถ•
  • ์ฝ”๋“œ ๋ฒ ์ด์Šค 50% ์ถ•์†Œ: ๋ฉ”์ธ ์ฝ”๋“œ ๋ผ์ธ์„ 42,326์ค„์—์„œ 20,365์ค„๋กœ ๊ฐœ์„ 
  • ์„œ๋ฒ„ ๋น„์šฉ 67% ์ ˆ๊ฐ: AWS ๋ถˆํ•„์š” ์ž์› ์ œ๊ฑฐ๋กœ ์›” 30๋งŒ์› โ†’ 10๋งŒ์›์œผ๋กœ ๊ฐ์†Œ
  • Datadog ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•: ๋ฉ”ํŠธ๋ฆญ, ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ•ด๊ฒฐ

๋ฌธ์ œ: ์•Œ๋ฆผ ๋ฐœ์†ก ์‹คํŒจ ์‹œ ํšŒ์›๊ฐ€์ž… ์‹คํŒจ

์›์ธ: ์•Œ๋ฆผ ๋ฐœ์†ก ๋กœ์ง์ด ๋ฉ”์ธ ํŠธ๋žœ์žญ์…˜๊ณผ ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์—ฌ์žˆ์Œ

ํ•ด๊ฒฐ: Spring Event์™€ TransactionalEventListener๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

๊ฒฐ๊ณผ: ์•Œ๋ฆผ ๋ฐœ์†ก ์‹คํŒจ์™€ ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต์„ ๋ถ„๋ฆฌ

TestContainer ๋„์ž…

Redis ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ ํŒ€ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

๐Ÿ“š ํŒ€ ๋ฌธํ™” & ํ˜‘์—…

  • โ€ข GitHub Wiki ๊ธฐ๋ฐ˜ ๋ฌธ์„œํ™” ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • โ€ข RCA ๋ฃฐ ์ ์šฉ์œผ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • โ€ข 3์ผ ์ด๋‚ด PR ๋ฆฌ๋ทฐ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ ์ˆ˜๋ฆฝ
  • โ€ข Slack Bot ๊ฐœ๋ฐœ๋กœ ๋™์•„๋ฆฌ ์ƒ์‚ฐ์„ฑ ๊ฐœ์„ 

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Spring BootJavaMySQLRedisAWSDatadogTestContainer

Pium (๋ฐ˜๋ ค ์‹๋ฌผ ๊ด€๋ฆฌ ์„œ๋น„์Šค)

2023.06 ~ 2023.11 (6๊ฐœ์›”)โ€ข์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์‚ฌ์šฉ์ž์˜ ๋ฐ˜๋ ค ์‹๋ฌผ ๊ด€๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค๋กœ, ์•ฝ 150๋ช…์˜ ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ์„œ๋น„์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ ์ „ ๊ณผ์ •์„ ๊ธฐํš๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ์„ฑ๊ณผ

  • Hikari CP ์ตœ์ ํ™”: ์•ฝ 10๋งŒ๊ฑด ๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ์ปค๋„ฅ์…˜ ํ’€ ํŠœ๋‹์œผ๋กœ TPS 11% ํ–ฅ์ƒ
  • ์ฟผ๋ฆฌ ์ตœ์ ํ™”: fetch join ํ™œ์šฉ์œผ๋กœ API 1ํšŒ ํ˜ธ์ถœ๋‹น ์ฟผ๋ฆฌ 7ํšŒ โ†’ 1ํšŒ๋กœ ๊ฐœ์„ 
  • Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ: ์„œ๋น„์Šค ๋ฐฐํฌ ์‹œ ๋‹ค์šดํƒ€์ž„ 30์ดˆ โ†’ 0์ดˆ๋กœ ๊ฐœ์„ 
  • JUnit5 Extension ์ ์šฉ: ํ…Œ์ŠคํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ ๋ฐ ์ž‘์„ฑ ์šฉ์ด์„ฑ ํ–ฅ์ƒ
  • CI/CD ์ž๋™ํ™”: Jenkins ๊ธฐ๋ฐ˜ ์ž๋™ํ™” ํ™˜๊ฒฝ ๊ตฌ์ถ•, RestDocs API ๋ฌธ์„œํ™”

๐Ÿ“š ํŒ€ ๋ฌธํ™” & ํ˜‘์—…

  • โ€ข Google Sprint ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ Pain Point ๋„์ถœ
  • โ€ข Figjam ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์œผ๋กœ ๊ธฐํš ๊ตฌ์ฒดํ™”
  • โ€ข ๋ชจ๋‘๊ฐ€ ๋ฐ์ผ๋ฆฌ ๋งˆ์Šคํ„ฐ: ํšŒ์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • โ€ข ์‹ ๋ขฐ ์ž๋ณธ ๊ตฌ์ถ•์„ ํ†ตํ•œ ํŒ€์›Œํฌ ๊ฐ•ํ™”

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Spring BootJavaJPAMySQLJenkinsRestDocsJUnit5

ํ•ต์‹ฌ ์—ญ๋Ÿ‰ 3๊ฐ€์ง€

๋ณต์žกํ•œ ์‹œ์Šคํ…œ ํ†ตํ•ฉ ๋Šฅ๋ ฅ

๋ถ€๊ฐ€์„ธ ์˜ˆ์ธก ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ, ์˜ˆ์ธก ๋กœ์ง, API, ๋ฐฐํฌ๊นŒ์ง€ end-to-end ์‹œ์Šคํ…œ์„ 4๊ฐœ์›” ๋งŒ์— ์™„์„ฑ

๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ ˆ๊ฑฐ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋ฌธ์„ฑ

Dual Write ํŒจํ„ด์œผ๋กœ Zero-downtime ์ด๊ด€, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๊ฒ€์ฆ, ์ ์ง„์  ์ „ํ™˜ ์ „๋žต ์ˆ˜๋ฆฝ

์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ์‹œ์Šคํ…œ ์ „ํ™˜ ์™„๋ฃŒ

AI ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ˜์‹ 

AI ๋น„์„œ ์„œ๋น„์Šค ๊ตฌ์ถ•, Automation, Dict-bot, Langfuse ํ†ตํ•ฉ ๋“ฑ AI๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋„๊ตฌ ์ง์ ‘ ๊ฐœ๋ฐœ

ํŒ€ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ ๊ตฌ์ถ•