์ดํ˜ธ์ƒ

Backend Developer

๐Ÿ“ง dpdtydz@donga.ac.kr ๐Ÿ“ฑ +82-10-3334-7419
๐Ÿ”— GitHub ๐Ÿ”— Blog

์†Œ๊ฐœ

โ€œ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋ฉฐ, ์žฅ์•  ์—†๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ธ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ดโ€

4๋…„ ์ฐจ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ์˜ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์•„ํ‚คํ…์ฒ˜ ํ˜„๋Œ€ํ™” ๊ฒฝํ—˜์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 29๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฅ˜ ์—†์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฐ์น˜ ์‹œ์Šคํ…œ ๊ตฌ์ถ•, DB Replication Delay ์žฅ์•  ํ•ด๊ฒฐ, N+1 ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋“ฑ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. Spring Boot ๊ธฐ๋ฐ˜ RESTful API ์„ค๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์— ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์šด์˜ํŒ€ ๋ฐ ์œ ๊ด€๋ถ€์„œ์™€์˜ ๊ธด๋ฐ€ํ•œ ํ˜‘์—…์„ ํ†ตํ•ด ์š”๊ตฌ์‚ฌํ•ญ์„ ์‹ ์†ํžˆ ๋ฐ˜์˜ํ•˜์—ฌ ์„œ๋น„์Šค ํ’ˆ์งˆ์„ ๋†’์ธ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.


ํ•ต์‹ฌ ์—ญ๋Ÿ‰ ๋ฐ ์ฃผ์š” ์„ฑ๊ณผ

์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™” (๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ)

  • APM ํˆด ๊ธฐ๋ฐ˜ API ์‘๋‹ต ์‹œ๊ฐ„ 80% ๋‹จ์ถ•์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 
  • Master-Slave DB ๊ตฌ์กฐ ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์ฝ๊ธฐ ์„ฑ๋Šฅ 3๋ฐฐ ํ–ฅ์ƒ
  • Spring Cache ์ ์šฉ์œผ๋กœ ์ฝ˜ํ…์ธ  ์กฐํšŒ ์†๋„ ๊ฐœ์„  ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ ํ•ด๊ฒฐ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜ ์ตœ์†Œํ™” (์ˆ˜๋ฐฑ ๋ฒˆ โ†’ 4๋ฒˆ ์ฟผ๋ฆฌ)

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐฐ์น˜ ์‹œ์Šคํ…œ ์ „๋ฌธ์„ฑ

  • 6,668๋ช… ์‚ฌ์šฉ์ž์˜ 292,518๊ฑด ์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ ๋ฌด์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ (์˜ค๋ฅ˜์œจ 0%)
  • ๋งค์ฃผ 29๋งŒ ๊ฑด์˜ ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ํ™•๋ณด
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์ฒญํฌ ๋‹จ์œ„ ๋ฐฐ์น˜, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์šฉํ•œ ์•ˆ์ •์  ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”
  • ๋ฐฐ์น˜ ์ž๋™ ์žฌ์‹œ๋„ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•

์žฅ์•  ๋Œ€์‘ ๋ฐ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ

  • DB Replication Delay๋กœ ์ธํ•œ ์žฅ์•  21๋ถ„ ๋‚ด ํ•ด๊ฒฐ (10:46-11:07)
  • ์ฒด๊ณ„์ ์ธ ์žฅ์•  ๋ถ„์„ ๋ฆฌํฌํŠธ ์ž‘์„ฑ ๋ฐ ์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ… ์ˆ˜๋ฆฝ
  • Slack ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • ์žฅ์•  ๋ฐœ์ƒ๋ฅ  ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•œ ๋ฐฉ์–ด ์ฝ”๋“œ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”

๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ๋ฐ ํ˜‘์—… ํšจ์œจ ํ–ฅ์ƒ

  • ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋กœ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๋Œ€
  • Swagger API ๋ฌธ์„œ ์ž๋™ํ™”๋กœ ํŒ€ ๋‚ด/์™ธ๋ถ€ ํ˜‘์—… ํšจ์œจ ๊ทน๋Œ€ํ™”
  • ์—‘์…€ ๊ธฐ๋ฐ˜ ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ํ†ตํ•œ ์šด์˜ ์—…๋ฌด ์ž๋™ํ™”
  • VOC ์ œ๋กœํ™” ๋‹ฌ์„ฑ์œผ๋กœ ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„ ํ–ฅ์ƒ

๊ธฐ์ˆ  ์Šคํƒ

Backend Core

Java, JavaScript, Spring Framework, Spring Boot, JPA, MyBatis, RESTful API, Spring Batch

Database

MySQL (Master-Slave), Redis, QueryDSL

Frontend

AngularJS, HTML/CSS

Infrastructure & Tools

AWS, Azure, Docker, Git, GitLab, Slack API, Scouter (APM)

Etc

Multi-threading, Circuit Breaker, FCM, Swagger, EhCache, ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ฒ˜


ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‚ฌ๋ก€

1. DB Replication Delay๋กœ ์ธํ•œ ์ค‘๋ณต ๋“ฑ๋ก ๋ฐ ๋กœ๊ทธ์ธ ์žฅ์• 

๋ฐœ์ƒ์ผ: 2024.11.19 | ์žฅ์•  ์‹œ๊ฐ„: 10:46 - 11:07 (์•ฝ 21๋ถ„)

๋ฌธ์ œ ์ƒํ™ฉ

  • ์‹ ๊ทœ ์œ ์ž… ํšŒ์›์ด ๋ฆฌํ‹€ํ™ˆ๋Ÿฐ ๋กœ๊ทธ์ธ ์‹œ ๊ณ„์ •์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ ๋ฐœ์ƒ
  • ํŠน์ • ๋ฒŒํฌ ์ฃผ๋ฌธ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ง‘์ค‘์ ์œผ๋กœ ๋ฐœ์ƒ
  • ํ•™์Šต๊ธฐ ๋กœ๊ทธ์ธ ์‹คํŒจ๋กœ ์ธํ•œ ํ•™์Šต ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ

์›์ธ ๋ถ„์„

1์ฐจ ์›์ธ: DB Master-Slave Replication Delay

  • child/member ํ…Œ์ด๋ธ”์€ ์ •์ƒ ๋“ฑ๋ก๋˜์—ˆ์œผ๋‚˜, subscribe ํ…Œ์ด๋ธ”์— ๋‹ค๋ฅธ ์‹๋ณ„์ž๋กœ ๋“ฑ๋ก๋จ
  • edu_littlehomelearn_seq_link ํ…Œ์ด๋ธ”์— ๋™์ผ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋ณต์ˆ˜ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ
  • Replication ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ์ค‘๋ณต ์ฒดํฌ ๋กœ์ง ์˜ค๋™์ž‘

2์ฐจ ์›์ธ: ๊ธด๊ธ‰ ์ˆ˜์ • ์ค‘ Bean ์ฃผ์ž… ์˜ค๋ฅ˜ (์ธ์  ์˜ค๋ฅ˜)

  • DB interface ์„ ์–ธ๋ถ€ ๊ต์ฒด ๋ˆ„๋ฝ์œผ๋กœ NPE(NullPointerException) ๋ฐœ์ƒ
  • 10:23 ์ž‘์—… ์ค‘ ์‹ค์ˆ˜, 11:04 Slack ๋ฉ”์‹ ์ €๋กœ ํ™•์ธ

ํ•ด๊ฒฐ ๊ณผ์ •

  1. 10:46 - ์žฅ์•  ์ตœ์ดˆ ์ธ์ง€ (๋ชจ๋‹ˆํ„ฐ๋ง ์•Œ๋ฆผ)
  2. 10:50 - ์›์ธ ํŒŒ์•… ์‹œ์ž‘ (DB ๋ฐ์ดํ„ฐ ๋ถ„์„)
  3. 11:04 - ์ƒˆ๋กœ์šด NPE ๋ฐœ์ƒ ์ง€์  ํ™•์ธ (Slack ์•Œ๋ฆผ)
  4. 11:06 - DB interface ์„ ์–ธ๋ถ€ ์ˆ˜์ • ํ›„ ๋ฐฐํฌ
    • lhl-stu-01 auth ์„œ๋ฒ„ ๋ฐฐํฌ
    • lhl-stu-02 auth ์„œ๋ฒ„ ๋ฐฐํฌ
  5. 11:07 - ํ•™์Šต๊ธฐ ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ๋กœ ์ด์Šˆ ํ•ด์†Œ ํ™•์ธ

์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ…

  • Master-Slave Replication ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ•ํ™”
  • ์ค‘๋ณต ์ฒดํฌ ๋กœ์ง์— ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ ์ถ”๊ฐ€
  • ๊ธด๊ธ‰ ๋ฐฐํฌ ์‹œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋„์ž… (Bean ์ฃผ์ž… ํ™•์ธ ํฌํ•จ)
  • ๋ฐฐํฌ ์ „ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ฐ•ํ™”

๊ธฐ์ˆ  ์Šคํƒ: MySQL Replication, APM, Slack Monitoring


2. Tomcat ์„ค์ • ๋ณต์žก๋„๋กœ ์ธํ•œ ์„œ๋น„์Šค ์žฅ์• 

๋ฐœ์ƒ์ผ: 2024.10.29 | ์žฅ์•  ์‹œ๊ฐ„: 09:50 - 11:10 (์•ฝ 1์‹œ๊ฐ„ 20๋ถ„)

๋ฌธ์ œ ์ƒํ™ฉ

  • lhl-stu-01, lhl-stu-02 ์„œ๋ฒ„์—์„œ ๊ฐ„ํ—์  ์‘๋‹ต ์ง€์—ฐ ๋ฐœ์ƒ
  • ํŠน์ • ์‹œ๊ฐ„๋Œ€ ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์„œ๋น„์Šค ๋ถˆ์•ˆ์ •

์›์ธ ๋ถ„์„

  • Tomcat ๋‹จ์ผ Host ์„ค์ •์—์„œ admin๊ณผ auth ์„œ๋น„์Šค๊ฐ€ ํ˜ผ์žฌ
  • ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ์œผ๋กœ ์ธํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์–ด๋ ค์›€
  • ํ•œ์ชฝ ์„œ๋น„์Šค ์žฅ์•  ์‹œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์—๋„ ์˜ํ–ฅ

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์ •๊ธฐ PM ์ž‘์—… (2024.11.01 ์ ์šฉ)

  1. Tomcat ์„ค์ • ๋‹จ์ˆœํ™”: Host 2๊ฐœ โ†’ 1๊ฐœ๋กœ ํ†ตํ•ฉ
  2. ํฌํŠธ ๋ถ„๋ฆฌ:
    • admin ์„œ๋น„์Šค: 7180 ํฌํŠธ
    • auth ์„œ๋น„์Šค: 11180 ํฌํŠธ
  3. ๋…๋ฆฝ์ ์ธ upstream ๊ตฌ์„ฑ

๊ฐœ์„  ํšจ๊ณผ

  • ๋…๋ฆฝ์ ์ธ ๋กœ๊ทธ ๊ด€๋ฆฌ: admin๊ณผ auth ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฆฌ ์ถ”์  ๊ฐ€๋Šฅ
  • ์„œ๋น„์Šค๋ณ„ ๋…๋ฆฝ ์Šค์ผ€์ผ๋ง: ๊ฐ ์„œ๋น„์Šค๋ณ„ scale out ๊ฐ€๋Šฅ
  • ์žฅ์•  ๊ฒฉ๋ฆฌ: admin ์žฅ์•  ์‹œ auth ์˜ํ–ฅ ์—†์Œ
  • upstream๋ณ„ ๋ชจ๋‹ˆํ„ฐ๋ง: ์‘๋‹ต์‹œ๊ฐ„, ์—๋Ÿฌ์œจ ๊ฐœ๋ณ„ ์ถ”์ 
  • ์„ค์ • ๋ณ€๊ฒฝ ์œ ์—ฐ์„ฑ: ํ•œ์ชฝ ์„œ๋น„์Šค ์„ค์ • ๋ณ€๊ฒฝ ์‹œ ๋‹ค๋ฅธ ์ชฝ ์˜ํ–ฅ ์—†์Œ
  • ํฌํŠธ ์ถฉ๋Œ ๋ฐฉ์ง€: 7180๊ณผ 11180 ๋ถ„๋ฆฌ๋กœ ๋™์‹œ ์šด์˜ ๊ฐ€๋Šฅ

๊ธฐ์ˆ  ์Šคํƒ: Tomcat, Nginx, Infrastructure Design


3. N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜

ํ”„๋กœ์ ํŠธ: TinpoGo Server

๋ฌธ์ œ ์ƒํ™ฉ

  • ํ•™์Šต ์ฝ˜ํ…์ธ  ์กฐํšŒ ์‹œ ์‘๋‹ต ์†๋„ ๋А๋ฆผ
  • Step๋‹น 4๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ์‹œ ์ˆ˜์‹ญ ๋ฒˆ์˜ ์ฟผ๋ฆฌ ๋ฐœ์ƒ
  • ์ฝ˜ํ…์ธ ๋ณ„ ํŒŒ์ผ ์ •๋ณด ์กฐํšŒ๋กœ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ๋ฐœ์ƒ

์›์ธ ๋ถ„์„

  • ๊ธฐ์กด: Step ๊ฐœ์ˆ˜ ร— 4 (์นดํ…Œ๊ณ ๋ฆฌ) ร— N (์ฝ˜ํ…์ธ  ์ˆ˜) = ์ˆ˜๋ฐฑ ๋ฒˆ์˜ ์ฟผ๋ฆฌ
  • Step๋‹น 1๋ฒˆ + ์ฝ˜ํ…์ธ ๋‹น 1๋ฒˆ = ์ „ํ˜•์ ์ธ N+1 ๋ฌธ์ œ
  • ํŒŒ์ผ ์ •๋ณด๋ฅผ ๋ณ„๋„ ์ฟผ๋ฆฌ๋กœ ์กฐํšŒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. LEFT JOIN ํ™œ์šฉ
    • getContentsAllListOfStep: ํŒŒ์ผ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒ
  2. ๋ฒŒํฌ ์กฐํšŒ ๊ตฌํ˜„
    • ์—ฌ๋Ÿฌ Step์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒ
    • getCuriosityListOfSteps, getThinkListOfSteps ๋“ฑ
  3. ResultMap ์ตœ์ ํ™”
    • ํŒŒ์ผ ์ •๋ณด๋ฅผ ResultMap์— ํฌํ•จํ•˜์—ฌ ๋‹จ์ผ ์ฟผ๋ฆฌ๋กœ ์ฒ˜๋ฆฌ

์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฐ๊ณผ

  • ๊ฐœ์„  ํ›„: ์นดํ…Œ๊ณ ๋ฆฌ๋‹น 1๋ฒˆ = 4๋ฒˆ์˜ ์ฟผ๋ฆฌ
  • ์‘๋‹ต ์‹œ๊ฐ„ ์•ฝ 80% ๋‹จ์ถ•

๊ธฐ์ˆ  ์Šคํƒ: MyBatis, Query Optimization, LEFT JOIN


4. 9์ฃผ์ฐจ ํ•™์Šต๊ณ„ํš ๋ˆ„๋ฝ ๋ฌธ์ œ ์ž๋™ํ™” ํ•ด๊ฒฐ

ํ”„๋กœ์ ํŠธ: ๋ฆฌํ‹€ํ™ˆ๋Ÿฐ ํ•™์Šต ์‹œ์Šคํ…œ

๋ฌธ์ œ ์ƒํ™ฉ

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ 9์ฃผ์ฐจ ํ•™์Šต๊ณ„ํš์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ
  • VOC(๊ณ ๊ฐ ๋ถˆ๋งŒ) ๋ฐœ์ƒ ๋ฐ ์ˆ˜๋™ ๋ฐฐ์น˜ ์ž‘์—… ํ•„์š”
  • ํ•™์Šต ์ค‘๋‹จ์œผ๋กœ ์ธํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ €ํ•˜

์›์ธ ๋ถ„์„

  • ๊ธฐ์กด: ์‚ฌ์šฉ์ž ์‹ ๊ณ  ํ›„ ์ˆ˜๋™ ๋Œ€์‘ (์ฒ˜๋ฆฌ ์‹œ๊ฐ„: ์ˆ˜ ์‹œ๊ฐ„ ~ 1์ผ)
  • 8์ฃผ์ฐจ๊นŒ์ง€๋งŒ ๊ณ„ํš์ด ์ƒ์„ฑ๋˜๋Š” ๋กœ์ง ๋ฌธ์ œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ๋น„๋™๊ธฐ ์ž๋™ ๊ฐ์ง€ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
    • ๋กœ๊ทธ์ธ ์‹œ ์ž๋™์œผ๋กœ 9์ฃผ์ฐจ ๊ณ„ํš ๋ˆ„๋ฝ ์ฒดํฌ
    • ์‹ค์‹œ๊ฐ„ (10์ดˆ ๋‚ด) ์ž๋™ ์ƒ์„ฑ
  2. ๋ฐฉ์–ด ์ฝ”๋“œ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”
    • ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€ ๋กœ์ง
    • Slack ๋ชจ๋‹ˆํ„ฐ๋ง ์—ฐ๋™
  3. ๋ฐฐ์น˜ ์ž๋™ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜
    • ๋ฐฐ์น˜ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๊ธฐ๋ก
    • ์‹คํŒจ ์‹œ ์ž๋™ ์žฌ์‹œ๋„
    • ์ง€๋‚œ 4์ฃผ๊ฐ„ ๋ฐฐ์น˜ ์ƒํƒœ ํ™•์ธ ๋ฐ ๋ˆ„๋ฝ ์‹œ ์•Œ๋ฆผ

๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ

  • VOC ์ œ๋กœํ™”: 9์ฃผ์ฐจ ํ•™์Šต๊ณ„ํš ๋ˆ„๋ฝ ๊ด€๋ จ ๋ฌธ์˜ ์™„์ „ ์ œ๊ฑฐ
  • ์šด์˜ ํšจ์œจ: ์ˆ˜๋™ ๋ฐฐ์น˜ ์ž‘์—… ๋ถˆํ•„์š”
  • ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„: ๋Š๊น€ ์—†๋Š” ํ•™์Šต ๊ฒฝํ—˜ ์ œ๊ณต
  • ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ: ์˜ˆ์™ธ ์ƒํ™ฉ ์ž๋™ ๋ณต๊ตฌ

๊ธฐ์ˆ  ์Šคํƒ: Spring Batch, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, Slack API, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง


๊ฒฝ๋ ฅ

์ฃผ์‹ํšŒ์‚ฌ ์•„์ด์Šคํฌ๋ฆผ์—๋“€

ํ•™์Šต์„œ๋น„์Šค๊ธฐํš๊ฐœ๋ฐœํŒ€ ์‚ฌ์›
2023.08 - ์žฌ์ง์ค‘ (2๋…„ 5๊ฐœ์›”) | ์ •๊ทœ์ง

์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•

2025.01 - 2025.09

์ฃผ์š” ์—…๋ฌด

  • ์Šคํ”„๋ง ์บ์‹ฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • ๊ณ„์ธต๋ณ„ ๋กœ๊น… ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
  • APM ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„ ์ˆ˜๋ฆฝ

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์‹ ๊ทœ ์ˆ˜ํ•™ ์ฝ˜ํ…์ธ  ๋ฉ”ํƒ€ ์ •๋ณด ๋ฐ ํ•™์Šต ์ด๋ ฅ ์กฐํšŒ ์„ฑ๋Šฅ ๋Œ€ํญ ๊ฐœ์„ 
  • ๊ณ„์ธต๋ณ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ๊ด€๋ฆฌ ๋ฐ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„ ๊ตฌ์ถ•
  • ์‹ค์‹œ๊ฐ„ ์žฅ์•  ๊ฐ์ง€ ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๊ธฐ์ˆ  ์Šคํƒ: Spring Cache, Logging System, APM, Scouter


์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  (Master-Slave DB ๋ถ„๋ฆฌ)

2024.01 - 2025.01

์ฃผ์š” ์—…๋ฌด

  • 17๋‹จ๊ณ„ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์„ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ์ „์ฒด ๊ณผ์ •์„ ์ฃผ๋„ํ•˜์—ฌ ๋ฌด์ค‘๋‹จ ์ „ํ™˜ ์„ฑ๊ณต
  • Master-Slave DB ๋ถ„๋ฆฌ ์ž‘์—…์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ฐ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ณด์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์ฝ๊ธฐ ์„ฑ๋Šฅ 3๋ฐฐ ํ–ฅ์ƒ ๋‹ฌ์„ฑ ๋ฐ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ๊ธฐ๋ฐ˜ ํ™•๋ณด
  • ๋กœ๊ทธ ์‹œ์Šคํ…œ ๊ฐœ์„ ์„ ํ†ตํ•œ ์—๋Ÿฌ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋””๋ฒ„๊น… ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • ์Šค์ผ€์ค„๋Ÿฌ ๋™์ž‘ ๋”œ๋ ˆ์ด ๋ฐ ์ค‘๋ณต ๋ฐฉ์ง€ ์ตœ์ ํ™” ๋กœ์ง ๊ฐœ์„ ์œผ๋กœ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์•ˆ์ •์„ฑ ํ™•๋ณด

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • DB Replication Delay๋กœ ์ธํ•œ ์ค‘๋ณต ๋“ฑ๋ก ๋ฌธ์ œ ํ•ด๊ฒฐ
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€๋กœ ์˜ค๋ฅ˜์œจ 0% ๋‹ฌ์„ฑ

๊ธฐ์ˆ  ์Šคํƒ: MySQL Master-Slave, Transaction Management, Replication Monitoring


๊ต์œก ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ ํ”Œ๋žซํผ ๊ตฌ์ถ• (LCMS)

2024.10 - 2024.12

์ฃผ์š” ์—…๋ฌด

  • ๋‹ค์ค‘ ํฌ๋งท(Unity, MP4, Ebook ๋“ฑ)์˜ ๊ต์œก ์ฝ˜ํ…์ธ ๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š” LCMS๋ฅผ ํ’€์Šคํƒ์œผ๋กœ ๊ฐœ๋ฐœ
  • AngularJS ๊ธฐ๋ฐ˜์˜ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋กœ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • Redis๋ฅผ ํ™œ์šฉํ•œ ์ฝ˜ํ…์ธ  ๋™๊ธฐํ™” ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌํ˜„

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์—‘์…€ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์œผ๋กœ ๋Œ€๋Ÿ‰์˜ ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ ์—…๋ฌด ์ž๋™ํ™”
  • ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ์˜ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ ˆ๊ฐ

๊ธฐ์ˆ  ์Šคํƒ: Spring Boot, AngularJS, Redis, Excel Processing


ํ•™์Šต ๋ฆฌํฌํŠธ ๋ฐ ํ†ต๊ณ„ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ

2024.06 - 2024.07

์ฃผ์š” ์—…๋ฌด

  • ์ฃผ๊ฐ„/์›”๊ฐ„ ํ•™์Šต ๋ฆฌํฌํŠธ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐฐ์น˜ ๋ฐ API ์ง์ ‘ ๊ฐœ๋ฐœ
  • ์‹ค์‹œ๊ฐ„ ํ•™์Šต ์ง„๋„ ๋ฐ ์„ฑ์ทจ๋„ ์ธก์ • ์‹œ์Šคํ…œ ๊ตฌํ˜„
  • ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ํ•™์Šต ๋ถ„์„ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์กฐํšŒ ์†๋„ ๊ฐœ์„ 

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ•™์Šต ํ”ผ๋“œ๋ฐฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์œผ๋กœ ๊ต์œก ์„œ๋น„์Šค ํ’ˆ์งˆ ํ–ฅ์ƒ
  • ๋ฆฌํฌํŠธ ์‹œ์Šคํ…œ์˜ UI/UX ๊ฐœ์„  ๋ฐ ์ฐจํŠธ ๋ฐ์ดํ„ฐ ์—ฐ๋™์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

๊ธฐ์ˆ  ์Šคํƒ: Spring Batch, MyBatis, Query Optimization, Data Visualization


๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•

2024.03 - 2024.05

์ฃผ์š” ์—…๋ฌด

  • ํ•™์Šต๊ณ„-์—…๋ฌด๊ณ„ ๋„๋ฉ”์ธ ๊ฐ„ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ•
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€๋กœ ๋™๊ธฐํ™” ๊ณผ์ • ์˜ค๋ฅ˜ ์ตœ์†Œํ™”
  • ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ์›” ๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ ๋ฐ ์ฒญํฌ ๋‹จ์œ„ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์ฝ˜ํ…์ธ  ๋ฐ์ดํ„ฐ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”๋กœ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€๋กœ ์˜ค๋ฅ˜ ๊ฐ์†Œ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์•ˆ์ •์  ์ฒ˜๋ฆฌ

๊ธฐ์ˆ  ์Šคํƒ: Spring Batch, Data Synchronization, Multi-threading, Event-Driven


๊ฐœ์ธํ™” ํ•™์Šต ์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ

2024.02 - 2024.03

์ฃผ์š” ์—…๋ฌด

  • Spring Batch์™€ Spring Event๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ์ธํ™” ํ•™์Šต ์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • Multi-threading์„ ํ™œ์šฉํ•œ ๋Œ€๊ทœ๋ชจ ์‚ฌ์šฉ์ž ๋Œ€์ƒ ์Šค์ผ€์ค„๋ง ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  • Chunk ๋‹จ์œ„ ์ฒ˜๋ฆฌ ๋ฐ ์‹คํŒจ ์‹œ ์žฌ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ๋ฐ ์•ˆ์ •์„ฑ ํ™•๋ณด

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • 6,668๋ช… ์‚ฌ์šฉ์ž์˜ 292,518๊ฑด ์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ ๋ฌด์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ (์˜ค๋ฅ˜์œจ 0%)
  • ์ˆ˜๋ฐฑ ์‹œ๊ฐ„์˜ ์ˆ˜๋™ ์ž‘์—… ์ž๋™ํ™” ๋ฐ ์Šค์ผ€์ค„ ์˜ค๋ฅ˜ 0๊ฑด ๋‹ฌ์„ฑ
  • ํ‘œ์ค€/๋งž์ถค/๊ฐœ๋ณ„ ์ฝ”์Šค๋ณ„ ํ•™์Šต ๊ณ„ํš ์ž๋™ ์ƒ์„ฑ
  • ๋ฐฐ์น˜ ์‹คํ–‰ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ž๋™ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌ์ถ•

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • 9์ฃผ์ฐจ ํ•™์Šต๊ณ„ํš ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ์ž๋™ํ™”๋กœ ํ•ด๊ฒฐ (VOC ์ œ๋กœํ™”)
  • ๋ฐฐ์น˜ ์‹คํŒจ ๊ฐ์ง€ ๋ฐ ์ž๋™ ์žฌ์‹œ๋„ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๊ธฐ์ˆ  ์Šคํƒ: Spring Batch, Multi-threading, Chunk Processing, Event-Driven, Slack Monitoring


์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ํ˜„๋Œ€ํ™” ํ”„๋กœ์ ํŠธ

2024.01 - 2024.02

์ฃผ์š” ์—…๋ฌด

  • ๊ธฐ์กด Direct DB Connection ๊ตฌ์กฐ๋ฅผ RESTful API ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜
  • API ๋ชจ๋‹ˆํ„ฐ๋ง ์ฒด๊ณ„ ๊ตฌ์ถ•์œผ๋กœ ์‹œ์Šคํ…œ ์‹ ๋ขฐ์„ฑ ๊ฐœ์„ 

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์‹œ์Šคํ…œ ๋ณด์•ˆ์„ฑ ๋ฐ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”
  • ๋ชจ๋“ˆํ™” ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์‹œ์Šคํ…œ ๊ฐ„ ๋…๋ฆฝ์„ฑ ํ™•๋ณด ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • Tomcat ์„ค์ • ์ตœ์ ํ™”๋กœ ์„œ๋น„์Šค ์žฅ์•  ๊ฒฉ๋ฆฌ ๋ฐ ๋…๋ฆฝ ์Šค์ผ€์ผ๋ง ๊ตฌํ˜„

๊ธฐ์ˆ  ์Šคํƒ: RESTful API, API Monitoring, Modular Architecture, Tomcat


ํ•™์Šต ๋ณด์ƒ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ

2023.11 - 2023.12

์ฃผ์š” ์—…๋ฌด

  • MSA ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•œ ํ•™์Šต ๋ณด์ƒ ์„œ๋น„์Šค ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
  • ์ด์ค‘ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ
  • Feign Client๋ฅผ ํ™œ์šฉํ•œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ตœ์ ํ™”

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์žฌํ™” ๋ฐœ๊ธ‰ ํ”„๋กœ์„ธ์Šค์˜ 100% ์ •ํ™•์„ฑ ๋‹ฌ์„ฑ์œผ๋กœ ์‹œ์Šคํ…œ ์‹ ๋ขฐ๋„ ํ™•๋ณด

๊ธฐ์ˆ  ์Šคํƒ: MSA, Event-Driven Architecture, Feign Client, Data Integrity


์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜

2023.08 - 2024.08

์ฃผ์š” ์—…๋ฌด

  • ํšŒ์› ๊ตฌ๋… ์ •๋ณด, ํ•™์Šต ๋ฐ์ดํ„ฐ ๋“ฑ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ์šด์˜ ๋ฐ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ํ˜„์—… ๋ถ€์„œ ์š”๊ตฌ์‚ฌํ•ญ ์‹ ์† ๋ถ„์„ ๋ฐ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ๋ฐ˜์˜
  • ์žฅ์•  ๋Œ€์‘ ๋ฐ ์‚ฌํ›„ ๋ถ„์„ ๋ฆฌํฌํŠธ ์ž‘์„ฑ

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์‹ ์†ํ•œ ๊ธฐ๋Šฅ ๊ฐœ์„  ๋ฐ ์•ˆ์ •์ ์ธ ์šด์˜์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„ ํ–ฅ์ƒ
  • ์›”๊ฐ„ ์‚ฌ์šฉ์ž ๋ถˆ๋งŒ ๊ฑด์ˆ˜ ๊ฐ์†Œ์— ๊ธฐ์—ฌ
  • ์ฒด๊ณ„์ ์ธ ์žฅ์•  ๋ฆฌํฌํŠธ ์ž‘์„ฑ ๋ฐ ์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ… ์ˆ˜๋ฆฝ

์ฃผ์‹ํšŒ์‚ฌ ์•„์ด์Šคํฌ๋ฆผํ‚ค์ฆˆ

์ •๊ทœ์ง
2022.08 - 2023.08 (1๋…„ 1๊ฐœ์›”)

๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ๊ฐœํŽธ

2022.08 - 2023.08

์ฃผ์š” ์—…๋ฌด

  • JSP ๊ธฐ๋ฐ˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ Spring Boot, MyBatis, JPA ์Šคํƒ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  • ์œ ์•„ ๋Œ€์ƒ ํ•™์Šต ํ”Œ๋žซํผ โ€˜๋ฆฌํ‹€ํ™ˆ๋Ÿฐโ€™ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ์šด์˜ ๋ฐ ๊ณ ๋„ํ™”
  • ์œ ์น˜์› ํƒ€๊ฒŸํŒ… ์„œ๋น„์Šค ์šด์˜
  • ๋ธ”๋ผ์ธ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ์šด์˜ ๋ฐ ๊ณ ๋„ํ™”

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๋ฐ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ๋Œ€ํญ ํ–ฅ์ƒ
  • ์‹ค์‹œ๊ฐ„ ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ˜์˜์„ ํ†ตํ•œ ์„œ๋น„์Šค ํ’ˆ์งˆ ๋ฐ ์•ˆ์ •์„ฑ ๊ฐœ์„ 

๊ธฐ์ˆ  ์Šคํƒ: Spring Boot, MyBatis, JPA, Legacy Migration


ํ”„๋กœ์ ํŠธ

LittleHome-learn-bo (๋ฆฌํ‹€ํ™ˆ๋Ÿฐ ๋ฐฑ์˜คํ”ผ์Šค)

Backend Developer

๋ฆฌํ‹€ํ™ˆ๋Ÿฐ ํ•™์Šต ๊ด€๋ฆฌ ๋ฐฑ์˜คํ”ผ์Šค ์‹œ์Šคํ…œ (Admin + API)

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

  • ํŒจํ‚ค์ง•: WAR
  • ์•„ํ‚คํ…์ฒ˜: ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ (Controller โ†’ Service โ†’ DAO)

์ฃผ์š” ๊ธฐ๋Šฅ

  • V1/V2 API ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ
  • AWS S3 ์—ฐ๋™ ํŒŒ์ผ ๊ด€๋ฆฌ
  • TaskScheduler/V2 ์Šค์ผ€์ค„๋Ÿฌ ๊ธฐ๋ฐ˜ ๋ฐฐ์น˜ ์ž‘์—…
  • Slack ์•Œ๋ฆผ ์—ฐ๋™
  • ๊ฒฐ์ œ ์‹œ์Šคํ…œ ์—ฐ๋™

๊ธฐ์ˆ  ์Šคํƒ

  • Backend: Spring Framework, MyBatis, Java 11 (LTS)
  • Database: MySQL 5.7+, Redis, HikariCP
  • Infrastructure: AWS S3, Azure, Slack API
  • Tools: Maven, Git, GitLab

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ์ธํ„ฐ์…‰ํ„ฐ ์„ค์ •์„ ํ†ตํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”
  • ํ™˜๊ฒฝ๋ณ„ ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ (local, dev, prod)

TinpoGo Server (๋ฆฌํ‹€ํ™ˆ๋Ÿฐ ํ‹ดํฌ๊ณ )

Backend Developer

ํ•™์Šต ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ ๋ฐ ํšŒ์› ํ•™์Šต ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ REST API ์„œ๋ฒ„

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

  • ํŒจํ‚ค์ง•: WAR
  • ์•„ํ‚คํ…์ฒ˜: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ + ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜

์ฃผ์š” ๊ธฐ๋Šฅ

  • ํ•™์Šต ์ฝ˜ํ…์ธ  ๋ฐ ๋‹จ๊ณ„ ๊ด€๋ฆฌ API
  • Step๋ณ„ ์ฝ˜ํ…์ธ  ๋ถ„๋ฅ˜ (ํ˜ธ๊ธฐ์‹ฌ, ์ƒ๊ฐ, ์ด์•ผ๊ธฐ1, ์ด์•ผ๊ธฐ2)
  • ํšŒ์› ๋ฐ ๊ตฌ๋… ๊ด€๋ฆฌ
  • Spring Batch ๊ธฐ๋ฐ˜ ๋ฐฐ์น˜ ์ž‘์—…
  • Redis ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ (Session/Data Cluster)
  • FCM ํ‘ธ์‹œ ์•Œ๋ฆผ
  • Circuit Breaker ํŒจํ„ด (Resilience4j)
  • ์ข‹์•„์š”/์กฐํšŒ์ˆ˜ ๊ด€๋ฆฌ
  • ํ•™์Šต ๋ฆฌํฌํŠธ ์ƒ์„ฑ

๊ธฐ์ˆ  ์Šคํƒ

  • Backend: Spring Boot 2.7.5, JPA, MyBatis, Java 11 (LTS)
  • Database: MySQL 8.0+, Redis, EhCache 2.10.4
  • Infrastructure: FCM, AWS, Circuit Breaker
  • Tools: Maven, Swagger 2.9.2

์„ฑ๋Šฅ ๊ฐœ์„  ์‚ฌ๋ก€

  1. N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • LEFT JOIN ํ™œ์šฉ์œผ๋กœ ํŒŒ์ผ ์ •๋ณด ํ•œ ๋ฒˆ์— ์กฐํšŒ
    • ๋ฒŒํฌ ์กฐํšŒ๋กœ ์—ฌ๋Ÿฌ Step ๋ฐ์ดํ„ฐ ๋™์‹œ ์ฒ˜๋ฆฌ
    • ๊ธฐ์กด ์ˆ˜์‹ญ ๋ฒˆ ์ฟผ๋ฆฌ โ†’ 4๋ฒˆ ์ฟผ๋ฆฌ๋กœ ๊ฐœ์„ 
  2. Redis ์บ์‹ฑ ์ „๋žต
    • ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ ์บ์‹ฑ
    • ์‘๋‹ต ์‹œ๊ฐ„ 50% ๋‹จ์ถ• ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
  3. ์‘๋‹ต ์••์ถ•
    • Gzip ์••์ถ• ํ™œ์„ฑํ™” (์ตœ์†Œ 1024 bytes)
    • ๋„คํŠธ์›Œํฌ ์ „์†ก๋Ÿ‰ ๊ฐ์†Œ

์ฃผ์˜์‚ฌํ•ญ

  • N+1 ์ฟผ๋ฆฌ ํšŒํ”ผ: ๋ฐ˜๋“œ์‹œ DAO ํ˜ธ์ถœ ์ „ ๋ฐ์ดํ„ฐ ์กฐํšŒ
  • ์„ฑ๋Šฅ ์ €ํ•˜ ์š”์†Œ: ์—ฐ๊ด€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
  • ์ค‘์ฒฉ JSON ์‘๋‹ต ์ง€์–‘: ํƒ€์ž… safeํ•œ ์ฟผ๋ฆฌ ๋‹ฌ์„ฑ์„ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒ€์ฆ ํ•„์ˆ˜
  • SQL Injection ๋ฐฉ์ง€: PreparedStatement ์‚ฌ์šฉ (MyBatis ์ž๋™ ์ฒ˜๋ฆฌ)
  • XSS ๋ฐฉ์ง€: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  • JWT ํ† ํฐ ๊ด€๋ฆฌ: ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ๋ช…์‹œ์  ๋กœ์ง ํ™•์ธ

๊ฐœ๋ฐœ์ž TIL ์ง€์› ์›น ์„œ๋น„์Šค

Backend Developer, PM

๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ

๊ธฐ์ˆ  ์Šคํƒ: Spring Framework, MySQL, RESTful API


IoT ์œตํ•ฉ ํ”„๋กœ์ ํŠธ (๋“œ๋ก  + RC์นด)

Embedded & Android Developer

ํ•˜๋“œ์›จ์–ด-์†Œํ”„ํŠธ์›จ์–ด ํ†ตํ•ฉ ์‹œ์Šคํ…œ

๊ธฐ์ˆ  ์Šคํƒ: Arduino, Android


ํ•™๋ ฅ

๋™์•„๋Œ€ํ•™๊ต
์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ํ•™์‚ฌ ์กธ์—…
2014.03 - 2021.01


์ˆ˜์ƒ ๋ฐ ์ž๊ฒฉ์ฆ

๋™์•„๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์กธ์—…์ „์‹œํšŒ

์šฐ์ˆ˜์ƒ | 2019.12

๋™์ƒ | 2019.12


๊ธฐํƒ€ ๋งํฌ

  • GitHub: https://github.com/dpdtydz
  • Blog: https://dpdtydz.github.io/