6/12/2024
필자는 지방에 거주 및 활동하고 있으며 개발과 관련한 전공은 전무한 개발자이다.
2020년에 약 8개월 간의 개발원 교육으로 개발을 배웠고 이후 취업하여 21년부터 활동을 이어오고 있다.
나름대로 개발 능력을 기르고자 끊임없이 공부하고 연구하고 이것저것 만들어보고 있지만 뭔가 근본적인 문제들이 해결되지 않고 있는 느낌이다.
회사생활을 하면서 협업하는 프로젝트가 전무하다. 대부분이 혼자 개발하고 구축해서 유지보수까지 맡아온 일들 뿐이다. 토이 프로젝트도 혼자 구상하고 혼자 풀스택으로 개발하고 있으니, 개발원 이후 팀 프로젝트에 참여해본 경험이 없는 상황이다. 그러다 보니 다른 개발자와 협업하는 환경에 대한 경험과 노하우를 쌓을 기회가 없었다.
첫 회사는 eGov프레임워크 기반에 고전적인 개발 환경을 가지고 있었다.
Spring framework, svn, ibatis
linux에 centos, tomcat 설치하여 연동하는 정도.
말미에는 직접 주도하여 vue.js를 활용하는 프로젝트가 만들어지기도 했지만 실험적인 케이스에 불과했고, 결국 선진화된 개발환경에 대한 갈증으로 이직하게 되었다.
이직한 회사는 얘기와 다르게 자체 구축 개발 업무 자체가 없는 상황이다. 각종 상용 시스템을 사들여 구축했고, 이들을 연동하거나 자체 커스터마이징 하는 정도이다.
심지어 각 시스템은 서로 언어, 프레임워크, 개발도구 등이 제각각이니 커스터마이징 개발을 하다보면 가끔씩 정체성의 혼란이 올 정도이다.
또다시 이직을 하거나 팀 프로젝트를 사이드로 하지 않는 이상 환경과 기술의 변화가 없을 것 같다. 하지만 둘 다 내가 하고싶다고 할 수 있는 것이 아니지 않은가..
기회가 오기까지 혼자서라도 할 수 있는 것이 있다면 최대한 해보는 방법이 있지 않을까?
그리하여 우선 내가 어떠한 것이 부족한지, 어떠한 것을 학습하고 훈련하면 좋을 것인지 분석해보는 시간을 가져보았다.
여러 기업들의 기술 블로그, 채용 공고에 적힌 우대사항 등을 살펴보며 개발자로서(특정 도메인이나 기술의 전문가 관점보다는 범용적인 관점에서) 내가 부족하고, 채워가야 한다고 생각한 것들을 나열해 본다.
사실 이것은 혼자서는 도저히 도달할 수 없는 부분이 있다는 것을 부정할 순 없을 것이다. 그나마 내가 할 수 있는 것은 협업에 사용하는 툴을 찾아보거나 사용해 보는것, 최대한 협업하는 사람이 있다고 가정하고 고려하며 아키텍처를 구상하고 코드를 작성하는 것이 아닐까 싶다. 그래도 간간히 책이나 인터넷을 통해 협업 시 발생하는 문제와 해결법을 접했던 것 같다. 이제는 그러한 것들을 보면 좀 더 유심히 살펴보고 적어둬서 반복적으로 터득해놓자.
지금까지 개발해온 환경은 너무나 단순하다. IDE로 개발하고, github에 커밋/푸시, IDE로 빌드하고 빌드한 파일을 직접 SSH, FTP를 통해 서버에 업로드하고 실행한다.
단일 서버이고 혼자 개발하고 배포하는 환경이라서 더욱 그러할 것이다. 비록 현재 근무하고 있는 환경에서는 사용할 일이 없겠지만, 많은 개발 회사들은 이미 DevOps 환경이 중요하게 자리잡은 것 같다.
혹시 알까? 내가 터득한 것을 기반으로 나중에 근무하고 있는 환경을 변화할 수 있을지..
DevOps 하면 가장 먼저 CI/CD 라는 용어가 나온다. DevOps에 대한 개념과 함께 CI/CD에 대한 개념 학습을 해보자.
버전관리를 위해서 Git, Github를 사용하지만 빌드/테스트/배포 자동화를 위해서 사용되기도 하는 것 같다. 젠킨스와 함께 자동화, 무중단 배포 방법에 대해 학습해보자.
기술 블로그, 채용공고를 보면 많은 곳에서 도커 / 쿠버네티스를 활용하여 서버를 운영하고 있는 것 같다. 가상화와 관련한 것으로, MSA(Micro Service Architecture)와도 관련이 깊다. 꼭 학습해보자.
하나의 어플리케이션이 모든 기능, 서비스를 제공하는 모놀리식 아키텍쳐가 아니라 기능마다, 서비스마다 어플리케이션을 달리하여 유연하고 확장성 높은 마이크로 서비스 아키텍쳐가 트렌드인 것 같다.
개인 프로젝트에서라도 MSA로 설계하고 개발하는 것으로 터득 해보자.
동시에 MSA에서 많이 사용하는 Redis, kafka를 배우고 활용해보는 기회를 가져보길 바란다. 비록 용도와 목적에 비해 소소한 규모의 프로젝트겠지만 적용해보고 사용할 줄 알게 되는 것이 어디인가.
그리고 MSA에서 가장 중요한 stateless(무상태) 개념에 대해서 좀 더 알아보자. 보안과도 관련이 있어 보이니 정확하게 알아두어야겠다.
비전공자로써 매번 컴플렉스를 가지게 되는 부분이다. 물론 컴퓨터 공학이나 알고리즘을 잘 모르더라도 코딩을 잘 할 수도 있을 것이다. 실제로도 업무나 개인 프로젝트를 하면서 코드를 짜는 것에 어려움을 느낀 적은 거의 없다.(대부분이 그저 업무 프로세스를 코드로 구현하는 것 뿐이니..) 하지만 가끔씩 몇몇 기술이나 소프트웨어를 보면서 도대체 어떻게 구현이 된걸까 하는 궁금증이 생길 때가 있다. (예를들면 공동편집 에디터의 알고리즘, OCR이나 이미지와 관련한 기술, 게임이나 시뮬레이션에 사용되는 물리엔진 등) 이러한 것들은 인터넷이나 책을 통해 접해보기도 어렵고 그나마 알고리즘과 컴퓨터공학을 배우다 보면 가까워지지 않을까 싶다.
알고리즘은 많이 있는 문제 풀이 사이트를 통해 반복적으로 꾸준히 연습해보는 수 밖에 없어 보인다. 컴퓨터공학적 지식은 가능하면 전공 수업을 듣고 싶은데, 그나마 가능성이 있는 것이 방통대인 것 같다.
개발을 하면서 사용하는 언어, 프레임워크, 라이브러리 등에 대해 사실 완전히 정확하고 깊게 이해하고 있는 것은 아니다. 물론 나만 그러한 것은 아니겠지.. 하지만 얼마나 더 깊게 정확히 알고 있냐에 따라서 개발자의 레벨이 달라지는 것 같다.
우선은 본진인 Java, Spring, JPA(ORM) 등에 대해서 깊이를 늘려보자.
아직까지 트래픽이 많다거나, 대용량의 데이터를 처리하거나 탐색해야하는 케이스를 실무적으로 접해보진 못했다. 하지만 어디선가는 필요한 지식이며 언젠가는 맞닥뜨릴 일이 될 것이다.
실제로 많은 IT 서비스 업체는 이러한 경험과 지식을 필수적으로 요구하고 있으니 반드시 터득해야할 것이다.
다만, 지금 환경에서 어떻게 대규모 트래픽을 경험할 것이고 어떤 대용량 데이터를 어떻게 처리해볼 것인가?
우선은 트래픽 테스트를 할 수 있는 방법을 찾아보고, 트래픽 관련한 기술과 방법을 터득해 보아야겠다.
결국 모든 것은 공부이고 연습 뿐이다. 업무 현장에서 직접 몸으로 부딪히고 누군가 가이드 해주는 것이 아니라면 더 많은 시간과 노력을 쏟을 수 밖에 없는 것 같다. 그러면 언젠가 그러한 개발 환경과 가이드 해주고 내 코드를 봐줄 수 있는 누군가가 있는 곳에 합류할 기회가 오지 않을까?