Showing Posts From

Kotlin

Kotlin, Next.js, Rust - 배워야 한다는 강박

Kotlin, Next.js, Rust - 배워야 한다는 강박

월요일 오전, Slack 알림 출근했다. 메일 51개. Slack 127개. 제일 위에 있는 메시지. 김대리가 올린 거다. "파트장님, 신규 프로젝트 코틀린으로 해도 될까요? 스프링부트 3.2 새로 나왔는데 코틀린 지원이 훨씬 좋아졌다고..." 읽었다. 답장은 안 했다. 일단 커피부터 마셨다.코틀린. 작년에도 배우겠다고 마음먹었다. 재작년에도 그랬다. Java로 20년 먹고살았다. 문제없이 잘 돌아간다. 근데 요즘 채용공고 보면 코틀린이 기본이다. "Java/Kotlin 가능자" 아니라 "Kotlin 우대"다. 우대가 아니라 필수처럼 보인다. 점심시간, 후배들 대화 구내식당이다. 김대리, 박주임, 최대리가 앉아있다. 나도 끼었다. "요즘 뭐 공부해?" 물었더니 셋이서 떠든다. "저는 Next.js 14 배우고 있어요. App Router 완전 달라졌거든요." "저는 Rust요. 메모리 안전성이 장난 아니래요." "저도 Rust 관심 있는데, 러닝커브가..."밥 먹으면서 고개만 끄덕였다. Next.js가 뭔지는 안다. React 프레임워크다. SSR 한다. 그 정도는 안다. 근데 App Router? Pages Router랑 뭐가 다른 건지 모른다. Rust는 들어만 봤다. C++ 대체재라던데. 메모리 관리를 컴파일러가 한다고. 배우고 싶다. 진짜로. 근데 언제? 오후 2시, 회의실 기획팀이랑 미팅이다. 새 프로젝트 킥오프. 앱 리뉴얼. "프론트엔드 스택 어떻게 갈까요?" 기획팀장이 물었다. 김대리가 바로 대답한다. "Next.js 14 어떨까요? 성능 개선도 많이 됐고, SEO도 좋고..." 다들 고개 끄덕인다. 나도 끄덕였다. "좋지. 그렇게 가자." 회의 끝났다. 30분.회의실 나오면서 생각했다. 'Next.js 14. 나 써본 적 없는데.' 김대리는 이미 개인 프로젝트로 써봤다고 했다. 주말에. 나도 주말에 뭐 했나 생각해봤다. 토요일은 아들 학원 데려다주고. 일요일은 처가 다녀왔다. 공부? 못 했다. 오후 6시, 코드리뷰 김대리가 PR 올렸다. 코틀린으로 짠 샘플 코드다. "파트장님 리뷰 부탁드려요~" 클릭했다. data class User( val id: Long, val name: String, val email: String? )fun findUser(id: Long): User? { return userRepository.findById(id) .orElse(null) }읽었다. 이해는 된다. data class. 자바 Record 비슷한 거다. 물음표는 nullable. 자바 Optional 같은 거. 근데 이게 좋은 코드인지, 코틀린답게 짠 건지는 모르겠다. "LGTM" 달았다. Looks Good To Me. 그리고 생각했다. '나 지금 제대로 리뷰한 거 맞나?' 오후 8시, 혼자 남은 사무실 다들 퇴근했다. 나만 남았다. IDE 켰다. IntelliJ. "코틀린 시작하기" 검색했다. 공식 문서 열었다. 영어다. 읽기 시작했다. 10분 지났다. Slack 알림. 기획팀장이다. "파트장님, 내일 오전 회의 하나 잡아도 될까요?" "네, 괜찮습니다." 문서 닫았다. 다시 열 생각 안 난다. 집에 가야지. 내일 또 회의 있다. 2개. 목요일 저녁, 유튜브 집이다. 침대에 누웠다. 유튜브 추천 영상. "Rust 10분 만에 시작하기" "Next.js 14 완벽 가이드" "코틀린 vs 자바, 5분 비교" 다 봤다. 20분. 이해했나? 아니다. 따라 해야 한다는 건 안다. 근데 노트북 켤 기운이 없다. 내일 하자. 금요일이니까 여유 있겠지. 금요일 됐다. 회의 3개 있었다. 못 했다. 토요일 오전, 서재 일어났다. 9시. 커피 마셨다. "오늘은 공부 좀 하자." 노트북 켰다. 코틀린부터. 기초부터 차근차근. 30분 지났다. 아들이 방문 열었다. "아빠, 롤 듀오 ㄱ?" "아빠 공부 중이야." "에이~ 한 판만~" 같이 했다. 한 판이 세 판 됐다. 점심 먹었다. 12시 반. 오후에 하자. 오후에 장 봐야 한다고 아내가 말했다. 같이 갔다. 3시간. 저녁 먹고, 설거지하고, 9시. 또 노트북 켰다. "이번엔 진짜." Next.js 공식 문서 열었다. Tutorial 따라 했다. npx create-next-app@latest 설치하는 데 10분. 코드 따라 치기 시작했다. 에러 났다. 버전이 안 맞는다. 구글링했다. 스택오버플로우 10개 탭 열었다. 해결했다. 근데 이게 뭘 하는 코드인지 모르겠다. 'use client'가 뭐지? Server Component? Client Component? React 18부터 바뀌었다는데. React도 다시 공부해야 하나? 시계 봤다. 11시 반. 내일 일요일이긴 한데. 피곤하다. "내일 하자." 노트북 껐다. 일요일, 침대 일어났다. 10시. 처가 가는 날이다. 차 타고 2시간. 장인어른이랑 소주 마셨다. "요즘 일은 어때?" "바쁩니다." "개발자는 평생 공부해야 한다며?" "...네." 돌아왔다. 8시. 씻고 누웠다. 내일 월요일이다. 코틀린, Next.js, Rust. 하나도 못 배웠다. 월요일 아침, 또 출근 Slack 켰다. 박주임이 글 올렸다. "주말에 Rust로 간단한 CLI 툴 만들어봤어요! 재밌네요 ㅎㅎ" GitHub 링크 달려있다. 클릭했다. 코드 봤다. fn main() { let args: Vec<String> = env::args().collect(); println!("Hello, {}!", args[1]); }이해 안 된다. Vec가 뭐지. collect가 뭐지. 구글링하려다가. "파트장님, 10시 회의 준비 부탁드려요!" Slack 알림. 검색창 닫았다. 회의 자료 만들었다. 1시간. 회의 했다. 1시간 반. 점심 먹었다. 구내식당. 후배들 또 기술 얘기한다. "Bun 써보셨어요? npm보다 엄청 빠르대요." Bun? 그게 뭐지. 검색했다. JavaScript 런타임이다. Node.js 대체재. "아, 그거. 나중에 써봐야지." 대답했다. 나중은 언제인가. 수요일 저녁, 1on1 김대리랑 1on1이다. 회의실 잡았다. 둘이. "요즘 어때? 일은?" "재밌어요. 새로운 거 많이 배우고 있어서." "좋네. 뭐 배우는데?" "코틀린이랑 Next.js요. 집에서 사이드 프로젝트 하면서 익히는 중이에요." "시간 어떻게 내?" "퇴근하고 두세 시간씩요. 주말엔 더 하고." "...대단하네." 침묵. "파트장님은 요즘 뭐 공부하세요?" 물어봤다. "나? 나도... 뭐 이것저것." 구체적으로 말 못 했다. 배운 게 없으니까. 목요일 밤, 침대에서 누웠다. 핸드폰 켰다. 링크드인 열었다. 피드에 글들 올라온다. "Rust로 만든 서버, Go보다 30% 빠름" "Next.js 14 마이그레이션 완료, 개발 생산성 2배" "코틀린 도입 후 코드량 40% 감소" 다 20대, 30대 초반이다. 나? 45세. Java, Spring 20년. 그것만 한다. 스크롤 내렸다. "40대 시니어 개발자를 위한 커리어 전환" 클릭했다. 읽었다. "관리직으로 가거나, 아키텍트로 가거나." 둘 다 코딩 못 한다는 뜻이다. 껐다. 잠 안 온다. 금요일 오후, 기술 면접 채용 면접이다. 신입이 아니라 경력직. 3년차. 이력서 봤다. Java, Kotlin, Spring Boot, React, Next.js. 다 쓴다고 했다. 면접 시작했다. "코틀린 주로 어떻게 활용하셨나요?" 지원자가 대답한다. "data class로 보일러플레이트 줄이고, sealed class로 상태 관리하고, coroutine으로 비동기 처리했습니다." 고개 끄덕였다. 이해는 된다. 근데 sealed class가 정확히 뭔지는 모른다. "Next.js는요?" "13버전 때 App Router 써봤고, 14에서 Server Actions 활용해서 API 레이어 줄였습니다." 또 끄덕였다. Server Actions. 처음 듣는다. 옆에 앉은 김대리가 질문한다. "Suspense Boundary 어떻게 설계하셨어요?" 지원자가 자세히 대답한다. 나는 듣기만 했다. 면접 끝났다. "어떠셨어요?" 김대리가 물었다. "좋은 것 같은데. 너가 판단해." 대답했다. 사실은 내가 판단 못 한다. 그날 밤, 서재 집에 왔다. 저녁 먹고, 9시. 서재 들어갔다. 문 닫았다. 노트북 켰다. "오늘은 정말 한다." 코틀린 IntelliJ 프로젝트 만들었다. Tutorial 따라 했다. fun main() { println("Hello, Kotlin!") } 실행했다. 됐다. 다음 단계. 변수 선언. val, var. 함수 선언. fun. 클래스 선언. class, data class. 따라 쳤다. 30분. 이해했나? 조금. 근데 이걸 언제 다 배우지. 공식 문서 스크롤 내렸다. Coroutines, Flow, Sealed Classes, Extension Functions... 페이지가 끝없다. 시계 봤다. 10시. 내일 토요일이긴 한데. 피곤하다. 또. "내일 이어서." 저장하고 껐다. 토요일 아침, 현실 일어났다. 아내가 말했다. "오늘 애들 학원 데려다줘야 해." "알았어." "그리고 저녁에 친구 부부 온대." "...응." 공부 시간? 없다. 일요일? 부모님 뵈러 가는 날이다. 다음 주? 회의 12개 잡혀있다. 언제 하지. 진짜 언제. 월요일 오전, 마음의 거리 출근했다. Slack 열었다. 최대리가 올렸다. "주말에 Tauri 써봤는데 Electron보다 가볍네요!" Tauri. 또 모르는 거다. 검색했다. Rust로 만든 데스크톱 앱 프레임워크. Rust 배워야 쓸 수 있다. 창 닫았다. 김대리가 다가왔다. "파트장님, 코틀린 괜찮죠?" "어, 좋지." "그럼 다음 프로젝트 코틀린으로 갈게요!" "...그래." 괜찮은지 모른다. 사실. 근데 막을 이유도 없다. 후배들이 하고 싶어 하니까. 나? 나는 코드리뷰나 하면 된다. LGTM만 달면 된다. 그게 파트장 일이다. 그렇게 생각하기로 했다. 수요일 점심, 동기 만남 대학 동기 만났다. 삼성 다니는 친구다. "너 요즘 뭐 해?" "바빠. 넌?" "나도. 근데 너 코딩 아직 해?" "당연하지. 넌?" "나 작년부터 안 해. 관리만." "어떤데?" "편하긴 한데... 뭔가 찝찝해." "나도." 둘 다 웃었다. "요즘 애들 뭐 쓰냐?" "코틀린, 넥스트, 러스트." "배워?" "못 배워. 넌?" "나도." 또 웃었다. 웃긴데 슬프다. 금요일 저녁, 퇴근길 9시 퇴근이다. 지하철 탔다. 핸드폰 켰다. 유튜브 열었다. "코틀린 기초 강의 1화" 저장했다. "나중에 봐야지." 저장 목록 열었다. 197개 영상. 다 안 본 거다. "나중에 보기"가 "영원히 안 보기"다. 알고 있다. 창 닫았다. 집 도착했다. 씻고 누웠다. 내일 토요일. 이번엔 정말 공부해야지. 근데 될까? 모르겠다. 그다음 주 월요일, 반복 출근했다. 또 Slack. 박주임이 올렸다. "Svelte 5 나왔네요! 신택스 완전 바뀌었어요!" Svelte. 프론트엔드 프레임워크. React, Vue 말고 또 다른 거. 배워야 하나? 아니. 못 배운다. 이미 밀린 게 세 개다. 네 개는 못 한다. 답장 안 했다. 읽음만 표시됐다. 목요일 오후, CTO와 면담 CTO가 불렀다. 임원이다. 50대. "박 파트장, 요즘 팀 분위기 어때?" "좋습니다." "기술 스택은?" "후배들이 잘 선정하고 있습니다." "자네는?" "...저는 관리하고 있습니다." "코딩은?" "가끔 합니다." 거짓말이다. 거의 안 한다. "나도 그랬어. 40대 되면 그래." CTO가 웃었다. 위로인가 싶었는데. "근데 기술은 계속 봐야 해. 안 그러면 후배들이랑 대화가 안 돼." "...네." "나 요즘 주말에 공부해. ChatGPT API 써보고 있어." "대단하십니다." "자네도 해. 시간 내." "노력하겠습니다." 나왔다. CTO는 50대인데 공부한다. 나는 45인데 못 한다. 뭐가 문제일까. 시간? 의지? 체력? 다인 것 같다. 금요일 밤, 혼자 앉아서 집이다. 11시. 다들 잤다. 나만 깨어있다. 노트북 앞에 앉았다. 코틀린 프로젝트 열었다. 지난주에 만든 거다. 코드 몇 줄 있다. 이어서 쓰려고 했다. 근데 뭘 쓰지? Tutorial 다시 열었다. 5분 읽었다. 졸리다. 커피 마셨다. 10분 더 읽었다. 내용이 안 들어온다. 머리가 안 돌아간다. "내일 하자." 또. 내일, 내일, 내일. 항상 내일이다. 근데 내일 오면 또 못 한다. 그다음 날, 토요일 낮 일어났다. 10시. 씻고 커피 마셨다. "오늘은 진짜." 서재 들어갔다. 노트북 켰다. Rust 설치했다. rustup. 설치만 30분. "Hello, World!" 예제 따라 했다. 됐다. 다음은? 공식 문서 The Book 열었다. 챕터 1. 시작하기. 읽었다. 이해했다. 챕터 2. Guessing Game. 따라 쳤다. 에러 났다. 해결했다. 챕터 3. 변수와... 문 열렸다. "아빠 심심해." 딸이다. "아빠 공부 중이야." "뭐 공부?" "컴퓨터." "나도 할래!" 무릎에 앉았다. 같이 봤다. "이게 뭐야?" "코드라는 거야." "재미없어." 5분 만에 나갔다. 다시 책 열었다. 어디까지 봤지? 챕터 3. 아, 여기. 10분 읽었다. 배고프다. 점심 먹어야지. 시계 봤다. 12시. 오후에 하자. 오후엔 아들이 PC방 가자고 했다. 같이 갔다. 두 시간. 돌아와서 4시. 피곤하다. 소파에 누웠다. 눈 감았다. 깼다. 7시. 저녁 먹었다. 9시. 노트북 다시 켰다. Rust 챕터 3. 읽다가 챕터 1 내용 기억 안 나서 다시 봤다. 11시. 또 졸리다. "내일." 일요일, 포기하는 순간 일어났다. 노트북 안 켰다. 가족이랑 영화 봤다. 저녁 먹고 산책했다. 공부 생각 안 났다. 아니, 안 하기로 했다. 오늘 하루는. 하루쯤은 괜찮다. 그렇게 생각했다. 근데 마음 한구석이 불편하다. '나 뒤처지는 거 아냐?' 이 생각. 떨쳐지지 않는다. 다음 주 수요일, 회의에서 프로젝트 회의다. 김대리가 발표한다. "코틀린으로 전환하면서 null safety 확보하고, coroutine으로 비동기 처리 개선했습니다." "보일러플레이트 코드 30% 감소했고요." "테스트 코드도 더 간결해졌습니다." 다들 박수. 나도 쳤다. "잘했어." 말했다. 속으로 생각했다. '나 저거 하나도 못 짜.' 목요일 저녁, 기술 블로그 퇴근하고 집. 저녁 먹고 핸드폰 봤다. 기술 블로그 구독한 거 있다. 새 글 알림 왔다. "45세 개발자의 Rust 학습기" 클릭했다. 읽었다. "저도 배우기 힘들었습니다. 하지만 매일 30분씩, 3개월 했더니 어느새 프로젝트를 만들고 있었습니다." 매일 30분. 나도 할 수 있을 것 같다. 아니. 못 한다. 지난 한 달 돌아봤다. 제대로 공부한 날? 없다. 30분? 10분도 못 했다. 블로그 닫았다. 금요일 밤, 솔직해지는 시간 혼자 앉아있다. 맥주 마셨다. 생각했다. 나 왜 못 배우지? 시간이 없어서? 아니다. 시간은 있다. 주말 이틀. 하루 2시간만 써도 4시간. 한 달이면 16시간. Tutorial 하나는 끝낸다. 근데 못 한다. 왜? 피곤해서? 맞다. 피곤하다. 근데 후배들도 피곤하다. 김대리도 야근한다. 근데 공부한다. 뭐가 다른가? 나이? 체력? 그것도 있다. 근데 진짜 이유는. 동기부여. 없다. 배워야 하는 이유가 약하다. 지금도 잘 먹고 산다. 연봉 9500. 코틀린 못 해도 파트장이다. Rust 못 해도 아무도 뭐라 안 한다. Next.js 몰라도 회의는 주재한다. 문제없다. 당장은. 그게 문제다. 다음 주 월요일, 채용공고 점심시간. 링크드인 봤다. 채용공고 떴다. "Senior Backend Engineer" 클릭했다. 자격요건 봤다. "Kotlin, Spring Boot, Microservices" "Cloud: AWS, GCP" "Containerization: Docker, Kubernetes" "Message Queue: Kafka, RabbitMQ" 다 아는 단어다. 근데 다 못 한다. Spring Boot? 한다. Kotlin? 못 한다. AWS? 조금. Kubernetes? 들어만 봤다. Kafka? 개념만. 50%도 못 채운다. 우대사항 봤다.