학습은 개발자의 숙명.. 그렇다면 해야할 것은?

많다 많아 정말 많아. 가지를 좀 치자

푸념 중의 푸념. 요새 기술이 너무 쏟아진다. 진심으루다가 너무 많다. 근데 막상 현실에서 내가 일하는데 필요한 것들은 몇 가지 없다. 어쩌면 적용해보고자하는 확신이 들 정도로 학습되지 못한게 많기 때문일 수 있다. 학습은 개발자의 숙명이라지만 나이가 들며 학습 시간이 가족과의 시간으로 대체되면서 물리적으로 예전만 못하다. 예전에는 그래서 이것저것 다 기웃 거려볼 수 있었지만, 이제는 좀 선택과 집중을 해야할 시기이다. 그러면 어떤 기준으로 공부해야할까.

과거에 학습은 그냥 유행하는 것, 주변에서 버즈워드 될 만큼 많이 이야기되는 것 위주로 공부를 해왔던 것 같다. 한 마디로 트랜디한 기술들 위주로 공부했던 것 같다. 그러다 보니 정말 나에게 필요한 기술인지에 대한 고민없이 흘러왔다. 물론 주변인들에게 듣는 기술들은 아무래도 같이 업무가 겹치는 분들이라 그런지 또는 얻어 걸린건지 괜찮은 학습결과를 보이기도 했다. 문제는 전혀 쓸일도 없고 하면서 흥미도 가지지 못한 것들이다. 이런 것들은 뺴야한다. 결국 학습 결과가 좋은 경우는 학습하고 현업에 사용하게 되는 경우다. 그래서 내가 살고 있는 서버 개발자 필드안에서 사용될 만한 기술들로 일단 좁혀보자. 여전히 이 범위는 광범위하다. 개인적으로 학습은 미래지향적이 빠지지 않았으면 한다. 어차피 공부하는 것이라면 선수 학습을 해보고 싶은 욕심을 지우고 싶지는 않다. 남들 보다 더 아는 것에 대한 욕심은 나름 학습 동기부여도 되기 때문이다. 자 이제 할일은 대강 그려진다. 학습거리를 선정하기 위해 내가 살고 있는 서버기술 동네의 흐름을 한번 그려보고 그에 따라 내가 앞으로 사용하게될 것들에 대한 예상을 해보고 내 학습 기준을 만들어보자.

이 바닥 구른지 벌써…경험과 뇌피셜로 생각해보자

과거의 경험에서부터 현재의 경험까지를 돌이켜 보자면 예전 서버기술이라함은 웹페이지를 서빙하는 기술인 웹기술들이었는데, 이 시기에는 물리장비 하나에 프론트/백이 모두 포함된 작은 웹서비스들이 많았다. 트래픽이 많은 서버들 역시 장비를 많이 idc에 늘려서 트래픽을 감당했던 걸로 기억한다. 이후 ajax가 퍼지면서 front/back이 나눠지고 이것이 웹개발자를 프론트개발자, 백엔드개발자로 나뉘어지는 계기를 가져왔다. 이때 ajax, jaxb, soap, rest 등등 api 지원하는 기술들을 공부했고 이후 servlet으로 불편했던 여러가지 필요 라이브러리가 묶이며 spring이 나왔었다. 지금까지도 롱런하면 계속 학습하는 Spring만 보더라도 기술은 항상 필요에 의해 만들어졌다. 앞으로의 흐름에서 어떤 것들이 필요할 것 같고 그에 맞춰 나온 기술들을 찾아봐야겠다는 생각이 들었다.

클라우드의 시대로 넘어오고 서버 인스턴스의 관리 기술들이 복잡도를 가지면서,DEVOPS와 SRE란 영역이 서버개발자 영역에서 분리되기 시작했다. 서버기술이 점점 전문성이 강화되는 방향으로 가고 있고 난 어플리케이션 레벨의 서버개발이 좋기 때문에 SRE영역의 학습은 좀 가지를 쳐도 되겠다. 하지만 DEVOPS 영역의 빌드/배포 관련해서는 개발과 떨어지기 어렵기 떄문에 관련 지식은 계속 습득해야한다. 빅데이터 / ML 역시 서버 개발자들에게 하나의 영역으로 다가왔지만 이것 역시 전문영역으로 빠져나가면서 다 쫓아가기에는 무리가 있어 어플리케이션 개발시에 필요에 따라 학습해야겠다는 정도로 생각하고 가지를 치자.

클라우드 덕분에 서버의 복잡도를 늘리기 쉬워지면서 MSA가 나왔다. 이로 인해 복잡한 서버 연결도를 관리하는 기술들이 쏟아지고 MSA에 효율적인 서버 아키텍쳐들과 프로그래밍 기술들이 쏟아지는게 지금으로 느껴진다. MSA로 인해 하나의 서비스에서 관리하는 서버의 양이 늘어나면서 복잡도 뿐 아니라 당연히 늘어나는 것이 비용. 클라우드가 유동적인 리소스 관리를 해주지만 하나의 서버안에서의 효율성 증대는 다른 이야기다. 이로 인해 나오는 프로그래밍 기술이 비동기 프로그래밍. 결국 지금 내가 한동안 껴안고 가야할 학습 영역은 아래 처럼 나눠질 것 같다.

현 시대에 따른 나의 학습 카테고리

  • 숲의 영역 : MSA 아키텍처 관련 기술군
  • 나무의 영역 : Application의 성능 향상을 위한 기술
    • 비동기 프로그래밍 :
      • Reactive : RxXXX를 통한 대부분의 언어를 커버하는 디자인이 가능한 장점
      • Coroutine : Rx보다 러닝커브가 작고 리소스 효율성 측면에서는 더 나을 것 같다, 단 Kotlin만 가능. (Go도 가능..Go 를 공부해야할까..고민)
    • 함수형 프로그래밍 : 비동기 프로그래밍은 결국 Thread Safe이 중요하기 때문에 순수 함수 / Immutable이 중요한 FP가 대세가 될 것 같다
    • 서버 프로그래밍
      • Webflux : Rx, Coroutine 두 가지 다 해야할까. 이것도 선택과 집중이 필요.
    • 서버 개발자 교양
      • GraalVM : Java로 만들어진 Virtual Machine. GraalVM 사용으로 성능이 개선되었다는 글들이 종종 보여. 관심이 간다. Java로 만들어졌으니 코드도 구경하자

그래서..결론은

호기심에 접근했던 다른 것들 보다 일단 위의 내용들부터 내가 만족할만한 수준이 될 때 까지 공부하려고 한다. 그리고 나서 ML이나 React/Flutter 처럼 호기심에 접근하는 것들을 해야겠다. 시간을 효율적으로 사용하기 위해 선택과 집중!. 그래서 요새 계속 보고 있는 Webflux부터 끝내자.

MSA와 비동기 프로그래밍의 시대 뒤에는 뭐가 있을까? 아마 0/1 바이너리 시대를 끝장낼 양자 컴퓨팅 관련 기술들이 나오지 않을까 생각한다. ML을 내가 공부해야할 영역에서 분리해냈지만, 앞으로 대부분의 서비스들이 AI관련 서비스로 변경될 것 같다. 이에따라 서버에서는 실시간 학습, 피드백이 필요해질 것이고 결국 양자컴퓨팅 기술과 거기에 연관된 확률성 프로그래밍의 시대가 올 것 같다. 아마 다음에 다시 학습 리스트를 짠다면 요것들을 포함하게 되지 않을까?

재택근무를 하면서 뭔가 학습이 흐지부지 되는 경향이 있는데 채찍질겸, 블로그 심폐소생겸 혼잣말 쓰기 끝.