회고/스마일게이트 Dev Camp

[회고] 2025 스마일게이트 Dev Camp 기록

soeun2537 2025. 4. 14. 23:24

💭 들어가며

2024년 12월 말부터 2025년 2월까지 약 두 달간 진행된 스마일게이트 Dev Camp!

회고가 꽤 늦어졌네요. 바쁘다는 핑계로 미뤄 두기만 했는데, 이제야 짬을 내어 작성하게 되었습니다. 다행히 틈틈이 기록해 둔 것들이 있어, 그 내용을 바탕으로 회고를 작성하고자 해요. 😄

 

 

 

🏃🏻‍♂️ 함께 했던 사람들

함께 했던 캠프원들

올해의 첫 스타트를 함께한 Dev Camp 캠프원들! 처음엔 이렇게까지 돈독해질 줄 몰랐는데, 어느새 정말 가족 같은 분위기가 되었어요. 막내였는데, 참 예쁨을 많이 받았던 것 같습니다. 토론할 때 보면 모두가 정말 열정적이고, 배우려는 의지도 강해서 하나 같이 모두 멋진 사람들만 모였다는 생각이 들었습니다.

 

그리고 이 캠프를 누구보다도 잘 이끌어 주신 인재영입팀 과장님! 정말... 앞으로 이런 리더와 함께 일해보고 싶다는 생각이 들 정도였네요. 이렇게 가족 같은 분위기는 과장님 덕분이 아니었나 싶어요. 처음부터 끝까지 저희를 위해 아낌없이 정을 쏟아주시고, 모든 활동 하나하나를 진심으로 준비해 주신 덕분에 원활하게 진행될 수 있었다고 생각해요. 캠프원 한 명 한 명과 직접 커피챗을 하시며 모두에게 진심 어린 관심을 주시는 모습을 보며 많은 분들이 자연스럽게 따르게 된 게 아닐까 싶습니다. 진심으로 감사했습니다!

 

우리 BBeBig 팀

두 달간 함께 프로젝트를 진행했던 BBeBig 팀! 처음 팀을 배정받았을 때 B팀이어서 "B Be Big", 즉 B팀은 크게 되자는 의미로 팀명을 지었던 기억이 납니다. 어쩌다 이렇게 배정받았는지 모르겠지만, 정말 원초적이고, 밥 좋아하는 재밌는 사람들끼리 시끌벅적하게 지냈던 것 같습니다.

 

사실 이렇게 처음 보는 사람들과 큰 프로젝트를 함께해 본 건 처음이었는데요, 이번 경험을 통해 정말 팀원을 잘 만나야 한다는 것을 느꼈습니다. 연봉, 복지, 시설, 야근 여부 등 회사를 선택할 때 고려해야 할 요소들이 많다고 하지만, 좋은 사람들과 함께할 수 있다면 그 자체가 최고의 복지라는 것을 느꼈어요. 물론 저는 아직 회사를 다녀본 적이 없지만, 팀 간의 화합이 얼마나 큰 시너지를 낼 수 있는지를 몸소 느낄 수 있었습니다. 무엇보다도 이 분위기의 중심에는 우리 팀장님이 있었어요. 든든한 리더 덕분에 편하고 재미있게 프로젝트를 마칠 수 있었습니다. 덕분이에요~

 

 

 

🥵 MSA를 맛보다

이번 Dev Camp에서 디스코드 클론 프로젝트인 '비슷코드'를 진행했습니다.

 

MSA는 그동안 말로만 들었지, 직접 공부해 볼 엄두조차 나지 않았던 아키텍처였습니다. 주니어 개발자 입장에서 10개 가까운 서버를 로컬에서 돌린다는 건 말도 안 됐기 때문에, 현실적으로 접하기도 쉽지 않았기 때문이었어요. 그래서 이번 경험은 말 그대로 처음부터 끝까지 몸으로 부딪혀 배우는 과정이었습니다.

 

직접 해보니, 정말 공부할 게 많더라고요. API Gateway, Service Discovery, Load Balancer는 기본이고, Kafka와 Redis 같은 메시징, 캐시 시스템도 자연스럽게 손에 익혀야 했습니다. 저는 Docker도 이번에 처음 제대로 써봤는데, MSA는 단순히 서비스를 나눈다고 끝이 아니더라고요. 배포 전략, 공통 모듈화, 버전 관리 CI/CD까지 고려해야 할 요소가 정말 많았습니다. 정말 겪으면서 배웠습니다.

 

 

 

1️⃣ Passport 도입

첫 번째로, Passport를 도입했습니다. 프로젝트 이전에는 하나의 서버에서 Spring Security를 통해 인증을 처리하고 그 상태로 API를 호출하는 방식을 주로 사용해 왔습니다. 하지만 이번에는 여러 개의 서버로 나뉜 MSA 환경을 경험하면서 인증 방식에 대한 고민이 깊어졌어요. 기존 구조에서는 각 서버가 요청마다 JWT를 인증 서버에 검증 요청하고, 사용자 정보를 받아와야 했습니다. 이 방식은 인증 흐름이 복잡하고, 요청 소요 시간이 많을 것으로 예상되었어요.

 

그러다 토스와 넷플릭스에서 MSA 구조에서 Passport를 사용하는 사례를 접했고, 기술적으로도 흥미로워 보여 도입을 결정하게 되었어요. 이제는 인증 서버에서 사용자 정보를 포함한 Passport를 발급하고, 각 서버에서는 공통 모듈화된 Resolver를 통해 Passport에서 사용자 정보를 추출해 활용하는 구조로 변경했습니다. 다만, 인증서버는 Fastify로 구현되어 있었고, Passport 서버는 Spring 기반이라 별도로 띄워야 했습니다. (원래는 인증 서버 하나로 합쳐야 합니다.) 레퍼런스가 거의 없어 직접 부딪히며 구현해야 해서 정말 고생했습니다...

 

K6로 성능 테스트를 진행한 결과, Passport 도입 전후로 평균 요청 시간이 50.7% 감소했고, 최대 요청 시간은 80% 단축되었으며, 초당 처리할 수 있는 요청 수도 65.6% 증가하는 등 전반적인 성능이 크게 개선된 것을 볼 수 있었습니다. 처음으로 성능 비교 지표를 직접 만들어 본 경험이었는데, 결과도 기대 이상으로 나와서 뿌듯했고, 무엇보다 정말 재미있게 몰입할 수 있었던 것 같아요.

Passport 관련 내용은 여기에 정리했으니, 관심있으신 분들은 참고하시면 좋을 것 같다.

 

 

 

2️⃣ 멀티 스테이지 빌드

두 번째로, 멀티 스테이지 빌드를 적용하여 Docker 이미지 최적화를 진행했습니다. 사실 이 방식은 오빠의 추천으로 처음 접하게 되었는데, 직접 적용하고 많이 놀랐습니다. Geek News오빠 블로그에도 잘 정리되어 있으니 관심 있는 분들은 참고해 보셔도 좋을 것 같아요.

 

멀티 스테이지 빌드는 빌드 단계에서 JDK 환경을 사용해 애플리케이션을 빌드한 후, 런타임에서는 JRE 또는 경량 베이스 이미지를 사용하여 불필요한 빌드 도구를 제거한 상태로 실행하여 Docker 이미지 크기를 줄이고 배포를 최적화할 수 있는 기능입니다. 기존에는 무거운 JDK 이미지를 사용해 빌드 및 실행을 모두 수행했지만 멀티 스테이지 빌드를 적용하면서, 빌드는 JDK 환경에서, 실행은 가벼운 JRE 베이스 이미지에서 처리하도록 개선했습니다.

 

그 결과, Docker 이미지 용량이 755MB에서 322MB로 약 57% 감소하여 최적화되었습니다, 이 방식을 모든 서버에 적용하면서 실제 프로덕션 서버에서도 용량을 크게 줄일 수 있었습니다.

 

 

 

3️⃣ 그 외 업무

이외에도 WebRTC 시그널링 서버를 Mesh 방식과 SFU 방식으로 나누어 전략 패턴을 활용하여 구현했습니다. 소수 인원이 참여하는 통화에서는 Mesh 방식, 다수 인원이 참여하는 통화에서는 SFU 방식을 적용하여 상황에 맞는 최적의 통신이 가능하도록 설계했습니다.

 

또한, CI/CD 환경을 구축하여 GitHub Actions를 통해 DockerHub에 자동으로 이미지를 푸시하도록 설정했으며, Jenkins 기반의 배포 파이프라인도 구축했습니다.

 

그리고 Eureka 서비스 디스커버리를 활용하여 약 10개의 서버를 Spring Cloud Gateway를 통해 라우팅하고, 유저 서버 및 서비스 서버를 포함해 약 40개의 엔드포인트를 설계 및 구현했습니다.

 

정리하고 보니, 정말 두 달 동안 많은 걸 했구나 싶은 생각이 듭니다. 그야말로 맨땅에 헤딩이었는데, 10개의 서버를 직접 배포하고 운영해 보며 MSA 구조를 몸소 익힐 수 있었습니다. 또한, 불편한 점을 발견하고 직접 개선하면서 성능 지표까지 측정해 본 경험은 정말 재밌었습니다. 처음엔 모르는 것이 많았지만, 그만큼 실전에서 부딪히며 배우는 힘이 얼마나 큰지를 느낄 수 있었던 시간이었습니다.

 

 

 

🏆 베스트 데브토커로 뽑히다

중간에 DevTalk라는 프로그램도 진행했는데요! 캠프원 모두 한 명씩 주제를 선정해서 발표하는 형식이었습니다. 사실 저는 평소 말하기에 자신이 없어서 이 프로그램이 꽤 부담스럽게 느껴졌어요. 지금 우아한테크코스를 하면서도 느끼는 부분이지만, 발표나 말하는 자리에 서는 게 아직은 익숙하지 않거든요. 😅 하지만 그만큼 극복해내고 싶은 마음도 컸고, 이 기회를 좋은 연습의 장으로 삼고자 했습니다.

 

다른 분들은 대부분 하드 스킬 중심의 기술적인 주제를 선택하셨지만, 저는 소프트 스킬을 주제로 발표를 준비했습니다. 사실 저도 소프트 스킬을 잘 안다고 생각하지는 않습니다. 하지만 협업이 중요한 개발 세계에 몸 담으면서 소프트 스킬의 중요성을 느끼게 되었고, 그 가치를 함께 나누고 싶다는 마음이 컸습니다. 누군가가 제 발표를 듣고 조금이라도 느끼는 바가 있다면, 그걸로 충분히 의미 있는 시간이 될 거라 생각했어요. 또한, 발표를 준비하면서 제 자신도 돌아보게 되었습니다. 토론이나 협업 과정에서 아직 부족한 점이 많다는 것을 느꼈고, 그런 부분들을 의식적으로 인지하고 개선하고 싶다는 마음에서 이 주제를 선택하게 되었습니다.

 

못 나온 사진을 애써 가리려는 몸부림

그런데 최종 시연인 마지막 날, 제가 베스트 토커로 선정되었습니다. 발표를 잘했다기보다는, 소프트 스킬에 대한 제 진심이 전해졌기 때문이 아닐까 생각해요! 발표는 여전히 떨리는 일이었지만, 막상 상을 받으니 자신감도 생기고 뿌듯하더라고요.

 

특히 이번 경험을 통해 말하는 것에 대한 두려움이 조금씩 줄고 있다는 걸 실감할 수 있었어요. 예전엔 사람들 앞에서 말을 꺼내는 것조차 큰 용기가 들었지만, 지금은 어떤 메시지를 전하고 싶은지 먼저 고민하고, 그걸 어떻게 하면 잘 전달할 수 있을까 고민하는 제 자신을 보며 소프트 스킬적으로도 많이 성장했구나 싶었어요.

 

물론 아직도 떨리고 부족한 점은 많지만, 예전의 나와 비교하면 정말 큰 변화라는 걸 느낄 수 있었던 순간이었습니다. 또 단순히 말을 잘하는 것보다, 진심을 담아 말하는 태도가 얼마나 중요한지도 다시금 깨닫게 되었습니다.

 

 

 

🎬 마무리하며

정말 잘 맞는 팀원들을 만났을 때, 어떤 기분으로 출근을 할 수 있는지 알게 되었을 만큼 화목했던 우리 팀, 그리고 함께했던 모든 캠프원들과 시간을 보낼 수 있어 정말 영광이었습니다!

 

스마일게이트 인재영입팀에서는 10년간 운영된 개발 캠프 수료자들이 참여하는 커뮤니티 데이처럼, 개발자들이 함께 교류하는 행사를 자주 연다고 들었는데요, 그래서 마지막 날임에도 과장님께서 앞으로 볼 날 많다며 눈물 한 방울 흘리지 않으시던 모습이 기억에 남네요... 😇

 

어쨌든, 이 인연은 끝이 아니라 이제 시작이라고 생각해요. 저희 앞으로도 좋은 인연으로 봐요! 평생 응원하고 싶은 동료들이 생겼다는 사실만으로도, 이번 캠프는 제게 정말 큰 의미로 남을 것 같아요. 정말 알차게 보냈던 두 달이었네요.