인프런 커뮤니티 질문&답변

hss65900님의 프로필 이미지
hss65900

작성한 질문수

스프링 핵심 원리 - 기본편

전체 흐름 정리

interface와 기능추가

작성

·

221

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

고객이 주문취소 를 추가 개발해달라고 요청이 왔을때는 어떤식으로 개발을 해야되나요? 추가 요건이 생길때마다 interface와 클래스를 새로 만들어야되나요?

답변 1

0

안녕하세요. hss65900님, 공식 서포터즈 OMG입니다.

코드 예시를 들어 설명드리면

주문 취소가 이미 만들어진 주문 기능에 포함되는 구조라면 주문 관련 소스코드에 추가 기능 개발을 하면 되고,

public interface OrderService {

    // 주문 등록

    // 주문 조회

    // 주문 수정

    // 주문 취소(추가)
    void orderCancel(Long orderId);
}

애플리케이션 구조가 아래와 같이 주문과 관련된 코드 구조가 아래와 같이 기능별로 설계되어 있다면 주문 취소 관련 클래스를 추가하여 개발하면 될 것 같습니다.

/*
주문 등록
*/
public interface OrderCreateService {
    // 주문 단건 생성
    // 주문 일괄 생성
    // 전화 주문
    // 앱 주문
}
/*
주문 조회
*/
public interface OrderSearchService {
    // 메인 페이지 검색
    // 주문 여러개 검색
    // 내 주문 건만 검색
}

 

 

감사합니다.

hss65900님의 프로필 이미지
hss65900
질문자

주문 관련하여 orderService에 주문생성 주문조회 주문취소 주문변경 등 주문 전체에 대한 전반적인 기능을 만들어서 관리를 하였는데 갑자기 고객이 추가로 장바구니 기능을 만들어야 된다고 요청이 들어오면orderService에서 장바구니 메서드를 추가하는것이 아닌 orderShoppingCartService interface를 만드는것이 비효율적이지 않나요? 또한 갑자기 고객이 주문 변경은 안하는게 좋을거 같다고 요청이오면 orderService에서 주문변경을 삭제해야되는건가요? 아니면 orderServiceVersion2등으로 새로 만들어야 되는건가요?

 애초에 설계를 잘하는것이 좋겠지만 고객들은 as-is에서 이기능이 불편해서 바꿔달라고 했는데 갑자기 이거 왜 as-is랑 다르냐 다시 as-is대로 해달라 이런식으로 요구사항은 항상 바뀌는데 그때마다 interface까지 만들어야되는것이 비효율적이지 않나 생각이 들어서요.

orderService에 주문, 장바구니, 주문과 관련된 기타 등등 모든 기능이 모이기 보다는 적절히 분리하는게 유지보수 측면과 변화에 대응하기 좋은 방법이라고 생각하는데요,

개발하는 환경이 어떤지 모르겠으나 개발자가 나 혼자가 아니고 같이 개발해야하는 환경에서

a개발자는 주문관련 기능을 수정, b개발자는 장바구니 관련 코드를 수정하는 업무를 담당했을 때 주문과 장바구니 클래스가 분리되어 있었다면 형상관리에서 충돌이 발생하지 않았겠지만 같은 클래스 내에 있다면 충돌이 발생하여 해결하는 과정이 동반됩니다.

 

그리고 얘기하신대로 요구사항은 항상 바뀌고 시스템은 확장될 수 있고 orderService에 장바구니만 추가되진 않을 수 있으니 적절한 시기와 기능별로 분리하는게 좋은 개발방향이라 생각합니다.

 

마치 우리가 함수를 만드는 것처럼, 패키지를 분리하는것 처럼, MSA를 대규모 시스템에서 고려하는 것처럼 하나의 큰 덩어리보다는 작은 모듈별로 역할을 분리하는 것은 일맥상통한다 생각합니다.

 

hss65900님의 프로필 이미지
hss65900

작성한 질문수

질문하기