주니어 개발자의 2022년 회고

    0. 2022년을 돌아보며

    올 한해는 내가 처음으로 개발자의 커리어를 시작한 해다. 2022년 안에 개발자가 되지 못하면 포기하고 다니던 회사를 그대로 다니겠다고 혼자 생각하고 있었었다. 그러다가 우연스럽게 찾아온 기회에 계속 운이 따라서 결국에는 개발자로 다시 커리어를 시작할 수 있게 되었다. 

    남들보다 늦은 나이고 나는 비전공자이기 때문에 전공자들이 노력했던 것만큼은 노력해야 그들을 따라갈 수 있다고 생각한다. 그런 이유 때문에 다른 사람들에 비해 마음의 여유가 없는 것은 사실이다. 그런데 내가 선택한 길이기 때문에 늘 그랬던 것처럼 어떻게든 버텨서 따라가는 수 밖에 없다고 생각한다. 중요한 것은 꺾이지 않는 마음! 

    개발자가 되기 전에 내가 항상 고민했던 것은 국비학원, 부트캠프를 다니지도 않는 나를 뽑아서 써야 하는 이유에 대한 것이었다. 전공으로 4년을 공부한 사람들은 언급할 수 조차 없다. 당장 하루에 10시간 넘게 투자하며 '전업'으로 국비학원, 부트캠프를 다니는 사람들과 비교했을 때, 나는 그들보다 뭐가 뛰어나다고 어필할 수 있을까? 나는 취업을 한 후에도 그 해답을 찾지 못했다. 아마 나를 채용한 분들만 알고 계시겠지. 

    앞으로는 이제 내가 스스로 증명해야만 하는 길들만 남아있을 것이다. 누구도 만들어 주지 않기 때문에 스스로 만들어 가는 수 밖에 없다. 앞으로는 내가 한 해를 살아왔던 것들을 정리하면서 그 다음은 어떻게 살면 좋을지를 한번 정리해보고자 한다. 

     

     

    1. 수강한 강의

    나는 강의에 돈을 많이 버린 사람이다. 강의 콜렉터 같은 사람인데, Fxxx xxxx에서는 무려 100만원이 넘게 강의를 사고 5강이라도 들은 강의가 아무것도 없다. '오~~~ 개 싼데' 이 생각으로 샀다가 회사 좋은 일만 했었다. 저 돈으로 치킨 사먹었으면 100마리는 사먹었을텐데 말이다. 

    • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
    • 스프링 핵심 원리 - 고급편
    • 실전! 스프링 부트와 JPA 활용 1- 웹 어플리케이션 개발
    • 실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화
    • 실전! 스프링 데이터 JPA
    • 스프링 DB 1편 - 데이터 접근 핵심 원리
    • 스프링 DB 2편 - 데이터 접근 활용 기술
    • 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security
    • 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
    • 우리를 위한 프로그래밍 : 파이썬 중급
    • 고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 

    2022년 취업을 준비하며 나는 위 강의들을 모두 수강했다. 처음에는 코딩 자체가 처음이었기 때문에 어떤 강의를 들어도 항상 어렵고 힘들었다. 이걸 쓰면 좋다고는 하는데, 다른 것들을 써보지 않았기 때문에 왜 좋은지 몰랐다. 그리고 이걸 왜 여기에 사용하는지 조차도 감을 잡을 수 없었다. 그런 나에게 김영한님의 강의는 아주 큰 도움이 되었다. 

    김영한님의 강의는 약간은 깊게 들어가는 편이지만, 그 깊이는 코드 레벨까지는 들어가지는 않았다. 그렇기 때문에 그 강의는 처음 코딩을 시작하는 나에게는 코딩의 세계에 좀 더 쉽게 접근할 수 있도록 도왔다. 아마 코드 레벨까지 깊게 들어갔다고 하면 나는 분명히 코딩을 포기했을 것이다.

    김영한님의 강의는 코드 레벨보다는 특정 프레임워크, ORM이 생성되기 까지의 추상화 과정들을 알려줬다. 이 강의를 들으면서 나는 '추상화'라는 개념에 조금쯤은 가까워 질 수 있는 사람이 되었던 것 같다. 물론 지금 '그렇게 해봐!'라고 하면, 물론이지만 나는 그렇게 할 수 없다. 그렇지만 추상화의 필요성에 대해서 알고, 필요한 경우 조금씩 추상화를 고려한 구조를 짜볼 수는 있게 된 것 같다. 

    정수원님의 스프링 시큐리티, 스프링 배치 강의는 또 다른 의미로 나에게 큰 도움이 되기도 했지만 나에게는 아주 큰 고통스러움이기도 했다. 기본적으로 이 분의 강의는 개당 40시간쯤이 필요하다. 쉽게 말해서 3학점짜리 수업이나 다름 없었는데, 회사를 다니면서 시간을 쪼개서 공부하는 나에게는 분량이 너무 너무 방대했었다. 

    더군다나 김영한님의 강의 스타일에 익숙해져 있던 내가 정수원님의 강의를 처음 접했던 순간은 '고통' 그 자체였다. 정수원님은 프레임워크의 블랙 박스의 구조를 코드 단위로 설명하는 강의를 한다. 그런 강의를 처음 들어본 나에게는 그 시간들이 너무나 고통스러웠다. 

    스프링 시큐리티, 스프링 배치는 오픈소스로서 많은 사용자들을 확보하고 있는만큼 좋은 구조를 가지고 있을 것이고, 좋은 코드를 가지고 있을 것이다. 그렇지만 내 실력이 그것에 미치지 못했다. 그래서 코드를 이해할 수 없었고 구조도 이해할 수 없었다. 

    스불재

    처음에 나는 다른 사람들과의 차별점을 두기 위해 '스프링 시큐리티, 스프링 배치까지 공부해봤다!'라는 내용을 어필하고 싶어서 이 강의를 시작했었다. 지금 생각해보면 정말 어리석은 생각으로 시작을 했었고, '스불재'라는 말이 있듯이 스스로 불러온 고통 속에서 제법 긴 시간을 보냈었다. 지금 생각해봐도 정말 힘들었었다.

    그렇지만 나중에는 결국 이 시간이 나에게는 좋은 양분이 되었다. 이 때, 오픈소스의 내부 코드를 뜯어보는 방법을 의도하지 않게 간접적으로나마 배울 수 있었다. 이 덕분에 취업 준비를 할 때, 스프링의 궁금한 부분을 직접 뜯어보기도 했었고 면접에서도 자랑스럽게 스프링 MVC 구조를 혼자 20분은 떠들어재꼈다. 그리고 지금 공부하고 있는 Kafka Streams의 내부구조도 혼자 끊임없이 뜯어보고 있다. 

    물론 내가 다른 사람의 코드를 잘 읽고, 구조를 빠르게 파악하냐?라고 하면 그렇지는 않다고 생각한다. 그렇지만 그 때의 경험이 있기 때문에 남들보단 느리더라도 한 걸음씩 구조를 파악해나가고, 다른 사람들에게 설명할 수 있을 정도로 이해를 하는 능력을 갖추게 되었던 것 같다. 

    인프런의 파이썬 강의도 수강을 했었다. 이것은 전 회사를 다닐 때, 웨이퍼의 시각화를 하는 프로그램을 작성하고 있을 때 수강했었다. 당시에 Interpolation을 이용해서 많은 점을 생성하고 Matplotlib으로 미리 작성해둔 Template에 동적으로 Wafer의 구배를 나타내는 프로그램을 작성하고 있었다. 그런데 Matplotlib이 싱글 쓰레드 기반으로 동작하는 것이 너무 오랜 시간이 걸린다고 생각했고, 이 부분을 개선하고 싶어 어슬렁 거리다가 '파이썬 병렬 프로그래밍'을 공부해보자는 생각에 저것을 공부했었다. 

    머..멀티 버스?

    저 강의를 듣고 멀티 프로세싱, 멀티 쓰레딩을 직접 적용해보았으나 결국은 뭘해도 느리니 싱글 쓰레드로 하자! 라는 결론을 냈었다. 똥인지 된장인지 직접 찍어먹어본 과정이었으나 결국에는 이 과정도 면접에 도움이 되었었다. 당시에 파이썬에서 멀티 쓰레딩은 쓰지 않는다는 것이 의아했었다. 이것 때문에 출발한 것이 GIL이었고, GIL에서 GC까지 넘어가게 되었다. 정말 운이 좋게도 GIL에 대한 질문을 받았었는데, 덕분에 잘 대답할 수 있었던 것 같다. 사랑해요 인프런! 

     

    • 대세는 쿠버네티스 (초급 ~ 중급)
    • 대세는 쿠버네티스 (Helm 편)
    • 카프카 완벽 가이드 - 코어 편
    • 카프카 완벽 가이드 - 커넥트 편 

    위의 강의는 내가 회사에 입사하고 업무를 위해서 수강한 강의들이다. 지금 하는 일들은 쿠버네티스 기반으로 카프카 생태계의 프로그램을 배포하는 작업을 한다. 개인적으로는 데이터 엔지니어들을 위한 플랫폼을 만드는 작업을 한다고 생각한다. 물론 성숙화 된 프로젝트고, 이미 계신 시니어 엔지니어분들이 너무 잘하시기 때문에 내가 할 수 있는 일은 제한적이다. 

    운영은 조상님이?

    이미 다 만들어 졌다고 하더라도 운영은 조상님이 해주지 않는다. 아무래도 나는 운영에 좀 더 치중될 수 밖에 없다고 생각을 하는데, 운영에 도움이 되려면 개발 할 때 못지않게 내용을 잘 파악하고 있어야 한다고 생각했다. 아무튼 그런 생각 때문에 위 강의들을 수강했었다. 

    쿠버네티스 강의를 여러 개를 사서(사비 -_-) 수강을 했었는데, 개인적으로 가장 도움이 되었던 강의는 위의 강의라고 생각한다. 무엇보다 내 공부 스타일에 잘 맞았었는데, 쿠버네티스의 전체적인 부분을 상세하게 같이 한번씩 훑어볼 수 있는 강의였기 때문이다. 이 강의를 들으면서 쿠버네티스의 네트워크 부분을 좀 더 자세히 들어볼 수 있었다. 이 때, tcp dump라는 것을 이용해서 네트워크 패킷을 주고 받는 실습까지 함께 했었는데, 나는 저런 도구가 있는지도 전혀 모르고 있었다. 덕분에 '이렇게 ~ 이렇게 가요~'라는 추상적인 내용들을 실제로 보고 익힐 수 있어서 좋았다. 

    좀 더 자세히 알아보고 싶어서 커피고래님의 블로그에서 좋은 번역글들을 보면서 컨테이너 - 파드 - Node 간에 어떤 구조로 네트워크 데이터가 라우팅 되는지들을 공부 해볼 수 있는 기회가 되었다. 물론 지금은 기억이 가물 가물해서 누구에게도 설명할 수 없는 상태가 되었지만, 필요할 때 다시 살펴보면 되지 않을까? 라는 생각을 한다. 

    쿠버네티스를 공부한 후에는 패키지 관리 시스템인 Helm을 공부했었다. 사실 Helm은 이렇다 할 강의도 없고, 책도 없어서 공부하기가 어려웠다. 기본적으로 한번 훑은 후에 필요한 것들만 DOCS에서 그 때 그 때 공부하는 형식으로 접근하고 있다. 

    이후에는 카프카 생태계를 공부하고 있다. 가장 먼저 권철민님의 카프카 코어 강의를 들었었는데, 이 강의를 듣고 약간의 자만이 생겼었던 시점이 있었다. 듣고 있는데 '응? 어렵지 않은데'라는 생각이 들었었거든. 코드 짤 양도 거의 없고, 아무튼 쉬운 것처럼 느껴졌었다. 그렇지만 최근에 드는 생각은 카프카는 코드를 짜는 것이 중요한 것이 아니라, 어떤 문제가 발생했을 때 얼마나 빠르게 대처할 수 있는지, 그리고 문제 없도록 구조를 짜는 것들이 중요하다는 생각을 하게 되었다. 

    아무튼 철민님 강의에서도 상세하게 알려주시지만, 이것만으로 어디가서 '카프카 할 수 있습니다'라고 이야기하기는 어렵다고 생각한다. 강의를 수강한 후, 점점 더 새로운 사실들을 알게 되면서 공부해온 것보다 공부할게 더 많이 남았다는 생각에 가끔은 절망스럽다는 생각도 든다. 그렇지만 수십 년의 시간으로 만들어진 프로그램을 1달 만에 공부해서 '다 아는데요?'라고 하는 것만큼 멍청한 일이 없다고 생각한다.

     

     

    2. 서적 공부

    • 자바 ORM 표준 JPA 프로그래밍

    이 책은 취업을 준비하던 시절에 공부했던 책이다. 당시에 영한님의 JPA 강의를 수강하고 약간의 자신감이 차 있던 시절이었다. 이 때 스스로 프로젝트를 작성하다보니 이런저런 문제들을 많이 맞딱드렸다. 그래서 결론은 '제대로 모르는구나'라고 생각하고 부랴부랴 구매했던 책을 펴서 하나씩 정리를 해나갔었다. 

    이 책을 공부했을 때 개인적으로 가장 큰 도움이 되었던 부분은 아이러니하게도 PK 생성 전략이었다. 당시에 '대용량 처리를 할 줄 알아야 한다!'라는 생각에 매몰되어 있었는데, 그래서 JPA를 이용한 Bulk Insert를 공부하고 있었다. 그런데 아무리 생각해서 실행을 해봐도 항상 내가 짠 코드는 너무너무 느렸다. 인터넷에 검색해보니 그것이 JPA가 가지고 있는 약점이라고 적혀 있던데 처음에 나로서는 무슨 소리인지 알 길이 없었다. 그래서 이 때 이것을 이해하기 위해 JPA의 PK 전략, JPQL의 쿼리 형태 등등을 하나씩 다시 정리해 나갔었다. 그리고 결론은 JPA또 약점이 있다는 것이었다. 

    JPA는 무적이 아니다

    나는 고급 기술을 잘 쓰기 위해서 공부를 했었으나 결론은 모든 고급 기술이 항상 좋은 것만은 아니라는 것이었다. 모든 기술에는 명과 암이 있고, 그것은 최근에 나온 기술이라고 해도 다르지 않다는 것을 이해하는 좋은 기회가 되었다. 

    • 그림과 실습으로 배우는 도커 & 쿠버네티스
    • Kafka Streams In Action
    • 카프카 스트림즈와 ksqlDB 정복
    • GIt 교과서

    입사 이후 나는 생전 처음보는 기술로 업무를 해야했다. 그래서 필요한 지식들을 서적을 이용해서 익히려고 했었고, 위의 책을 이용했었다. 

    도커는 귀여워 안 귀여웠으면..

    그림과 실습으로 배우는 도커 & 쿠버네티스 책은 정말 이해하기 쉬운 책이었다. 그렇지만 이해가 쉬운만큼 내용의 깊이는 얕았다. 처음 이 기술을 시작하는 나에게는 아주 적합한 책이었고 도커가 어떤 녀석인지는 대충 알 수 있었다. 필요한 부분, 예를 들어서 레이어 개념 같은 것들은 구글링을 통해서 필요할 때 마다 하나씩 익혀가는 작업을 해왔다. 쿠버네티스는 너무 얕은 내용이라 크게 도움은 되지 않았었다. 

    그리고 공부하면서 정말 힘들었던 Kafka Streams In Action / 카프카 스트림즈와 ksqlDB 정복을 한번씩 다 읽었다. 이 책이 어려웠던 이유는 기본적으로 카프카 스트림즈의 내부 구조를 정립해주는 과정이 없었기 때문이었다. 중간에 필요할 때 마다 '아! 잊고 말 안해줬는데 이게 이거야!'라는 식으로 단편적으로 지식들이 흘러나오는데 이런 부분들을 따라가기가 굉장히 어려웠다. 

    중요한 건 꺾이지 않는 마음

    또한 아직은 스트림 데이터 처리 관점에서 스파크, 플링크에 비해서 많이 사용되지 않는 기술이다보니 한글로 보기 쉽게 설명된 글도 없었고 영문도 마찬가지였다. 그래서 이 책을 공부할 때, 나는 필요한 부분들을 모두 디버깅을 하나씩 찍어가며 내부 코드를 뜯어가면서 카프카 스트림즈의 구조를 정리하는 짓을 시작했다. 지금도 현재 진행형이고, 아직도 스스로는 미친 짓이라고 생각하는 짓이지다. 누구 하나 시킨 사람 없지만 '먹고 살아야지'라는 생각에 꾸~준히 해오고 있다.

    그런데 이 미친 짓은 스스로가 생각한 올해의 큰 성장 중 하나라고 생각한다. 누구 하나 인정해주지 않고, 누구 하나 시킨 이 없고, 더군다나 미친듯이 느리지만 하나씩 오픈소스를 스스로 공부하고 있다. 덕분에 다른 사람들의 코드를 읽고 이해하는 것에 가까워질 수 있었다. 한 가지 더 나아가서 카프카라는 분산 시스템을 이렇게 뜯어보고 있으니 분산 아키텍쳐에서 레이스 컨디션을 피하기 위해서는 어떻게 코드를 작성해야 하는지에 대한 감을 조금쯤은 잡을 수 있게 되었다. 오픈소스 코드를 이렇게 혼자서 공부하는 일은 너무나 지치는 일이지만 앞으로도 꾸준히 해야겠다라는 생각을 했다. 

     

    3. 회사

    회사에서 나는 참 작아지는 존재다. 시니어 개발자들께서 나에게 믿고 일을 맡길 만큼의 내공이 있는 것도 아니고, 코드 생산성이 그렇게 빠른 편도 아니다. 그리고 업무에 필요한 인프라에 대한 제반 지식이 적기 때문에 하나를 할 때 마다 여러 개의 질문을 생성해낸다. 나는 스스로를 질문싸개라고 생각하고 있다. 

    개발 업계 자체가 도제식이라기 보다는 스스로 필요한 걸 스스로 공부해서 스스로 성장해야하는 업계라는 얘기를 귀에 피가 나도록 들어왔다. 그래서 오히려 나에게는 '질문을 하지 말아야 한다'라는 강박 관념이 생긴 것 같다. 항상 선배 개발자들에게 모를 때 마다 바로바로 질문하고 싶은 욕구가 차오르지만, 수십 번은 그 욕구를 참아내고 있다. 찾고 찾고 찾다가 안될 때 물어보는 일을 하고 있는데 너무 간단한 일이었던 경우가 많다. 최근에는 스스로가 만든 '질문 하지 말아야 한다'는 강박에서 조금쯤은 벗어나도 괜찮지 않을까 싶은데, 균형을 맞추는 것은 정말 어려운 것이라고 생각한다. 

    온콜 업무도 하고 있는데, 이것도 어려운 일이다. 내가 잘 모르는 부분을 계속 찾아서 처리해야하는데 할 때 마다 곤욕이다. 온콜을 하는 주만 되면 안 그래도 작아진 나는 더욱 더 작아진다. 도대체 언제쯤 인프라를 제대로 파악하고, '이건 이래서 문제입니다.' 라고 당당히 말할 수 있을까? 내일 당장 통일이 되는 것만큼 요원한 일이라고 개인적으로 생각한다. 그럼에도 불구하고 2023년 숙원사업이다. 

    잘못 일을 하나 벌린 것 같아 두렵기도 하다. 나는 내가 공부했던 내용을 정리해서 회사에 공유했었다. 그런데 그것이 '스터디'로 자리잡았다. 나야 원래 스스로 공부하는 부분이기 때문에 '스터디'로 만들어 졌다는 것이 부담스럽지는 않다. 부담스러운 것은 나로 인해서 원치 않는 다른 분들이 스터디에 참여하게 되는 불상사가 일어날까하는 부분이다. 

     

     

    4. 2023년은 

    2023년에 가장 먼저 해야할 일은 Java를 공부해보는 것이다. 나는 참 뭐 하나 제대로 공부해둔 게 없다. 특히, Java는 심각할 정도다. 그래서 많이 쓰는 언어지만 가장 모자란 Java를 공부해보려고 한다. 이를 위해서 자바의 정석, 이펙티브 자바를 모두 공부하려고 한다. 

     

    모니터링 시스템도 가끔씩 수정해야 할 필요가 있는데, 나는 PromQL이 어떻게 돌아가는지 모른다. 이 부분을 2022년에 어떻게든 공부해서 메꿔보고자 했는데 시작조차 못했다. 모니터링을 하지 못하면 봉사나 다름 없으니 봉사는 면해야겠다. 이 부분도 최대한 빨리 메꾸겠다. 

     

    운영에서 발생하는 모든 로그를 코드 레벨로 따라가는 일을 해보고자 한다. 내가 지금 하고 있는 오픈 소스 코드 공부는 그 자체로 오픈 소스의 구조를 파악하는데는 도움이 되지만, 실제 문제가 발생했을 때는 많은 도움은 되지 않는다. 오픈 소스 코드 공부도 '잘 알고 쓰자'의 일환으로 하는 것인데 이 분야에서는 문제가 발생했을 때 로그를 보고 문제점을 파악하고 원인을 해결하는 형식도 매우 중요하다고 생각한다. 앞으로는 오픈소스 코드보다는 문제 로그 → 오픈소스 코드로 추적하는 형식으로 공부를 해보고자 한다. 

     

    일을 주셔야 해볼 수 있는 것이지만, 하나의 시스템에서 약간 주도적으로 일을 해볼 수 있으면 좋겠다. 지금은 시니어들께서 짜둔 코드를 질문해보는 형태로만 하고 있다. 2023년에는 내가 작성한 코드에 대해서 리뷰를 받고, 부족한 부분을 빠르게 고쳐나갈 수 있는 기회가 조금은 있으면 좋지 않겠나 싶다. 물론 그러기 위해서는 내가 빨리 성장하는 수 밖에는 방법이 없겠다. 

    Jstack, GCP 같은 것들을 이용해서 Dump를 떠서 분석하는 방법을 조금쯤은 시도해보고 싶다. 한번 해보라고 했을 때, 갑자기 너무 큰 사이즈라서.. 지레 겁먹고 다른 방법으로 운이 좋게 해결한 적이 있었다. 2023년에는 이 일을 해보면서 저런 단위로도 문제를 추적해서 해결까지 해보면 좋겠다.

    댓글

    Designed by JB FACTORY