RE:개발자

자바 개발자인데, 나는 정말 자바를 알고 있었을까? | RE:개발자 #1

nocklock 2026. 9. 15. 14:55

AI와 다시 개발자가 되어가는 과정 #1

개발자

나는 약 2년 동안 자바 웹 개발자로 일했다.

Java, Spring MVC, JSP, jQuery, Ajax를 사용했고 PostgreSQL과 MySQL 같은 데이터베이스도 다뤘다.

실제로 운영되는 서비스를 개발했고, CRM 프로젝트에도 참여했다.

그래서 적어도 나는 스스로를 '자바 개발자'​라고 생각했다.

그런데 오늘 기술 면접을 준비하면서 불편한 사실 하나를 마주하게 됐다.

나는 정말 자바 개발자인가?


코드는 짤 수 있는데, 설명할 수 있을까?

회사에서 개발할 때는 필요한 기능을 구현하면 됐다.

Controller를 만들고 Service를 호출하고 DB에서 데이터를 가져와 화면에 뿌렸다.

SQL을 작성하고 Ajax로 데이터를 주고받았다.

오류가 발생하면 로그를 보고 원인을 찾았다.

그렇게 프로젝트를 끝냈고 실제 서비스가 돌아갔다.

분명 개발을 했다.

그런데 기술 면접을 준비하면서 질문의 방향이 조금 달라졌다.

REST API가 무엇인가요?

HTTP 요청은 서버에서 어떻게 처리되나요?

트랜잭션은 왜 필요한가요?

인덱스를 사용하면 왜 조회가 빨라지나요?

Spring Boot와 기존 Spring의 차이는 무엇인가요?

서비스를 처음부터 설계한다면 어떻게 구조를 잡겠습니까?

낯선 단어들은 아니었다.

분명 들어봤고, 일부는 실제 업무에서도 사용했다.

그런데 누군가에게 "왜 그렇게 동작하는지 설명해보세요"​라고 하면 갑자기 말이 막혔다.

그때 조금 뼈아픈 생각이 들었다.

나는 개발을 해온 것이 아니라, 어쩌면 개발하는 방법을 익혀온 것에 가까웠던 것은 아닐까.


레거시 환경 탓만 할 수도 없었다

내가 주로 사용했던 환경은 Spring MVC, JSP, jQuery 중심이었다.

최근 채용공고를 보면 Spring Boot, REST API, JPA, Docker, AWS 같은 단어들이 훨씬 많이 보인다.

처음에는 단순히 기술 스택의 차이라고 생각했다.

'나는 옛날 환경에서 일했으니까 아직 안 해본 것뿐이다.'

틀린 말은 아니다.

하지만 그것만으로 설명되지 않는 부분도 있었다.

Spring Boot를 사용하지 않았더라도 Spring이 요청을 어떻게 처리하는지는 알아야 한다.

JPA를 사용하지 않았더라도 데이터베이스의 관계와 트랜잭션은 이해해야 한다.

Docker를 사용하지 않았더라도 내가 만든 애플리케이션이 어떤 환경에서 실행되는지는 알아야 한다.

REST API 프로젝트를 해보지 않았더라도 HTTP가 무엇인지는 설명할 수 있어야 한다.

결국 문제는 최신 기술을 얼마나 많이 사용했느냐가 아니었다.

기본기를 얼마나 제대로 이해하고 있었느냐였다.


모르는 것을 AI에게 물어보기 시작했다

그래서 ChatGPT와 대화를 시작했다.

처음에는 단순한 면접 준비였다.

"REST API 질문이 나오면 어떻게 대답하지?"

"Spring Boot를 안 써봤다고 하면 불리할까?"

"JPA 경험이 없으면 뭐라고 해야 하지?"

그런데 대화를 하다 보니 방향이 조금 달라졌다.

면접 답변만 외우는 건 별 의미가 없다는 생각이 들었다.

REST API의 정의를 외워서 면접에서 대답할 수는 있다.

하지만 직접 API 하나를 설계해보지 않는다면 결국 다음 면접에서도 비슷한 문제가 생긴다.

그래서 질문을 바꿨다.

"면접을 통과하려면 어떻게 대답해야 할까?"

가 아니라,

"내가 다시 제대로 된 자바 백엔드 개발자가 되려면 어디서부터 시작해야 할까?"


AI에게 코드를 대신 짜달라고 하지 않기로 했다

AI를 개발에 사용하는 방법에 대해서도 고민했다.

ChatGPT에게 요구사항을 던지고

"Spring Boot 프로젝트 만들어줘."

라고 하면 꽤 많은 코드를 만들어준다.

Controller도 만들어주고 Entity도 만들어주고 Repository도 만들어준다.

복사해서 실행하면 어쩌면 정상적으로 동작할 수도 있다.

하지만 그렇게 하면 지금까지의 문제가 반복된다.

동작하는 코드는 있는데 내가 설명하지 못하는 상태.

그래서 이번에는 AI를 조금 다르게 사용해보기로 했다.

AI가 코드를 대신 만드는 것이 아니라,

내가 이해하면서 만들 수 있도록 옆에서 계속 질문할 수 있는 페어 프로그래머처럼 사용해보기로 했다.

예를 들어 Spring Boot 프로젝트를 만들 때도 그냥 넘어가지 않는다.

왜 Java 21을 선택하는지.

왜 Maven 대신 Gradle을 선택했는지.

Controller와 Service를 왜 분리하는지.

Dependency Injection이 왜 필요한지.

HTTP 요청 하나가 들어오면 어디를 거쳐가는지.

DB Transaction은 어디에서 시작하고 끝나는지.

모르는 것이 나오면 그 자리에서 묻고, 직접 구현한다.

그리고 가능하면 다시 내 말로 설명해본다.


내가 다시 공부해야 할 것들

현재 내가 생각하는 로드맵은 이렇다.

Java

↓

객체지향 / JVM / Collection / Exception

↓

HTTP / Network

↓

Spring / Spring Boot

↓

REST API

↓

SQL / Database / Transaction / Index

↓

JPA

↓

Git

↓

Linux / Docker

↓

AWS

↓

테스트 / CI·CD

↓

시스템 설계

그리고 여기에서 끝내지 않을 생각이다.

요즘 개발자가 AI를 무시할 수는 없다.

LLM이 무엇인지, 토큰은 무엇인지, API를 통해 어떻게 호출하는지, RAG는 무엇인지도 직접 작은 서비스를 만들면서 배워볼 생각이다.

목표는 기술 이름을 많이 아는 개발자가 아니다.

하나의 서비스를 처음부터 설계하고, 개발하고, 배포하고, 운영할 수 있는 개발자가 되는 것.

그게 이번 공부의 목표다.


그리고 모든 과정을 기록하기로 했다

예전에도 개발 공부를 시작한 적은 많았다.

강의를 사고 몇 챕터 듣다가 멈추기도 했고, 새로운 기술이 보이면 또 다른 강의를 찾아보기도 했다.

이번에는 방법을 조금 바꿔보려고 한다.

공부한 내용을 정리하는 것이 아니라 공부하는 과정 자체를 기록하려고 한다.

성공한 것만 쓰지 않을 생각이다.

환경설정부터 기록한다.

어떤 에러가 발생했는지.

왜 발생했는지.

ChatGPT가 처음에 어떤 해결책을 제시했는지.

그 해결책이 틀렸다면 왜 틀렸는지.

검색해서 무엇을 추가로 확인했는지.

그리고 결국 내가 무엇을 이해했는지.

전부 남겨보려고 한다.

그래서 이 시리즈에는 아마 꽤 많은 삽질이 등장할 것이다.

오히려 그게 이 기록의 핵심이라고 생각한다.


오늘이 0일 차다

오늘 기술면접을 준비하면서 내가 부족하다는 사실을 꽤 명확하게 확인했다.

기분 좋은 발견은 아니다.

하지만 적어도 이제 무엇이 부족한지는 조금 알 것 같다.

그리고 한 가지는 확실히 정했다.

경력이 몇 년인지보다 실제로 무엇을 이해하고 만들 수 있는 개발자인지가 더 중요하다.

그래서 다시 시작한다.

Java부터.

Spring Boot도 직접 설치해보고 REST API도 직접 만들어볼 것이다.

DB를 설계하고 Docker에 올려보고 AWS에도 배포해볼 것이다.

AI도 단순히 코드를 대신 작성해주는 도구가 아니라 내가 더 빠르게 배우고 더 깊게 이해하기 위한 도구로 사용해볼 생각이다.

몇 달 뒤 이 글을 다시 읽었을 때 지금보다 훨씬 많은 것을 설명할 수 있었으면 좋겠다.

그리고 가능하다면 그때는 자신 있게 말하고 싶다.

나는 자바 개발자다.