Flask 리드·아키텍트 테스트·코드품질 면접

Flask 리드 · 아키텍트 (10년+) 테스트 · 코드품질 3문항 조회수 32 · 2026-08-04 (화) 12:52:47
1 테스트 아키텍처
Hard

Q. 10년 이상 운영된 Flask 모놀리식 애플리케이션을 MSA로 전환하는 프로젝트를 진행 중입니다. 기존 시스템은 테스트 커버리지가 30% 미만이며, 통합 테스트가 대부분입니다. 전환 과정에서 테스트 전략을 어떻게 재설계하시겠습니까? 레거시 코드와 신규 마이크로서비스 각각에 대한 테스트 접근법, 우선순위, 리스크 관리 방안을 포함하여 설명해주세요.

레거시 코드에 대한 안전망 구축과 신규 서비스의 테스트 피라미드 전략을 분리해서 생각해보세요.

A. 모범답안

레거시 시스템에는 먼저 Golden Master Testing 기법으로 현재 동작을 스냅샷으로 고정하고, 비즈니스 크리티컬한 경로부터 Characterization Test를 작성해 안전망을 구축합니다. 신규 마이크로서비스는 TDD로 개발하며 테스트 피라미드(단위 70%, 통합 20%, E2E 10%)를 준수합니다. 전환 과정에서는 Contract Testing(Pact 등)으로 서비스 간 인터페이스를 검증하고, Strangler Fig 패턴 적용 시 기존 시스템과 신규 서비스의 응답을 비교하는 Shadow Testing을 병행합니다. 단계별 전환마다 smoke test를 자동화하여 배포 전 필수 기능 검증을 보장하며, 테스트 커버리지를 점진적으로 80% 이상으로 높이되 비용 대비 효과를 고려해 핵심 비즈니스 로직에 집중합니다. 조직 차원에서는 테스트 작성 시간을 스프린트 계획에 공식 반영하고, 코드 리뷰 시 테스트 품질을 필수 체크리스트로 포함시킵니다.

핵심 포인트
  • • 레거시에는 Golden Master/Characterization Test로 안전망 구축
  • • 신규 서비스는 TDD와 테스트 피라미드 원칙 적용
  • • Contract Testing과 Shadow Testing으로 전환 리스크 관리
  • • 비즈니스 크리티컬한 경로 우선순위화
  • • 조직 프로세스에 테스트 작성 시간 공식 반영
답변에 넣으면 좋은 키워드
Golden Master Testing Characterization Test Contract Testing Shadow Testing Strangler Fig Pattern 테스트 피라미드
실무에서는

대규모 레거시 시스템을 MSA로 전환할 때 테스트 전략 부재로 인한 장애를 예방하고 안정적인 마이그레이션을 보장합니다.

Follow-up 질문

Contract Testing 도입 시 프론트엔드 팀, 백엔드 팀 간 협업 프로세스를 어떻게 설계하시겠습니까?

2 코드 품질 거버넌스
Hard

Q. 여러 팀이 Flask 기반 서비스를 개발하는 조직에서 CTO로서 코드 품질 기준을 표준화하려 합니다. 현재 팀마다 코딩 스타일, 테스트 작성 방식, 리뷰 프로세스가 제각각입니다. 조직 전체에 적용할 코드 품질 가이드라인을 어떻게 설계하고 정착시키겠습니까? 기술적 도구 선택, 측정 지표, 교육 방안, 그리고 개발자들의 저항을 최소화하는 전략을 포함해 답변해주세요.

자동화 도구와 점진적 도입 전략, 그리고 개발자 자율성과 표준화의 균형을 고려하세요.

A. 모범답안

먼저 Black, isort, Flake8, mypy를 조합한 자동 포맷팅 및 린팅 파이프라인을 구축하고 pre-commit hook과 CI/CD에 통합하여 기계적 검증은 자동화합니다. 코드 품질 측정을 위해 SonarQube를 도입하여 복잡도(Cyclomatic Complexity 10 이하), 중복도(5% 이하), 테스트 커버리지(핵심 로직 80% 이상)를 지표화하고 대시보드로 가시화합니다. 코드 리뷰 가이드라인은 팀 리드들과 협업해 작성하되, 체크리스트 형태로 구체화하여(테스트 존재 여부, 에러 핸들링, 보안 이슈 등) 주관성을 줄입니다. 도입은 신규 프로젝트부터 시작해 성공 사례를 만들고, 레거시는 수정하는 파일부터 점진적으로 적용하는 Boy Scout Rule을 권장합니다. 월 1회 코드 리뷰 세션을 운영해 좋은 코드 사례를 공유하고, 가이드라인 위반 시 blame이 아닌 학습 기회로 활용하는 문화를 조성합니다. 개발 속도 저하 우려에 대해서는 초기 2주간 20% 속도 감소를 허용하되, 4주 후 품질 개선으로 인한 디버깅 시간 감소를 측정해 ROI를 증명합니다.

핵심 포인트
  • • Black, Flake8, mypy 등 자동화 도구로 기계적 검증 표준화
  • • SonarQube로 복잡도, 중복도, 커버리지 측정 및 가시화
  • • 신규 프로젝트 우선 적용 후 점진적 확산
  • • 코드 리뷰를 학습 기회로 활용하는 문화 조성
  • • 단기 속도 감소 허용 후 장기 ROI 측정
답변에 넣으면 좋은 키워드
Black Flake8 mypy SonarQube Cyclomatic Complexity pre-commit hook Boy Scout Rule
실무에서는

다수의 개발팀이 협업하는 환경에서 일관된 코드 품질을 유지하고 기술 부채를 예방합니다.

Follow-up 질문

코드 리뷰에서 시니어 개발자와 주니어 개발자 간 의견 충돌이 반복될 때 어떻게 중재하시겠습니까?

3 테스트 전략 최적화
Hard

Q. Flask 애플리케이션의 CI/CD 파이프라인에서 전체 테스트 실행 시간이 45분에 달해 배포 속도가 느려지고 개발자들이 테스트를 건너뛰려는 경향이 생겼습니다. 테스트 커버리지를 유지하면서 실행 시간을 20분 이내로 단축하는 전략을 제시해주세요. 테스트 분류, 병렬화, 인프라 최적화, 그리고 장기적인 테스트 suite 설계 개선 방안을 포함해 답변해주세요.

테스트를 계층별로 분리하고, 실행 빈도와 중요도에 따라 다르게 처리하는 방법을 고려하세요.

A. 모범답안

테스트를 smoke(2분), unit(8분), integration(15분), E2E(20분) 계층으로 분리하고, PR 단계에서는 smoke+unit만 필수 실행하며 integration은 병렬로 실행해 전체를 10분 내로 완료합니다. E2E 테스트는 merge 후 main 브랜치나 nightly build에서만 실행하도록 트리거를 분리합니다. pytest-xdist로 테스트를 병렬 실행하되, 데이터베이스 의존성이 있는 테스트는 pytest-django의 transaction fixture나 factory-boy를 활용해 격리성을 보장합니다. Docker 기반 테스트 환경을 최적화하여 레이어 캐싱을 극대화하고, 테스트 DB는 인메모리 SQLite나 테스트 전용 컨테이너를 재사용합니다. 느린 테스트는 pytest-benchmark로 프로파일링하여 상위 20%를 집중 개선하고, 외부 API 의존성은 responses나 vcrpy로 모킹하여 네트워크 지연을 제거합니다. 장기적으로는 통합 테스트를 단위 테스트로 전환할 수 있는 부분을 식별하고, 테스트 피라미드 비율을 재조정하여 빠르고 안정적인 피드백 루프를 구축합니다. 테스트 실행 시간을 CI/CD 메트릭으로 추적하고, 새로운 테스트 추가 시 실행 시간 임계값(0.5초)을 초과하면 경고를 발생시킵니다.

핵심 포인트
  • • 테스트 계층 분리 및 실행 트리거 차별화 (PR vs merge vs nightly)
  • • pytest-xdist 병렬화와 격리성 보장
  • • Docker 캐싱, 인메모리 DB로 인프라 최적화
  • • 외부 의존성 모킹으로 네트워크 지연 제거
  • • 느린 테스트 프로파일링 및 테스트 피라미드 재조정
답변에 넣으면 좋은 키워드
pytest-xdist smoke test pytest-benchmark responses vcrpy 테스트 피라미드 인메모리 DB
실무에서는

CI/CD 파이프라인의 테스트 단계가 병목이 되어 배포 주기가 길어지고 개발 생산성이 저하되는 상황을 개선합니다.

Follow-up 질문

테스트가 간헐적으로 실패하는 flaky test 문제를 조직 차원에서 어떻게 관리하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!