18 minute read

항상 마음속에 걸리던 것이 하나 있었다. 바로 기록이었다. 개발자로 일하면서 인터넷을 돌아다니며 새로운 정보를 찾는 일은 나에게 일상이다. 주니어 개발자로 커리어를 시작한 뒤에는 선배 개발자들이 어떤 과정을 거쳐 성장했는지, 커리어 초반을 어떻게 보내야 하는지에 관한 글을 주로 찾아봤다.

그러던 중 한 블로그에서 본 문장이 기억에 남았다.

소프트웨어 개발자는 지식 노동자이기 때문에 자신이 습득한 지식에 빠르게 접근할 수 있는 시스템이 필요하다는 내용이었다.

기억은 휘발된다. 모든 것을 기억할 수는 없지만 기록을 남겨두면 필요할 때 다시 찾아가 당시의 생각과 경험을 복원할 수 있다.

결국 기록은 개발자가 갖춰야 할 장인정신과도 연결된다고 생각한다. 그래서 꾸준히 미뤄왔던 블로그 글쓰기를 작년 말부터 시작했고, 개인 지식 베이스로 사용할 Obsidian도 구축했다.

이번 상반기 회고는 커리어, 영어, 공부, 운동을 중심으로 정리해보려고 한다.

커리어

남들 앞에 선다는 것은 생각보다 어렵다.

내가 알고 있는 내용을 정리해 전달해야 하고, 현장에서 즉흥적으로 들어오는 질문에도 상대방이 납득할 수 있는 답을 해야 한다. 그러기 위해서는 내가 했던 일을 단순히 수행하는 데서 끝내지 않고 깊고 넓게 이해해야 한다.

상반기에는 발표와 제품 소개, 고객 및 파트너사와의 소통을 경험하며 이러한 역량의 중요성을 많이 느꼈다.

개발 세미나 발표

우리 회사와 협력 관계에 있는 회사와 개발자들을 대상으로 개발 세미나를 진행했다.

세미나에서는 우리가 납품하는 솔루션의 개발 방향과 함께, 고객사의 여러 시스템에 흩어진 데이터를 어떻게 중앙에서 관리하고 재사용 가능한 형태로 만들 수 있는지를 설명했다.

Python 생태계와 오픈소스의 특성을 바탕으로 자동화 시스템을 구축하는 방법, 분산된 데이터를 하나의 신뢰 가능한 데이터 원천으로 관리하는 방법, 반복 작업을 줄여 전체 작업 공정을 효율화하는 방법을 사례 중심으로 전달했다.

특정 프로젝트의 구현 방법만 설명하기보다 여러 환경에서 공통적으로 적용할 수 있는 원칙과 방법론을 전달하려고 했다.

발표를 준비하면서 다른 사람들은 어떻게 청중에게 내용을 전달하는지 궁금해졌다. 웨비나와 PyCon 발표 영상을 찾아보며 발표의 구성, 말의 속도, 청중과 교감하는 방식을 참고했다.

발표는 내가 아는 것을 보여주는 자리가 아니라 상대방이 이해할 수 있도록 설명하는 자리라는 것을 배웠다.

devcon_dnc.jpg

마곡 D&C 사옥 RED관에서 진행한 개발 세미나

크래프톤 개발자 컨퍼런스 KDC 세션

프로젝트 종료 이후인 2월, 크래프톤과 함께 진행했던 프로젝트가 개발자 컨퍼런스의 세션 주제로 선정되었다. 이후 5월에는 고객사와 함께 실제 프로젝트 사례를 발표할 수 있는 기회를 얻었다.

발표의 중심 주제는 생성형 AI 시대에 빠르게 증가하는 데이터를 어떻게 가치 있는 자산으로 전환할 것인가 하는 것이었다.

AI를 통해 콘텐츠 생산성은 크게 높아졌지만, 동시에 관리되지 않은 결과물이 무분별하게 생성되는 문제도 생겼다. 우리는 이러한 데이터를 중앙에서 관리하고, 재사용 가능한 자산으로 전환해 실제 제작 파이프라인에 연결하는 방법을 고민했다.

지리적으로 분산된 스튜디오 사이에서 생성형 AI 결과물을 공유하고, 이를 내부 제작 시스템에 자동으로 등록해 반복적으로 활용할 수 있는 파이프라인을 구축했다.

프로젝트를 진행하는 동안 크래프톤 본사 개발자뿐 아니라 일본 스튜디오의 PM과도 긴밀히 소통했다. 서로 다른 국가와 역할을 가진 사람들과 협업하면서 명확한 소통의 중요성을 느꼈다.

B2B 프로젝트에서 중요한 것은 우리 제품의 기능을 많이 설명하는 것이 아니었다. 먼저 고객이 처한 상황을 이해하고, 불편한 지점을 구체화한 뒤, 우리가 제공할 수 있는 가치를 고객의 언어로 전달하는 것이 더 중요했다.

Slack을 통한 비대면 소통에서도 질문의 의도를 명확히 확인하고 문제를 구체화하려고 했다. 고객의 불편한 지점을 이해하고 해결 방향을 함께 만들어갔던 과정이 발표 주제로 이어질 수 있었다고 생각한다.

devcon_krafton.JPG

크래프톤 판교 사옥에서 진행한 개발자 세션

영어

전 세계 인터넷 정보의 상당 부분은 영어로 작성되어 있다.

개발자가 사용하는 공식 문서와 기술 자료, 수많은 오픈소스 프로젝트도 대부분 영어를 기반으로 한다. 영어를 잘 활용할 수 있다면 더 깊고 넓은 정보에 접근할 수 있고, 오픈소스 커뮤니티에도 직접 참여할 수 있다.

나 역시 실무에서 영어로 작성된 문서와 자료를 자주 접해왔다.

나는 해외에서 대학을 나왔기 때문에 영어를 읽고 듣고 이해하는 데 큰 어려움은 없다. 하지만 학부 생활 대부분이 코로나19 팬데믹과 겹치며 비대면 수업으로 진행되었기 때문에 실제 사람들과 영어로 소통하는 경험은 부족했다.

팬데믹이 없었다면 영어를 더 유창하게 사용할 수 있지 않았을까 하는 아쉬움도 있었다.

올해는 그 부족한 부분을 채우기 위해 개인 영어 과외와 컬컴 리더 활동을 병행했다.

컬컴 리더 활동

컬컴에서 리더로 활동한 지도 어느덧 반년 정도가 되어간다.

리더의 역할은 약 두 시간 동안 참여자들이 고르게 말할 수 있도록 대화를 조율하고, 다양한 주제에 관한 토론을 진행하는 것이다.

내가 맡은 그룹은 가장 높은 레벨이기 때문에 참여자들이 자신의 의견을 명확하게 표현하고, 사회 이슈나 국제 정세처럼 다소 복잡한 주제에 대해서도 깊게 이야기한다.

처음에는 심리적인 부담이 컸다. 이전 리더는 국내외 정치부터 과학과 사회 문제까지 폭넓은 배경지식을 가지고 있었고, 자신의 가치관과 의견도 분명했다.

그분이 개인적인 사정으로 물러난 뒤 내가 리더 역할을 이어받았을 때는 나 역시 그분과 같은 방식으로 진행해야 한다고 생각했다.

하지만 시간이 지나면서 중요한 것은 누군가의 방식을 그대로 따라 하는 것이 아니라는 점을 깨달았다.

리더에게 필요한 것은 모든 주제에 대한 답을 알고 있는 것이 아니라, 참여자들이 편안하게 의견을 말할 수 있도록 조율하고 서로 다른 의견을 자연스럽게 연결하는 능력이었다.

꾸준히 활동하면서 대화를 조율하고 이끄는 능력도 조금씩 길러졌다.

컬컴을 통해 다양한 연령대와 배경을 가진 사람들을 만날 수 있었다. 20대부터 60대까지 다양한 참여자들이 있었고, 가끔 외국인들까지도 대화를 나눴다.

각자가 살아온 환경과 참여 목적이 다르기 때문에 같은 주제에 대해서도 다양한 관점을 들을 수 있다는 점이 좋았다.

culcum.jpg

컬컴 영어 회화 모임에서 리더로 활동한 모습

영어와 논리적으로 말하기

리더 활동을 하면서 영어를 잘하는 것과 말을 논리적으로 잘하는 것은 서로 다른 능력이라는 점을 다시 깨달았다.

말을 잘하기 위해서는 전달하려는 주장에 논리가 있어야 하고, 이를 뒷받침할 근거나 사례가 필요하다. 상대방을 납득시키거나 설득하려면 언어 능력뿐 아니라 배경지식과 사고력도 함께 필요하다.

영어 실력 역시 조금씩 향상되고 있다고 느낀다.

이전보다 생각과 생각 사이를 연결하는 표현이나 Filling words 가 자연스럽게 나오기 시작했고, 한국어로 생각한 문장을 다시 영어로 번역하는 과정도 점차 줄어들었다.

한국어로 말할 때는 한국어로 생각하고, 영어로 말할 때는 영어로 생각해야 한다. 두 과정이 섞이면 번역하는 시간이 필요해지고 말을 주저하거나 문장이 끊기게 된다.

꾸준히 영어를 사용하다 보니 뇌 안에 단어와 표현을 연결하는 새로운 경로가 만들어지는 느낌이 들었다. 개발에 비유하자면 자주 사용하는 표현에 인덱스를 생성해두는 것과 비슷하다.

언어 학습에는 지름길이 없고 많은 시간이 걸린다. 이 또한 꾸준히 이어가야 하는 마라톤에 가깝다.

업무 속 영어 환경

회사에서도 영어를 사용할 기회가 있었다.

우리 회사는 Autodesk를 포함한 해외 소프트웨어 벤더사와 밀접하게 협업하고 있다. Autodesk의 부사장과 아시아태평양 지역 매니저 등 해외 임원들이 회사를 방문했을 때 파트너사로서 현재 개발 중인 프로젝트와 사업 방향을 영어로 소개하는 자리에 참여했다.

해외 파트너와의 미팅에서는 기술적인 내용을 정확하게 설명하는 것도 중요했지만, 상대방의 질문을 빠르게 파악하고 핵심을 전달하는 능력이 더 중요하다는 것을 느꼈다.

국제 행사가 열린 코엑스 전시회에도 참여해 우리 회사의 제품을 소개했다. 다양한 국가에서 온 방문객에게 제품의 기능과 사용 방법을 영어로 설명하고, 직접 체험할 수 있도록 안내했다.

공부를 위한 영어가 아니라 실제 업무와 사람 사이의 소통을 위한 영어를 사용할 수 있었던 경험이었다.

coex.JPG

코엑스 국제 행사에서 제품을 소개한 모습

공부

작년 회고에서 가장 아쉬웠던 부분은 독서였다.

올해는 현업만으로 채우기 어려운 기초 지식과 시스템에 대한 이해를 보완하기 위해 전공서를 중심으로 읽었다.

상반기에는 총 여섯 권의 책을 읽었고, Real MySQL 1권과 2권도 읽기 시작했다.

2023년 말, 학부 4학년 당시 ChatGPT를 처음 접했을 때는 매우 혁신적이라고 느꼈다. 이후 거의 매일 AI를 사용하면서 업무와 학습의 생산성도 크게 높아졌다.

하지만 AI를 많이 사용할수록 결과에 의존하게 되는 문제도 느꼈다.

AI는 때때로 사실이 아닌 내용을 확신을 가지고 말한다. 직감적으로 잘못된 답변이라는 느낌이 들 때도 있지만, 기본 지식이 부족하면 무엇이 잘못되었는지 정확히 판단하기 어렵다.

AI를 사용하지 않는 것이 목표는 아니다. AI가 생성한 결과를 검증하고 올바르게 활용하기 위해 내가 먼저 판단할 수 있는 기초를 갖추는 것이 목표다.

그래서 Python의 기본부터 비동기 프로그래밍, 컨테이너, Kubernetes, 분산 시스템까지 순서대로 공부했다.

Effective Python 개정 3판

Python 개발자로 일하면서 어느 순간 AI의 도움 없이는 코드를 읽거나 작성하는 일이 어려워지고 있다는 느낌을 받았다.

도구 없이도 내 눈으로 코드의 동작을 이해하고, 더 나은 코드를 판단할 수 있는 기준을 만들기 위해 이 책을 읽었다.

책을 읽으며 파이썬다운 코드가 단순히 문법을 짧게 사용하는 것을 의미하지 않는다는 점을 다시 생각하게 되었다.

Python에서는 모든 것이 객체이며, 언어가 제공하는 특성과 자료구조를 제대로 이해해야 읽기 쉽고 안전한 코드를 작성할 수 있다.

실무에서 익숙하게 사용하던 코드도 왜 그렇게 동작하는지 다시 확인할 수 있었다. 앞으로는 단순히 실행되는 코드를 넘어 다른 사람이 읽고 수정하기 쉬운 코드를 작성하고 싶다.

파이썬 비동기 라이브러리 Asyncio

실무에서 네트워크 요청이나 파일 처리처럼 입출력 작업이 병목이 되는 상황을 자주 경험했다.

비동기 처리가 빠르다는 정도로만 알고 있었지만, 이벤트 루프가 어떻게 동작하고 코루틴이 어떤 방식으로 실행권을 양보하는지 제대로 이해하고 싶어 책을 읽었다.

비동기는 모든 작업을 병렬로 실행하는 기술이 아니었다. 하나의 스레드 안에서 작업이 대기하는 시간을 활용해 다른 작업을 진행하는 협력적 동시성에 가까웠다.

CPU 중심 작업과 입출력 중심 작업을 구분해야 하고, 상황에 따라 스레드나 프로세스를 함께 사용해야 한다는 점도 배웠다.

내용이 쉽지는 않았지만, 실무에서 비동기를 적용해야 하는 상황과 적용하지 말아야 하는 상황을 구분할 수 있는 기준을 만들 수 있었다.

시작하세요 도커/쿠버네티스

개발 환경에서는 잘 동작하던 서비스가 운영 환경에서는 동작하지 않는 문제를 줄이기 위해 컨테이너 기술을 공부했다.

Docker 이미지와 컨테이너의 차이, 이미지 계층, 볼륨, 네트워크 구조부터 시작해 Docker Compose와 Kubernetes까지 실습했다.

단순히 명령어를 외우기보다 컨테이너가 호스트의 네임스페이스와 cgroup을 어떻게 사용하는지, 네트워크가 어떤 방식으로 연결되는지를 이해하려고 했다.

Kubernetes에서는 Pod, Deployment, Service, Ingress가 각각 어떤 역할을 담당하는지 실습을 통해 확인했다.

코어 쿠버네티스

앞선 책에서 Kubernetes의 사용 방법을 익혔다면, 코어 쿠버네티스에서는 내부 구조와 동작 원리를 중심으로 공부했다.

가장 중요하게 이해한 것은 Kubernetes가 동작하는 기본 원리였다.

사용자가 선언한 원하는 상태는 API Server를 통해 etcd에 저장된다. Control Plane의 Controller들은 클러스터의 현재 상태(Actual state)를 지속적으로 관찰하고 원하는 상태(Desired state)와 비교한다. 두 상태가 다르면 필요한 작업을 수행해 현재 상태를 원하는 상태에 가깝게 맞춘다.

예를 들어 사용자가 복제본을 세 개로 선언했는데 실제 Pod가 두 개만 실행 중이라면, Controller가 차이를 감지해 새로운 Pod가 생성되도록 한다.

Kubernetes는 개별 명령을 순서대로 실행하는 시스템이라기보다, 선언된 상태와 현재 상태의 차이를 반복적으로 조정하는 제어 루프 기반 시스템이었다.

API Server, Scheduler, Controller Manager, kubelet이 각각 어떤 역할을 맡고 서로 어떻게 상호작용하는지도 살펴봤다. 또한 CNI, CSI, CRI와 같은 인터페이스를 통해 Kubernetes가 특정 네트워크, 스토리지, 컨테이너 런타임에 종속되지 않는 구조를 만든다는 점도 인상 깊었다.

이를 통해 Kubernetes를 단순한 배포 도구가 아니라 분산된 자원의 상태를 지속적으로 관리하는 제어 시스템으로 이해하게 되었다.

데이터 중심 애플리케이션 설계

일명 멧돼지 책이라고 불리는 데이터 중심 애플리케이션 설계도 상반기에 완독했다.

내용이 워낙 방대해 한두 가지 개념으로 정리하기 어려운 책이었다. 대규모 데이터 시스템을 설계하기 위해 필요한 저장과 조회부터 복제, 파티셔닝, 트랜잭션, 일관성, 배치 처리, 스트림 처리까지 폭넓게 다룬다.

특히 온라인 서비스의 요청을 빠르게 처리하는 트랜잭션 처리 시스템과 대량의 데이터를 분석하는 데이터 웨어하우스가 서로 다른 목적과 특성을 가진다는 점이 기억에 남았다.

트랜잭션 시스템은 낮은 지연 시간으로 많은 읽기와 쓰기를 처리해야 하는 반면, 데이터 웨어하우스는 여러 시스템에서 수집한 대규모 데이터를 대상으로 복잡한 분석 쿼리를 수행하는 데 초점이 맞춰져 있다.

책의 후반부에서는 여러 노드로 구성된 분산 시스템에서 발생하는 네트워크 지연, 부분 장애, 시계 문제와 함께 일관성, 합의, 분산 트랜잭션 같은 주제도 다뤘다.

분산 시스템에서는 모든 노드가 같은 상태를 즉시 공유할 수 없으며, 일부 구성 요소가 실패하더라도 나머지 시스템은 계속 동작할 수 있다는 점을 기본 전제로 삼아야 했다.

이 책을 읽고 나서 시스템 문제를 이전보다 여러 관점으로 나누어 생각하게 되었다. 단순히 서버가 느리다고 결론 내리기보다 네트워크, 데이터베이스, 애플리케이션, 큐, 재시도 정책, 데이터 모델과 일관성 요구사항 등을 함께 확인해야 한다는 기준이 생겼다.

한 번의 완독으로 모든 내용을 이해하기는 어려웠다. 앞으로 실제 시스템 설계와 장애 사례를 공부하면서 필요한 부분을 반복해서 다시 읽을 생각이다.

books.JPG

상반기에 읽은 개발 전공서

Who Moved My Cheese

전공서 외에는 Who Moved My Cheese를 지인의 추천으로 영어 원서로 읽었다.

작품에는 두 마리 생쥐인 Sniff와 Scurry, 그리고 꼬마 인간인 Hem과 Haw가 등장한다. 네 인물은 미로 속에서 자신들이 원하는 치즈를 찾아다닌다. 어느 날 익숙한 장소에 있던 치즈가 사라지자 각 인물은 서로 다른 방식으로 변화에 대응한다.

Sniff와 Scurry는 상황이 달라졌다는 사실을 빠르게 받아들이고 곧바로 새로운 치즈를 찾아 나선다. 반면 Hem과 Haw는 사라진 치즈를 되찾기를 기다리며 변화를 거부한다. 시간이 흐른 뒤 Haw는 두려움을 이겨내고 미로로 다시 나아가지만, Hem은 익숙한 장소에 남기를 선택한다.

단순한 이야기지만 변화 앞에서 사람이 보이는 여러 태도를 네 인물을 통해 쉽게 보여준다. 변화를 빠르게 감지하는 사람, 고민하기보다 행동하는 사람, 과거에 집착하는 사람, 두려움을 극복하고 뒤늦게라도 움직이는 사람의 모습을 생각해 볼 수 있었다.

개발 환경에서도 기술과 도구는 계속 바뀐다. 특히 AI의 등장 이후 개발자가 일하는 방식도 빠르게 변화하고 있다.

변화를 무조건 두려워하거나 맹목적으로 따라가기보다, 변화가 일어나고 있다는 사실을 먼저 인지하고 새로운 환경에 적응할 준비를 해야 한다. 동시에 변화 속에서도 내가 유지해야 할 기본 역량이 무엇인지 판단할 수 있어야 한다.

결국 중요한 것은 익숙한 환경이 사라지는 것을 두려워하는 것이 아니라, 새로운 환경에서도 다시 배우고 움직일 수 있는 태도라고 생각한다.

운동

수영

상반기에는 약 85km를 수영했고, 그 과정에서 한강 크로스 스위밍에도 참가했다.

같은 고급반 레인의 회원님의 권유로 참여하게 되었다. 오픈 워터에서는 수영장과 달리 시야 확보, 방향 유지, 호흡, 체력 조절 등 여러 요소를 함께 신경 써야 했다.

처음에는 한강을 끝까지 건널 수 있을지 걱정했지만, 빠르게 가려고 하기보다 나만의 속도를 유지하는 것이 중요했고 실제로 한강을 건너 완주했을 때는 큰 성취감을 느꼈다.

수영은 힘으로만 앞으로 가려고 하면 금방 지치지만, 자세와 호흡을 조절하면 같은 힘으로도 더 멀리 갈 수 있다.

공부와 커리어도 비슷하다는 생각이 들었다. 순간적으로 몰아서 하기보다 올바른 방식과 오래 유지할 수 있는 속도를 찾는 것이 중요하다.

러닝

상반기에는 약 100km를 달렸다. 5KM PB는 4:27로 단축했다.

러닝은 준비해야 할 장비가 많지 않고 짧은 시간에도 시작할 수 있다는 점이 좋았다. 컨디션이 좋을 때는 속도를 높이고, 힘든 날에는 천천히 달리며 운동을 이어갔다.

달리는 동안에는 복잡해진 생각을 정리할 수 있었다. 확실히 정신이 맑아져서 이후에 공부를 하면 더 집중이 잘 되는 것 같았다.

상반기 정리

상반기에는 이전부터 부족하다고 느꼈던 부분을 채우는 데 집중했다.

업무에서는 발표와 고객 소통 경험을 쌓았고, 영어에서는 실제로 말할 수 있는 환경을 만들었다. 공부에서는 Python의 기본부터 컨테이너, Kubernetes, 분산 시스템까지 폭넓게 학습했다. 운동에서는 수영과 러닝을 이어가며 한강 크로스 스위밍을 완주했다.

가장 크게 달라진 점은 기록하는 습관을 만들기 시작했다는 것이다.

배운 내용을 블로그와 Obsidian에 정리하면서 생각을 구조화하는 시간이 늘었고, 무엇을 알고 무엇을 모르는지 확인하는 데에도 도움이 되었다.

다만 많이 읽고 공부한 것에 비해 배운 내용을 실제 문제에 적용하거나 나만의 관점으로 정리하는 능력은 아직 부족하다. 기록 역시 학습 내용을 요약하는 수준에 머문 글이 많았다.

하반기에는

2026년 상반기는 빠르게 나아가기보다 오래 나아갈 수 있는 기반을 만드는 시간이었다.

하반기에는 더 많은 것을 배우는 데 그치지 않고 상반기에 공부한 내용을 실제 프로젝트에 적용해보고 싶다. AI의 답변을 그대로 사용하는 것이 아니라 정확한 피드백 과정을 통해 결과를 검증하고, 생산성을 높이면서도 품질을 놓치지 않는 개발 방식을 만들어가고 싶다.

영어에서는 더 다양한 주제에 대해 자연스럽게 말할 수 있도록 배경지식과 표현력을 함께 키울 생각이다. 컬컴에서는 리더로서 대화를 조율하고, 참여자에게 적절한 질문을 던지며 전체 흐름을 매끄럽게 이끄는 능력을 발전시키고 싶다.

공부에서는 Real MySQL 1권과 2권을 마무리하고, 전공서뿐 아니라 인문학과 사회과학 분야의 영어 원서도 꾸준히 읽어보려고 한다.

운동에서는 마라톤 대회에 참가하는 것을 목표로 삼고, 러닝과 수영에 더해 근력 운동의 비율도 높일 계획이다.

직접 설계하고 개발한 개인 블로그도 만들어보고 싶다. 기존 블로그 프레임워크를 그대로 사용하는 대신 처음부터 구축해보려고 한다.

단순히 공부한 내용을 옮겨 적는 공간이 아니라 내가 경험한 문제와 판단, 생각을 담아낼 수 있는 블로그를 만드는 것이 목표다.

다음 회고에서는 얼마나 많은 책을 읽었는지가 아니라, 무엇을 만들었고 어떤 문제를 해결했으며 어떤 생각을 세상에 남겼는지를 확인할 수 있으면 좋겠다.

Leave a comment