Skip to content

서비스 추상화 고려 #8

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 서비스라도 구조가 복잡해질 수 있음

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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