#5 of Spring - API 개발 고려사항 at MSA 환경

MSA 개념 및 API 개발 주의점


개요

  • MSA (Micro Service Architecture)
    • 각 기능에 맞게 서비스를 분리하여 모듈처럼 개발하는 설계 방식
    • 대규모 및 복잡성이 높은 프로젝트에 유용
    • 서비스를 부분적으로 스케일 아웃하기 좋음
    • 빌드 / 테스트 / 배포 시간을 다소 줄일 수 있음
    • 장애의 영향범위를 최소화 할 수 있음
      • 서비스 전체로 장애가 번지는 이슈 사전 방지

고려사항

  • 서비스 간 API 호출로 인해 통신 비용 및 레이턴시 증가
  • 테스트 복잡도 증가
  • 데이터 관리 및 정합성 유지 중요

API 개발 시 주의점

  • 가급적 RESTful 하게 API 요청 및 응답 방식을 규격화
    • GET / 조회
    • POST / 생성
    • PUT / 수정
    • DELETE / 삭제
    • API 호출 통신 방식 종류
      • Retrofit
      • RestTemplate
    • 응답 규약 사전 정의
      • JPA 사용 시 엔티티 구조 그대로 노출 X
        • 미리 정해둔 API 스펙에 맞게 필요한 데이터만 DTO 변환 후 전달
      • 주요항목 예시
        • 요청시간
        • 요청키 for 서비스 운영 이후 디버그 로그
        • 응답시간
        • 응답데이터
          • 성공 -> 조회 데이터 / "success" 문자열 등
            • save 의 경우, PK 값
          • 예외 -> null
          • 실패 -> null
        • 상태값
          • 400 / 500 / 404 / 200 / 403 등 HttpStatusCode
        • 커스텀 응답 코드
          • 개발자들 간 합의 ex) 10자리의 서비스 통용 응답 코드 규칙
        • 커스텀 응답 메시지
          • 외부 서버와의 통신 결과 실패 응답 시
            • 해당 실패 메시지 그대로 리턴 or 가공해서 리턴
  • 서비스 간 기능 목적에 부합하는 설계 및 로직 구성
    • 예시
      • Front 서비스
        • service 단에서 비즈니스 로직 생성
          • 요청 데이터 가공
          • 호출할 API 결정
          • view 단에 리턴해줄 응답 데이터 가공
          • 그 외 util 클래스들을 활용한 검증 및 체크 로직
      • Back 서비스 (API)
        • service 단에서 가급적 비즈니스 로직 지양
          • select / 조회
            • 데이터 가공 없이 그대로 front 로 전달
          • CRUD 와 관련된 최소한의 로직만 추가
        • repository 단에서 기본 쿼리 / 네이티브 쿼리 구분 when JPA 사용
          • 기본 쿼리
            • JpaRepository 상속 받아 그대로 활용
              • findById
              • findAll
          • 네이티브 쿼리
            • 다소 복잡하거나 장문의 쿼리인 경우
            • Custom 인터페이스 / Impl 클래스 별도 생성
              • Custom 인터페이스
                • findByUsername 등 개발자가 임의 쿼리 추가
              • Impl 클래스
                • Custom 인터페이스에 만든 메소드 구현
                • QueryDSL 활용
  • 공통 로직 분리
    • Abstract Class 및 Interface 를 통해 공통 로직 제어
      • 특히, service 단

References





댓글