Skip to content

서비스 추상화 고려 #8

@wooodypark

Description

@wooodypark

서비스 계층 추상화 도입 검토

배경

현재 이니셜라이저 프로젝트 개요

  • Spring Security 기반 인증/인가 구조 제공
  • 통일된 API 응답 포맷 제공 (ApiResponse, ErrorResponse 등)
  • 기본적인 예외 처리 및 구조 제공

하지만 현재 Service 레이어는 구현 클래스만 존재하며, 별도의 인터페이스 추상화는 되어있지 않은 상태.


아이디어

서비스 계층을 인터페이스 (Service)와 구현체 (ServiceImpl)로 분리하는 구조를 도입하는 것

예시:

public interface UserService {
    UserEntity findUserById(Long id);
    void signUp(UserEntity user);
}

@Service
public class UserServiceImpl implements UserService {
    ...
}

장점

  • 확장성과 테스트 용이성

    • Mockito 등을 이용한 Mock 테스트 작성이 용이
  • 관심사 분리

    • 인터페이스: 클라이언트와의 연결
    • 구현 클래스: 내부 로직 구현
  • 다형성과 유지보수성

    • 구현 교체가 자유롭고 코드 유연성 증가
    • 템플릿으로 사용하는 사람 입장에선 기존 코드 건드리지 않고 따로 구현체를 만들어 커스텀 가능
  • 템플릿 범용성 향상

    • 다양한 구현 전략에 유연하게 대응 가능 (ex: Memory vs DB)

단점 및 고려사항

  • 과도한 구조일 수 있음

    • 단순 CRUD 서비스의 경우 인터페이스가 불필요하게 느껴질 수 있음
    • 인터페이스가 의미 없는 래퍼 역할만 할 수 있음
    • 규모와 설계에 따라 service 인터페이스에 여러 구현체가 아닌 1:1구조가 되는 경우가 많음
  • 파일 수 증가

    • 클래스 수가 늘어나 코드 복잡도가 올라갈 수 있음
    • 단순한 CRUD 서비스라도 구조가 복잡해질 수 있음

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions