Showing Posts From
생태계
- 28 Dec, 2025
Spring 생태계 20년, 새 기술로 갈아탈 수 있을까
월요일 아침, IDE를 켰다 월요일 아침 9시. IntelliJ를 켰다. 익숙한 Spring Boot 프로젝트가 열렸다. 20년째 보는 화면이다. @RestController @RequestMapping("/api") public class UserController {손이 저절로 움직인다. 타이핑 속도는 여전히 빠르다. 문제는 이게 2025년에도 의미 있는 코드인가. 슬랙에 후배가 물었다. "파트장님, 이번 신규 프로젝트 Nest.js로 해도 될까요?" 나는 3초 고민하다가 답했다. "Spring으로 하자. 우리가 잘 아는 걸로." 창 밖을 봤다. 안전한 선택이었나.전문성이라는 이름의 울타리 작년에 기술 면접관으로 들어갔다. 지원자가 이력서를 냈다. "Spring 5년, Kotlin 3년, Go 2년" 나는 물었다. "Spring은 어떤 버전 쓰셨나요?" "Boot 3.x입니다." "IoC 컨테이너 동작 원리는?" 대답을 잘했다. 그다음 내가 물었다. "그런데 왜 Go를 공부하셨죠?" "MSA 환경에서 경량 서비스 만들려고요." 면접 끝나고 나왔다. 복도에서 생각했다. 나는 Go를 모른다. Kotlin도 프로젝트에서 안 써봤다. 20년 경력이 있다. 하지만 5년 경력자가 아는 걸 나는 모른다. 이게 전문성인가, 고집인가. 저녁에 집에 와서 Go 튜토리얼을 켰다. 30분 보다가 껐다. "내일 회의 준비해야지."후배의 사표 두 달 전이다. 5년차 후배가 사표를 냈다. 잘하는 애였다. 1on1 미팅을 잡았다. "왜 나가려고?" "스타트업 가려고요. Rust 백엔드 포지션이요." 나는 물었다. "여기서도 새 기술 쓸 수 있는데." "파트장님, 솔직히 말씀드려도 될까요?" "그래." "여기선 안 돼요. 레거시가 너무 많아요." "신규 프로젝트 있잖아." "그것도 결국 Spring이잖아요. 파트장님이 잘 아시는 거." 칼이 꽂혔다. 맞는 말이었다. "Rust는 배워봤어?" "주말마다 공부했어요. 6개월." "어려웠겠네." "처음엔 어려웠는데, 재밌더라고요." 후배는 웃었다. 나는 웃지 못했다. 그날 밤 Rust 공식 문서를 열었다. Ownership 개념을 읽었다. 이해가 안 됐다. 30분 후에 탭을 닫았다. "나는 Spring 전문가다." 스스로에게 말했다. 위로인지 변명인지 모르겠다.대학 동기 모임 지난주 토요일. 대학 동기들을 만났다. 다들 40대 중반이다. 최진수는 스타트업 CTO다. "요즘 팀에서 TypeScript 전환했어." "힘들었겠네." "처음엔 그랬지. 근데 지금은 괜찮아." 김태훈은 SI에서 프리랜서로 전향했다. "Python 배워서 데이터 쪽 하고 있어." "Java 20년 했는데?" "그래서 더 바꾼 거야. 이대로면 늙어 죽어." 나만 대기업에 남았다. 나만 Spring만 한다. "너는 뭐 새로 배우는 거 없어?" 진수가 물었다. "Spring WebFlux 공부 중이야." "그거 2017년에 나온 건데." 침묵. 맥주를 마셨다. "전문성이 있잖아. 그게 너 강점이야." 태훈이 위로했다. 고맙지만 씁쓸했다. 전문성이 울타리가 됐다. 안전하지만 좁다. 금요일 저녁, 혼자 남았다 지난주 금요일. 팀원들은 6시에 퇴근했다. 나는 남았다. 핑계는 코드 정리. 실제로는 새 기술 공부였다. Next.js 공식 문서를 열었다. "App Router vs Pages Router" 이게 뭔 소린지 모르겠다. YouTube에서 튜토리얼을 찾았다. 강의자가 20대처럼 보였다. "자, 여러분 이건 진짜 쉬워요!" 나한테는 안 쉬웠다. React 개념도 헷갈린다. Virtual DOM이 뭐였지. 1시간 보다가 포기했다. 다시 Spring 코드를 열었다. 이건 편하다. 눈 감고도 짤 수 있다. 그게 문제다. 창밖을 봤다. 8시였다. 빌딩에 불이 켜져 있었다. 저 안에도 나 같은 사람이 있을까. 20년 경력이 짐처럼 느껴진다. 새로 시작하려면 이걸 내려놔야 한다. 근데 이거 말고 내가 뭘 할 수 있지. 마우스 커서가 깜빡였다. Spring Boot Application.java 익숙한 코드. 저장하고 IntelliJ를 껐다. 내일 생각하자. 선택이 아니라 타협 월요일 아침이다. 또 회의가 있다. 아키텍처 리뷰 미팅. 후배가 제안했다. "이번 프로젝트, MSA로 분리하면서 일부는 Go로 해볼까요?" 팀원들이 쳐다봤다. 내 대답을 기다린다. 3초 생각했다. "Go 할 줄 아는 사람?" 두 명이 손을 들었다. "프로덕션 경험은?" 손이 내려갔다. "리스크가 크다." 내가 말했다. "배포 파이프라인도 새로 짜야 하고." "모니터링도 달라지고." "문제 생기면 대응할 사람이 없어." 맞는 말이다. 합리적인 판단이다. 근데 진짜 이유는 다르다. 나도 모르는 기술이 늘어나는 게 불안하다. 팀을 컨트롤할 수 없게 된다. "Spring으로 갑시다." 내가 결론 냈다. "대신 WebFlux 써보자." 타협이다. 새로운 것처럼 보이지만 결국 Spring이다. 내 울타리 안이다. 회의가 끝났다. 후배들 표정이 아쉬워 보였다. 미안하다. 근데 어쩔 수 없다. 체력이 답이다 새 기술을 배우려면 시간이 필요하다. 시간을 만들려면 체력이 필요하다. 체력은 나이를 이길 수 없다. 단순한 산수다. 20대 후배를 봤다. 낮에 회의하고 개발하고 저녁 먹고 또 개발하고 집 가서 사이드 프로젝트 한다. 주말에 스터디 간다. 나는? 낮에 회의만 5개. 코딩은 저녁 6시부터. 9시 넘으면 집중력 떨어진다. 집 가면 녹초. 주말엔 가족과 시간 보내고 쉰다. 새 기술 공부? 언제 하지. 지난달에 시도했다. 매일 새벽 6시에 일어나서 1시간씩 공부. 일주일 했다. 회사에서 졸았다. 회의 중에 눈이 감겼다. 2주 만에 포기했다. "젊을 때 했어야지." 혼자 중얼거렸다. 근데 젊을 때는 뭐가 중요한지 몰랐다. 체력이 답인데 체력은 돌아오지 않는다. 연봉 9500만원의 무게 현실적으로 계산해봤다. 내가 새 기술로 이직한다고 치자. Go 신입으로 가면? 연봉 4000만원. 반토막이다. 경력을 인정받는다 쳐도 6000만원 받기 힘들다. Go 5년 경력자가 시장에 많다. 나보다 젊고 저렴하다. 지금 집 대출이 3억 남았다. 아들 학원비가 월 150만원. 딸도 내년이면 중학생. 아내는 일 안 한 지 10년. 새로 시작할 여유가 없다. 경제적으로. "돈 때문에 못 바꾸는 거야." 스스로에게 말한다. 맞다. 근데 전부는 아니다. 20년 쌓은 자존심도 있다. "Spring 전문가"라는 타이틀. 컨퍼런스 발표도 했다. 사내에서 인정받는다. 이걸 버리고 신입처럼 시작하는 게 두렵다. 돈도 문제지만 정체성도 문제다. 그래도 키보드를 두드린다 어제 저녁이었다. 아들이 물었다. "아빠, 코딩 가르쳐줘." "뭐 배우고 싶은데?" "파이썬이요. 학교에서 배워요." 나는 파이썬을 잘 모른다. "아빠는 자바를 하는데." "자바는 어려워 보여요." 맞다. 요즘 애들은 파이썬으로 시작한다. 자바는 구식이다. "알았어, 같이 해보자." YouTube를 켰다. 아들과 같이 파이썬 기초를 봤다. print("Hello, World!")쉬웠다. 재미있었다. 아들이 좋아했다. 1시간 후 아들이 말했다. "아빠, 생각보다 코딩이 재미있네요." 그 순간 깨달았다. 새 기술을 배우는 건 처음부터 다시 시작하는 게 아니다. 프로그래밍 사고방식은 그대로다. 문제 해결 능력도 그대로다. 20년 경험도 사라지지 않는다. 문법만 다를 뿐이다. 밤에 혼자 다시 파이썬을 켰다. Flask 튜토리얼을 열었다. Spring과 비슷한 구조다. Routing, Controller, Service. 이해가 됐다. 빨리 됐다. "할 수 있겠는데?" 혼잣말을 했다. 전문성은 프레임워크가 아니다 금요일 오후다. 신입사원 교육을 맡았다. 올해 입사한 애들. 다들 20대 초반이다. "Spring을 왜 배워야 하나요?" 한 명이 물었다. 예전 같으면 이렇게 답했다. "산업 표준이니까." "레거시 시스템 많으니까." "안정적이니까." 근데 어제 답은 달랐다. "안 배워도 돼." 애들이 놀랐다. "진짜요?" "대신 이걸 배워." 화이트보드에 썼다.문제를 작게 나누는 법 의존성을 관리하는 법 테스트 가능한 코드 가독성 있는 구조"이건 프레임워크가 아니야." "프로그래밍 원칙이지." "Spring으로 배우든 Go로 배우든" "Django로 배우든 상관없어." "이게 진짜 전문성이야." 말하면서 깨달았다. 나도 이제 알았다. 20년간 내가 배운 건 Spring이 아니었다. 소프트웨어 개발이었다. 그 원칙은 어떤 언어로든 적용된다. 어떤 프레임워크로든 쓸 수 있다. 내 전문성은 사라지지 않는다. 옷을 갈아입는 것뿐이다. 월요일 아침, 다시 시작 오늘 아침이다. 출근했다. IntelliJ를 켰다. Spring 프로젝트가 열렸다. 익숙하다. 편하다. 그리고 VSCode도 켰다. Go 프로젝트를 만들었다. main.go 비어있는 화면이다. 두렵다. 하지만 도전할 만하다. 점심시간에 후배한테 물었다. "Go 스터디, 나도 들어가도 돼?" "파트장님이요?" "응. 배우고 싶어." 후배가 웃었다. "좋죠. 환영입니다." 오후에 팀 미팅을 했다. "신규 프로젝트 건." "일부는 Go로 해보자." "내가 같이 배울게." 팀원들 표정이 달라졌다. 기대하는 눈빛. "실패할 수도 있어." 솔직하게 말했다. "근데 해보자." 퇴근하고 집에 왔다. 저녁 먹고 노트북을 켰다. Go 공식 문서. 처음부터 차근차근. package mainimport "fmt"func main() { fmt.Println("Hello, World!") }실행했다. 됐다. 작은 시작이다. 20년 경력을 버리는 게 아니다. 20년 경력 위에 하나를 더하는 거다. Spring 전문가에서 개발자로 돌아가는 거다. 선택은 계속된다 다음 주 월요일이 온다. 또 회의가 있을 거다. 또 결정을 내려야 한다. "레거시 유지할까요, 새로 만들까요?" "Spring 쓸까요, 다른 거 쓸까요?" "안전하게 갈까요, 모험할까요?" 정답은 없다. 상황에 따라 다르다. 하지만 이젠 안다. 선택의 기준을. 기술이 아니라 문제를 본다. 프레임워크가 아니라 원칙을 본다. 경력이 아니라 학습을 본다. Spring 20년이 무의미한 게 아니다. 그게 전부가 아닐 뿐이다. 45살이 늦은 게 아니다. 시작 안 하는 게 늦는 거다. 체력이 부족하다. 시간이 부족하다. 여유가 없다. 맞다. 다 맞다. 근데 그래도 한다. 조금씩. 천천히. 새 기술로 갈아탄다는 건 기존을 버리는 게 아니다. 확장하는 거다. 전문성이 족쇄가 될지 날개가 될지는 내가 정한다. 키보드를 두드린다. 오늘도.20년 경력이 무거울 때가 있다. 근데 그게 짐이 될지 자산이 될지는 내 선택이다. Spring도 하고 Go도 배운다. 천천히.