포트폴리오는 결과물이 아니라 경계 설계다
Hatched by min dulle
May 31, 2026
6 min read
3 views
84%
가장 중요한 질문은 이것이다
좋은 포트폴리오는 무엇을 보여줘야 할까? 많은 사람들은 기능 몇 개, 깔끔한 코드, 화려한 데모를 떠올린다. 하지만 실제로 채용자와 협업자가 궁금해하는 것은 전혀 다르다. 이 사람은 어디까지를 스스로의 시스템으로 보고, 어디서부터 외부 세계와의 접점을 설계할 줄 아는가?
이 질문은 단순히 개발 직군에만 해당하지 않는다. API를 연결하는 일도, 게임 서버를 설계하는 일도, 결국은 자신의 내부 로직과 외부의 불확실한 세계를 어떤 규칙으로 맞닿게 하느냐의 문제다. 포트와 어댑터라는 생각은 여기서 강력한 통찰을 준다. 중요한 것은 기능의 양이 아니라 경계의 질이다. 포트폴리오도 마찬가지다. 좋은 포트폴리오는 프로젝트 목록이 아니라, 내가 시스템 경계를 어떻게 다루는 사람인지 보여주는 증거여야 한다.
포트폴리오는 실력을 나열하는 문서가 아니라, 불확실성을 다루는 방식의 공개 버전이다.
많은 사람이 실력을 잘못 증명한다
초보자들이 흔히 빠지는 함정이 있다. “무슨 기능을 만들었는가”에만 집중하는 것이다. 로그인, 랭킹, 채팅, 결제, 인벤토리 같은 기능은 분명 중요하다. 하지만 이런 목록은 곧바로 질문을 낳는다. 왜 이런 구조를 택했는가? 외부 API가 실패하면 어떻게 되는가? 트래픽이 늘면 어디가 먼저 무너지는가? 같은 기능이라도 설계 방식에 따라 전혀 다른 실력을 드러낸다.
예를 들어, 날씨 API를 호출하는 서비스를 생각해 보자. 단순히 HTTP 요청을 보내고 응답을 받아 화면에 뿌리는 코드는 누구나 작성할 수 있다. 그러나 실전에서는 다음과 같은 문제가 반드시 생긴다.
- 응답 형식이 바뀐다.
- 요청이 느려진다.
- 일부 지역 데이터가 비어 있다.
- 요금 제한 때문에 호출을 줄여야 한다.
- 테스트 환경에서는 외부 API를 실제로 쓰고 싶지 않다.
이때 드러나는 능력은 “API를 호출할 수 있는가”가 아니라 변화와 실패를 견디는 구조를 설계할 수 있는가다. 포트와 어댑터 패턴이 사랑받는 이유도 여기에 있다. 핵심 로직을 외부 세계로부터 격리하고, 외부 시스템은 바뀔 수 있는 어댑터로 취급한다. 이 사고방식은 포트폴리오에도 그대로 적용된다. 기능을 보여주는 것보다, 변경에 대한 내성을 어떻게 설계했는지 보여주는 편이 훨씬 강한 신호다.
게임 서버 포트폴리오도 같은 문제를 안고 있다. 채팅 서버, 매치메이킹, 실시간 동기화, 랭킹 시스템을 만들었다고 해서 그것만으로 충분하지 않다. 진짜 질문은 따로 있다. 수백 명이 동시에 접속할 때 어떤 병목이 생기는지, 패킷 순서가 뒤엉키면 어떻게 복구하는지, 한 명의 치팅 시도가 전체 시스템에 어떤 영향을 주는지. 즉, 게임 서버 포트폴리오는 화면에 보이는 기능보다 보이지 않는 경계 처리를 얼마나 잘 보여주느냐에 달려 있다.
경계는 기술의 주변부가 아니라 실력의 본체다
우리는 흔히 핵심 로직을 중심, API 연동이나 서버 입출력을 주변부라고 생각한다. 하지만 실제 엔지니어링에서 가장 어려운 부분은 언제나 주변부에 있다. 외부 결제사, 소셜 로그인, 게임 클라이언트, DB, 캐시, 메시지 큐, 각종 타사 API는 모두 “내가 통제하지 못하는 것”이다. 진짜 실력은 내부를 얼마나 잘 짜는가보다, 통제할 수 없는 것과 어떻게 결합하는가에서 더 선명하게 드러난다.
이 관점에서 보면 포트와 어댑터는 단지 디자인 패턴이 아니다. 그것은 세계를 바라보는 철학이다. 내부를 안정적인 언어로 만들고, 외부를 교체 가능한 접점으로 낮춰 놓는다. 이렇게 하면 테스트가 쉬워지고, 리팩터링이 안전해지고, 제품 변화에 적응하기 쉬워진다. 무엇보다 중요한 것은, 이 구조가 개발자의 사고방식을 단련한다는 점이다. “이 기능을 만들겠다”가 아니라 “이 경계를 어떻게 설계할까”라고 묻기 시작하면, 코드의 품질과 포트폴리오의 품질이 동시에 올라간다.
이것이 왜 포트폴리오에서 중요할까? 왜냐하면 좋은 포트폴리오는 결과물의 모음이 아니라 의사결정의 기록이기 때문이다. 어떤 아키텍처를 선택했는지, 왜 그 경계를 그렇게 나눴는지, 실패를 어떤 책임 단위로 흡수했는지. 이런 설명은 단순 데모보다 훨씬 많은 것을 말해준다. 채용자는 코드의 줄 수보다, 이 사람이 앞으로 새로운 외부 시스템을 붙여도 흔들리지 않을지를 본다.
실력은 기능을 만드는 속도보다, 경계가 깨졌을 때 시스템을 살리는 방식에서 드러난다.
특히 게임 서버 같은 분야에서는 경계 설계가 곧 생존 전략이다. 클라이언트는 언제든 버그를 낼 수 있고, 네트워크는 언제든 지연되며, 트래픽은 순간적으로 폭발한다. 이런 환경에서 “정상 동작”만 보여주는 포트폴리오는 설득력이 약하다. 대신 다음을 보여주면 훨씬 강하다.
- 외부 입력이 잘못되었을 때 서버가 어떻게 방어하는지
- 부하가 급증할 때 어떤 큐잉이나 제한 전략을 쓰는지
- 테스트 가능성을 위해 핵심 로직과 네트워크를 어떻게 분리했는지
- 실패한 요청을 재시도할지, 포기할지, 보상할지의 기준이 무엇인지
이 네 가지는 모두 경계 설계에 관한 이야기다. 기능의 화려함보다 훨씬 깊은 실력을 보여준다.
포트폴리오는 프로젝트 모음집이 아니라 실험실이어야 한다
많은 포트폴리오가 실패하는 이유는 너무 완성품처럼 보이려 하기 때문이다. 하지만 실제로는 완성품보다 실험의 흔적이 더 유용하다. 사람들은 성공한 결과보다 문제를 어떻게 다뤘는지를 통해 훨씬 많이 배운다. 특히 기술 포트폴리오에서는 “무엇을 만들었는가”보다 “무엇을 검증했는가”가 훨씬 중요하다.
여기서 좋은 기준은 이렇다. 프로젝트 하나를 만들더라도, 그 안에 최소한 세 개의 경계를 드러내는 것이다.
1. 내부 규칙과 외부 의존성을 분리했는가
예를 들어 게임 서버에서 랭킹을 계산한다고 해 보자. 점수 계산 로직은 순수하게 남겨 두고, DB 저장은 별도 어댑터로 뺀다. 그러면 점수 계산은 단위 테스트로 빠르게 검증할 수 있고, DB 교체도 쉬워진다. 포트폴리오에는 이런 분리가 왜 중요한지, 어떤 문제를 줄이는지 적어야 한다.
2. 실패를 정상 경로처럼 다뤘는가
좋은 시스템은 실패를 예외적인 사건으로 취급하지 않는다. 외부 API 실패, 타임아웃, 메시지 손실, 패킷 재전송 같은 상황을 설계의 일부로 본다. 포트폴리오에서 이런 장면을 보여주면, 읽는 사람은 이 개발자가 단지 코드를 짠 것이 아니라 시스템이 깨지는 순간까지 생각했구나라고 느낀다.
3. 관찰 가능성을 확보했는가
로그, 메트릭, 추적 정보는 장식이 아니다. 경계에서 일어나는 일들을 들여다보는 창이다. 어떤 API가 자주 실패하는지, 어느 구간에서 지연이 생기는지, 어느 입력이 비정상적인지를 보여줘야 한다. 포트폴리오에 이런 내용을 넣으면, 단순 기능 구현보다 훨씬 성숙한 인상을 준다.
실험실형 포트폴리오는 한 번에 많은 것을 보여주려 하지 않는다. 대신 하나의 문제를 깊게 파고들며, 그 문제를 푸는 과정에서 의사결정의 품질을 드러낸다. 예를 들어 “외부 결제 API 연동”이라는 프로젝트를 만든다면, 단순 결제 성공 화면보다 다음이 더 가치 있다.
- 결제 승인과 정산을 분리했는가
- 중복 요청을 멱등성으로 막았는가
- 실패 후 재시도 정책을 어떻게 두었는가
- 외부 API 응답 포맷 변경에 어떻게 대비했는가
이런 설계는 포트와 어댑터의 정신을 잘 보여준다. 핵심은 내 코드가 아니라, 내 코드와 세계의 접점이다.
좋은 엔지니어는 기능을 쌓지 않고, 번역기를 만든다
여기서 더 깊은 통찰이 하나 있다. 엔지니어링의 많은 부분은 사실 번역이다. 사용자의 요구를 시스템 언어로 번역하고, 비즈니스 규칙을 저장소의 제약으로 번역하고, 외부 서비스의 응답을 내부 모델로 번역한다. 게임 서버에서도 클라이언트의 액션을 서버 권위 규칙으로 번역하고, 네트워크 지연을 시간 모델로 번역하며, 경쟁 상태를 일관된 상태 전이로 번역해야 한다.
이 번역이 잘될수록 시스템은 단순해진다. 반대로 번역이 엉키면 모든 것이 서로를 오염시킨다. UI 코드가 비즈니스 규칙을 알고, 도메인 객체가 네트워크 세부사항을 알고, 테스트가 실제 외부 API에 묶이기 시작한다. 이때부터 유지보수는 급격히 어려워진다.
포트폴리오를 평가할 때도 이 관점을 적용할 수 있다. 좋은 프로젝트는 번역기를 잘 만든 프로젝트다. 즉, 다음을 분리할 수 있어야 한다.
- 규칙과 전달
- 판단과 I/O
- 상태와 표현
- 핵심과 부수
이 분리는 단순한 미학이 아니다. 협업 가능성, 테스트 가능성, 변경 대응력을 좌우하는 현실적인 기준이다. 따라서 포트폴리오를 설계할 때는 “무엇을 만들 것인가”보다 “무엇을 번역할 것인가”를 먼저 정하는 편이 낫다. 그 질문은 자연스럽게 포트와 어댑터, 그리고 경계 설계로 이어진다.
뛰어난 시스템은 많은 것을 하지 않는다. 대신 서로 다른 세계가 충돌하지 않도록 정확히 번역한다.
Key Takeaways
-
포트폴리오는 기능 목록이 아니라 경계 설계의 증거여야 한다. 외부 API, DB, 네트워크, 클라이언트 같은 불확실한 요소를 어떻게 격리했는지 보여라.
-
“무엇을 만들었는가”보다 “무엇이 바뀌어도 버틸 수 있는가”를 보여라. 교체 가능한 어댑터, 테스트 가능한 핵심 로직, 실패 대응 전략이 강한 신호다.
-
프로젝트를 완성품보다 실험실로 설계하라. 성공 사례만 나열하지 말고, 실패 처리, 부하 대응, 관찰 가능성을 포함하라.
-
게임 서버든 타사 API 연동이든 본질은 같다. 통제할 수 없는 세계와 내부 규칙 사이의 접점을 얼마나 우아하게 다루는지가 실력이다.
-
설명은 구현보다 중요할 수 있다. 왜 그 경계를 그곳에 뒀는지, 어떤 트레이드오프를 택했는지 말할 수 있어야 한다.
결론: 경계를 잘 설계한 사람은 어디서든 강하다
많은 사람들은 포트폴리오를 “내가 할 수 있는 것의 증명”으로 생각한다. 하지만 더 정확한 정의는 이것이다. 포트폴리오는 내가 불확실성과 충돌하는 방식을 보여주는 지도다. 기능은 시간이 지나면 낡지만, 경계를 설계하는 습관은 오래 남는다.
그래서 진짜 실력자는 단순히 API를 붙이거나 서버를 돌리는 사람으로 보이지 않는다. 그는 내부와 외부 사이에 질서를 만드는 사람이다. 포트와 어댑터는 그 질서를 만드는 한 가지 방식이고, 좋은 포트폴리오는 그 질서가 실제로 작동한다는 것을 보여주는 증거다.
다음에 프로젝트를 만들 때는 스스로에게 이렇게 물어보자. “나는 무엇을 만들고 있는가?”보다 더 중요한 질문이 있다. “나는 어떤 경계를 설계하고 있는가?” 이 질문에 답할 수 있을 때, 당신의 포트폴리오는 단순한 작품집을 넘어, 당신의 사고방식을 증명하는 문서가 된다.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣