무한 우주에 순간의 빛일지라도

묘니·2025년 9월 19일
0

개발 3년차, 코딩이 힘들어진 순간 다시 얻게된 의지

"무한 우주에 순간의 빛일지라도"

누리호 발사를 다루며 연합뉴스에서 사용된 제목인데, 제가 가장 좋아하는 말입니다.
낭만적이지 않나요?
드넓은 우주에 인간은 아주 작은 점과 같은 존재라는 사실을 실감하면서도,
결국 도전하는 삶이 멋지다는 걸 부정할 수 없게 만드는 말이라고 생각합니다.

다른 부트캠프를 수강했음에도 루퍼스를 재수강한 이유

3년차, 곧 4년차 개발자의 길목에 서 있는 저는 깊은 고민에 빠져 있었습니다.
2년 8개월 동안 두 번의 이직을 거치며 다양한 도메인을 접해봤지만 크게 흥미있는 도메인을 찾지 못했고, 개발을 가볍게 시작했던 만큼 '이 일이 정말 내게 맞는가?'에 대한 확신이 부족했습니다.

특히 최근에 이직한 회사는 새롭고도 생소한 미디어 도메인인데다, 새로 맡은 직무는 일반적인 웹프론트라기에도 애매한 Electron 기반의 Window 애플리케이션에서, 그것도 WebSocket 서버 통신용 라이브러리를 개발하게 되니 미치고 팔짝 뛸 노릇이었습니다.
아무도 절 괴롭히지 않는데 단순히 일이 힘들어서 버티기 어렵다는 생각을 한 건 이번이 처음이었습니다.

일 자체도 어려운데 더군다나 이 일을 버텨서 내가 얻는 게 있을까? 라는 불확실함에 갇혀, 솔직히 불안함을 해소하기 위해 루퍼스 과정을 시작했습니다. 지난 부트캠프를 열심히 수강하지 않아 아쉬움이 남았다는 이유도 있었고, 백엔드 감각이 흐려지는 것이 두렵기도 했습니다.

그리고 질문조차도 명확하지 않았지만, 지난 10주간 저는 어찌저찌 그 답을 찾아낸 것 같습니다.

10주간의 여정: 대기업 실무와 싱크 맞추기

1–4주차: TDD, 레이어드 아키텍처, 도메인 설계 그리고 동시성 제어

이미 많이 접했던 내용이라 어느 정도는 알고 있었지만 이번 과정을 통해 명확하게 이해하게 되었습니다.

1-3주차 - 설계

중요한 것은 설계와 코드에는 정답이 없다는 것입니다.
각 레이어의 역할을 정확히 이해하고 있다면, 상황에 따라 가장 합리적인 구조를 스스로 결정할 수 있으며, 그래야 한다는 것이었습니다. 자신의 결정에 명확한 근거가 있는 걸로 충분하다는 것을 깨달았습니다.

또한 그 결정을 어떻게 체계적으로 다른 사람에게 전달할 수 있는지, 클래스 다이어그램 등 다양한 그래프로 어떻게 설득력있게 문서화하는지를 배울 수 있었습니다.

4주차 - 동시성 제어

'Race Condition'도 익숙한 주제였지만, 이번 기회에 락(Lock)의 개념을 다시 한번 확실히 짚고 넘어갈 수 있었습니다. 특히 실제 서비스에서 동시성 문제를 어떻게 해결해야 하는지 구체적인 방법을 배운 것이 큰 도움이 되었습니다.

5주차: 인덱스와 캐시 설계

인덱스는 실제로 실무에서 적용해보기도 했고, 대부분의 개발자들이 모르기 어려운 주제라고 생각합니다.
하지만 동시에 정확히 이해하고 사용하기는 어려운데, 이번 기회에 특히 복합 인덱스의 동작에 대해 깊게 학습할 수 있었습니다.

또한 느린 조회를 인덱스 재배치와 캐시(Redis)로 개선하기도 했습니다.

다만 결국 이 과정에서 가장 중요하게 배울 수 있었던 것은 기술을 통한 설계방향을 넘어, 실제 테스트를 기반으로 한 수치로 제 가설이 검증되어야 한다는 점이었습니다.

6주차: 외부 시스템 연동

외부 시스템과의 연동 시 발생하는 장애 및 지연에 대응하는 구조와, 특히 Spring 환경에서 사용되는 Resilience4j에 대해 학습할 수 있었습니다.

실제 PG는 아니었지만 PG모듈을 통해 연동 환경을 경험해볼 수 있었다는 점도 좋았습니다.

현재 담당중인 업무에서도 프론트엔드의 라이브러리 개발 시 네트워크 커넥션 관리를 해야 했는데, 유사한 방식을 사용한다는 것을 이해할 수 있어서 개인적으로 인상깊었습니다.

7–8주차: 이벤트 드리븐과 카프카

실시간성을 어느 정도 포기하더라도, 간결한 구조와 느슨한 결합을 통해 가용성 있는 시스템을 만드는 연습을 할 수 있었습니다.
특히 카프카 기반의 이벤트 파이프라인을 직접 구축해보면서 이벤트 파이프라인을 어떤 순간에 도입해야하는 지에 대한 감각을 어느 정도 익힐 수 있었습니다.

9–10주차: 랭킹 시스템과 배치

기존에 크론잡을 사용해 MQTT 메시지를 처리하거나 통계 데이터를 저장해 본 적은 있지만, 스프링 배치(Spring Batch)를 사용해 별도의 Job을 구성하고 MV(Materialized View)를 만들어 본 적은 없었습니다.

이 과정을 통해 대규모 시스템에서 어떻게 확장성 있게 배치 작업을 구성하는지 배울 수 있었습니다.

루퍼스를 통해 얻은 것

개발은 상상력이 풍부해야 잘 할수 있다.

많이 들은 말이죠?(ㅋㅋㅋ)
하지만 인풋이 있어야 아웃풋이 있는 법.
그 상상력도 결국 다양한 경험에서 나온다고 생각합니다.

루퍼스는 바로 그 경험을 채우고, 다양한 상황을 가정하고 실무에서의 예시를 통해 상상하는 힘을 길러주는 과정이었다고 생각합니다.
그리고 또 중요한 것은, 제 옆을 함께해줄 든든한 동료들도 얻을 수 있다는 점입니다.

10주간 저희 1조의 팀원들과, 그리고 다른 조의 팀원들과 소통하면서
다양하고 또 같은 고민을 나누고 토론하는 과정이 큰 의지가 됐습니다.

루퍼스 과정을 통해 제가 어떤 것을 어떤 태도로 학습해야할 지에 대해 배웠고,
개발자로서 어떤 방향으로 나아가야 할지 어느 정도 길을 찾았습니다.
이 경험을 통해 앞으로 마주할 어려움들을 이전에 비해 조금은 더 단단한 마음으로 마주할 수 있을 것 같습니다.

아마 이번 과정이 제 마지막 부트캠프가 될 것 같습니다.
루퍼스를 수강하고 더이상 부트캠프를 듣지 않아도 된다는 확신을 얻은 것 만으로도 충분히 좋은 경험이었다고 생각합니다.

이제는 세상에 저의 빛을 한 줄기 남기기 위해 노력할 일만 남았습니다.
어쩌면 미약하게 사라질지언정 도전하는 삶은 늘 빛나니까요.

0개의 댓글