Skip to content

2024년 7월 11일 TIL

TL;DR

  • Kotlin & Spring 네트워킹 밋업 다시보기를 보고 배운점을 TIL에 요약함.
  • 코틀린 공식 예제 코드를 간단하게만 살펴봄

한줄평

교내 바자회 때문에 오늘은 몰입이 안됐다.

오늘 회의 1번에 예산 변경만 5번을 했다. 처음부터 제대로 안 짠 내 잘못 😪

덕분에 집오자마자 골아떨어져서 집와서 제대로 코틀린 해보려고 한 계획은 나가리 됐고 간단하게 코드 예제들만 살펴봤다.

내일은 제대로 달려보자!!

Kotlin & Spring 네트워킹 밋업 다시보기 시청

img

요약

두들린 개발자들은 VOC를 참고하여 변경이 잦은 개발환경을 가지고 있었다.

기존 그리팅 서비스는 pythonflask로 운영되고 있었다. 초창기에는 충분히 훌륭한 프레임워크 였지만 서비스가 성장하며 단점이 보이기 시작함.

문제점으로는...

1.동적타입 언어의 불안성

파이썬은 동적타입언어기 때문에 함수나 변수에 어떤 값을 넣든 실행이 된다. 이러한 동적타입추론 때문에 만약 개발자가 잘못 된 값을 넣을수도 있었고 NULL 체크를 하지 않아서 NULL이 들어가면 안되는 곳에 NULL이 들어갔다면 타입에러를 내뱉으며 서버가 죽어버릴 수 있었음.

초창기 2명의 두들린 백엔드 개발자들은 이러한 문제를 해결하기 위해서 수많은 방어로직과 테스트 코드들을 작성해야만 했음. 이로인해 VOC를 기반하여 빠르게 서비스 검증하는데 지장을 줬음. 작성코드의 3분의 2가 테스트코드 및 방어로직 작성이였을 정도였음.

TypeAnnotation이나 myPy같은 정적타입 분석도구를 사용 할 수도 있었지만 결국 힌팅에 불과하여 에러가 발생 할 수 있는 여지가 있었음. 또한 이미 다 정적타입 분석도구 없이 개발 되어있어서 리팩토링한다면 큰 비용이 들 것이라고 생각함.

2.작은 생태계

꽤 많은 ORM, 서버사이드 라이브러리가 많지만 ORM에서 IDS 커넥션, 보일러 플레이트 등 필수적인 세팅들이 구현되어 있지 않아 모두 직접 구현해야 했음. 또한 구현한 코드들은 모두 테스트까지 돌려야했음.

3.채용

파이썬 개발자의 수가 적어서 개발자들 채용 시에 어려움이 있었음.

결국 해결방안으로 기술스택 전환을 선택함

고려한 기술스택

스택/장단점장점단점
Nest.js훌륭한 공식문서
현저히 적은 보일러플레이트(데코레이터)
CLI 잘되어있음
작은 커뮤니티
Spring Boot훌륭한 큰 커뮤니티(인재풀)
훌륭한 공식 라이브러리
높은 러닝커브
상당한 보일러 플레이트(코틀린으로 크게 개선 가능)
공통정적타입언어 기반(타입 세이프티)

결국 코틀린, 스프링으로 마이그레이션 하기로 결정함

코틀린 학습을 하며

리소스 서칭시 자바로 이루어진 코드들이 많기 때문에 자바를 배울 수 밖에 없음. 자바를 배우고 넘어오는게 중요하고 코틀린 코드를 자바로 디컴파일해보면서 비교해보는것도 추천함.

마이그레이션 과정

일괄 마이그레이션과 부분 마이그레이션 중 서비스가 성장 중 이기 때문에 일괄 마이그레이션은 치명적일 수 있어 부분 마이그레이션을 선택함.

우선 변화와 트래픽이 적은 결제 서비스부터 마이그레이션하였고 예전부터 MSA를 위해 아키텍쳐를 설계 했었기 때문에 부분 마이그레이션하기에 수월했음. 또한 마이그레이션한 서비스가 죽으면 레거시를 키고 트래블슈팅을 하는 방식으로 부딫치며 학습 & 마이그레이션함.

이후엔 1년간 최종적으로 결제 도메인 => 메일 도메인 => ... => ATS 도메인(가장 거대함)을 마이그레이션함. 팀원들은 이제 프레임워크에 친숙해짐.

좋은 점

  1. 코드 퀄리티 향상
  2. 유지보수성 증가
  3. 생산성 향상

배운점

기존 파이썬 개발환경과 바뀐 코틀린 스프링 개발환경의 차이점과 장점을 알 수 있었다. 특히나 코틀린의 장점, 스프링의 장점을 비교를 통해 알게 되면서 코틀린, 스프링을 배워야하는 이유를 조금이나마 깨달은 느낌? 코틀린 배우기전에 자바 실력 또한 중요하다는 점도 배웠다.

코틀린 예제 읽어보기

1.

https://play.kotlinlang.org/byExample/overview

코틀린 예제를 읽어보면서 전체적으로 어떤 느낌인지 파악해봤음. 대체적으로 자바보다 진짜 간결한 느낌? 왜 밋업에서 코틀린으로 상당한 보일러 플레이트를 해결 할 수 있다는지 어느정도 느낌. 한번 자바로 만들었던 간단한 CLI 프로젝트를 코틀린으로 다시 보면 좋을 것 같다.

2.

https://developer-munny.tistory.com/11

코틀린엔 getter, setter가 없다고해서 관련 내용을 찾아봤다.

찾으면서 data class에 관한 내용도 간단하게만 살펴봤다. 이건 내일 다시 한번 봐야할듯