개발자의 IT 회사 취업 오해 풀기 (쑤난ㆍ2025)
0. 들어가며
- 채용자는 똑같기만 한 부트캠프 이력서에 대해 불평을 한다. 반면 취업준비생과 주니어 개발자는 기술적 역량이 부족하다고 생각한다. 이들 사이에서 부트캠프와 온라인 강의는 교묘하게 마케팅을 한다.
- 코딩 능력이 부족해서 취업을 못하는 것이 아니다. 회사는 코딩 이상을 요구한다.
- 소프트웨어는 만들고 변경하고 확장할 수 있다. 개발의 끝은 완성이 아니라 끊임없는 업데이트의 시작이다. 업데이트를 통해 제품을 확장한다. 회사는 이를 위해 개발자를 채용한다.
- 주니어 개발자는 자신의 업무를 잘 만드는 것으로 오해한다. 그래서 강의를 듣고 기술을 배우는 데 집중한다.
- 회사가 원하는 포트폴리오는 IT 제품을 통해 기획, 개발, 운영, 유지보수, 확장하는 과정을 어필하는 포트폴리오이다. 주니어 개발자의 10%만이 이를 해낸다.
- 여러 기술을 불안해서 하는 공부는 그만둔다. 가장 필요한 것은 만들고자 하는 IT 제품과 개발자에 대한 깊은 이해이다. 이를 외면한다면 밑 빠진 물붓기이다.
1. 코딩을 넘어선 개발자
- 대부분의 주니어 개발자는 비즈니스에 필요한 특정한 기능을 구현하여 제품을 만드는 것을 개발이라고 오해한다.
- 소프트웨어 업데이트는 주로 운영과 유지보수에서 일어난다. 운영은 소프트웨어를 사용하면서 사업을 실천하는 과정이다. 유지보수는 소프트웨어에서 발생할 수 있는 문제를 개선하고 기능을 추가하는 과정이다. 개발이 완료된 이후에도 코드는 끊임없이 바뀐다.
- 소프트웨어는 업데이트를 할 수 있기 때문에 업데이트 한다.
- 기존 코드를 관리하는 유지보수가 프로젝트의 40% 이상을 차지한다. 주니어는 이를 간과하고 개발하면 끝이라 생각한다. 기능이 작동하는 코드를 만드는 것보다 중요한 것은 유지보수와 업데이트이다.
- 소프트웨어가 계속 바뀔 수 있다는 시각은 고객보다 회사에게 더 의미가 있다. 사용자가 경쟁사로 넘어가는 것을 막기 위해, 새로운 비즈니스 가치를 창출하기 위해 소프트웨어를 업데이트 한다. 고객에게 제공하는 가치를 끊임없이 개선할 수 있기 때문이다. 업데이트를 하지 않는 회사는 도태된다.
- 개발자의 일은 비즈니스에 기여하는 소프트웨어를 개발하고 이를 업데이트하며 확장하는 것이다. 90%의 주니어 개발자는 업데이트와 확장을 간과하고 기능 구현에만 집중한다.
- 확장성 있는 아키텍처가 필요한 이유는 기능을 추가하거나 변경하는 것을 용이하게 하기 위함이다. 소프트웨어를 쉽게 바꿀 수 있어야 지속적인 발전이 가능하고, 이는 곧 비즈니스의 성장을 가능케 한다.
- AI로 구현하는 것은 시작일 뿐이다. 비즈니스에 기여하고 소프트웨어를 확장하는 맥락을 이해하는 사람과 그렇지 않은 사람은 큰 차이가 있다. 중복 제거, 리팩토링, 디자인 패턴, 테스트 코드, CI/CD, 의존성 주입, DDD(Domain Driven Design), MSA(Microservice Architecture) 등 모두 같은 맥락에서 파생된 것이다.
- CI/CD는 일을 쉽고 빠르고 안정적으로 만들어 업데이트를 쉽게 한다. 테스트 코드는 안정성을 확보해 문제 없는 업데이트를 지원한다. 리팩토링은 코드의 구조를 간결하게 구성해 유지보수를 쉽게 만든다.
- 확장성 있는 설계는 생산성을 높인다. 같은 시간 동안 더 많은 기능을 구현하고 변경할 수 있다. 생산성이 낮은 개발자는 시간에 쫓겨 기능 구현에만 급급하다. 빨리 구현한 것처럼 보이지만 이후에 코드의 늪에 빠진다. 기능을 추가할 때마다 대단히 많은 시간을 소비한다. 프레임워크를 통한 기능 구현만이 개발자의 모든 것이라는 생각은 착각이다.
2. 현장에서 마주친 유지보수와 확장
- 처음에 간단한 개발을 한 이후 기능을 확장하면서 기존 코드를 복사하고 수정하는 방식으로 대응한다. 그러나 한 부분의 코드 수정이 다른 부분에 반영되지 않고, 에러가 발생할 때 코드 전체를 수정하는 일이 잦아진다. 생산성을 떨어뜨리고, 코드의 중복으로 인해 유지보수가 어려워진다. 기존의 방식으로 비즈니스 확장에 대처할 수 없다.
- 공통적인 부분을 컴포넌트화한다. 프레임워크는 공통 레이아웃 설계와 컴포넌트 개발을 강조한다. 이후 안에 들어가는 데이터를 바꾸어 기능을 추가한다. 수월하게 비즈니스 확장이 가능하다.
- 모바일 앱 로그인, 관리자 전용 웹 로그인, 웹 로그인 등 새로운 인증 방식을 추가하면서 분기를 사용하면 코드가 복잡해지고 많은 중첩과 복잡성이 발생한다. 상속과 오버라이딩을 적용하여 개선한다.
- 단순히 데이터를 저장하는 서비스는 CRUD를 지원하는 프레임워크로 빠르게 개발이 가능하다. 그러나 특정 상황에서 데이터베이스에 저장된 정보를 기반으로 새로운 기능을 추가할 필요가 생긴다. 알림, 문자 발송, 모니터링 등 요구사항이 발생할 때마다 조건문을 자연히 남발한다. 점점 코드는 길어지고 가독성이 떨어지며 유지보수가 어려워진다. CRUD 중심의 설계를 넘어 다양한 기능을 체계적으로 지원하는 구조가 필요하다.
- 서비스 아키텍처는 비즈니스 로직 처리를 담당하는 계층을 별도로 분리하는 접근이다. 비즈니스 로직은 회사와 사용자의 요구사항에 맞는 규칙과 데이터 동작을 정의하는 일이다. 데이터베이스는 정보 저장과 조회에 초점을 두지만, 비즈니스 로직은 저장 데이터를 활용해 특정 규칙과 조건을 처리한다. 확장성을 위해 데이터베이스 로직과 비즈니스 로직을 분리하는 서비스 아키텍처를 도입한다. 데이터베이스 로직과 비즈니스 로직은 서로 영향을 주지 안헥 되어 유지보수가 용이하다.
3. 일반 회사와 다른 IT 회사의 비즈니스
- 채용은 회사의 성장에 기여하는 사람을 뽑는 일이다. 성장을 이해해야 회사의 요구에 맞게 준비할 수 있다.
- 운영은 IT 회사만의 독특한 특징이다. IT 회사는 제품을 생산하고, 고객의 반응이 좋으면 그때부터 운영을 시작하여 확장한다. 제품이 만들어진 이후 모든 활동은 운영이다.
- 새로운 기능은 최대한 쉽고 빠르게 사용자에게 전달해야 한다. 개발과 운영이 분리된 상태에서는 이것이 어렵다. 애자일과 데브옵스는 이 프로세스 빠르고 유연하게 만들기 위해 도입되었다. 개발자는 사실상 개발과 운영을 함께 한다.
- IT 회사에서 커뮤니케이션을 강조하는 이유도 같은 맥락이다. 변경이 자유로우므로 기획도 수시로 바뀐다. 이에 따라 개발자는 끊임없이 기능을 추가하고 변경한다. 기획자와 디자이너의 의도를 정확히 파악하고 개발을 해야하므로 소통은 중요하다. 커뮤니케이션이 잘못 되면 전혀 다른 일을 할 수도 있다.
- B2C 회사는 핵심 소프트웨어를 운영하며 수익을 낸다. 소프트웨어를 만들어 파는 것이 아니다. 아무것도 없는 상태에서 가설을 세우고 설계를 한 후 개발하여 제품을 만든다. 고객의 반응이 좋으면 운영하고 확장한다. 대부분 비즈니스 모델은 검증되었다. 유지보수, 업데이트, 기능 추가를 통해 사업을 확장하므로 이를 위해 인력을 뽑는다. 유지보수와 업데이트 경험을 가진 개발자를 요구한다. 새로운 사업을 만드는 조직보다 이미 존재하는 기능을 업데이트하는 조직의 비중이 더 크다.
- 대부분의 취업 준비생은 유지보수와 업데이트 경험이 거의 없다. 이들이 학습하는 강의자료는 이상적인 코드만 보여준다. 그러나 실제 개발은 요구사항부터 명확하지 않다. 불확실한 상황에서 짧은 기간 안에 기능을 추가하고 유연하게 개발할 수 있어야 한다. 개발자로서의 경험과 실력은 언어와 무관하고, 라이브러리와 프레임워크에 대한 지식이 많은 것을 의미하지 않는다. 대부분의 신입 지원자는 프로젝트만 만들어 본 경우가 많아 경쟁 우위가 없다.
- 외주를 받아 일을 하는 프리랜서와 SI 회사는 제품을 만들어 팔아 수익을 낸다. SI 회사에서 소프트웨어를 업데이트하며 개선하는 경험을 전혀 할 수 없다. 확장의 경험이 없다. 급박한 일정에 생산하니 아키텍처에 신경쓸 겨를이 없다. 일정 막바지에 코드를 우겨넣고 제품은 엉망이 된다. 소프트웨어 개발의 흐름을 이해하고 경험할 수는 있다. 그러나 개발자로서 성장하고 이직을 위한 능력은 갖추기 어렵다.
4. 그래서 어떻게 취업을 준비하는가
- 금리 인상과 경기 위축으로 채용 수요는 감소한다. 사실 개발자 수요는 많다. 다만 경력직을 선호한다. 개발자의 실력에 따른 성과 차이가 굉장히 크기 때문이다.
- 문제에 대한 해결방법은 다양하다. 문제를 창의적으로 해결할 수 있는 괜찮은 사람에 대한 수요는 높아지고, 신입 개발자에 대한 수요는 그렇지 못하다. 회사는 신입을 교육할 여력이 없고 당장 일할 수 있는 경력 개발자를 원한다.
- 경력이 실력을 담보하지 않는다. 10년 경력이라 하더라도 과거 방식에 익숙해 유연하지 못할 수 있다. 2년 경력이라 하더라도 최신 기술을 빠르게 습득하고 문제 해결 능력이 탁월할 수 있다. 또한 협업으로 성과를 내는 것은 또다른 문제이다.
- 개발자는 기술적 능력뿐만 아니라 협업, 버전 관리, 커뮤니케이션, 요구사항 도출, 정치력 등이 필요하다. 혼자서 프로젝트를 하며 실력을 쌓는 것은 회사에서 일하는 것과 근본적으로 차이가 있다.
- 급이 조금 낮은 회사라 하더라도 일단 일해서 커리어를 시작하는 것이 좋다. 기간을 정해서 여러 곳을 지원하여 되는 곳을 가야 한다. SI라 하더라도 일을 시작하는 것이 낫다. 본인 실력과 포트폴리오로 증명하는 것이 개발자 세계에서 살아남는 유일한 방법이다. 어디에서 일하든 실력을 쌓고 이직을 한다.
- 사람 수 5명 미만이고 설립연도가 2년 내인 회사는 권장하지 않는다. 제품이 검증되지 않았고 회사가 어떻게 될지 모른다. 그러나 다른 회사에 비해 들어가기는 쉽다.
- 소프트웨어는 그 자체로 의미가 있는 경우보다 도메인과 연결되어 문제를 해결한다. 별다른 도메인 없이 기술만 가지고 개발하려는 회사가 상당히 많다. 같은 도메인, 같은 비즈니스 모델이라면 선점한 회사를 이기기가 어렵다.
- 준비의 핵심은 업데이트와 확장을 포함한 소프트웨어를 만들어본 경험이다. 경력과 성과가 부족한 개발자가 이를 증명하는 방법은 프로젝트뿐이다. 문제는 양이 아니라 질이다. 없는 서비스를 고민하여 만드는 것은 근본적인 실력의 차이를 만들어 낸다.
- 프로젝트는 하나를 만들더라도 시작부터 배포를 끝까지 해내야 한다. 그리고 기능을 추가하고 구조를 개선하며 업데이트를 한다. 그 과정과 경험을 구술로 표현한다면 회사는 좋아한다.
- 본인이 필요한 것을 만들면 흥미가 생기고 유지보수와 업데이트를 이어갈 수 있다. 팀으로 작업을 하면 협업 경험을 쌓을 수 있다. 인원은 3명이 적당하다. 무조건 결과물을 만드는 것이 중요하다.
- 프로젝트를 개선하려면 소프트웨어 전반에 대한 이해가 필요하다. IT 제품에 대한 이해와 기획 능력이 더해지면 질좋은 결과물을 만들 수 있다.
5. AI와 개발자의 미래
- AI의 발전으로 일자리에 대한 위기감이 커지고 있다. 그러나 AI 생산성이 증가하더라도 사람을 완전히 대체하지 못한다. AI가 만들어진 결과물에 대해 사람이 의사결정을 할 것이다. 개발자의 일자리는 여전히 유효하다. AI를 활용한 자신의 생산성을 높이는 데 관심을 기울여야 한다.