์ดํธ์
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 ๋ฉ์ ์ ๋ก ํ์ธ
ํด๊ฒฐ ๊ณผ์
- 10:46 - ์ฅ์ ์ต์ด ์ธ์ง (๋ชจ๋ํฐ๋ง ์๋ฆผ)
- 10:50 - ์์ธ ํ์ ์์ (DB ๋ฐ์ดํฐ ๋ถ์)
- 11:04 - ์๋ก์ด NPE ๋ฐ์ ์ง์ ํ์ธ (Slack ์๋ฆผ)
- 11:06 - DB interface ์ ์ธ๋ถ ์์ ํ ๋ฐฐํฌ
- lhl-stu-01 auth ์๋ฒ ๋ฐฐํฌ
- lhl-stu-02 auth ์๋ฒ ๋ฐฐํฌ
- 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 ์ ์ฉ)
- Tomcat ์ค์ ๋จ์ํ: Host 2๊ฐ โ 1๊ฐ๋ก ํตํฉ
- ํฌํธ ๋ถ๋ฆฌ:
- admin ์๋น์ค: 7180 ํฌํธ
- auth ์๋น์ค: 11180 ํฌํธ
- ๋ ๋ฆฝ์ ์ธ 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 ๋ฌธ์
- ํ์ผ ์ ๋ณด๋ฅผ ๋ณ๋ ์ฟผ๋ฆฌ๋ก ์กฐํ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- LEFT JOIN ํ์ฉ
- getContentsAllListOfStep: ํ์ผ ์ ๋ณด๋ฅผ ํ ๋ฒ์ ์กฐํ
- ๋ฒํฌ ์กฐํ ๊ตฌํ
- ์ฌ๋ฌ Step์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์กฐํ
- getCuriosityListOfSteps, getThinkListOfSteps ๋ฑ
- ResultMap ์ต์ ํ
- ํ์ผ ์ ๋ณด๋ฅผ ResultMap์ ํฌํจํ์ฌ ๋จ์ผ ์ฟผ๋ฆฌ๋ก ์ฒ๋ฆฌ
์ฑ๋ฅ ๊ฐ์ ๊ฒฐ๊ณผ
- ๊ฐ์ ํ: ์นดํ ๊ณ ๋ฆฌ๋น 1๋ฒ = 4๋ฒ์ ์ฟผ๋ฆฌ
- ์๋ต ์๊ฐ ์ฝ 80% ๋จ์ถ
๊ธฐ์ ์คํ: MyBatis, Query Optimization, LEFT JOIN
4. 9์ฃผ์ฐจ ํ์ต๊ณํ ๋๋ฝ ๋ฌธ์ ์๋ํ ํด๊ฒฐ
ํ๋ก์ ํธ: ๋ฆฌํํ๋ฐ ํ์ต ์์คํ
๋ฌธ์ ์ํฉ
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ 9์ฃผ์ฐจ ํ์ต๊ณํ์ด ์์ฑ๋์ง ์์
- VOC(๊ณ ๊ฐ ๋ถ๋ง) ๋ฐ์ ๋ฐ ์๋ ๋ฐฐ์น ์์ ํ์
- ํ์ต ์ค๋จ์ผ๋ก ์ธํ ์ฌ์ฉ์ ๊ฒฝํ ์ ํ
์์ธ ๋ถ์
- ๊ธฐ์กด: ์ฌ์ฉ์ ์ ๊ณ ํ ์๋ ๋์ (์ฒ๋ฆฌ ์๊ฐ: ์ ์๊ฐ ~ 1์ผ)
- 8์ฃผ์ฐจ๊น์ง๋ง ๊ณํ์ด ์์ฑ๋๋ ๋ก์ง ๋ฌธ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋น๋๊ธฐ ์๋ ๊ฐ์ง ์์คํ
๊ตฌ์ถ
- ๋ก๊ทธ์ธ ์ ์๋์ผ๋ก 9์ฃผ์ฐจ ๊ณํ ๋๋ฝ ์ฒดํฌ
- ์ค์๊ฐ (10์ด ๋ด) ์๋ ์์ฑ
- ๋ฐฉ์ด ์ฝ๋ ๋ฐ ์์ธ ์ฒ๋ฆฌ ๊ฐํ
- ์ค๋ณต ์คํ ๋ฐฉ์ง ๋ก์ง
- Slack ๋ชจ๋ํฐ๋ง ์ฐ๋
- ๋ฐฐ์น ์๋ ์ฌ์๋ ๋ฉ์ปค๋์ฆ
- ๋ฐฐ์น ์คํ ์ํ๋ฅผ ํ์ผ ์์คํ ์ ๊ธฐ๋ก
- ์คํจ ์ ์๋ ์ฌ์๋
- ์ง๋ 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
์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก
- N+1 ์ฟผ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ
- LEFT JOIN ํ์ฉ์ผ๋ก ํ์ผ ์ ๋ณด ํ ๋ฒ์ ์กฐํ
- ๋ฒํฌ ์กฐํ๋ก ์ฌ๋ฌ Step ๋ฐ์ดํฐ ๋์ ์ฒ๋ฆฌ
- ๊ธฐ์กด ์์ญ ๋ฒ ์ฟผ๋ฆฌ โ 4๋ฒ ์ฟผ๋ฆฌ๋ก ๊ฐ์
- Redis ์บ์ฑ ์ ๋ต
- ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ ์บ์ฑ
- ์๋ต ์๊ฐ 50% ๋จ์ถ ๋ฐ ์๋ฒ ๋ถํ ๊ฐ์
- ์๋ต ์์ถ
- 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
DA-LINK+ ์บก์คํค๋์์ธ๊ฒฝ์ง๋ํ
๋์ | 2019.12
๊ธฐํ ๋งํฌ
- GitHub: https://github.com/dpdtydz
- Blog: https://dpdtydz.github.io/