코드네임 JY

[스프링 입문] Controller, Service, Repository 본문

백엔드 공부

[스프링 입문] Controller, Service, Repository

영재임재영 2022. 12. 6. 14:03

미리보기

✅ Controller, Service, Repository 구조에 대해 알아보자!

✅ Domain에 대하여 알아보자!


🧁 웹 어플리케이션 계층 구조

스프링에서 웹 어플리케이션을 프로그래밍 할 때, 위 그림에 있는 계층 구조를 따르는 것이 개발에 편리하다.

Controller, Service, Repositry를 각각 설명하고 그 이후에 Domain 에 대해서 설명하겠다!

 

Controller

사용자의 요청(Request)을 받고 응답(Response)하는 담당

 

✔️ 요청을 처리하기 위해 Service를 호출 (Controller → Service)

✔️ 결정된 처리를 Service에서 받아 Response 해줌 (Controller ← Service)  // 예시 : View에 Model 객체 넘겨주기

Service

요청을 처리하는 비즈니스 로직 담당

 

✔️ DB의 데이터가 필요할 때는 Repository에 요청 (Service ↔️ Repository)

✔️ 적절한 비즈니스 로직을 수행하여 Controller에 넘겨줌 (Service → Controller)

Repository

데이터를 저장하고 꺼내오는 담당

 

✔️ Service가 비즈니스 로직을 수행할 때 필요한 데이터를 데이터베이스에 저장하거나 꺼내오는 역할 (Repository ↔️ Service)

 

이 개념들을 일련의 과정들로 정리해보겠다!

예를 들어.. 사용자에게 회원 데이터를 받아 회원 가입을 요청 받고, 가입된 회원 목록을 띄우는 요청을 받았다면,

다음과 같은 순서로 과정들이 처리되게 된다.

1️⃣ Client는 사용자에게 받은 요청을 처리하기 위해 Service를 호출하였고,

2️⃣ Service는 Repository를 이용하여 데이터를 저장하였고,

3️⃣ Repository에서는 저장된 데이터를 바탕으로 Service에 데이터를 넘겨주었고,

4️⃣ Service는 최종적으로 수행된 비즈니스 로직의 결과를 Controller에게 넘겨주었다!

 

🍰 도메인(Domain)

사실 위 과정을 수행하기 위해서는 '사용자 정보에 대한 하나의 틀' 이 있어야 하는데, 이것을 '도메인' 이라고 부른다!

조금 더 자세하게 설명하면, "데이터를 다루기 위한 하나의 틀" 이라고 부를 수 있겠다.

public class Member {

    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

위 코드처럼 새로운 클래스 파일을 하나 만든 다음, 이를 객체로 생성하여 사용할 수 있다.

이는 'Java Beans Convention' 에 따라 작성된 자바 클래스인데, 어떤 규칙들이 있냐면...

 

  • 클래스는 Argument가 없는 기본 생성자를 가진다.
  • 클래스의 멤버 변수는 private 접근 제한자를 가져야 한다.
  • 클래스의 변수는 Getter & Setter를 통해 접근할 수 있어야 한다.
  • Getter & Setter는 public 접근 제한자를 가져야 한다.
  • Getter의 경우 Parameter가 존재하지않아야 하며, Setter의 경우 하나 이상의 Parameter가 존재한다.

Java Beans Convention에 대해서 영어 원문을 조금 더 찾아보면 그냥 "just a standard" 라는 표현을 찾아볼 수 있다.

그냥 하나의 표준이라고 생각하면 될 것 같다!

 

도메인에 대해 하나의 예시를 들자면, (요즘은 붕어빵 파시는 분들이 많이 줄어들었다... 너무 슬프다... ㅠㅠ)

'붕어빵을 만드는 틀' = 도메인 (클래스 단위)

'실제 붕어빵' = 실제 사용되는 정보 (데이터 단위)

 

위 클래스에 대입해보면, id와 name 변수는 하나의 틀이고,

실제 담기는 (예를 들어) 'apple123'이라는 id와 'jobs'라는 name이 실제 사용되는 정보인 것이다!

Comments