어쩌면 나는 손으로 코드를 작성하는 마지막 세대일지도 모른다

10 min read

최근 들어 문득 이런 생각을 자주 한다.

어쩌면 나는 손으로 코드를 작성하는 마지막 세대일지도 모른다고.

20년이 넘는 시간 동안 개발자로 일해 왔다.

돌이켜보면 개발자의 역할은 계속 변해 왔다.

처음 개발을 시작했을 때는 자료구조와 알고리즘을 공부했고, 운영체제와 네트워크를 배웠다. 데이터베이스를 공부했고 SQL을 직접 작성했다.

프레임워크가 없던 시절에는 HTTP 요청을 직접 처리했고, ORM이 보편화되기 전에는 SQL을 손으로 작성했다.

그 시절의 나는 좋은 개발자가 되기 위해 더 많은 기술을 배우고 더 좋은 코드를 작성하려고 노력했다.

그리고 오랫동안 그것이 개발자의 핵심 역량이라고 생각했다.

하지만 요즘은 조금 다른 생각을 하게 된다.

AI는 생각보다 빠르게 개발 방식을 바꾸고 있다

최근 1~2년 동안 AI는 놀라운 속도로 발전했다.

이제는 간단한 CRUD 정도는 물론이고, 프론트엔드 화면, API 서버, 테스트 코드까지 생성할 수 있다.

몇 년 전만 해도 상상하기 어려웠던 일이다.

최근에는 "바이브 코딩(Vibe Coding)"이라는 말도 자주 듣게 된다.

사람이 세세하게 구현하지 않고 자연어로 요구사항을 전달하면 대부분의 코드가 생성된다.

실제로 생산성은 놀라울 정도로 향상되었다.

예전에는 하루가 걸렸던 작업이 몇 분 만에 끝나는 경우도 있다.

그 모습을 보면서 문득 생각했다.

어쩌면 나는 손으로 코드를 작성하는 마지막 세대일지도 모르겠다고.

변한 것과 변하지 않은 것

최근 몇 년 사이 개발 생산성은 크게 향상되었다.

예전에는 며칠이 걸리던 작업이 몇 시간 만에 끝나기도 하고, 프로토타입을 만드는 속도는 과거와 비교할 수 없을 정도로 빨라졌다.

하지만 한편으로는 예전과 크게 달라지지 않은 것들도 있다.

예를 들어 로그인 기능을 구현했다고 생각해 보자.

중요한 질문은 코드를 작성하는 것이 아니다.

  • 비밀번호 정책은 어떻게 할 것인가?
  • 동시 요청이 발생하면 어떻게 처리할 것인가?
  • 개인정보는 어떻게 보호할 것인가?
  • 장애가 발생했을 때 어떻게 복구할 것인가?
  • 이 구조는 1년 뒤에도 유지 가능한가?

이 질문들은 여전히 남아 있다.

기술은 변했지만 좋은 시스템을 만들기 위해 고민해야 하는 문제는 크게 변하지 않았다.

코드는 결과물이다.

하지만 좋은 엔지니어링은 그 결과물에 도달하기까지의 선택과 판단의 과정이다.

GPT가 맞다고 했어요

최근 가장 인상 깊었던 말 중 하나가 있다.

"GPT가 맞다고 했어요."

처음에는 웃으며 넘겼다.

나 역시 매일 AI를 사용하고 있고, 그 생산성을 누구보다 높게 평가하고 있다.

하지만 시간이 지날수록 이 말이 조금씩 다르게 들리기 시작했다.

누군가의 판단을 대신하는 것은 쉽다.

하지만 책임을 대신하는 것은 불가능하다.

서비스 장애가 발생했을 때 책임을 지는 것은 AI가 아니다.

데이터가 유실되었을 때 책임을 지는 것도 AI가 아니다.

결국 책임은 서비스를 운영하는 사람과 조직에 남는다.

그래서 앞으로는 구현 능력보다 검증 능력이 더욱 중요해질 것이라고 생각한다.

CS 지식은 이제 필요 없을까?

최근 신입 개발자들을 보면 새로운 도구를 매우 능숙하게 활용한다.

놀라운 속도로 기능을 구현하기도 한다.

하지만 코드 리뷰를 하다 보면 종종 이런 질문을 던지게 된다.

  • 왜 인덱스가 필요한가?
  • 왜 캐시를 사용하는가?
  • 왜 트랜잭션이 필요한가?
  • 왜 Race Condition이 발생하는가?

좋은 엔지니어링은 단순히 코드를 작성하는 것이 아니라 수많은 선택과 판단의 결과물이다.

왜 그런 구현을 선택했는지,

어떤 대안을 검토했는지,

어떤 위험을 감수했는지,

그리고 그 선택이 어떤 결과를 가져오는지 이해하는 과정이 필요하다.

그래서 나는 여전히 CS 지식이 중요하다고 생각한다.

다만 앞으로는 활용 방식이 달라질 것이다.

예전에는 CS 지식을 이용해 직접 구현했다면,

앞으로는 CS 지식을 이용해 결과를 검증하고, 트레이드오프를 이해하며, 더 나은 선택을 하는 데 사용하게 될 것이다.

개발자의 역할은 어디로 가고 있을까

예전에는 개발자의 경쟁력이 구현 능력에 있었다.

하지만 지금은 조금씩 중심이 이동하고 있는 것 같다.

복잡한 시스템일수록 중요한 것은 여전히 다음과 같다.

  • 무엇을 만들어야 하는가
  • 왜 그렇게 설계했는가
  • 어떤 위험이 존재하는가
  • 어떻게 검증할 것인가

엔지니어링의 가치는 정답을 찾는 것이 아니라 수많은 트레이드오프 속에서 현재 상황에 가장 적합한 선택을 하는 데 있다고 생각한다.

구현의 난이도는 점점 낮아지고 있다.

하지만 판단의 가치는 오히려 더 높아지고 있다.

나는 여전히 개발이 좋다

재미있는 것은 AI가 등장했지만 개발이 싫어지지는 않았다는 점이다.

오히려 새로운 가능성이 생겼다.

최근에는 개인 프로젝트를 만들고 있다.

작은 앱을 만들고, 오픈소스를 공개하고, 사용자 피드백을 받는다.

예전보다 손으로 작성하는 코드는 줄어들고 있다.

하지만 문제를 해결하는 과정은 여전히 즐겁다.

아마 개발자의 본질은 코드를 작성하는 것이 아니라 문제를 해결하는 것이기 때문일 것이다.

마치며

나는 여전히 개발이 좋다.

새로운 기술을 배우는 것도 좋고, 개인 프로젝트를 만드는 것도 좋다.

최근에는 오히려 개인 프로젝트에 더 많은 시간을 쓰고 있다.

예전보다 손으로 작성하는 코드는 줄어들고 있다.

하지만 문제를 해결하는 즐거움은 여전히 남아 있다.

그래서 개발자의 역할이 사라질 것이라고 생각하지는 않는다.

다만 역할은 분명히 바뀌고 있는 것 같다.

예전에는 구현이 경쟁력이었다면,

앞으로는 판단과 검증이 더 중요한 역량이 될지도 모른다.

어쩌면 나는 손으로 코드를 작성하는 마지막 세대일지도 모른다.

하지만 그것이 개발자의 마지막 세대라는 의미는 아닐 것이다.