[Spring] 웹 애플리케이션 계층구조

이준영·2022년 9월 21일
0

스프링-입문

목록 보기
5/15

일반적인 웹 애플리케이션의 계층 구조

  • 컨트롤러 : 웹 MVC의 컨트롤러 역할

  • 서비스(로직) : 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직 구현하도록 구현
    ex) 회원은 중복 가입이 안된다

  • 레포지토리(저장소) : DB에 접근, 도메인 객체를 DB에 저장하고 관리

  • 도메인(객체) : 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등 주로 DB에 저장하고 관리

모두 main/java/project.projectspring에 패키지로 생성한다.


컨트롤러

  • Class
    url 설정, parameter 지정return값 지정

도메인

  • Class
    객체 생성. 여기서 만든 객체를 레포지토리와 서비스에서 사용한다.

레포지토리

  • Interface
    함수 선언. 이름과 파라미터만 생성하고 구현 로직은 아직.
  • Class
    Interface를 상속 받아서 Overriding을 통해 함수 정의

아직 데이터 저장소가 선정되지 않았다는 가상의 시나리오 하에 인터페이스를 생성한다.

인터페이스를 만드는 이유는 끝점(input과 output부분)만 맞춰주면 내부 동작이 어떻게 구현되던 상관없이 서로 다른 두 시스템(소프트웨어)을 이어줄 수 있기 때문이다.
그래서 인터페이스에 사용할 함수의 이름만 구현해 놓는다.

인터페이스 안에 함수를 만들어 놓으면 이 인터페이스를 상속받아 새로운 클래스를 만든다.
여기서 overriding개념을 이용하여 함수를 재정의 할건데 이때 @Override 애노테이션을 써야한다.

함수의 구현 로직은 클래스 파일 안에 있을 것이고 인터페이스는 약간 설명서느낌?


서비스

  • Class
    비즈니스 로직 구현. 위에서 생성한 객체와 함수를 이용하여 비즈니그 로직을 구현한다. 코딩 대부분의 시간을 여기에다 쏟아붓지 않을까 싶다.


    레포지토리와 서비스에서 둘다 함수를 구현한다고 써놨는데 어떤 차이가 있냐면
    -> 레포지토리는 단순히 저장소에 접근하는 느낌으로 함수명 naming을 단순/기계적으로 짓고
    ex) save, findId, findName, findAll, clearStore 등
    -> 서비스는 비즈니스에 가까운 느낌으로 함수명 naming을 비즈니스적으로 짓는다
    ex) join, login, logout 등



이렇게 주구장창 써놓으면 뭔소린지 모르겠으니까 다음 포스팅에서 회원 관리 예제를 통해 자세히 공부해보자!!

profile
화이팅!

0개의 댓글