레거시 PHP 프로젝트를 살리는 개발자 포트폴리오 서사
오래된 PHP 서비스와 Zend Framework 코드를 다뤘다는 사실을 포트폴리오에서 숨기고 있나요? 화려한 신기술 프로젝트만 앞세우면 오히려 운영 장애를 해결하고 구조를 개선한 귀중한 경험이 보이지 않을 수 있습니다. 이번 인터뷰에서는 레거시 시스템 현대화 프로젝트를 채용 담당자가 이해할 수 있는 개발자 포트폴리오로 바꾸는 방법을 소프트웨어 아키텍트 이도겸 님에게 물었습니다.
레거시 PHP 경험이 강력한 포트폴리오가 되는 조건
Q. 오래된 기술을 다룬 이력이 정말 경쟁력이 있나요?
이도겸 아키텍트: 기술의 출시 연도보다 중요한 것은 해결한 문제의 난도입니다. 매출이 발생하는 서비스를 멈추지 않고 PHP 버전을 올렸거나, 문서가 부족한 Zend Framework 모듈의 의존성을 찾아 장애를 줄였다면 이는 분석력과 운영 감각을 동시에 보여주는 사례입니다. 단순히 ‘유지보수했다’고 적지 말고 어떤 제약 속에서 무엇을 바꿨는지 설명해야 합니다.
포트폴리오는 작업물을 모아 놓은 저장소가 아니라 역량을 선별해 증명하는 매체에 가깝습니다. 용어의 일반적인 의미는 포트폴리오의 개념 설명에서도 확인할 수 있습니다. 개발자에게는 결과 화면뿐 아니라 문제 정의, 기술적 판단, 검증 자료까지 하나의 작품이 됩니다.
예를 들어 ‘PHP 7에서 PHP 8로 이전’만 쓰면 버전 교체 기록에 그칩니다. 반면 요청당 오류율, 배포 중단 시간, 테스트 범위와 호환성 문제를 함께 제시하면 안전한 변화 관리 능력이 드러납니다. 여러분의 사례에는 변경 전 불편과 변경 후 차이를 입증할 숫자가 있나요?
- 운영 영향: 장애 빈도, 응답 시간, 배포 시간처럼 사용자가 체감한 변화를 적습니다.
- 기술적 제약: 낮은 테스트 커버리지, 결합된 모듈, 지원 종료 패키지 등 출발 조건을 밝힙니다.
- 개인 기여: 팀 전체 성과와 자신이 설계하거나 구현한 범위를 구분합니다.
- 판단 근거: 전면 재작성 대신 점진적 개선을 선택한 이유를 비용과 위험으로 설명합니다.
“레거시라는 단어를 사과처럼 사용하지 마세요. 복잡한 현실을 통제 가능한 변경 단위로 바꾼 과정이 곧 시니어 개발자의 증거입니다.”
프로젝트 서사를 문제와 제약에서 시작하는 방법
Q. 사례 페이지의 첫 문장은 어떻게 써야 하나요?
이도겸 아키텍트: 저장소 이름이나 사용 기술보다 서비스가 처한 문제를 먼저 제시하는 편이 좋습니다. ‘Zend Framework 기반 주문 관리 시스템은 월말 트래픽이 증가할 때 데이터베이스 연결이 고갈됐다’처럼 상황과 영향을 한 문장에 담아 보세요. 독자는 PHP를 깊이 알지 못해도 왜 개선이 필요했는지 즉시 이해할 수 있습니다.
그다음에는 선택을 제한한 조건을 공개해야 합니다. 무중단 운영이 필요했는지, 담당자가 몇 명이었는지, 개인정보 때문에 운영 데이터를 복제할 수 없었는지를 적으면 평범해 보이는 결정에도 맥락이 생깁니다. 포트폴리오를 다양한 경력 자료의 집합으로 보는 관점은 포트폴리오 관련 지식백과를 참고해 확장할 수 있습니다.
좋은 사례는 영웅담이 아니라 검증 가능한 의사결정 기록입니다. 캐시를 도입했다면 ‘빨라졌다’고 끝내지 말고 캐시 키, 만료 정책, 데이터 불일치 위험과 되돌리기 절차를 함께 보여주세요. 실패한 첫 시도도 원인과 수정 과정을 간결하게 남기면 오히려 신뢰를 높입니다.
- 상황: 서비스 규모와 사용자의 핵심 행동을 두세 문장으로 제시합니다.
- 문제: 오류 로그나 문의 기록을 통해 증상을 구체화합니다.
- 제약: 일정, 인력, 호환성, 보안 조건을 공개합니다.
- 선택: 검토한 대안과 채택하지 않은 이유를 함께 적습니다.
- 결과: 측정 방식과 관찰 기간을 포함한 수치로 변화를 증명합니다.
Q. 공개할 수 없는 회사 프로젝트는 어떻게 다루나요?
이도겸 아키텍트: 고객명, 실제 매출, 내부 URL을 제거하고 비율과 범위로 익명화하면 됩니다. 코드는 동일한 구조의 작은 샘플로 다시 만들고, 실제 업무 코드가 아니라는 점을 명시하세요. 보안상 공개할 수 없는 내용을 억지로 노출하는 것보다 비밀유지 원칙을 지키면서 사고 과정을 전달하는 능력이 훨씬 좋은 평가를 받습니다.
PHP와 Zend 구조를 시각적으로 설명하는 질문법
Q. 복잡한 아키텍처를 어디까지 보여줘야 하나요?
이도겸 아키텍트: 모든 클래스와 테이블을 그리면 정보량만 늘어납니다. 요청이 들어와 응답으로 나가는 핵심 경로를 중심으로 웹 서버, PHP 애플리케이션, 데이터베이스, NoSQL 저장소, 외부 API의 관계를 한 장에 표시하세요. 변경 전과 변경 후 구조를 나란히 제시하면 의존성 분리의 효과도 빠르게 전달됩니다.
Zend Framework 프로젝트라면 컨트롤러에 섞여 있던 비즈니스 로직을 서비스 계층으로 옮긴 과정, 서비스 로케이터 의존성을 생성자 주입으로 바꾼 범위가 좋은 소재입니다. 단, 패턴 이름을 나열하는 데 그치면 안 됩니다. 구조 변경이 테스트 격리, 장애 범위 또는 신규 기능 개발 시간에 어떤 영향을 주었는지 연결해야 합니다.
면접관은 그림을 보고 추가 질문을 떠올립니다. 따라서 다이어그램 아래에는 ‘왜 이 경계를 선택했는가’, ‘트랜잭션은 어디에서 관리되는가’, ‘실패 시 어떤 경로로 복구되는가’에 대한 짧은 답을 붙이세요. 페이지를 훑는 독자는 그림만으로 전체를 파악하고, 깊이 읽는 독자는 판단 근거까지 확인할 수 있습니다.
- 요청 흐름도: 사용자 요청부터 응답까지 핵심 호출 순서를 표시합니다.
- 모듈 경계도: 주문, 결제, 회원처럼 변경 이유가 다른 영역을 분리합니다.
- 데이터 흐름: MySQL과 NoSQL에 각각 어떤 데이터가 저장되는지 밝힙니다.
- 장애 경로: 외부 API 지연, 큐 적체, 캐시 실패 시 대체 동작을 설명합니다.
- 배포 구조: Linux 서버, 컨테이너, 프록시와 로그 수집 위치를 간략히 나타냅니다.
“다이어그램의 목적은 복잡함을 자랑하는 것이 아니라, 독자가 기술적 선택에 관해 좋은 질문을 하도록 돕는 데 있습니다.”
Q. 코드 예시는 얼마나 길어야 할까요?
이도겸 아키텍트: 한 예시에는 하나의 주장만 담으세요. 리팩터링 전후 코드에서 의존성이 어떻게 줄었는지 보여주려면 주변 설정 파일 전체를 붙일 필요가 없습니다. 핵심 부분을 짧게 제시하고 저장소의 관련 경로, 테스트 실행 명령, 재현 조건을 연결하면 software project의 신뢰도가 높아집니다.
성과 수치와 실패 기록을 신뢰로 바꾸는 방식
Q. 정확한 회사 지표가 없을 때는 무엇을 측정하나요?
이도겸 아키텍트: 거창한 매출 지표가 없어도 측정할 대상은 많습니다. 동일한 Linux 환경에서 요청 지연 시간의 중앙값과 상위 백분위 값을 비교하거나, 배포에 필요한 수동 단계 수, 회귀 테스트 실행 시간, 정적 분석 오류 수를 기록할 수 있습니다. 측정 환경과 샘플 규모를 함께 공개하면 작은 실험도 유효한 근거가 됩니다.
예컨대 로컬 벤치마크에서 응답 시간이 줄었다면 운영 환경의 성능 향상으로 단정하지 마세요. ‘고정된 테스트 데이터와 동시 요청 조건에서 관찰한 결과’라고 범위를 한정해야 합니다. 이런 정직한 표현은 수치를 과장하는 포트폴리오보다 훨씬 전문적으로 보이며, 면접에서 재현 방법을 설명하기도 쉽습니다.
실패 기록도 같은 방식으로 다룹니다. Redis 캐시를 성급하게 적용해 오래된 데이터가 노출됐다면 원인을 캐시 자체로 돌리지 말고 무효화 조건이 빠졌다는 사실을 밝히세요. 이후 태그 기반 무효화, 짧은 TTL, 모니터링 지표 중 무엇을 선택했고 왜 그랬는지 적으면 실패는 운영 학습의 증거가 됩니다.
- 성능: 평균값만 쓰지 않고 중앙값, 상위 지연, 오류율을 함께 확인합니다.
- 품질: 핵심 도메인 테스트 수와 변경 구간의 커버리지를 구분합니다.
- 배포: 소요 시간, 수동 승인 단계, 롤백 성공 여부를 기록합니다.
- 유지보수: 순환 의존성, 정적 분석 경고, 중복 코드의 변화를 제시합니다.
- 관찰 기간: 개선 직후가 아니라 일정 기간 운영한 결과임을 표시합니다.
Q. 프로젝트의 단점을 써도 괜찮나요?
이도겸 아키텍트: 반드시 쓰되 통제 가능한 언어로 표현하세요. ‘시간이 없어서 테스트를 못 했다’보다 ‘결제 흐름을 우선 보호하고 관리자 화면은 다음 단계로 남겼다’가 좋습니다. 남은 부채, 위험도, 후속 계획을 제시하면 우선순위를 정할 줄 아는 개발자라는 인상을 줍니다. 작품과 활동 기록을 선별한다는 의미는 포트폴리오 정의 자료에서도 살펴볼 수 있습니다.
지원 목표에 따라 달라지는 프로젝트 공개 전략
Q. 같은 프로젝트를 모든 채용 공고에 사용해도 되나요?
이도겸 아키텍트: 원본 사례는 같아도 강조점은 달라야 합니다. 백엔드 포지션에는 PHP 모듈 경계, 데이터 일관성, API 오류 처리와 테스트 전략을 앞에 배치하세요. 플랫폼이나 DevOps 성격이 강한 자리라면 Linux 배포 자동화, 관측 가능성, 장애 대응 절차와 롤백 시간을 먼저 보여주는 편이 효과적입니다.
포트폴리오 첫 화면에는 전체 사례를 압축한 요약 카드를 두는 것이 좋습니다. 역할, 기간, 핵심 제약, 대표 성과를 짧게 보여주고 상세 페이지에서 근거를 풀어내세요. GitHub 저장소로 연결할 때는 실행 가능한 샘플인지, 일부 코드만 재구성한 것인지 명확히 표시해야 독자가 기대를 조절할 수 있습니다.
공개 전에는 기술을 모르는 지인 한 명과 경험 많은 개발자 한 명에게 각각 읽어 달라고 요청해 보세요. 전자는 문제와 결과가 이해되는지, 후자는 선택의 근거와 재현 정보가 충분한지를 확인해 줍니다. 두 독자가 같은 문장에서 막힌다면 전문 용어보다 설명 구조에 문제가 있을 가능성이 큽니다.
- 채용 공고에서 반복되는 역할과 기술 키워드를 추립니다.
- 사례 상단의 요약 문장을 해당 역할에 맞게 조정합니다.
- 민감 정보, 죽은 링크, 실행되지 않는 명령이 없는지 확인합니다.
- 모바일 화면에서 다이어그램과 코드가 읽히는지 시험합니다.
- 면접에서 설명할 수 없는 과장된 수치나 표현을 제거합니다.
Q. 개인 프로젝트가 적은 개발자와 이직이 급한 개발자는 각각 무엇을 선택해야 하나요?
이도겸 아키텍트: 개인 프로젝트가 적지만 운영 경험이 충분한 독자라면 익명화한 레거시 개선 사례 하나를 깊게 제작하세요. 작은 재현 저장소를 곁들이고 문제 발견부터 배포 후 관찰까지 보여주면 여러 개의 얕은 토이 프로젝트보다 강한 developer portfolio가 됩니다.
반대로 이직 일정이 촉박하고 공개 가능한 코드가 전혀 없는 독자라면 완성도 높은 대형 샘플을 새로 만들려고 시간을 소모하지 마세요. 먼저 한 페이지짜리 사례 요약과 구조도, 의사결정 기록을 공개하고 이후 테스트 가능한 PHP 미니 프로젝트를 연결하는 편이 현실적입니다. 전자는 깊이로 신뢰를 만들고, 후자는 공개 속도와 단계적 보강을 선택하는 전략입니다.
- 운영 경험이 풍부한 독자: 한 사례를 깊게 파고들어 판단과 성과의 근거를 강화합니다.
- 공개 자료가 부족한 독자: 익명화한 설명과 재현용 소형 프로젝트를 분리합니다.
- 빠른 지원이 필요한 독자: 사례 요약을 먼저 게시하고 측정 자료를 순차적으로 보강합니다.
- 백엔드 전문성을 원하는 독자: 데이터 일관성, 모듈 경계, 테스트 설계를 전면에 배치합니다.

- 다음글자바스크립트 프레임워크와 바닐라 JS, 개발자 포트폴리오의 새 기준 26.08.10
등록된 댓글이 없습니다.
