본문으로 건너뛰기

"칼럼" 태그로 연결된 2개 게시물개의 게시물이 있습니다.

모든 태그 보기

어떻게 기존 프로젝트를 분석하는게 좋을까?

· 약 5분
조준철
HandStack 개발자

새로운 팀에 합류하거나 기존 프로젝트를 인수인계 받을 때, 개발 당시 최선을 다해 관리 했다고 해도, 처음 부터 파악 해야하는 입장에서 복잡하게 얽힌 시스템과 정제되어 있지 않는 문서와 스파게티 처럼 얽혀있는 소스 코드를 보면 "도대체 어디서부터 시작해야 하지?"라는 막막함을 느껴본 적이 있을 겁니다.

기존 프로젝트를 효과적으로 분석하고 이해하기 위해서는 약간의 체계적인 접근이 필요합니다. 무작정 코드부터 보거나 문서를 읽기 시작하면 오히려 더 혼란스러울 수 있거든요.

거창한 건 아니고 기존 프로젝트를 분석할 때 단계별로 접근할 수 있는 개인적인 방법을 공유하겠습니다. 당연히 이 방법은 만능은 아니고 주어진 프로젝트에 대해 적절하게 첨삭해가며 조정해야합니다.

이 루틴은 적어도 프로젝트의 전체적인 그림을 빠르게 파악하고, 핵심 이슈들을 놓치지 않는 것에 주안 점을 둡니다.

요약하면 다음과 같습니다.

  1. 일단 어떤 데이터가 쌓여 있는지 눈으로 데이터를 확인하고 가설을 세우고 이해합니다. 현재까지의 프로젝트의 진행 상황을 파악합니다.
  2. 업무 데이터가 스키마 (또는 규칙)에 맞게 정합성을 유지하며 CRUD가 되는지 확인합니다. 앞으로의 사업 방향과 확장 가능성의 비전을 봅니다.
  3. 서비스에 필요한 서버들과 스케일 업, 아웃 형태, CI/CD 구조를 봅니다. 비즈니스의 규모와 업무 담당자와 기술 담당자의 이해관계를 예측 가능합니다.
  4. 프로그램들의 아키텍처, 배치 자동화, 외부 연계 서비스의 구조를 봅니다. 업무 담당자와 개발자가 비즈니스 구조에 얼마나 관심이 있는지 확인 가능합니다.
  5. 필요한 순간에 확인이 필요한 모든 소스 코드를 파악하도록 도구와 기술을 미리 확인하고 준비합니다. 소스 품질은 개발팀의 개발 역량과 함께 관리 수준을 보여줍니다.

즉 데이터를 먼저 확인하고, 정합성과 확장성을 검토하며, 인프라와 배포 구조를 분석하고, 프로그램 아키텍처와 시스템 연동 구조를 파악하고, 마지막으로 소스 코드 품질과 개발 도구를 점검하는 순서로 진행합니다. ^^

데이터 현황 파악 - 프로젝트의 맥락을 확인합니다

"데이터는 거짓말하지 않는다"

프로젝트 분석의 첫 번째 단계는 쌓여있는 데이터를 직접 눈으로 확인하는 것입니다. 이는 단순히 데이터, 데이터베이스 스키마, 문서 기록을 보는 것이 아니라, 핵심은 실제 운영 데이터의 품질과 패턴을 분석하는 과정입니다.

주요 검토 항목

  • 데이터 볼륨과 증가 추세: 일별, 월별 데이터 증가량을 통해 비즈니스 성장세 파악
  • 데이터 품질 현황: NULL 값, 중복 데이터, 이상치 존재 여부
  • 사용자 행동 패턴: 실제 서비스 이용 현황과 트렌드 분석
  • 히스토리 데이터: 과거 데이터를 통한 비즈니스 변화 추이 확인

이 단계에서 중요한 것은 가설 설정입니다. 데이터를 보면서 "왜 이런 패턴이 나타났을까?", "이 데이터가 비즈니스에 어떤 의미일까?", "그래서 무엇을 위한 데이터인가?"라는 질문을 끊임없이 던져야 합니다. 물어 볼 사람이 주위에 있으면 더욱 좋겠지만, 기본적으로 이러한 가설들은 이후 단계에서 검증의 기준이 됩니다.

데이터 정합성 및 확장성 검토 - 미래를 준비하는 토대

"오늘의 편의는 내일의 기술부채가 될 수 있다"

두 번째 단계에서는 현재 데이터가 정의된 스키마와 비즈니스 규칙에 맞게 관리되고 있는지 확인합니다. 비즈니스 규칙에 맞게 관리 하는것은 향후 사업 확장 시 현재 구조가 얼마나 유연하게 대응할 수 있는지 평가하는 것입니다.

주요 검토 항목

  • 스키마 일관성: 테이블 간 관계, 제약조건, 인덱스 설계의 적절성
  • CRUD 작업 효율성: 각 데이터 조작 작업의 성능과 안정성
  • 비즈니스 규칙 준수: 도메인 로직이 애플리케이션 또는 데이터 계층에서 하드코딩 없이 올바르게 구현되었는지
  • 확장성 시나리오: 데이터량 10배, 100배 증가 시 대응 가능성

이 단계에서는 앞으로의 사업 방향과 확장 가능성의 비전 확인이 핵심입니다. 현재 구조가 6개월, 1년 후 지금 보다 많은 양의 비즈니스 처리를 지원할 수 있는지 면밀히 검토해야 합니다. 만약 한계가 예상된다면, 지금부터 대안을 준비해야 합니다.

인프라 및 배포 구조 분석 - 안정성의 기반

"시스템의 안정성은 비즈니스의 신뢰성이다"

세 번째 단계에서는 서비스를 지탱하는 인프라와 배포 프로세스를 종합적으로 점검합니다. 이는 단순한 기술적 검토를 넘어서, 조직의 성숙도와 협업 문화를 파악하는 과정이기도 합니다.

주요 검토 항목

  • 서버 구성과 역할: 웹서버, 애플리케이션 서버, 데이터베이스 서버의 분리와 역할 분담
  • 스케일링 전략: 수직 확장(Scale Up) vs 수평 확장(Scale Out) 방식의 적절성
  • CI/CD 파이프라인: 환경설정 관리 방법, 코드 통합부터 배포까지의 자동화 수준
  • 모니터링 체계: 장애 감지, 성능 모니터링, 알림 시스템의 완비 여부

이 과정에서 이해관계자 매핑이 중요합니다. 비즈니스 담당자가 기술적 제약사항을 얼마나 이해하고 있는지, 기술 담당자가 비즈니스 요구사항을 얼마나 파악하고 있는지 확인해야 합니다. 양쪽의 이해와 커뮤니케이션 수준이 프로젝트 역량의 핵심입니다.

아키텍처 및 시스템 연동 구조 파악 - 복잡성 관리

"좋은 아키텍처는 복잡함을 단순하게 만든다."

네 번째 단계에서는 전체 시스템의 아키텍처와 외부 시스템과의 연동 구조를 분석합니다. 이는 시스템의 복잡성을 이해하고, 변경 시 영향도를 예측하는 데 필수적입니다.

주요 검토 항목

  • 시스템 아키텍처 패턴: MVC, 마이크로서비스, 이벤트 드리븐 등 적용된 패턴의 적절성
  • 배치 작업 자동화: 정기 작업, 데이터 처리 파이프라인의 안정성과 효율성
  • 외부 연계 서비스: API 연동, 데이터 동기화, 써드파티 서비스 의존성 관리
  • 장애 대응 메커니즘: Circuit Breaker, Retry Logic, Fallback 전략의 구현 여부

여기서 중요한 것은 업무 담당자와 개발자가 비즈니스 구조에 얼마나 관심이 있는지 파악해야 합니다. 이는 향후 기존 기능 유지보수와 추가 기능 작업의 난이도를 예측할 수 있습니다.

소스 코드 품질 및 개발 도구 점검 - 지속가능성의 척도

"소스 품질은 개발팀의 개발 역량과 함께 관리 수준을 보여줍니다"

필요한 순간에 확인이 필요한 모든 소스 코드를 파악하도록 도구와 기술을 미리 확인하고 준비합니다. 이는 프로젝트의 지속가능성과 팀의 개발 역량을 가장 직접적으로 보여주는 지표입니다.

주요 검토 항목

  • 코드 품질 메트릭: 복잡도, 중복도, 테스트 커버리지, 기술부채 수준
  • 개발 도구 및 환경: IDE 설정, 정적 분석 도구, 코드 리뷰 프로세스
  • 문서화 수준: API 문서, 개발 가이드, 아키텍처 문서의 완성도
  • 버전 관리 및 브랜칭 전략: Git 사용 패턴, 브랜치 관리 규칙

이 단계에서는 개발팀의 성숙도를 정확히 파악할 수 있습니다. 소스 코드의 품질은 단순히 기술적 역량만을 보여주는 것이 아니라, 팀의 협업 문화, 품질에 대한 의식, 장기적 사고 등을 종합적으로 반영합니다.

기존 프로젝트를 분석한다는 건

첫 술에 배부를 수 는 없겠죠. 기존 프로젝트를 분석하는 것은 단순히 코드를 읽고 문서를 검토하는 것을 넘어, 프로젝트의 맥락과 구조를 이해하는 과정입니다.

기존 프로젝트를 분석하기 위한 이러한 접근의 가장 큰 장점은 리스크 예측이 가능해진다는 것입니다. "이 부분을 수정하면 어디에 영향을 줄까?", "새로운 기능을 추가할 때 어떤 제약사항이 있을까?"와 같은 질문을 통해

기존 팀원들과 대화할 때 구체적이고 맥락을 이해한 질문을 할 수 있고, 개선 제안이나 새로운 아이디어도 더 설득력 있게 전달할 수 있습니다.

무엇보다 중요한 것은 이런 분석 능력은 경험을 할 때 마다 개선 된다는 점입니다. 경험이 쌓이면 여기에서 제시한 방법 말고도 자신만의 루틴이나 방법 또는 직관이 생기는 데, 앞으로 어려운 프로젝트를 만나더라도 일단 적응하고 활용할 수 있는 무기가 될 것입니다.

도메인 이해 없이 분석/설계하고, 협의 없이 개발하면 망합니다.

· 약 4분
조준철
HandStack 개발자

개발 프로젝트를 리드하다 보면, 새로운 프로젝트에 새로운 팀원들을 데리고 어떻게든 완료해야 하는 상황이 옵니다.

이때 리더의 가장 큰 바람은, 팀원들이 스스로 프로젝트 업무를 이해하고 담당자와 미팅을 주도하면서 분석/설계를 끝낸 후에 개발에 들어가게 만드는 것입니다.

하지만 저를 포함해서 제가 겪어본 개발자들은 기본적으로 '개발만' 하고 싶어 하는 경향이 있습니다. 그래서 분석/설계를 슬쩍 피하거나, 시켜도 마지못해 수동적으로 진행하는 경우가 태반입니다.

이 글의 핵심입니다: 프로젝트 초반에 개발 팀원들이 분석/설계부터 적극적으로 참여하도록 만드는 가장 현실적인 방법은 무엇일까요?


그런데 왜 개발자들은 분석/설계를 피하려 할까?

사실, 개발자들이 분석/설계를 피하는 건 정상입니다.

제 경험에 비추어 보면 이유는 명확합니다.

  • 업무의 분업화: 프론트엔드, 백엔드, 인프라, 보안... 각자 맡은 전문 분야가 다르다 보니 전체를 아우르는 분석/설계를 해볼 기회도 적고, 개인적으로 할 필요도 못 느낍니다.
  • 시간 부족: 프로젝트 일정은 늘 빡빡합니다. 당장 내 앞에 놓인 개발 업무만 해도 익혀야 할 기술과 절차가 너무 많습니다.
  • 커뮤니케이션 부담: 분석/설계는 결국 사람업무를 이해하는 일입니다. 커뮤니케이션에 익숙지 않은 성향이라면 이게 여간 부담스러운 게 아닙니다.
  • 책임지기 싫은 마음: 분석/설계가 틀어지면 프로젝트 전체가 밀립니다. 괜히 나섰다가 욕먹을까 봐 책임을 지기 싫은 마음이 드는 건 당연합니다.
  • 뇌의 도피: 코딩은 결과가 바로 눈에 보이고 명확합니다. 반면 분석/설계는 막막하죠. 뇌는 자연스럽게 익숙하고 편한 코딩으로 도망치려 합니다.

이런 상황에서 단순히 "분석해 오세요"라고 지시 하면 개발자들은 잘 움직이지 않습니다.

프로젝트 리더는 팀원들이 분석/설계/개발 업무에 자연스럽게 참여하도록 '판'을 짜주는 역할을 해야 합니다. 거창한 프레임워크가 아니라, 우리 팀에 맞는 현실적인 시스템을 만드는 것이 중요합니다.


분석/설계 업무, 정말 개발자 일일까?

답: 네, 맞습니다.

도메인 이해 없이 대충 설계한 데이터베이스 테이블을 생각해 보세요. 장담컨대 100% 다시 뜯어고치게 됩니다.

프로젝트 중간에 테이블 구조를 바꾸는 건, 연관된 모든 코드를 수정해야 하는 엄청난 비용과 고통을 동반합니다. 이 과정을 피하게 해줄 수 있는 핵심 역할은 기획자나 팀장이 아니라 개발자입니다.

해결책: 구체적인 루틴 만들기

개발자 입장에서 분석/설계는 눈에 보이지 않는 작업이라 싫어할 수 있습니다. 그래서 이걸 눈에 보이는 '결과물'로 만들어줘야 합니다. 역할 → 결과물 → 검증이라는 구체적인 루틴을 만드는 겁니다.

구체적인 방법

  1. 기능 개발 전, 아래 3가지를 필수로 작성하게 합니다.

    • API 목록
    • 요청 파라미터 및 응답 구조
    • 데이터 모델(테이블) 초안
  2. 이 결과물을 Git에 PR 올리듯 공유하고, 동료 리뷰 → 승인되면 개발에 착수할 수 있게 합니다.

  3. 핵심은 분석/설계가 더 이상 막연한 일이 아니라, 코드처럼 관리되는 '작업물'이 되도록 하는겁니다. 개발자들은 익숙한 코드 리뷰 방식으로 이 과정을 훨씬 쉽게 받아들입니다.

핵심 아이디어: 개발 팀원들이 '개발만 하고 싶다'는 마음은 유지하되, 대신, '개발'을 하려면 반드시 이 단계를 통과해야만 하도록 구조를 짜서 스스로 움직이게 만드는 과정을 만들어 주도하도록 해야합니다.


바로 써먹는 체크리스트와 프로세스

팀장 또는 기획자가 고객의 요구사항을 간단하게 나마 정리를 한 수준에서 개발 팀원들에게 다음의 체크리스트를 작성하기 위한 일정에 대한 마일스톤을 수립합니다.

업무 분석 체크리스트

1. 기능의 배경과 목적

  • 이 기능(업무)은 왜 필요하신가요?
  • 어떤 문제가 있어서 이 기능을 요청하셨나요?
  • 현재는 이 일을 어떻게 처리하고 계신가요?

2. 업무 처리 순서

  • 이 업무는 어떤 순서(Step)로 진행되나요?
  • 누가(어떤 역할/부서)가, 언제, 무엇을 처리하나요?
  • 예시로 실제 업무 한 건이 어떻게 처리되는지 처음부터 끝까지 말씀해주실 수 있나요?

3. 데이터 및 처리 기준

  • 이 업무에 쓰이는 데이터에는 어떤 것들이 있나요? (Excel, 문서, 기존 시스템 화면 캡처 등 뭐든 좋습니다.)
  • 어떤 값(상태값, 기준값 등)을 기준으로 처리 여부를 판단하시나요?
  • '처리 완료'나 '성공/실패'는 어떤 기준으로 확인하시나요?

4. 예외 및 특이 케이스

  • 업무 처리 중 자주 발생하는 예외 상황이 있나요?
  • 빈도는 낮지만 반드시 처리해야 하는 특수 케이스가 있나요?

5. 완료 후 확인 사항

  • 업무가 끝난 뒤 어떤 결과(리포트, 통계 등)가 필요하신가요?
  • 완료된 건은 이후에 어떻게 관리되거나 다른 업무에 쓰이나요?

개발 프로세스 표준안

업무 분석 체크리스트를 기준으로 데이터와 기능에 대한 설계/개발 단계에 대한 작업을 진행하는 표준안에 대해 팀원들과 합의합니다.

분석/요구사항 정리 단계

  • 업무 담당자와 인터뷰 진행
  • 인터뷰 내용으로 기능 명세서(템플릿) 작성
  • [필수] 작성된 기능 명세서에 대해 팀 리뷰 완료 및 승인 후 다음 단계 진행

설계 단계

  • 확정된 명세서 기준으로 테이블 초안 작성 (테이블/컬럼명/타입 등)
  • 화면별 API 목록 및 요청/응답 데이터 정의
  • [필수] 설계 내용 등록 후 팀/팀장 리뷰 완료 → 승인 후 개발 착수 가능

개발 단계

  • 승인된 설계 산출물을 기준으로 개발 진행
  • 퇴근 전, 오류 없는 상태로 일일 커밋 진행

테스트 단계

  • 개발 담당자가 직접 테스트 시나리오 작성 및 기능 확인
  • 담당자 확인 후 승인 시 최종 완료

프로젝트 운영 규칙

이것만은 반드시 지킵시다.

  • 규칙 1: 분석 및 설계 승인 없이는 개발 시작 절대 불가.
  • 규칙 2: 구두/메신저 요청은 업무 요청으로 인정 안 함. 모든 요청은 기능 명세서로.
  • 규칙 3: 모든 테이블/핵심 기능 변경은 반드시 팀 공유 및 승인 후 반영.

어떤 이유에서든 분석/설계 단계를 대충 넘어가는 것은 단기적으로 시간을 버는 것 같지만, 장기적으로는 운영 및 유지보수에 더 큰 비용과 리스크로 돌아옵니다.

개발자들이 자연스럽게 분석/설계에 참여하도록 구조화된 프로세스와 명확한 산출물을 정의하고, 이를 코드 리뷰와 같은 당연한 문화로 만들어야 합니다.

결국 가장 중요한 것은, 이 모든 과정을 통해 "개발을 하려면, 분석/설계부터 해야 한다"는 인식을 팀원들이 자연스럽게 받아들이도록 만드는 것입니다.