[Spring] 흐름 이해하기

gnoesnooj·2021년 12월 1일
0

강의를 듣던 중, 용어를 들었는데 "이게 뭐였더라 ?"하는 생각이 들어서 용어나 흐름에 대해 내 나름대로의 정리를 하게 되었다.

1. Controller

  • 클라이언트가 보낸 요청에 대해서 어떤 처리를 해야할 지 결정해준다
  • 여기서 컨트롤러는 해당 요청에 대한 처리의 로직에 관여하진 않는다(->Service)
  • 들어온 url 요청에 대해 어떤 view를 리턴할 지 결정해준다.
  • Data나 Entity에 직접 접근하지 않는다.

2. Service

  • 컨트롤러를 통해서 결정된 Service에서는 해당 요청을 처리하는 로직을 갖고 있다.
  • 요청에 대해 DB에 접근이 필요한 경우, DAO를 사용해서 DB에서 Data를 가져온다.

3. Repository (Date Access Object)

  • Service 가 DB에 접근하기 위해 사용하는 객체이다.
  • DB를 이용한 데이터 CRUD 기능을 가지고 있는 경우가 많다. (조회, 저장 ...)

(+) DTO ?

: 컨트롤러와 리포지토리, 서비스 등 계층을 오갈 때 사용되는 객체이다. 내부적 로직을 가질 수 있다.

(+) VO ?

: 값을 불변함을 보장하며 저장하는 객체

(+) Service 와 Controller 가 나뉜 이유 ?

: 굳이 찾아주는 역할 없이, 바로 Controller로 연결되어 해당 로직을 처리하면 간단하다고 생각할 수 있다. 하지만 두 기능을 합치면 중복되는 코드가 매우 많이 발생하게 되며, 해당 코드에 문제가 발생 시 유지보수가 매우 힘들어진다.

4. Entity

  • DB에 값을 저장하기 위해 사용하는 일종의 테이블이다.

    create table Member{
    	name varchar(20);
       age int;
    }``` // Member가 Entity가 된다.
  • Column - 속성
  • 하나의 가로 행 : 해당 엔티티의 객체
  • 클라이언트 - Controller - Service - Repository - DB
  • 객체지향에서의 Entity는 행위를 가지기도 한다.
  • DB에서의 Entity 가 PK를 가지는 것처럼 객체지향에서도 식별자로 사용하는 필드가 있다.
class Member{ // Member 엔티티는 getAge() 라는 행위를 가진다.
	String name;
    int age;
    
    public void getAge(){
    	System.out.print(name + " 의 나이 : " + age);
    }
}

5. Domain

  • CS에서 많이 등장하는 단어.
  • DB와 객체지향에서의 도메인은 약간 다른 의미인것 같다. DB의 도메인 테이블 안에 속성, 칼럼들이 가질 수 있는 값의 집합과 규칙을 말한다. 그에 반해 객체지향에서는 프로그래밍을 통해서 해결하고자 하는 문제의 영역으로 그에 필요한 요구사항, 정의 등을 말한다. 객체지향에서의 도메인은 식별자와 상태를 갖는 Entity와 static으로 불변한 값을 가지는 VO로 나뉜다.

용어에 대한 명확한 정리를 제대로 안해놓다보니 효과가 매우 적어지는 것을 알게 되었다. 다음엔 알고 있다고 생각할지라도 다시 한 번 보고, 되돌아보는 습관을 가져야겠다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글