내가 느낀 개발자의 현실
생각해보면 개발을 처음 시작할 때부터 지금까지 내가 개발을 잘한다고 생각해본 적은 단 한 번도 없었다.
알면 알수록 배워야 할 것들이 더 많아지고 아직도 가야 할 길이 멀다고 생각했기 때문이다.
깔끔하게 마무리를 잘하고 철수할 때마다 기분은 좋았지만 그 이후부터는 다시 또 원점으로 돌아가서
또 다른 문제와 씨름하며 정처없이 개발을 했다. 그렇다. 개발자는 멈춤이 없다. 문제해결의 순환고리를 계속해서 반복한다.
그게 개발자다. 내가 원하는 대로 문제가 원만하게 잘 해결된다면 좋겠지만 실상은 그렇지 않다.\
오히려 알 수 없는 문제들과 익숙하지 않은 문제들 그리고 더 깊이있게 공부해야 이해할 수 있는 것들로 가득찬 이 분야에서 진정 내가 할 수 있는 게 아무것도 없는 것일까? 아니다. 해야 하는 것들은 굉장히 많은데 할 수 없는 것들 혹은내가 감당할 수 없는 것들이라고 생각하기에 할 수 있는 게 없다고 느껴지는 것일지도 모른다.
나 같은 경우 학교에서 개발을 처음 배웠지만 그렇게 흥미를 느끼지는 않았다. 진정 내가 개발에 흥미를 가지기 시작한 시점은 오히려 졸업을 한 이후였다. 6년 전, 내가 가야 할 방향이 좀처럼 정해지지 않은 그 시점에 그래도 전공을 살려서 취업을 해보겠다고 코드를 끄적이는 과정에서 느낀 흥미, 그게 첫 시작이었다. 그 이후 국비 교육과정에서 팀장을 맡아 성공적으로 프로젝트를 마치면서 개발에 대한 자신감을 느꼈고 개발자에 대한 미래도 그려나가기 시작했다.
그때는 돈도 거의 없었고 경력도 없었다. 그저 코드를 작성하는 행위 그 자체에 집중했을 뿐이다.
솔직히 그 당시엔 그게 얼마나 대단한 건지도 몰랐다. 내가 알지 못하는 뭔가를 시도한다는 게 생각보다 쉬운 일이 아니라는 것을 요즘 들어서 절실하게 느끼고 있기 때문이다. 회사에 소속되어 있는 상태도 아니었고 그저 취업 준비하는 평범한 나그네에 불과했지만 코딩할 때만큼은 집중이 잘됐다.
뭔가 내 스스로 쓸모있는 일을 하고 있다는 느낌을 받았다. 6년 전에 국비 교육과정을 들을 당시 팀 프로젝트 경험이 아예 없는 것은 아니었지만 직접 팀장이 되어서 개발과 운영 등 전반적인 프로젝트 관리를 도맡아 진행한 경험은 그때가 처음이었다. 가진 것도, 능력도 부족했지만 그 순간만큼은 재밌었다. 첫 회사를 들어가고 2년 반 정도 지나 퇴사를 한 이후에도 개발을 손에서 놓지 않았다.
이직을 하기 위해 또 다시 공부했고 그 과정에서 자유롭게 코딩했다. 회사에서 배운 언어와는 다른 언어였지만 오히려 더 재미있었다. 뭔가 새로운 것을 배우며 신박함을 느끼는 내 자신을 보며 진정으로 이 길이 나의 길이 맞구나 하는 생각이 들었다. 하지만 정작 두 번째 회사는 개발자로 취업을 하지 않았다. 공백기가 길어지는 걸 원치 않았고 애자일 도구와 애자일 기반의 협업 문화를 어느 정도 경험하고 싶었기에 애자일 솔루션 파트너사의 솔루션 엔지니어로 취업을 한 것이다. 새로운 경험을 하고 싶었다.
개발 비중이 적은 엔지니어로 일하는 순간에도 개발에 대한 마음은 버리지 않았다. 그래서였을까? 사실 엔지니어는 나에게 맞지 않았다. 실력의 유무를 떠나 이전부터 계속해왔던 개발이 하고 싶었다. 그 개고생을 하면서 어떻게든 프로그램 완성을 위해 고군분투했던 그 순간이 좀처럼 잊혀지지 않았다.
결국 나는 두 번째 퇴사를 했다. 퇴사 이후에도 개발 공부는 계속했다. 하지만 어느 순간부터 나는 깨달았다. 정말 내가 개발자로 계속 살아가길 원한다면 정말 개발에 진심이지 않으면 안 되는구나 하는 생각이 들었다. 단순히 프로젝트를 진행하며 느낀 기쁨과 흥미만으로는 이 일을 오래할 순 없다고 생각했다. 깊이가 필요했다. 단순히 알고 모르고를 떠나서 여러 관점에서 시도를 해보며 지속적인 고민을 하는 습관이 필요하다고 느꼈다. 내가 어디에 소속되어 있는지는 상관없었다. 단순히 나 자신을 'xxx의 개발자입니다', 'xxx에서 근무하는 백엔드 개발자입니다'라고 정의한다면 오히려 개발을 더 오래 못할 것만 같았다. 취업은 취업이고 개발자로서의 정체성은 어느 정도 지켜야한다고 생각했다.
회사를 다닐 때 또는 그렇지 않을 때와 무관하게 '나는 이러이러한 사람이다 혹은 이러이러한 개발자다'라고 말할 수 있는 확신과 자신감이 더 중요한 것은 아닐까?
요즘에는 개발자로 취업하기 위해 여러 기술스택들을 많이 공부한다. 생성형 AI 덕분인지 몰라도 점점 더 학습해야 하는 기술들은 늘어가는 추세다. 특히 Java/Kotlin, Redis, MSA, Kafka, Kubernetes, WebSocket, ElasticSearch 등의 기술스택은 어디에서나 볼 수 있다. 그 외 TypeScript, NextJS, ReactJS, Vue.js, QueryDSL, JPQL, Spring Batch, Spring Boot, Grafana, Prometheus 등 정말이지 요즘 개발자 취업 시장은 그야말로 춘추전국시대만큼이나 힘들고 혼란스러운 시기라고 본다. 하지만 저 많은 기술스택을 어떻게 다 습득하고 익힐 것인가.
풀스택 개발자가 말이 쉽지 누구나 풀스택을 할 수 있는 것은 아니다. 그리고 설령 풀스택을 한다 하더라도 단순히 취업을 하기 위해 풀스택을 한다면 장담하건대 오래가지 못할 것이다. 돈을 벌기 위해, 취업을 하기 위해 개발자가 되기로 했다면 그 마음가짐 다시 한 번 되돌아보라고 말해주고 싶다. 뭔가를 시작할 때는 항상 과정과 우선순위가 있다. 지금 내가 개발하고 있는 게 무엇이고 또 어떤 걸 개발하기로 마음먹었다고 한다면 일단 기획과 설계부터 잘해야 한다. 모든 기술스택이 다 필요한 것은 아니다. 그리고 그 기술들을 일일이 다 공부할 시간도 없다. 물론 공부해야 한다면 당연히 그 시간을 확보하는 것이 맞다. 하지만 가장 중요한 건 나에게 필요한 기술스택을 취합선택하는 능력이 아닐까?
예를 들어 쿠팡이나 G마켓 같은 e-commerce 서비스를 하나 만든다고 가정해보자. 그러면 나에게 필요한 게 무엇일까? 프로젝트를 진행하기에 앞서 무엇을 해야 할까? 다짜고짜 코드부터 작성하는 게 아니다. 개발을 하는 과정에서 기획과 설계를 병행하는 건 정말 바보같은 짓이다. 실패를 하기 위해 프로젝트를 하는 경우는 어디에도 없다. 근데 그런 경우를 창의적으로 만들어낸다면 그것 또한 신박한 성과라고 할 수 있을지도 모른다. 하지만 그건 성과가 아닌 대형사고다. 뭔가를 시작할 때는 항상 절차와 컨벤션 그리고 계획이 있어야 한다.
무엇보다 개발자의 입장이 아닌 사용자와 고객의 입장에서 기능 개발과 설계를 해야 한다. 도메인 주도 설계가 괜히 있겠는가?
e-commerce 서비스는 기본적으로 사용자, 오더, 장바구니 등 여러가지로 고려해야 할 것들이 있다. 추가적으로 결제 기능도 필요할텐데 그렇다면 이러한 기능들을 구현하기 위해 우선적으로 생각해야 할 게 무엇일까? 여기에 대한 고민을 문서화를 통해 구체화시켜 나가는 게 첫 번째다. 개발 일정, 요구사항 정의서, 테스트 계획서, API 명세서, 프로젝트 관리 등 프로젝트 진행을 위한 체계를 어느 정도 갖출 수 있어야 한다.
그렇게 체계를 갖추는 과정에서 필요한 기술스택이 무엇인지에 대해 하나 둘 고민한다. 단순히 Java가 익숙하니까 Java로 해야겠다가 아닌 왜 Java를 선택했고, 왜 Redis를 썼는지에 대한 구체적인 이유 정도는 누군가에게 설명할 수 있어야 한다. React나 Typescript를 다른 사람들도 많이 쓰니까 이번 프로젝트 때도 이걸 써야지가 아니라 왜 그 기술스택을 사용했는지에 대한 이유가 있어야 개발의 방향과 목적을 분명하게 정의할 수 있다. 정말 단순한 것처럼 느껴질지 모르지만 그렇지 않다.
실제로 현업에서 개발을 할 때 어떤 기술스택을 정하는지에 따라 프로젝트의 성공과 실패가 갈린다. 내가 예전에 현업에서 듣기로는 지속적으로 발생하는 에러 때문에 아예 기존 프로그램을 뒤엎고 다른 언어로 대체해서 다시 프로그램을 개발하는 사례도 있었다. 대중적으로 빈번하게 많이 사용하는 기술스택이라고 해서 어느 경우에나 적용되는 게 아닐 수도 있다는 점을 분명하게 알아야 한다. 취업을 잘하려면 MSA, Kafka, Redis 등 다양한 기술스택을 활용하지 않으면 안 된다가 아니라 어떤 서비스 개발을 목적으로 하는지를 먼저 생각한 다음에 해당 기술들을 적용하는 게 좋다고 생각한다. 단순히 대기업이나 중견기업 등 규모가 큰 회사들이 많이 사용한다고 해서 모든 경우에 다 적용되는 것은 아니기 때문이다.
개발은 어렵다. 그리고 나보다 개발을 잘하는 사람들은 너무나도 많다. 맨날 느끼지만 내가 개발을 제일 못한다고 느끼는 경우가 한두 번이 아니었다. 그러면 그때부터 머릿속이 복잡해진다. '개발은 역시 나의 길이 아닌가', '어차피 주목도 받지 못할 거 그냥 여기서 접을까', '개발말고 다른 일 하면서 먹고 살아야 할까', '난 천재도, 영재도 아니고 어렸을 때부터 개발을 해온 것도 아니니 어차피 뒤처질 거 무슨 의미가 있을까' 내가 처음 개발을 시작할 때만 해도 난 한참 늦었다고 생각했다. 하지만 지금 생각해보니 아니었다. 어쩌면 지금 개발을 시작하는 사람들 입장에서 볼 때 이미 늦었다고 생각할 수 있다. 하지만 이렇게 생각해보자. 경력이 있는 나도 지금 뭔가를 시도하고 도전하는 것이 쉽지는 않지만 포기하지 않았다.
이건 단순히 경력이 있어서 그런 게 아니라 상황을 인정한 결과다. 어차피 나보다 잘하는 사람들은 많은데 그것 때문에 후회해야 할 필요가 있을까? 한숨 푹 쉬어가면서 개발에 대한 온갖 부정적이고 피해망상적인 생각만 늘어놓으며 잘하는 사람들을 비난하는 게 뭐 그리 대단한 일이라도 되는가? 부족하면 더 노력해야 한다. 실력이 부족하다고 느껴진다면 더 열정적으로 임해야 한다. 만약에 그 열정마저도 채우지 못하겠다고 한다면
꾸준함이라도 채워나가기 위해 노력하자. 10분, 20분, 30분 어떻게든 집중하고 몰입하는 시간을 조금씩 늘려나가면서 내 부족함을 채워나가자. 내 스스로 재능이 부족하다고 느끼는 것만큼 바람직한 것도 없다고 생각한다. 누군가와 비교를 하기보단 그냥 내 루틴 지키고 내 것만 집중하자는 마음으로 하루를 살아가는 게 오히려 정신건강에 도움이 된다. 당장 실력이 늘지는 않겠지만 어느 순간 예전과 달라진 내 자신을 보며 만족할 날이
올 것이다. '나도 이 정도까지 할 수 있는 수준이 되었구나'하는 그 순간을 위해서라도 개발을 잘하기 위해 매순간 노력해야 한다.
실력이 부족하면 열정에 불을 붙이고 열정이 부족하다면 꾸준함의 기술을 연마하자. 결국 많은 시도와 도전이 뒷받침되지 않는다면 개발로 먹고 사는 삶을 오래도록 이어나가기는 어려울 것이다. 개발자의 수명이 단순히 대기업을 다닌다거나 중견기업, 좋은 회사를 다닌다고 해서 유지되는 것이라고 생각하진 않는다. 왜 그렇게 많은 퇴사자와 이직자들이 있는가? 그들 중에는 자신의 성장과 커리어를 위해 퇴사를 하거나 이직을 하는 사람들도 있겠지만 단순히 좋은 대우와 복지, 연봉이란 조건 때문에 행동하는 사람들도 있을 것이다. 개발은 어렵다. 그리고 개발자로 살아가려면 기본적으로 밥먹는 것처럼 개발이 익숙하게 느껴져야 한다.
개발자로서의 자유, 그것은 워라밸이 아닌 언제 어디서든 개발을 통해 다양한 문제를 해결하는 일상 그 자체를 말하는 것이 아닐까?