β€’
11 min read

2023λ…„ 회고(라기엔 μ—­μ‹œλ‚˜ λ‘μ„œ μ—†λŠ”)

Table of Contents

λ‚΄κ°€ 2λ…„μ°¨?

2023년이 μ‹œμž‘ν•œ 것이 μ—Šκ·Έμ œ 같은데, 벌써 2024년이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λ„ˆλ¬΄λ‚˜λ„ λΉ λ₯΄κ²Œ μ§€λ‚˜κ°€λ²„λ¦° 2023년을 κ°„λ‹¨νžˆ νšŒκ³ ν•΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.
μ΅œλŒ€ν•œ 컀리어적인 뢀뢄을 기반으둜 ν•˜μ—¬ 주절주절 λŠ˜μ–΄λ†“μ•„ λ³΄κ² μŠ΅λ‹ˆλ‹€.

첫 νšŒμ‚¬μ—μ„œμ˜ κ²½ν—˜

μ•„λ¬΄λž˜λ„ 2023λ…„ 제 μ»€λ¦¬μ–΄μ—μ„œ κ°€μž₯ 큰 영ν–₯을 μ€€ 것은 2022λ…„ 12μ›” 26일에 첫 νšŒμ‚¬μ— μž…μ‚¬ν•œ 것 κ°™μ€λ°μš”. νšŒμ‚¬μ—μ„œμ˜ κ²½ν—˜μ„ μ€‘μ‹¬μœΌλ‘œ λ¨Όμ € νšŒκ³ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

ν˜‘μ—…

μž¬μ§ν•˜λŠ” νšŒμ‚¬ 규λͺ¨μ˜ λ³€ν™”

첫 νšŒμ‚¬μ— μ •κ·œμ§μœΌλ‘œ μž…μ‚¬ν•˜κΈ° μ „κΉŒμ§€ μ €λŠ” 2022λ…„ 1ν•™κΈ°μ—λŠ” μΈν„΄μœΌλ‘œ, 인턴 μ’…λ£Œ 이후 1달이 μ§€λ‚˜μ„œλΆ€ν„°λŠ” ν”„λ¦¬λžœμ„œλ‘œ μŠ€νƒ€νŠΈμ—…μ—μ„œ μΌν•˜λŠ” κ²½ν—˜μ„ ν–ˆμŠ΅λ‹ˆλ‹€. μ•„λ¬΄λž˜λ„ νšŒμ‚¬μ˜ 규λͺ¨κ°€ μž‘λ‹€ λ³΄λ‹ˆ 제 κΆŒν•œμ˜ λ²”μœ„κ°€ μ»Έκ³ , 이 덕뢄에 μž‘μ€ ν”„λ‘œλ•νŠΈμ˜€μ§€λ§Œ 리더십을 가지고 ν˜‘μ—…μ„ ν•˜λŠ” 것에 μ΄ˆμ μ„ λ’€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

이후 μ§€κΈˆμ˜ νšŒμ‚¬μ— μž…μ‚¬ν•œ μ΄ν›„λ‘œλŠ” νšŒμ‚¬μ˜ 규λͺ¨κ°€ μ»€μ§€λ©΄μ„œ 이런 ν˜‘μ—…μ˜ 관점이 많이 변함을 λŠκΌˆμŠ΅λ‹ˆλ‹€. 각자의 λΆ„μ•Όμ—μ„œ 전문성을 λͺ…ν™•νžˆ 가지고 μžˆλŠ” νŒ€μ›λ“€μ΄ λͺ¨μ—¬ 있고, 개발의 λ²”μœ„μ™€ ν”„λ‘œμ νŠΈμ˜ 일정을 μ‘°μœ¨ν•  수 μžˆλŠ” 기획자 그리고 κ°–μΆ”μ–΄μ Έ μžˆλŠ” 릴리즈 ν”„λ‘œμ„ΈμŠ€λ₯Ό ν†΅ν•΄μ„œ μ²΄κ³„μ μœΌλ‘œ 일이 진행됨을 λŠκΌˆμŠ΅λ‹ˆλ‹€.

λ°˜λŒ€κΈ‰λΆ€λ‘œ 제 역할은 μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λŠ” λ°±μ—”λ“œ 개발자둜 μ’ν˜€μ§€λŠ” 것 μ—­μ‹œ λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이 뢀뢄이 μ²˜μŒμ—λŠ” λ‹€μ†Œ μƒμ†Œν•˜κ³  ν˜Όλž€μŠ€λŸ½κΈ°λ„ ν–ˆλŠ”λ°μš”. 처음 λͺ‡ 달은 μ „ νšŒμ‚¬μ—μ„œμ˜ 버릇이 남아 μžˆκΈ°λ„ ν–ˆκ³ , 쑰직의 ν˜•νƒœ μžμ²΄λŠ” λ™μΌν•˜κ²Œ λͺ©μ  쑰직이기에 제 R&R에 λŒ€ν•΄μ„œ 고민을 많이 ν–ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ‹œκ°„μ΄ 쑰금 μ§€λ‚˜μ„œλŠ” 슀슀둜 ν•˜κ³  싢은 말은 ν•˜λŠ” λ°±μ—”λ“œ 개발자라고 μƒκ°ν•˜κ³  업무에 μž„ν–ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. λ³΄μ‹œλŠ” νšŒμ‚¬λΆ„λ“€μ΄ κ³„μ‹œμ§€λŠ” μ•Šκ² μ§€λ§Œ, 이 자리λ₯Ό λΉŒμ–΄ 맀번 λ‹€μ†Œ λ†€λΌμš΄ 단어 μ„ νƒμœΌλ‘œ λ†€λž˜μΌœλ“œλ¦° 점 μ§„μ‹¬μœΌλ‘œ μ‚¬κ³Όλ“œλ¦½λ‹ˆλ‹€.

λ…νŠΉν•œ 쑰직, μˆ˜λ§Žμ€ μœ κ΄€ λΆ€μ„œ

2023λ…„ μ œκ°€ μΌν•œ 쑰직은 λ°±μ—”λ“œ κ°œλ°œμžλ‘œμ„œ μΌν•˜κΈ°μ—” ꡉμž₯히 λ…νŠΉν•œ μ‘°μ§μ΄μ—ˆλ‹€κ³  μƒκ°ν•˜λŠ”λ°μš”. 쑰직의 νŠΉμ„±μœΌλ‘œ 인해 λ‹€μ–‘ν•œ μœ κ΄€ λΆ€μ„œμ™€ ν˜‘μ—…ν•΄μ•Ό ν•˜λŠ” κΈ°νšŒκ°€ λ§Žμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 업무 μ‹œκ°„ 쀑 기술적인 고민을 ν•˜λŠ” μ‹œκ°„ λͺ»μ§€ μ•Šκ²Œ ν˜‘μ—…μ„ μœ„ν•΄ μ†Œν†΅μ„ ν•˜λŠ” μ‹œκ°„λ„ λ§Žμ•˜μŠ΅λ‹ˆλ‹€. μ‚΄λ©΄μ„œ κ°€μž₯ λ§Žμ€ 수의 μŠ¬λž™ 채널에 μ°Έμ—¬ν•œ ν•œ ν•΄κ°€ μ•„λ‹ˆμ—ˆλ‚˜ μ‹Άλ„€μš”.

이런 λ…νŠΉν•œ νŠΉμ„± λ•Œλ¬Έμ— 슀슀둜 μ–΄λ–»κ²Œ μ†Œν†΅ν•΄μ•Ό νš¨μœ¨μ μΈμ§€, μ•„λ‹ˆλ©΄ μœ κ΄€ λΆ€μ„œμ™€ 연동을 ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” μ–΄λ–»κ²Œ ν•˜λŠ” 것이 각 쑰직의 R&R κ΄€μ μ—μ„œ, μ•„λ‹ˆλ©΄ 기술적인 λŒ€μ‘ κ΄€μ μ—μ„œ 더 μ˜³μ€ λ°©ν–₯인지 많이 κ³ λ―Όν–ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ²˜μŒμ—λŠ” νšŒμ˜μ— λ“€μ–΄κ°€μ„œ μ œκ°€ κ΅¬μƒν•œ μ„œλΉ„μŠ€ 연동에 λŒ€ν•œ 방법둠을 μ„€λͺ…ν•˜λŠ” 것이 λ„ˆλ¬΄ νž˜λ“€μ—ˆλŠ”λ°μš”, μ΄μ œλŠ” κ²½ν—˜μ΄ μ’€ μŒ“μ˜€λ‹€κ³  κ΅¬μƒν•œ 방법둠에 λŒ€ν•œ μ˜λ„μ™€ λ‹Ήμœ„μ„±μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•  수 μžˆλŠ” μ •λ„λŠ” 된 것 κ°™μŠ΅λ‹ˆλ‹€.

λ˜ν•œ 올 ν•΄ 업무λ₯Ό ν•œ 쑰직은 λͺ©μ  쑰직의 ν˜•νƒœλ₯Ό 띄고 μžˆλŠ”λ°μš”. ν•œ 쑰직 내에 기획자 / 데이터 뢄석가 / λ””μžμ΄λ„ˆ / κ°œλ°œμžλ“€μ΄ ν•¨κ»˜ λͺ¨μ—¬μžˆλŠ” ν˜•νƒœμž…λ‹ˆλ‹€. 이 덕뢄에 κ°œλ°œμžλ‘œμ„œμ˜ 관점 이외에도 λ‹€μ–‘ν•œ κ΄€μ μ—μ„œ ν”„λ‘œλ•νŠΈλ₯Ό λ°”λΌλ³΄λŠ” μ‹œκ°μ„ κΈ°λ₯Ό 수 μžˆλŠ” ν•œ ν•΄ μ˜€λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. 특히 μ œκ°€ λ“€μ΄λŠ” 기술적 κ³΅μˆ˜κ°€ μ–΄λ–€ μ§€ν‘œλ‘œ λ‚˜νƒ€λ‚˜λŠ”μ§€ λΉ λ₯΄κ²Œ ν”Όλ“œλ°± 받을 수 μžˆμ—ˆλŠ”λ°μš”. 이 덕뢄에 과제λ₯Ό μ„ μ •ν•  λ•Œ λΉ„μš© λŒ€λΉ„ μž„νŒ©νŠΈλΌλŠ”, μ „ νšŒμ‚¬μ—μ„œλŠ” λœ¬κ΅¬λ¦„ μž‘λŠ” μ†Œλ¦¬λΌκ³  μƒκ°ν•˜λ˜ κ°œλ…μ— λŒ€ν•΄μ„œ λͺΈμœΌλ‘œ 느끼고 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

개발

Spring, 그리고 Kotlin

μ•„λ¬΄λž˜λ„ 올 ν•΄ 제 개발 μ»€λ¦¬μ–΄μ—μ„œ κ°€μž₯ 크고 λͺ…ν™•ν•œ μ „ν™˜μ΄λΌκ³  ν•˜λ©΄ 언어와 ν”„λ ˆμž„μ›Œν¬μ˜ μ „ν™˜μ„ λ“€ 수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. 2022λ…„μ—λŠ” 주둜 TypeScript 기반으둜 업무λ₯Ό μˆ˜ν–‰ν–ˆμ—ˆλŠ”λ°μš”. μž…μ‚¬ν•œ νšŒμ‚¬λŠ” μ „λ©΄μ μœΌλ‘œ JVM 기반으둜 λ˜μ–΄ μžˆλ‹€κ³  μ•Œκ³  μžˆμ—ˆκΈ°μ— Spring으둜의 ν”„λ ˆμž„μ›Œν¬ μ „ν™˜μ€ λΆˆκ°€ν”Όν•΄ λ³΄μ˜€μŠ΅λ‹ˆλ‹€. Springκ³Ό Java 기반으둜 κ°œλ°œμ„ ν•œ κ²½ν—˜μ€ μžˆμ—ˆκΈ°μ— 사싀 크게 걱정을 ν•˜κ³  μžˆμ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ JVM 기반 μƒνƒœκ³„μ—μ„œλŠ” OOP κ°œλ…μ— λŒ€ν•œ 평균 μˆ˜μ€€μ΄ 많이 λ†’λ‹€κ³  μ•Œκ³  있고, 원체 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 많이 μƒμ„±ν•˜λŠ” μ½”λ“œ μŠ€νƒ€μΌμ— μ΅μˆ™ν•˜μ§€ μ•Šμ•„ λ‹€μ†Œ 걱정을 ν•˜κΈ°λŠ” ν–ˆμŠ΅λ‹ˆλ‹€.

그런데 μž…μ‚¬λ₯Ό ν•˜κ³  λ‚˜μ„œ 저희 λΆ€μ„œλŠ” 이미 μ œκ°€ μž…μ‚¬ν•œ μ‹œμ μ— λͺ¨λ“  ν”„λ‘œμ νŠΈλ₯Ό Kotlin 으둜 μ „ν™˜ν•œ μƒνƒœμ˜€λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‹Ήμž₯ μž…μ‚¬ ν•˜λ£¨ μ „ λ‚ κΉŒμ§€ β€œKotlin으둜 Spring κ°œλ°œμ„ ν•  μˆ˜λŠ” μžˆλŠ”λ°, 되게 νž™ν•œ μŠ€νƒμ΄λ‹€β€ 라고 μ•Œκ³  있던 μ œκ²ŒλŠ” κ½€ μ‹ μ„ ν•œ μΆ©κ²©μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

μž…μ‚¬ 이후 거의 μΌμ£ΌμΌλ™μ•ˆμ€ μ˜¨λ³΄λ”© μ‹œκ°„μ„ μ œμ™Έν•˜κ³ λŠ” Springκ³Ό Kotlin ν•™μŠ΅μ΄ 주된 μ—…λ¬΄μ˜€μŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ Kotlin은 μ½”λ“œμ˜ μŠ€νƒ€μΌμ΄ TypeScript와 크게 λ‹€λ₯΄μ§€ μ•Šμ•˜κ³ , 특유의 νŽΈμ˜μ„±κ³Ό 간결함에 νž˜μž…μ–΄ λΉ λ₯΄κ²Œ Kotlin μŠ€νƒ€μΌμ— 적응할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Spring 은 μ œκ°€ κ³΅λΆ€ν•˜λ˜ μ‹œμ μ— Spring Framework 6κ³Ό Spring Boot 3이 릴리즈 된 μ‹œμ μ΄μ—ˆλŠ”λ°μš”. 책듀은 λŒ€λΆ€λΆ„ Spring Boot 2 κΈ°μ€€μœΌλ‘œ μž‘μ„±λ˜μ–΄ μžˆμ–΄, μ±…μ˜ μ‹€μŠ΅ λ‚΄μš©μ„ Spring Boot 3으둜 μ‹€μ‹œκ°„ ν¬νŒ…ν•΄κ°€λ©° ν•™μŠ΅μ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ Spring Boot 3.0 Migration Guide 그리고 κ·Έ 유λͺ…ν•œ Baeldung 아티클을 보며 κ·Έ 꼼꼼함과 μΉœμ ˆν•¨μ— κ°νƒ„ν–ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

개인적으둜 둜직의 κ°€μ‹œμ„±μ΄ λ–¨μ–΄μ§„λ‹€λŠ” 점 그리고 λ’·λ‹¨μ—μ„œ μΌμ–΄λ‚˜λŠ” λ§ˆλ²• 같은 일이 λ§Žλ‹€λŠ” 점 λ•Œλ¬Έμ— Spring을 크게 μ’‹μ•„ν•˜μ§€λŠ” μ•Šμ•˜λŠ”λ°μš”, ASP.NET κ³Ό λ”λΆˆμ–΄ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜κΈ° νŽΈν•œ ν”„λ ˆμž„μ›Œν¬μ—λŠ” κ·Έ μ΄μœ κ°€ μžˆκ΅¬λ‚˜λΌκ³  λŠκΌˆμŠ΅λ‹ˆλ‹€.

Coroutine, R2DBC λ“œκ°€μž~ (λΆ€μ œ: ν•˜λ£¨ λ“€μ—¬μ„œ νƒˆμΆœν•  수 μžˆμœΌλ©΄β€¦)

μ‹ κ·œ μž…μ‚¬μž 과제λ₯Ό μ§„ν–‰ν•˜λ©° κ°„λ‹¨ν•˜κ²Œ Kotlin 기반으둜 Spring Web (MVC) 그리고 JPA에 λŒ€ν•΄ 감을 읡힌 λ‹€μŒ μ‹€μ œ ν”„λ‘œμ νŠΈμ— νˆ¬μž…λ˜μ—ˆλŠ”λ°μš”. μ‹ κ·œλ‘œ μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜€μŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ 기술 μŠ€νƒ μ„ νƒμ˜ κ°ˆλ¦ΌκΈΈμ— λ†“μ΄κ²Œ λ˜μ—ˆλŠ”λ°, 같이 ν”„λ‘œμ νŠΈ κ°œλ°œμ„ μ§„ν–‰ν•˜μ‹  νŒ€μ› 뢄이 λ‹Ήμ‹œμ— Spring WebFlux κΈ°λ°˜μ—μ„œ Kotlin Coroutines 그리고 R2DBCλ₯Ό ν™œμš©ν•˜μ—¬ 비동기 기반의 μ„œλ²„λ₯Ό κ΅¬μ„±ν•΄λ³΄μžκ³  ν•˜μ…¨μŠ΅λ‹ˆλ‹€. μ‹ κΈ°μˆ  병이 μžˆλŠ” (아직도 μ€‘μ¦μž…λ‹ˆλ‹€) μ €μ˜€λ˜μ§€λΌ λ°”λ‘œ 고개λ₯Ό 144hz둜 끄덕이며 λ™μ˜ν–ˆκ³ , κ·Έλ ‡κ²Œ Spring WebFlux + Kotlin Coroutines + R2DBC 기반의 μ„œλ²„λ₯Ό κ°œλ°œν•˜κ²Œ λ©λ‹ˆλ‹€.

Kotlin ν™˜κ²½μ—μ„œ 비동기 κ΄€λ ¨ κ²½ν—˜μ΄ μ—†μ—ˆλ˜ 터라 κ°œλ°œν•˜λŠ” κ³Όμ •μ΄λ‚˜ μ„±λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ©΄μ„œ 고생을 μ’€ ν–ˆμ—ˆλŠ”λ°μš”, μ²˜μŒμ—λŠ” μ„±λŠ₯이 λ„ˆλ¬΄ μ•ˆλ‚˜μ™€μ„œ 병λͺ©μ˜ 원인 κ°™μ•˜λ˜ Coroutinesλ₯Ό κ±·μ–΄λ‚΄κ³  WebFlux 기반으둜 μ½”λ“œλ₯Ό λͺ¨λ‘ μž¬μž‘μ„±ν• κΉŒ ν–ˆμ§€λ§Œ, Reactive 기반으둜 μž‘μ„±ν•˜κΈ°μ—” 둜직이 λ„ˆλ¬΄ λ§Žμ•„μ„œ κ²°κ΅­ ν¬κΈ°ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ¬Όλ‘  μ΄λŠ” 제 Coroutinesκ³Ό Kotlin에 λŒ€ν•œ 이해도 λΆ€μ‘±μœΌλ‘œ μΈν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ§€κΈˆμ€ 운영 ν™˜κ²½μ—μ„œ 일단은 μ•ˆμ •μ μœΌλ‘œ 잘 λ™μž‘ν•˜λŠ” μƒνƒœκΉŒμ§€λŠ” 폼을 μ˜¬λ €λ‘μ–΄ μ„œλΉ„μŠ€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Hexagonal Architecture

μœ„μ—μ„œ μ§„ν–‰ν•œ ν”„λ‘œμ νŠΈλŠ” μ²˜μŒμ— Layered Architecture 기반으둜 κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€λ₯Ό ꡉμž₯히 λΉ λ₯΄κ²Œ κ°œλ°œν•  수 μžˆμ—ˆμ§€λ§Œ μΆœμ‹œ 이후 ν”„λ‘œμ νŠΈμ˜ μ˜μ‘΄μ„±μ΄ μ—¬κΈ°μ €κΈ° κΌ¬μ—¬ μžˆλ‹€λŠ” 생각을 ν–ˆμŠ΅λ‹ˆλ‹€.

이 뢀뢄을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 아티클과 예제λ₯Ό μŠ€ν„°λ””ν•΄κ°€λ©° Hexagonal Architecture 기반으둜 μ½”λ“œλ₯Ό λͺ¨μ‘°λ¦¬ μž¬μž‘μ„±ν•œ ν›„ νŒ€μ›λ“€μ—κ²Œ κ³΅μœ ν•˜κ³  μ μš©ν–ˆλŠ”λ°μš”. 아직도 400개 μ΄μƒμ˜ 파일 변경을 보고 λ†€λΌμ‹œλ˜ νŒ€μ› λΆ„λ“€μ˜ ν‘œμ •μ΄ μžŠνžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

맀핑 λ‘œμ§μ€ λ§Žμ•„μ‘Œμ§€λ§Œ, 도메인 둜직의 μˆœμˆ˜ν•¨μ„ μ§€μΌœλ‚Ό 수 μžˆμ—ˆλ‹€λŠ” 점 그리고 연동 μ„œλΉ„μŠ€μ˜ 응닡이 λ‹¬λΌμ§€κ±°λ‚˜ 연동 λŒ€μƒ μ„œλΉ„μŠ€ μžμ²΄κ°€ λ³€ν•˜λ”λΌλ„ μ–΄λŒ‘ν„°μ˜ 둜직만 변경해도 λ˜λŠ” 점이 κ°€μž₯ 큰 μž₯점으둜 λ‹€κ°€μ™”μŠ΅λ‹ˆλ‹€.

μ§€κΈˆ μ™€μ„œ λ‹€μ‹œ 보면 μˆ˜μ •ν•  λΆ€λΆ„μ΄λ‚˜ κ°œλ…μ μœΌλ‘œ μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  μž‘μ„±ν•œ μ½”λ“œλ“€μ΄ 많이 λ³΄μ΄λŠ”λ°μš”. μ½”λ“œ 레벨 μ•„ν‚€ν…μ²˜μ—μ„œ 이 μ •λ„λ‘œ 깊게 고민을 ν•˜κ³  μˆ˜μ •μ„ ν•œ 것은 처음이라 의미 μžˆλŠ” κ²½ν—˜μ΄μ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. μ½”λ“œλ₯Ό μ„€λͺ…ν•˜λ©° νŒ€μ›λ“€μ„ μ„€λ“ν•œ 것도 κ½€ κΈ°λΆ„ 쒋은 κ²½ν—˜μ΄μ—ˆκ΅¬μš”.

IDC ν™˜κ²½μ„ λ§Œλ‚˜λ‹€

μ•„λ§ˆ μš”μ¦˜ 개발자의 길을 μ€€λΉ„ν•˜μ‹œλŠ” 뢄듀은 λŒ€λΆ€λΆ„ ν΄λΌμš°λ“œ ν™˜κ²½μ„ 기반으둜 인프라λ₯Ό κ΅¬μ„±ν•˜μ‹œλŠ” κ²½ν—˜μ„ ν•  κ²ƒμž…λ‹ˆλ‹€. μ € μ—­μ‹œλ„ 그랬고, 주둜 AWS ν™˜κ²½μ—μ„œ Terraform 기반으둜 인프라λ₯Ό μ†μ‰½κ²Œ κ΅¬μ„±ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.

올 ν•΄ 처음으둜 IDC ν™˜κ²½μ„ λ©”μΈμœΌλ‘œ 업무λ₯Ό ν–ˆμ—ˆλŠ”λ°μš”, 이 뢀뢄이 생각 μ™Έλ‘œ 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 특히 μ œν•œμ μΈ 인프라λ₯Ό 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•œ 고민을 많이 ν•˜λŠ” μŠ΅κ΄€μ„ 듀일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν΄λΌμš°λ“œ ν™˜κ²½μ—μ„œλŠ” 크게 μ‹ κ²½ 써본 적 μ—†λŠ” DB μŠ€ν† λ¦¬μ§€ μš©λŸ‰μ— λŒ€ν•΄μ„œλ„ 신경을 써야 ν–ˆμŠ΅λ‹ˆλ‹€. 사싀 상 μœ μ € 1λͺ… λ‹Ή 데이터 μ–‘ * μœ μ € 수 만큼의 데이터가 λ°œμƒν•˜κΈ° λ•Œλ¬Έμ—, 이런 뢀뢄을 κ³ λ €ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— μ˜ˆμ „ κ°™μ•˜μœΌλ©΄ 별 생각 없이 DB에 남겼을 λ‘œκ·Έμ„± μœ μ € 행동 데이터 λ“± μ—¬λŸ¬ 데이터에 λŒ€ν•΄μ„œλ„ λ‹€μ‹œ λ°”λΌλ³΄κ²Œ λ˜μ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

Kubernetesλ₯Ό λ§Œλ‚˜λ‹€

2022λ…„μ—λŠ” μ»¨ν…Œμ΄λ„ˆ 기반으둜 κ°œλ°œμ„ ν•΄μ„œ 배포λ₯Ό ν•˜κΈ΄ ν–ˆμ§€λ§Œ, λͺ¨λ†€λ¦¬μŠ€ ν˜•νƒœλ‘œ μ„œλΉ„μŠ€λ₯Ό λ°°ν¬ν–ˆκΈ° λ•Œλ¬Έμ— Kubernetes에 λŒ€ν•œ μˆ˜μš”κ°€ 그리 크지 μ•Šμ•˜κ³  AWS ECS Fargate 기반으둜 배포λ₯Ό ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•œνŽΈμœΌλ‘œλŠ” κ·Έλž˜μ„œ Kubernetes ν™˜κ²½μ—μ„œ μΌν•˜λ©΄ λ°±μ—”λ“œ κ°œλ°œμžλ‘œμ„œ μ–΄λ–€ λŠλ‚ŒμΌκΉŒ κΆκΈˆν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이름도 κ·Έλ ‡κ³  λ§ˆν¬λ„ ꡉμž₯히 λ©‹μžˆμ–΄ λ³΄μ˜€κ±°λ“ μš”.

μ‹€μ œλ‘œ μ™€μ„œ κ²½ν—˜ν•΄λ³΄λ‹ˆ DevOps, SRE 직ꡰ뢄듀이 K8S ν™˜κ²½κ³Ό 배포 νŒŒμ΄ν”„λΌμΈμ„ λͺ¨λ‘ ꡬ성해두셨기 λ•Œλ¬Έμ— μ‹€μ œ λ°±μ—”λ“œ κ°œλ°œμžλŠ” 인프라에 λŒ€ν•΄μ„œ 크게 μ‹ κ²½μ“Έ 일이 μ—†κΈ΄ ν–ˆμ§€λ§Œ, κ·Έλž˜λ„ λ…Έλ“œ, νŒŒλ“œ, μ„œλΉ„μŠ€, 인그레슀, μ„œλΉ„μŠ€ λ©”μ‹œ, Helm 차트 λ“± ꡉμž₯히 μƒˆλ‘œμš΄ 뢀뢄듀을 많이 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

전체 μ„œλΉ„μŠ€ 인프라λ₯Ό μ§€νƒ±ν•˜κΈ° μœ„ν•΄μ„œ μ΄λ ‡κ²Œ λ§Žμ€ κ°œλ…λ“€κ³Ό 기술이 μ‚¬μš©λ˜κ³  μžˆμŒμ— μƒˆμ‚Ό λ†€λžκ³ , 이런 인프라λ₯Ό μ§€νƒ±ν•˜λŠ” DevOps 직ꡰ에 λŒ€ν•΄μ„œλ„ ν₯λ―Έλ₯Ό 느끼게 λ˜λŠ” κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ

νšŒμ‚¬μ—μ„œ ν•˜λŠ” 일 이외에도 학ꡐ 동기듀과 μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ‚˜ μ§„ν–‰ν–ˆμ—ˆλŠ”λ°μš”. ν”„λ‘œμ νŠΈλ₯Ό 길게 μ§„ν–‰ν•˜λ©΄μ„œ λŠλ‚€ 점듀도 κ°„λ‹¨νžˆ 정리해보렀 ν•©λ‹ˆλ‹€.

흐지뢀지

4λ…„μ˜ 학뢀생 μƒν™œμ„ ν•˜λ©΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄ 항상 μ„£λΆˆλ¦¬ κ°‘κ°‘ν•΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό λ¦¬λ“œν•˜λŠ” 역할을 많이 ν–ˆμ—ˆλŠ”λ°μš”. 이런 제 성격 탓에 λ‹€λ₯Έ νŒ€μ›λ“€μ΄ ν”„λ‘œμ νŠΈμ— 적극적으둜 μ°Έμ—¬ν•  수 μžˆλŠ” 기회λ₯Ό 많이 빼앗은 것이 μ•„λ‹Œκ°€ 싢은 생각을 ν•˜κ³€ ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 이번 ν”„λ‘œμ νŠΈμ—μ„œ 제 컨셉은 κΈ°νšμ΄λ‚˜ μ„œλΉ„μŠ€ κ°œλ°œμ— μ΅œλŒ€ν•œ 적게 μ°Έμ—¬ν•˜κ³ , 자율적으둜 ν”„λ‘œμ νŠΈλ₯Ό 진행할 수 있게 μΈν”„λΌλ‚˜ 곡톡 Gateway μ„œλ²„λ₯Ό ꡬ좕해주도둝 ν•˜μž μ˜€μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ—¬λŸ¬ ν•œκ³„μ λ“€μ΄ λ³΅ν•©μ μœΌλ‘œ μž‘μš©ν•˜λ©΄μ„œ ν•΄λ‹Ή ν”„λ‘œμ νŠΈλŠ” 흐지뢀지 λλ‚˜κ²Œ λ˜μ—ˆκ³  λ§ˆμ§€λ§‰κΉŒμ§€ FE와 BEκ°€ μ—°λ™λ˜μ–΄ λ™μž‘ν•˜λŠ” λͺ¨μŠ΅μ„ 보지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈκ°€ μ΄λ ‡κ²Œ μ•„μ‰½κ²Œ λλ‚œ 이유λ₯Ό κ°„λ‹¨νžˆ μ§šμ–΄λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

기획λ ₯이 크게 ν•„μš”ν•œ μ–΄λ €μš΄ 주제

μ €ν¬μ˜ μ£Όμ œλŠ” μŠ€ν„°λ””λ₯Ό λͺ¨μ§‘ν•˜κ³  진행할 수 μžˆλŠ” ν”Œλž«νΌμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이후 ν•΄λ‹Ή μŠ€ν„°λ””μ˜ λ‚΄μš©μ„ 기반으둜 λΈ”λ‘œκΉ…κΉŒμ§€ 지원할 수 μžˆλ„λ‘ ν•œλ‹€λŠ” 야심찬 κΏˆμ„ μ„Έμ› μ§€μš”.

λ¬Έμ œλŠ” 이런 ν”Œλž«νΌμ„ μ™„μ„±ν•˜κΈ° μœ„ν•΄μ„  기획λ ₯을 크게 μš”ν•œλ‹€λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ“€ 개발자둜 κ΅¬μ„±λ˜μ–΄ μžˆμ—ˆκΈ° λ•Œλ¬Έμ— κΈ°νšμ„ μ΄λŒμ–΄ λ‚˜κ°€κΈ°μ— ν•„μš”ν•œ κ³΅μˆ˜κ°€ λ„ˆλ¬΄λ‚˜λ„ μ»ΈμŠ΅λ‹ˆλ‹€. κ±°κΈ°λ‹€ 주제 μžμ²΄λ„ 이미 μ‘΄μž¬ν•˜λŠ” 유λͺ…ν•œ μ„œλΉ„μŠ€κ°€ μžˆμ§€λ„, μ •ν˜•ν™”λœ ν˜•νƒœκ°€ μžˆμ§€λ„ μ•Šλ‹€ λ³΄λ‹ˆ ν”„λ‘œλ•νŠΈλ₯Ό μ„€κ³„ν•˜λŠ” 것 μžμ²΄κ°€ 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

적어도 유λͺ…ν•œ μ„œλΉ„μŠ€κ°€ μžˆλ‹€λ©΄ λ‹€λ“€ β€œμ•„ 그런거!β€λΌλŠ” μ‹μœΌλ‘œ 직관적인 μœ μΆ”λ₯Ό ν•΄κ°€λ©° 곡감을 ν•˜κ³  λ‚˜μ•„κ°ˆ 수 μžˆμ—ˆμ„ν…λ°, 그런 뢀뢄이 μ „ν˜€ μ—†μ—ˆκΈ°μ— κΈ°νšλ„ λ””μžμΈλ„ κ°œλ°œλ„ λͺ¨λ‘ μ–΄λ €μ› λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ£¨μ¦ˆν•œ 일정 관리

맀 μ£Όλ§ˆλ‹€ λΉ„λŒ€λ©΄μœΌλ‘œ 진척도λ₯Ό μ²΄ν¬ν•˜κΈ°λŠ” ν–ˆμ§€λ§Œ, κ·Έ λˆ„κ΅¬λ„ 일정에 λŒ€ν•œ 압박을 ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ œκ°€ νŒ€μ›λ“€μ„ λͺ¨μ„ λ•Œ ν•œ 이야기도 β€œλΆ€λ‹΄ 없이 천천히 ν•¨κ»˜ μ„±μž₯ν•˜λŠ” ν”„λ‘œμ νŠΈβ€λΌκ³  ν–ˆμ—ˆκΈ°μ— 일정에 λŒ€ν•΄μ„œλŠ” 뢀담을 λŠλΌμ§€ μ•Šμ•˜μœΌλ©΄ ν•˜λŠ” 생각도 μ»ΈμŠ΅λ‹ˆλ‹€.

μ•„λ¬΄λž˜λ„ 이번 사둀λ₯Ό ν†΅ν•΄μ„œ λΆ€λ‹΄ 없이 천천히 ν•¨κ»˜ μ„±μž₯ν•˜λŠ” ν”„λ‘œμ νŠΈλΌλŠ” λͺ¨λΈμ€ 업무 이외에 μ§„ν–‰ν•˜λŠ” μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ—λŠ” μ μš©ν•˜κΈ° μ–΄λ ΅λ‹€ κ²°λ‘ μ§“κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€λ“€ 퇴근 이후 νž˜λ“  μƒνƒœλ‘œ 좔가적인 무언가λ₯Ό ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 큰 자기 동기가 μžˆμ§€ μ•ŠμœΌλ©΄ 정해진 일정에 λŒ€ν•œ 관리 없이 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ”κ²Œ 쉽지 μ•Šλ‹€κ³  μƒκ°ν•˜κ²Œ λμŠ΅λ‹ˆλ‹€.

높은 인프라 λŸ¬λ‹μ»€λΈŒ

이번 ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘μœΌλ‘œ 이 νŒ€μ—μ„œ μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€λ₯Ό μ•žμœΌλ‘œ ν•¨κ»˜ κ°œλ°œν•˜κ² λ‹€λŠ” μš•μ‹¬μ„ 가지고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€λ₯Ό ν•˜λ‚˜μ˜ κ³„μ •μœΌλ‘œ μ‚¬μš©ν•  수 있게 ν•˜κΈ° μœ„ν•΄μ„œ 톡합 인증 μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜κ³ , μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€μ— λŒ€ν•œ 인증을 κ·Έ μ„œλ²„ ν•˜λ‚˜μ—μ„œ μ²˜λ¦¬ν•œ λ‹€μŒ κ³„μ •μ˜ IDλ₯Ό 헀더에 μ‹¬μ–΄μ„œ 뒷단 μ„œλΉ„μŠ€λ‘œ μ „λ‹¬ν•˜λ„λ‘ κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. 말둜만 놓고 보면 μ–΄λŠ 정도 μžμ—°μŠ€λŸ¬μš΄ 인프라 κ΅¬μ„±μ΄μ—ˆμ§€λ§Œ, νŒ€μ›λ“€μ€ TypeScript 기반으둜 NestJsλ₯Ό 처음 μŠ€ν„°λ””ν•˜λ©° λ°±μ—”λ“œ μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜λŠ” μž…μž₯μ΄μ—ˆκΈ° λ•Œλ¬Έμ— 이 뢀뢄이 높은 λŸ¬λ‹ 컀브둜 λ‹€κ°€μ˜¨ 것 κ°™μŠ΅λ‹ˆλ‹€.

κ±°κΈ°λ‹€ λ…μ„ μ μœΌλ‘œ 인프라와 κ²Œμ΄νŠΈμ›¨μ΄ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μƒν•˜κ³  κ°œλ°œν–ˆκΈ° λ•Œλ¬Έμ— νŒ€μ›λ“€μ˜ 곡감도 크게 얻지 λͺ»ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„μ‰½κ²Œλ„ λ‚˜μ€‘μ—λŠ” νŒ€μ›λ“€μ˜ 일정 μ΄μŠˆκ°€ 겹쳐 λ§ˆμ§€λ§‰κΉŒμ§€ κ²Œμ΄νŠΈμ›¨μ΄μ™€ μ„œλΉ„μŠ€ μ„œλ²„λ₯Ό μ—°λ™ν•˜μ§€ λͺ»ν•˜κ³  ν”„λ‘œμ νŠΈλ₯Ό λ§ˆλ¬΄λ¦¬ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

개발, 인프라

ν”„λ‘œμ νŠΈκ°€ μ•„μ‰½κ²Œ 흐지뢀지 λλ‚˜κ²Œ λ˜μ—ˆμ§€λ§Œ, κ·Έλž˜λ„ 인프라와 제반 μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μ„±ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ κΈ°μˆ λ„ 많이 써보고 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

인프라 ν™˜κ²½ μ—¬ν–‰κΈ°

μž₯κΈ° μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ νŒ€μ„ ꡬ상할 λ•Œ 개발자라면 무릇 인프라 λΉ„μš©μ„ ν•¨κ»˜ μƒκ°ν•˜κ²Œ λ©λ‹ˆλ‹€. κ³„μ†ν•΄μ„œ μ„œλΉ„μŠ€κ°€ λŠ˜μ–΄λ‚˜κ²Œ λ ν…Œλ‹ˆ λΆ€λ‹΄ν•΄μ•Ό ν•˜λŠ” λΉ„μš©λ„ λŠ˜μ–΄λ‚  κ²ƒμœΌλ‘œ μ˜ˆμƒν•΄μ„œ, κ·Έλƒ₯ 저희 집에 μ˜¨ν”„λ ˜ ν™˜κ²½μœΌλ‘œ μž‘μ€ μ„œλ²„λ₯Ό ꡬ성해두고 거기에 μžλ™ 배포가 κ°€λŠ₯ν•˜λ„λ‘ μ„œλΉ„μŠ€λ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—” μ„œλΉ„μŠ€λ“€μ„ λ°°ν¬ν•˜κΈ° μœ„ν•΄ λ§₯ λ―Έλ‹ˆλ₯Ό 처음 κ΅¬λ§€ν•΄μ„œ docker compose 기반으둜 μ„œλΉ„μŠ€λ₯Ό λ°°ν¬ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. 이 ν™˜κ²½μ—μ„œ 배포λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ GitHub Actionsμ—μ„œ Ansible을 ν™œμš©ν•˜μ—¬ ssh λͺ…령을 μ‹€ν–‰ν•˜λŠ” μ‹μœΌλ‘œ 처음 인프라λ₯Ό κ΅¬μ„±ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.

이후 λ§₯ λ―Έλ‹ˆ ν•œλŒ€λ‘œλŠ” λΆ€μ‘±ν•˜κ² λ‹€λŠ” νŒλ‹¨μ΄ λ“€μ–΄ λ―Έλ‹ˆ PCλ₯Ό 3λŒ€ κ΅¬λ§€ν–ˆμŠ΅λ‹ˆλ‹€. 이 PC 3λŒ€λ₯Ό λ¬Άμ–΄μ„œ Kubernetesλ₯Ό ꡬ성해보렀고 ν–ˆμŠ΅λ‹ˆλ‹€λ§Œ, μˆ˜λ§Žμ€ κ°œλ… 압도당해 κ²°κ΅­ κ΅¬μ„±ν•˜μ§€ λͺ»ν•˜κ³  훨씬 μ μš©ν•˜κΈ° μ‰¬μš΄ Docker Swarm ν˜•νƒœλ‘œ ν΄λŸ¬μŠ€ν„°λ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 이 ν™˜κ²½ μœ„μ—μ„œ Nginx둜 API Gateway도 κ΅¬μ„±ν–ˆκ³ , 인증을 λ‹΄λ‹Ήν•˜λŠ” 인증 μ„œλ²„λ„ κ°œλ°œν•΄ 뒷단 μ„œλΉ„μŠ€λ₯Ό 갈 λ•Œ λ°˜λ“œμ‹œ 인증 μ„œλ²„λ₯Ό κ±°μ³μ„œ 가도둝 ν•˜λŠ” 흐름도 κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. λ°°ν¬λŠ” μ—¬μ „νžˆ Ansible을 ν†΅ν•΄μ„œ ssh λͺ…령을 μ‹€ν–‰ν•˜λŠ” μ‹μœΌλ‘œ λ˜μ–΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ Kubernetesλ₯Ό ν•œλ²ˆμ€ μ‚¬μš©ν•΄λ³΄κ³  μ‹Άλ‹€λŠ” 생각에 K3S 기반으둜 ν΄λŸ¬μŠ€ν„°λ₯Ό μ΄μ „ν–ˆκ³ , Helm Chartλ‚˜ ArgoCD 등을 μ μš©ν•˜μ—¬ GitHub Actions μ—μ„œλ„ Ansible을 κ±·μ–΄λ‚΄κ³  쑰금 더 λ‚˜μ€ λ°©λ²•μœΌλ‘œ 배포 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

μž‘κ³  κ·€μ—½μ§€λ§Œ μ˜¨ν”„λ ˜ ν™˜κ²½μ—μ„œ K8S λ…Έλ“œ 3개λ₯Ό κ΅΄λ €μ„œ ν΄λŸ¬μŠ€ν„°λ₯Ό ꡬ성해보고 배포 νŒŒμ΄ν”„λΌμΈκΉŒμ§€ 직접 κ΅¬μΆ•ν•΄λ³΄λŠ” κ·€μ€‘ν•œ κ²½ν—˜μ„ ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.

Ktor

νšŒμ‚¬μ—μ„œ Kotlin을 μ‚¬μš©ν•˜λ‹€ λ³΄λ‹ˆ 이 μ–Έμ–΄κ°€ ꡉμž₯히 μš”λ¬Όλ‘œ λŠκ»΄μ‘ŒμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ Spring 이외에 ν™œμš©ν•  수 μžˆλŠ” ν”„λ ˆμž„μ›Œν¬λ₯Ό 찾아보닀 Ktorλ₯Ό λ§Œλ‚˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Coroutines 기반으둜 λ‘œμ§μ„ μž‘μ„±ν•  수 μžˆλŠ” κ²½λŸ‰ ν”„λ ˆμž„μ›Œν¬μΈλ°, Spring이 NestJs 라면 KtorλŠ” express 같은 λŠλ‚Œμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ—μ„œ ν™œμš©ν•œ 인증 μ„œλ²„λ„ Ktor 기반으둜 κ΅¬μ„±ν–ˆλŠ”λ°μš”, 둜직이 투λͺ…ν•˜κ²Œ λͺ¨λ‘ λ“œλŸ¬λ‚˜μžˆλ‹¨ μ μ—μ„œ μ·¨ν–₯에 따라 선택할 수 μžˆλŠ” ν”„λ ˆμž„μ›Œν¬λΌλŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

이외에도

Goλ‘œλ„ μ˜€λžœλ§Œμ— κΊΌλ‚΄μ„œ μ„œλ²„λ„ ν•œλ²ˆ μž‘μ„±ν•΄λ³΄κ³  ν–ˆμ—ˆλŠ”λ°μš”, λ„ˆλ¬΄ λ‚ μΉ˜κΈ°λ‘œ κ³΅λΆ€ν•˜κ³  λ‘œμ§μ„ μž‘μ„±ν–ˆμ–΄μ„œ.. μ•„μ‰½μŠ΅λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ Footprintκ°€ 정말 λ†€λž„λ§ŒνΌ μž‘μ•„μ„œ, λ‚˜μ€‘μ— λ‹€μ‹œ ν•œλ²ˆ κΌ­ ν™œμš©ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ•žμœΌλ‘œλŠ”?

λ‹€μ‹œ μ£Όλ„μ μœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό λ¦¬λ“œν•˜λŠ” λ°©ν–₯으둜 가보렀고 ν•©λ‹ˆλ‹€. μ΄λŸ¬λ‹ˆμ €λŸ¬λ‹ˆ λŠλ‚€ 점듀이 λ§ŽκΈ°λ„ ν–ˆμ§€λ§Œ κ·Έλƒ₯ 제 성격이 μ΄λ ‡κ²Œ 생겨먹은 것 κ°™λ‹€λŠ” 생각도 λ“œλ„€μš”. ν”„λ‘œμ νŠΈλ₯Ό 잘 λ¦¬λ“œν•˜λ©΄μ„œ, νŒ€μ›λ“€μ„ 쑴쀑할 수 μžˆλŠ” νƒœλ„λ₯Ό κ°–μΆ”λŠ” 것이 였히렀 ν•¨κ»˜ μœˆμœˆν•  수 μžˆλŠ” λ°©ν–₯이 μ•„λ‹κΉŒ 싢은 μƒκ°μž…λ‹ˆλ‹€.

κΈ°μˆ μ μœΌλ‘œλŠ” λ„ˆλ¬΄ 높은 λŸ¬λ‹μ»€λΈŒλ₯Ό 가져가지 μ•ŠμœΌλ €κ³  ν•©λ‹ˆλ‹€. λ°±μ—”λ“œλ§Œ 놓고 보면 λͺ¨λ†€λ¦¬μ‹ ꡬ쑰둜 μ„œλΉ„μŠ€λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•œ λ‹€μŒ, 이것을 λ‚˜λˆ μ•Ό 할지, λ‚˜λˆˆλ‹€λ©΄ μ–΄λ–»κ²Œ λ‚˜λˆ μ•Ό 할지 λ“±μ˜ 뢀뢄을 λ…Όμ˜ν•΄μ„œ νŒ€μ›λ“€μ˜ 곡감을 기반으둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 λ§žμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

개인

λ§ˆμ§€λ§‰μœΌλ‘œ κ°œμΈμœΌλ‘œμ„œμ˜ ν•œ ν•΄λ₯Ό λŒμ•„λ³΄λ € ν•©λ‹ˆλ‹€. 이 뢀뢄은 λΆ€μ œλ₯Ό λ‚˜λˆ„μ§€ μ•Šκ³  κ°„λ‹¨νžˆ 해보렀고 ν•˜λŠ”λ°μš”.

μ–Έμ œλ‚˜ 그렇듯이 많이 아쉬움을 λŠλ‚€ 것 κ°™μŠ΅λ‹ˆλ‹€. 해보고 싢은 ν”„λ‘œμ νŠΈλ„, ν•˜κ³  싢은 곡뢀도 λ§Žμ•˜μ§€λ§Œ κ³„νš 단계 κΉŒμ§€λ„ 가지 λͺ»ν•˜κ³  쒌절된 것듀이 λ§Žμ•˜λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬ 기술 μ„œμ μ„ κ΅¬λ§€ν–ˆμ§€λ§Œ, μ§„μ§œ κ²‰μœΌλ‘œ ν›‘μ–΄λ³΄κΈ°λ§Œ ν•˜κ³  λ‚΄μš©μ΄ ν•˜λ‚˜λ„ κΈ°μ–΅λ‚˜μ§€ μ•ŠλŠ” 책듀도 λ§Žμ„ μ •λ„μ΄λ‹ˆ νšŒμ‚¬λ‚˜ μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ˜ 도움을 받지 μ•Šκ³  슀슀둜 이뀄낸 μ„±μž₯이 μ°Έ λͺ¨μžλΌλ‹€λŠ” 생각이 λ“œλ„€μš”.

올 ν•΄λŠ” 곡뢀도 그리고 λ©”λͺ¨λ„ 많이 ν•˜κ³ , 슀슀둜 의미 μžˆλŠ” 정보도 많이 μŠ΅λ“ν•˜κ³  또 μ €λ§Œμ˜ μ–Έμ–΄λ‘œ ν’€μ–΄λ‚΄λ³΄λŠ” μ‹œκ°„μ„ 많이 가져보고 μ‹ΆμŠ΅λ‹ˆλ‹€.

마무리

많이 배우고, 많이 μ•„μ‰¬μ› λ˜ 2023λ…„μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

이전 νšŒμ‚¬μ˜ CTO λ‹˜μ΄ κ°œλ°œνŒ€ λ¬Έν™”λ₯Ό μ„€λͺ…ν•˜λŠ” λ…Έμ…˜μ— μ μ–΄λ‘μ…¨λ˜, μ œκ°€ 정말 μ’‹μ•„ν•˜λŠ” 문ꡬ가 μžˆλŠ”λ°μš”.

3κ°œμ›” μ „μ˜ λ‚˜μ™€ λΉ„κ΅ν–ˆμ„ λ•Œ λ‚΄κ°€ μ§€κΈˆ μ„±μž₯ν•˜κ³  μžˆλŠ” λ°©ν–₯을 μ„€λͺ…ν•  수 μžˆμ–΄μ•Ό ν•˜κ³ 
6κ°œμ›” μ „μ˜ λ‚˜μ™€ λΉ„κ΅ν–ˆμ„ λ•Œ λ‚΄κ°€ μ§€κΈˆ μ„±μž₯ν•˜κ³  μžˆλŠ” 속도λ₯Ό 보여쀄 수 μžˆμ–΄μ•Ό ν•˜κ³ 
1λ…„μ „μ˜ λ‚˜μ™€ λΉ„κ΅ν–ˆμ„ λ•Œ λ‚΄κ°€ μ§€κΈˆ μ–Όλ§ŒνΌ μ„±μž₯ν–ˆλŠ”μ§€λ₯Ό 증λͺ…ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
ν•˜λ‚˜λΌλ„ ν•΄λ‹Ήν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μœ„κΈ°μ˜μ‹μ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

μ–΄λ–€ λ°©ν–₯으둜 λ‚˜μ•„κ°ˆμ§€, μ–΄λ–€ μ†λ„λ‘œ μ„±μž₯할지, μ–΄λ–€ λ‚˜μ˜ μ„±μž₯을 증λͺ…ν•  수 μžˆμ„μ§€ μ§€κΈˆμ€ μ „ν˜€ μ˜ˆμΈ‘ν•  수 μ—†μ§€λ§Œ 이 3κ°œμ›”, 6κ°œμ›”, 1년이 지날 λ•Œ 문ꡬλ₯Ό λ§Œμ‘±ν•  수 μžˆλŠ” ν•œ ν•΄κ°€ λ˜μ—ˆμœΌλ©΄ ν•©λ‹ˆλ‹€.

λ‘μ„œ μ—†λŠ” 넋두리 읽어주신 λΆ„λ“€ κ°μ‚¬ν•©λ‹ˆλ‹€. λ‹€λ“€ μƒˆν•΄ 볡 많이 λ°›μœΌμ„Έμš”!

끝.