Showing Posts From

Spring의

Java와 Spring의 20년, 이게 족쇄인가 무기인가

Java와 Spring의 20년, 이게 족쇄인가 무기인가

Java와 Spring의 20년, 이게 족쇄인가 무기인가 아침 스탠드업 미팅 "파트장님, 이번 프로젝트는 Kotlin으로 해도 될까요?" 신입 김대리가 물었다. 25살. 눈이 반짝였다. 나는 커피를 한 모금 마셨다. 3초 정도 침묵했다. "일단 기존 시스템이 Java라서..." 변명처럼 들렸다. 나한테도. 회의실을 나왔다. 복도를 걷는데 발걸음이 무거웠다.20년이다. Java 1.4부터 썼다. 당시엔 최신이었다. EJB가 복잡해서 Spring 나왔을 때 신세계였다. 지금 그 Spring이 "레거시 기술"로 불린다는 게 믿기지 않는다. 아니, 믿고 싶지 않다. 점심시간, 구내식당 후배 세 명이 테이블에 앉았다. 나는 한 칸 떨어진 곳에 앉았다. "요즘 Rust 공부하는데 재밌어요." "저는 Next.js 강의 듣는 중이에요." "TypeScript 5.0 나왔는데 개쩔어요." 들리는 단어가 하나도 안 반갑다. 나는 제육볶음을 먹었다. 입맛이 없었다. 핸드폰을 켰다. 개발 커뮤니티를 봤다. "Java는 이제 끝났다" "Spring은 너무 무겁다" "요즘 누가 XML 설정을 하냐" 댓글이 200개였다. 다 읽었다. 밥이 목에 안 넘어갔다. 오후 3시, 코드리뷰 김대리가 PR을 올렸다. Kotlin으로 작성한 유틸리티 클래스였다. data class UserRequest( val name: String, val email: String )5줄이었다. 내가 Java로 짰으면 20줄이다. Getter, Setter, Constructor, toString, equals, hashCode. "깔끔하네요." 내가 말했다. 진심이었다. 그런데 왜 기분이 이상하지? 김대리가 웃었다. "Kotlin 편하죠?" "응, 좋아 보여." 말은 그렇게 했다. 속으로는 달랐다. '나도 배워야 하나? 지금?'그날 저녁 집에 가는 지하철에서 'Kotlin 입문' 강의를 결제했다. 19,900원이었다. 일주일 뒤 진도는 15%였다. 그것도 출퇴근 시간에만 봤다. 회사에서 Java 코드를 하루 8시간 짜는데, 퇴근 후에 Kotlin을 배울 기력이 없었다. 밤 11시, 혼자 남은 사무실 다들 퇴근했다. 나만 남았다. 레거시 시스템 리팩토링 작업이었다. 10년 된 코드를 고치는 중이었다. 이상했다. 10년 전 코드가 내 코드였다. 주석을 읽었다. "// 2014.03.15 박시니어 작성" 당시엔 최선이었다. 지금 보니 개선할 게 보인다. 20분 만에 300줄을 100줄로 줄였다. Spring의 최신 기능을 썼다. 빌드했다. 테스트 통과. 배포 완료. 이 순간만큼은 기분이 좋았다. '나 아직 되네.' 그런데 문득 생각했다. '10년 뒤 이 코드도 레거시겠지?' 창밖을 봤다. 빌딩 불빛이 깜빡였다. 주말 오전, 카페 노트북을 펼쳤다. 기술 블로그를 읽었다. "Why We Migrated from Java to Kotlin" "Spring Boot vs Micronaut: Performance Comparison" "Is Java Still Relevant in 2024?" 제목만 봐도 불안했다. 클릭했다. 읽었다. 이해했다. 공감도 했다. 그런데 실천은 못 하겠더라. 월요일 출근하면 또 Java다. 또 Spring이다. 레거시 시스템 10개. 전부 Java 8. 하나는 아직 Java 7이다.마이그레이션? 팀장님이 웃으며 말했다. "일단 돌아가잖아요. 급한 거 먼저 하죠." 급한 건 언제나 있다. 신규 프로젝트, 장애 대응, 성능 개선. 레거시는 언제나 '나중에'. 그 '나중에'는 안 온다. 20년 경험으로 안다. 월요일 아침, 1on1 미팅 신입 이사원이 물었다. "파트장님, 저 Java 말고 다른 것도 배워야 할까요?" 22살이었다. 입사 3개월. 나는 대답을 못 했다. 5초 정도. "음... 일단 Java를 깊게 배워." "그런데 요즘 추세는..." "추세 따라가려고 하면 끝이 없어." 말하면서도 확신이 없었다. 이사원은 고개를 끄덕였다. 표정이 애매했다. 복잡했다. 내가 후배 커리어를 막는 건가? 그런데 또 생각해보면 Java 모르고 어떻게 개발을 하나? JVM 구조, GC 동작 원리, 멀티스레딩, 동시성 제어. 이런 거 모르고 Kotlin만 쓰면 그게 진짜 실력인가? 혼란스러웠다. 목요일 저녁, 기술 세미나 사내 세미나였다. 주제는 "Kotlin 도입 사례". 발표자는 타 부서 파트장이었다. 나랑 동갑. "마이그레이션 결과, 코드량 30% 감소, 빌드 시간 20% 단축." 박수가 나왔다. 질문 시간이었다. 손을 들었다. "기존 Java 개발자들 적응은 어땠나요?" 파트장이 웃었다. "처음엔 힘들었죠. 근데 2주면 익숙해집니다." 2주. 나는 한 달째 15% 진도다. 세미나가 끝났다. 복도에서 그 파트장을 만났다. "형, 진짜 2주면 돼요?" "솔직히 말하면 3개월은 걸려요. 근데 발표 자리에서 그렇게 말하면..." 웃었다. 둘이. 조금 위안이 됐다. 금요일 오후, 연봉 협상 팀장님이 불렀다. 연봉 리뷰 시즌이었다. "올해 평가 A입니다. 7% 인상." 9500만원에서 10165만원이 됐다. "감사합니다." "내년엔 임원 후보 검토 들어갑니다." 임원. 개발자의 꿈이라고 하던데 나는 아니다. 임원 되면 관리만 한다. 코드는 진짜 못 짠다. "고민해보겠습니다." 팀장님이 의아한 표정이었다. "고민할 게 뭐가 있어요?" 설명할 수 없었다. '저는 코딩이 좋아서요' 라고 하면 유치해 보인다. 45살이 무슨 코딩이냐는 표정을 볼 게 뻔했다. 그냥 웃었다. 토요일 오전, 개인 프로젝트 집에서 혼자 코딩했다. 토이 프로젝트였다. 간단한 블로그 시스템. 그런데 이번엔 Kotlin으로 시작했다. IDE를 켰다. IntelliJ가 Kotlin을 추천했다. 첫 줄을 썼다. fun main() { println("Hello, Kotlin") }신기했다. Java보다 타이핑이 적었다. 3시간 코딩했다. REST API 3개 만들었다. Java였으면 5시간 걸렸을 거다. '어? 생각보다 괜찮은데?' 저녁을 먹고 다시 앉았다. 자정까지 코딩했다. 오랜만에 재밌었다. 월요일 출근길에 문득 깨달았다. '회사 코드는 왜 이렇게 안 하지?' 답은 간단했다. 레거시. 100만 줄. 10년. 고객. 안정성. 한숨이 나왔다. 월요일 점심, 대학 동기와의 전화 동기가 전화했다. 대학 때 같이 C 언어 과제 했던 친구. "야, 나 이번에 스타트업 CTO 됐어." "오, 축하해." "근데 기술 스택 고민인데, Java 쓸까 Kotlin 쓸까?" 나는 3초 멈췄다. "...둘 다 장단점이 있지." "야, 너 Java 20년 했잖아. 솔직히 말해봐." 솔직히. "Java는 안정적이야. 레퍼런스 많고, 사람 구하기 쉽고." "근데?" "근데 요즘 애들은 Kotlin 배우고 싶어 해. 코드도 깔끔하고." "그럼 뭐 하라는 거야?" "...모르겠어. 나도 고민 중이야." 친구가 웃었다. "너도 그런 고민 하는구나. 위안된다." 전화를 끊었다. 위안은 안 됐다. 화요일 저녁, 후배와의 맥주 신입 김대리가 술을 제안했다. 둘이 나갔다. 두 잔 마시고 김대리가 물었다. "파트장님, 진짜 궁금한 게 있어요." "뭔데?" "Java 20년 하셨잖아요. 후회 안 해요?" 직구였다. 나는 맥주를 마셨다. 생각했다. "후회... 는 아닌데, 불안하긴 해." "뭐가요?" "내가 시대에 뒤처지는 건 아닌가. 10년 뒤에도 Java 할 건가." 김대리가 고개를 끄덕였다. "저도 그래요. 지금 Java 배우는데, 이게 맞나 싶어요." "그래서 Kotlin 하고 싶은 거고?" "네. 근데 파트장님이 Java가 더 중요하다고 하셔서..." 미안했다. 내 불안을 후배한테 떠넘긴 것 같았다. "이렇게 하자. 회사에선 Java 하고, 개인 시간엔 네가 하고 싶은 거 해." "그럼 파트장님은요?" "나도... 그렇게 하려고." 둘이 웃었다. 쓸쓸한 웃음이었다. 수요일 오전, 기술 부채 회의 분기별 기술 부채 리뷰였다. 리스트를 펼쳤다.Java 7 → 8 마이그레이션 (3년째 미뤄짐) Spring 4 → 5 업그레이드 (2년째 미뤄짐) XML 설정 → Java Config 전환 (4년째 미뤄짐)팀장님이 말했다. "우선순위를 정합시다." 다들 침묵했다. 나는 손을 들었다. "다 중요한데, 리소스가 없습니다." "그럼 어떻게 하죠?" "...모르겠습니다." 회의가 끝났다. 결론은 '다음 분기에 재논의'. 복도를 걷는데 막막했다. 이게 Java의 문제인가, 회사의 문제인가, 내 문제인가. 모르겠다. 목요일 새벽, 잠 못 이루고 새벽 3시에 깼다. 다시 못 잤다. 생각이 꼬리를 물었다. Java 20년. 이게 족쇄인가, 무기인가. 족쇄처럼 느껴질 때가 있다. 새로운 걸 못 배우게 막는 것 같다. 그런데 또 무기이기도 하다. 문제 생기면 나는 안다. 20년 경험으로. 후배들이 3일 걸릴 버그를 나는 30분에 찾는다. 이게 실력 아닌가? 아니다. 이건 경험이다. 실력은 새로운 걸 배우는 능력이다. 그럼 나는 실력이 없는 건가? 아침이 왔다. 4시간 잤다. 금요일 오후, 깨달음 같은 것 퇴근 30분 전이었다. 코드를 짜고 있었다. Java로 복잡한 동시성 로직을 구현했다. ExecutorService, CountDownLatch, AtomicInteger. 40분 걸렸다. 옆자리 김대리가 봤다. "와... 이런 거 어떻게 아세요?" "20년 하다 보니까." "저는 언제쯤..." "너도 10년 하면 알아." 그 순간 깨달았다. Kotlin이든 Rust든 Go든, 10년 하면 전문가가 된다. 나는 Java 전문가다. 이게 족쇄가 아니라 정체성이다. 문제는 Java가 아니었다. '변화에 대한 두려움'이었다. 새로운 언어를 배우는 게 겁났던 거다. 초보가 되는 게 싫었던 거다. 45살에 '모른다'고 말하는 게 부끄러웠던 거다. 주말, 결심 토요일 아침. 다시 Kotlin 프로젝트를 열었다. 이번엔 마음가짐이 달랐다. 'Java를 버리는 게 아니라 확장하는 거다.' 20년 Java 경험이 Kotlin 배울 때 도움이 된다. JVM은 같으니까. 오히려 신입보다 유리하다. 기초가 탄탄하니까. 8시간 코딩했다. 점심도 안 먹었다. 저녁에 아내가 물었다. "요즘 왜 이래?" "공부 중이야." "무슨?" "새로운 거." 아내가 웃었다. "그래, 그렇게 사는 게 너답지." 일요일에는 블로그 글을 썼다. 제목: "45살 개발자의 Kotlin 입문기" 조회수 3개 나왔다. 다 내가 새로고침한 거다. 상관없다. 나를 위한 기록이다. 월요일, 새로운 시작 출근했다. 스탠드업 미팅이었다. 김대리가 물었다. "파트장님, Kotlin 괜찮다고 하셨잖아요." "응." "그럼 다음 프로젝트 Kotlin으로 해도 될까요?" 예전 같았으면 망설였을 거다. 이번엔 바로 대답했다. "해보자. 나도 같이 배울게." 김대리 눈이 커졌다. "진짜요?" "응. 너가 가르쳐줘." 회의실이 조용해졌다. 후배가 선배를 가르친다는 게 어색했나 보다. 나는 웃었다. "이상해? 나도 배워야지. 20년 했다고 다 아는 거 아니야." 분위기가 풀렸다. 김대리가 말했다. "파트장님, 멋있으시다." 멋있다기보단 무서웠다. 근데 더 무서운 건 안 배우는 거다.Java 20년은 족쇄가 아니다. 토대다. 그 위에 새로운 걸 쌓으면 된다. 늦은 게 아니라 깊은 거다. 오늘도 배운다.