Spring 을 공부하면서, Model, Repository, Controller 등 스프링에서 사용하는 구조들에 대해서 어떻게 하면 쉽게 이해를 할 수 있을까 생각을 해보았다.
1. Model
Model 은 DAO 라고 생각하면 된다. Data Aeccess Object 의 약자이며 말 그대로 데이터베이스에서 값을 가져와 도메인 오브젝트에 리턴시켜주거나 반대로 도메인의 값을 가져와 데이터베이스에 리턴시켜주는 역할을 맡고 있다.
아래 이미지와 같이 데이터베이스에 리턴 또는 받고자하는 값과 타입들을 기입하면된다. 옛날에는 getter, setter 를 사용했어서 복잡했었지만, lombok 이라는 플러그인의 도움으로 어노테이션을 통해 코드를 보다 심플하게 사용할 수 있게 되었다.
쉽게 말하면, 데이터베이스와 유저가 보는 화면(View)를 이어주는 하나의 기차, 좌석버스(?) 라고 이해하는것이 나름 빠를 것 같다는 생각이 든다. Model 에 값과 값의 타입을 입력해주면, 거기에 맞추어서 값을 가져오고 전달해주기 때문이다.
2. Repository
Repository는 '저장소' 라는 뜻을 가진 단어이다. JPA 에서 Repository 인터페이스를 생성 후, JpaRepository<Entity, 기본키 타입> 을 상속받으면(extends하면) 기본적인 Create, Read, Update, Delete가 자동으로 생성된다.
JpaRepository 를 사용하며, 데이터베이스에 CRUD 의 명령을 실행하게 만드는 인터페이스라고 생각하면 편할 것 같다. 위 인터페이스를 사용하면 복잡하 쿼리 없이 CRUD 명령을 데이터베이스에 전달하여 원하는 쿼리를 실행할 수 있다.
즉, 다른 블로그의 표현을 빌려오자면, " Spring Framework에는 더 똑똑하게 데이터 검색을 할 수 있는 구조가 제대로 준비되어 있다. 그것이 "JpaRepository"라는 것이다. " 라는 표현이 적당할 것 같다.
간단하게 데이터를 검색하거나, 삽입하고 삭제 및 수정을 할 수 있는 인터페이스라고 생각하면 될 것 같다.
위 이미지같이 생겼으며, JpaRepository 를 상속하여 내가 원하는 형태의 Repository 형태를 만들 수 있다. 아래와 같이 상속을 받을 수 있다.
위 위미리의 형태로 내가 사용하고자 하는 interface 를 만든 다음에 거기에 JpaRepository 를 상속해주면 된다.
3. Controller
컨트롤러에 대해 간단히 정리하자면, 사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 한다. 뷰를 연결하여 웹상에 띄우고, 뷰에서 가져오는 데이터들을 어떻게 처리하는지 사용자가 지정해놓으면 그 역할에 맞춰서 사용자의 요청을 처리하는 것이다.
말 그대로 컨트롤러 답게 MVC 에서 웹상으로 들어오는 여러 요청들을 처리하는 역할이라고 보면된다. Dispathcer Servlet 도 컨트롤러를 통해서 많은 요청들을 처리한다.
위 이미지와 같이 특정 mapping 을 실행하면 거기에 기록된 요청사항을 수행한다. 즉 웹의 모든 요청을 컨트롤하는 컨트롤 타워 및 중앙 통로의 역할(?) 로 보면 좋을 것 같다.
4. Service
Service 는 Model이 데이터베이스에서 받아온 데이터를 전달받아 가공하는 역할을 한다.
위 이미지는 데이터를 생성하는 service 클래스인데
주석에서 기록한 스텝에 맞추어 데이터를 전달하는 프로세스로 이루어져 있는데, 데이터베이스에 데이터를 넣기위해 특정한 양식으로 데이터들을 2 번 user 생성에서 가공하고 있는 모습이다.
이처럼 Service 객체는 controller 에서 전달받은 유저의 요청사항에 알맞게 데이터를 가공해서 데이터베이스로 전달하거나 반대로 데이터베이스에서 데이터를 전달받아 가공하여 view 의 유저에게 전달하는 역할을 맡고 있다.
간단하게 추후 공부를 위해 패스트 캠퍼스 java 웹개발 강의의 adminPage 만들기 파트를 보며 정리했던 내용들을 간단하게 블로그에 정리해보았다. 여기서 더 나아가 다른 프로젝트를 만들거나, 인강에 있는 다른 프로젝트를 만들 때 도움이 될 수 있을 것 같다.
'Back End > Spring' 카테고리의 다른 글
[Java 웹개발 마스터] 스터디2. Lombok 이란 (0) | 2021.01.13 |
---|---|
[Java 웹개발 마스터] 스터디1. JPA 사용하기 (0) | 2021.01.12 |
[ Spring ] JPA 관련 기본 개념 정리 - 갓대희의 작은 공간 일부 캡쳐 (0) | 2020.12.26 |
[Spring boot] Intellij 의 Spring initializer 가 뜨지 않을 때 (0) | 2020.12.19 |
[Spring Project 1] 스프링 기본 개념 스터디 링크 LogBack, Maven (0) | 2020.12.19 |