카카오테크 부트캠프

MVP 이후의 코드 품질 개선 전략 — 리팩토링

kanado 2025. 6. 21. 23:46

1차 MVP 출시 이후, 우리 팀이 코드 품질을 장기적으로 높이기 위해 리팩토링 항목들을 리스트업해했습니다.

MVP는 빠른 사용자 반응을 확인하기 위해 핵심 기능을 우선 개발하는 데 초점이 맞춰져 있기 때문에, 출시 후에는 코드 품질을 안정적이고 유지보수하기 쉽게 다듬는 것이 중요합니다.
이를 위해 아래와 같은 5가지 주요 리팩토링 작업테스트 작성 계획을 수립했습니다.


1. 전반적인 예외 처리 방식 개선
예상 소요시간: 2~3시간

MVP 단계에서는 예외 처리 범위가 빠르게 확장되면서 ResponseCode 클래스가 지나치게 비대해지고 도메인별 예외가 구분되지 않는 문제가 발생했습니다.

이에 따라 다음과 같이 개선하고자 합니다.

  • 글로벌 예외와 도메인별 예외 코드를 분리
  • ResponseCode 클래스를 Enum으로 재정의하여 HttpStatus, code, message를 한 번에 관리
  • 전역 예외는 GlobalExceptionHandler에서 처리하고, 도메인별 예외는 BusinessException을 상속한 예외로 관리

예시 코드

public enum ResponseCode {
    BAD_REQUEST(HttpStatus.BAD_REQUEST, "BAD_REQUEST", "잘못된 요청입니다."),
    INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR", "내부 서버 오류가 발생했습니다.");

    private final HttpStatus status;
    private final String code;
    private final String message;
    // Getter 생략
}

예상 패키지 구조

com.example.api
 ├── common
 │    ├── ResponseCode.java  // 전역 ResponseCode
 ├── global
 │    ├── exception
 │    │    ├── GlobalExceptionHandler.java
 │    │    ├── BusinessException.java
 ├── oauth
 │    ├── responsecode
 │    │    └── OAuthResponseCode.java  // 도메인별 ResponseCode

2. 주석 스타일 통일
예상 소요시간: 1시간

  • 코드 주석 스타일을 Javadoc 형식으로 통일
  • 주요 클래스, 메서드, 상수에 일관된 주석 작성
/**
 * 사용자 정보를 조회합니다.
 * @param userId 사용자 ID
 * @return 사용자 정보 DTO
 */
public UserDto getUser(Long userId) { ... }

3. 중복 코드 유틸리티 클래스 분리
예상 소요시간: 2시간

여러 클래스에서 반복되는 로직을 Utils 클래스로 모듈화합니다.

예를 들어, RefreshToken을 쿠키에 설정하는 로직이 여러 곳에 중복되어 있는데 이를 한 곳으로 모아 재사용성을 높입니다.

예시 중복 로직

String cookieValue = String.format(
    "refreshToken=%s; Max-Age=%d; Path=/; HttpOnly; SameSite=%s",
    newRefreshToken, 1209600, isLocal ? "None;" : "None; Secure;"
);
response.setHeader("Set-Cookie", cookieValue);

4. 서비스 클래스 메서드 분리
예상 소요시간: 3시간

서비스 클래스에서 단일 메서드에 과도한 로직이 몰리는 문제를 해결합니다.

  • 하나의 메서드를 작은 책임 단위로 쪼갬
  • 명확한 네이밍으로 가독성과 테스트 용이성 강화

5. 테스트 코드 작성 계획

MVP 이후 부족했던 테스트 커버리지를 채우기 위해 우선순위를 선정했습니다.

도메인 주요 테스트 대상 대상 메서드 예상 소요시간

Auth 토큰 재발급, 소셜 로그인 예외 reissueAccessToken, oauthLogin 1시간
User 회원가입, 닉네임 처리 createUser, fetchRandomNickname 1시간
Interests 관심사 등록, AI 전송 saveUserInterests 30분
Channel 매칭, 시그널, 메시지 getTunedUser, sendSignal, getChannelRoomMessages, sendChannelMessage, getPersonalSignalRoomList 3시간

총합: 10개 메서드, 총 5.5시간 예상


 

이번 리팩토링은 단기간에 끝내지 않고, 장기적이고 점진적인 개선 전략으로 진행할 예정입니다. MVP 단계에서 빠르게 쌓인 기술 부채를 단계별로 해소하고, 코드 품질과 유지보수성을 동시에 높이는 것이 목표입니다.

 

끝.