코딩하는 오징어
2019년 회고록 본문
오랜만에 개인적인 글을 쓰게 되었네요. 2018년은 연말 회고록을 쓰지 못해서 아쉬운 마음을 가지고 있었는데 벌써 2019년도 마무리가 되어 가고 있습니다. 저도 어느덧 2년차 프로그래머가 되었습니다. 시간이 정말 빠르네요. 목차 없이 글을 써내려가면 글에 서두가 없을 것 같아 다음과 같은 순서로 작성해 보았습니다.
- 2019년의 성과
- 직업 의식
- 도메인 변경
- 좋은 공부란?
- 선배님들의 어록 정리
2019년의 성과
2019년은 저에게 있어 많은 성장을 이뤄낸 해였습니다. 연초에 작성한 계획도 대부분 지켜서 꽤나 성취감 있는 만족스러운 1년을 보내게 되었습니다. 두 가지는 꼭 지키고자 노력을 하였는데요. 첫 번째는 "새로운 프로그래밍 언어를 익히자" 였고, 두 번째는 "기술 서적 5권 이상 읽기" 였습니다.
"새로운 프로그래밍 언어를 익히자"
두 가지 언어를 새로 익히게 되었는데요. 첫 번째 언어는 코틀린입니다. 2019년에는 코틀린을 공부해서 업무까지 연결하고 싶었습니다. 회사 내에서도 코틀린 스터디가 많이 이루어져 덕분에 빠르게 공부하여 회사 프로젝트에서도 사용하게 되었습니다. 코틀린을 공부하면서 모던 언어의 특징들을 알게 되어서 좋았습니다. 특히 NullSafe를 타입을 통하여 이뤄낸 것은 굉장히 흥미로웠습니다.
두 번째 언어는 스칼라입니다. 5월 즈음 팀 이동을 하게 되면서 이동한 팀이 스칼라를 주로 사용하는 팀이라 덕분에 스칼라도 공부를 하게 되었습니다. 스칼라를 공부하면서 함수형 프로그래밍을 좀 더 깊게 이해하게 되었습니다. 커링, 펑터, 모나드 등등 새로운 개념들을 알게되어 스칼라라는 언어를 왜 지금 공부하게 되었을까라는 아쉬움도 있었습니다. 좀 더 빨리 스칼라를 써봤다면.. 지금은 스칼라를 메인으로 사용하고 있습니다. 코틀린과 스칼라를 사용하다보니 자바에 대해 좀 더 깊은 이해를 갖게 되었습니다. 물론, 자바의 syntax는 조금 뒤쳐졌구나..라는 생각도 하게 되었죠..ㅎㅎ 새로운 프로그래밍 언어를 접하게 될 때 마다 각 언어의 철학도 같이 접하다 보니 코드에 대한 Insight가 넓어졌습니다. 새로운 프로그래밍 언어를 공부하는 것은 꼭 추천드리고 싶습니다. 2020년에는 스크립트 언어를 공부해볼까 합니다.
"기술 서적 5권 이상 읽기"
2019년에 읽었던 책 리스트입니다. 한 해를 보내다 보니 꽤나 많은 책을 읽었더라구요. 2020년에는 좀 더 높게 잡아야 겠습니다. ㅎㅎ
- 객제지향의 사실과 오해
- DDD Start! 도메인 주도 설계 구현과 핵심 개념 익히기
- Kotlin In Action
- Programming in Scala 3/e
- Optimizing Java(자바 최적화)
- Apache Kafka 카프카, 데이터 플랫폼의 최강자
- 스파크 완벽 가이드
- Akka 코딩 공작소
이중에서 객체지향의 사실과 오해와 Akka 코딩 공작소는 정말 재미있게 읽었던 것 같습니다. Akka같은 경우는 회사에서 진행하는 새로운 프로젝트에 사용하게 되었는데요, 프레임워크를 정말 잘 만들었다라는 생각이 들었습니다. 많은 프레임워크를 사용해 보진 않았지만, Spring Boot 다음으로 좋아하게 돼버렸습니다. 어쩌면 Spring Boot 보다도 좋아하게 될지도 모르겠네요..ㅎ
위의 두 가지 외에도 쿠버네티스 환경, Micro Service Architecture에서 API Gateway의 역할, OAuth2.0 등등 많은 것 들을 접하고 공부하게 되어 개인적으로 폭발적인 성장을 하지 않았나.. 감히 말해봅니다. (현재 일하는 팀이 플랫폼을 개발하는 팀이라서 자연스럽게 공부하게 된 개념들이 많았습니다. 올해의 MVP는 플랫폼팀에 드리도록 하겠습니다. 끼룩)
직업 의식
개인적으로 저는 개발자라는 칭호 보다는 소프트웨어 엔지니어라는 칭호를 더 좋아합니다. 개발자는 단지 주어진 기획서에 맞춰 기능을 만들어내는 역할이라면 소프트웨어 엔지니어는 현실에서 불편한 점들을 능동적으로 찾아 어떻게 하면 해결할 수 있을지 고민합니다. 거중기를 만드신 정약용을 떠올릴수 있죠. (개인적으로 좋아하는 엔지니어 입니다.)
"어느 분야든 엔지니어는 끊임없이 학습해야 합니다." 조금 과한 것 아니냐 할 수도 있지만 저는 술을 먹은 날에도 30분~1시간정도는 학습을 하고 잠자리에 들었습니다. 학습이 습관이 되다보니 하지 않은 날에는 뭔가 찝찝한 기분이 들더군요.. 엔지니어라는 직업을 갖게 된 지 얼마 안되었을 때에는 친한 형들과 가끔 이런 얘기를 나누곤 했습니다. "이거 행복하려고 사는데 가끔은 끊임없는 공부가 너무 스트레스다. 직업 잘못 선택한 것아니냐!!", 이런 푸념들을 안주삼아 술을 마시곤 했는데요. 많은 글들을 읽고 다른 여러 훌륭한 소프트웨어 엔지니어분들의 가치관을 찾아보다 보니 "프로"와 "아마추어"는 직업의식이나 가치관을 얼마나 확실하게 갖고 있냐 차이가 컸던 것 같습니다. 얼마나 잘하냐는 결국 얼마나 꾸준함을 갖고 앞으로 나아갔냐를 통해 만들어지는 것 같더군요. 물론 가끔 엄청난 천재가 등장하곤 하지만 정말 드문 경우입니다. 드문 경우를 제외하고는 꾸준한 사람이 결국 프로가 되는 것 같습니다.
도메인 변경
처음 회사에 입사했을 때 정산 시스템을 개발하는 팀으로 들어가게 되었습니다. 10개월 정도 정산 시스템을 개발하면서 기술적으로는 SQL 튜닝, 데이터 모델링, 추상화, 배치 어플리케이션에 대해 익히게 되었고, 도메인적으로는 회계, ERP 시스템등에 대해 알게 되었습니다. 짧은 시간이라 도메인을 깊이 있게 이해하진 못했지만 정산을 하는 방식, 정산시스템에 필요한 데이터들을 알게 되었습니다. 개인적으로 정산된 금액을 지급하는 기능을 만들었을 때가 제일 재밌었던 것 같습니다. 이 때 처음으로 Grpc를 이용하여 통신하였는데 새로운 기술을 접할 때는 항상 설레더군요. 재미있는 에러도 났었는데 금액을 보낼때 21억을 넘기면 안됐었습니다.. van사에서 int가 32bit였었기에..
이후에는 도메인 지식보다는 기술에 deep diving 하고 싶어 플랫폼팀으로 전배 신청을 하게 되었습니다. 회사에서 팀 이동이 자유로운 것은 아니었지만 고민 끝에 결정을 내리게 되었습니다. 플랫폼팀에서는 API Gateway, OAuth2.0표준에 따른 타사 인증관리 등등을 담당하게 되었습니다. 2020년에는 메시징 시스템 개편, 대기열 관리등을 할 것 같아 더더욱 설레는 해를 맞이하게 되었습니다. 플랫폼 팀이다 보니 데이터 모델의 복잡성 보다는 조금 더 어플리케이션에 초첨이 맞추어져 있었습니다. 로그를 어떻게 남길 것인지 Edge 케이스들은 어떻게 커버할 것인지 고민하게 되었습니다. API Gateway를 개편할 때는 여러가지 패턴을 공부하며 적용했습니다. 서비스간의 장애를 격리 시키기위해 Bulk Head패턴을 적용하기도 했으며 Circuit Breaker를 도입하진 못했지만 fault tolerance한 시스템이 되도록 2020년 백로그에 적어 두었습니다.
좋은 공부란?
2019년에는 대부분 프로그래밍 언어와 아키텍쳐, 여러 프레임워크의 동작 방식을 공부하였습니다. 공부를 하다보니 느낀점은 "아 이런 것들은 아무리 공부해도 끝도 없겠구나"라는 생각이 들었습니다. "도구들은 특징과 그 도구를 사용하면 효율적인 도메인은 어떤 도메인인지 정도만 알아두고 필요할 때 공부하면 되겠다"라는 큰 교훈을 얻었습니다. 2020년에는 이런 도구들에 대한 공부 비율을 낮추고 개발 방법론, CS 기초 복습, 아키텍쳐등을 학습하는데 시간을 더 많이 투자하려고 합니다. 도메인 주도 설계, 객체지향, 함수형 프로그래밍, 유닛 테스트, 멀티 CPU 환경에서의 프로그램 동작 방식, 리액티브 시스템, 데이터 모델링을 공부하는데 힘을 쏟는 해가 될 것 입니다.
참고
선배님들의 어록 정리
시니어 엔지니어 혹은 팀장님이 좋은 말씀을 많이 해주셨는데 그 중 가슴에 확 와닿는 여러 말들이 있었습니다.
"public method 선언을 신중히해라"
이전에는 class에 public method를 선언하는 것을 크게 개의치 않게 생각하며 코드를 작성해 나갔습니다. 하지만 class에서 public 접근 제어자를 입력하는 순간 다른 시스템에 API를 하나 제공하게 되는 것 입니다.(API란 Application Programming Interface의 약어로 어떠한 기능을 다른 응용프로그램에 제공하기 위한 인터페이스입니다. REST API를 이용하여 네트워크를 통해 기능이나 정보를 제공 받을 수 있고, 라이브러리 의존성을 추가하여 메모리에서 기능을 제공받을 수도 있습니다.)어느 한 곳에서 나의 public method를 사용하기 시작하는 순간 이 메서드는 이제 변경하기 어려운 메서드가 됩니다. 메서드의 시그니처는 인터페이스가 되고, 이를 수정하려면 하위 호환을 지켜야 하기 때문에 기존에 제공하던 기능에 변함이 없어야합니다. 즉, Open Closed Principle(개방 폐쇄 원칙)이 적용되어야 합니다.
"edge case를 최대한 많이 생각해보자"
어플리케이션을 개발할 때는 장애 포인트를 최대한 줄이도록 노력합니다. 그러기 위해서는 해당 기능을 제공할 때 최대한 많은 경우의 수를 생각하고 테스트 코드를 작성해야합니다. 테스트 코드를 작성하다보면 edge case를 계속 생각하게 되더군요.
"cache 데이터는 expire time을 지정하고 건드리지 마라"
cache 데이터를 조작 하는 순간 수 많은 장애 포인트가 열리기 시작합니다. 웬만하면 성능을 위해 데이터를 caching할 때는 expire time을 꼭 지정하여 caching하고 자연스럽게 메모리에서 지워지도록 합니다.
참고
"라이브러리를 만들 때는 외부 라이브러리의 의존성을 고민해보자"
이것은 예를 드는 것이 제일 좋을 것 같습니다. 만약 라이브러리에서 로그를 찍어야 한다면 slf4j의 구현체인 logback이나 log4j같은 것들은 의존성에 추가하지말고 slf4j에만 추가한 후 scope를 runtime으로 구성하는 것이 좋습니다.
"꾸준함이 중요하다"
위에서도 언급했지만 어떤 분야든지 꾸준함이 가장 중요한 것 같습니다. 하루에 하나의 chapter, 10 ~ 20page, 한개의 article등등 꾸준히 보며 한 해를 보내다 보니 어느 덧 8권의 기술서적을 읽게되었고, 수십개 혹은 백개 이상의 article들을 본 것 같습니다. 앞으로도 더 성장할 수 있는 여지가 많기에 2020년에도 이 꾸준함을 지키기위해 많은 노력을 할 것입니다.
"인생은 곱셈이다. 내가 제로라면 어떠한 모든 기회도 제로가 된다"
저희 어머니 박여사의 말씀입니다. 제 인생의 큰 좌우명입니다.
이상 코딩하는 오징어의 2019년 한 해를 돌아보며 정리한 글이었습니다. 2020년에는 10권의 기술서적을 읽는 것이 목표입니다. 영어공부는 덤!! ㅎㅎ 이글이 독자에게 동기부여가 되는 글이 되기를 바라며 글을 마무리 하겠습니다. 모두 새해복 많이 받으세요!
'My Diary' 카테고리의 다른 글
2021년 목표 정리 (0) | 2021.02.07 |
---|---|
2020년 회고록 (3) | 2021.01.03 |
2020년 해야할 일들 (0) | 2020.01.01 |
신입 백엔드 개발자가 되기까지의 여정 (73) | 2018.07.07 |
스마일게이트 서버개발캠프3기 후기 (20) | 2018.02.24 |