Back End/Spring

[Spring ] Spring 의 주요 구조에 대한 간단한 개념

쟈누이 2021. 1. 10. 20:59
반응형

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 명령을 데이터베이스에 전달하여 원하는 쿼리를 실행할 수 있다. 

docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html

 

JpaRepository (Spring Data JPA 2.4.2 API)

getOne T getOne(ID id) Returns a reference to the entity with the given identifier. Depending on how the JPA persistence provider is implemented this is very likely to always return an instance and throw an EntityNotFoundException on first access. Some o

docs.spring.io

즉, 다른 블로그의 표현을 빌려오자면, " Spring Framework에는 더 똑똑하게 데이터 검색을 할 수 있는 구조가 제대로 준비되어 있다. 그것이 "JpaRepository"라는 것이다. " 라는 표현이 적당할 것 같다.

araikuma.tistory.com/329

 

[Spring] JpaRepository 이용

Spring Data JPA는 "JpaRepository"라는 기능을 사용하면 매우 간단히 데이터를 검색 할 수 있도록 된다. 그 기본적인 사용법을 설명한다. JpaRepository 인터페이스 생성 이전에 기본적인 데이터베이스 액세

araikuma.tistory.com

간단하게 데이터를 검색하거나, 삽입하고 삭제 및 수정을 할 수 있는 인터페이스라고 생각하면 될 것 같다.

위 이미지같이 생겼으며, JpaRepository 를 상속하여 내가 원하는 형태의 Repository 형태를 만들 수 있다. 아래와 같이 상속을 받을 수 있다.

위 위미리의 형태로 내가 사용하고자 하는 interface 를 만든 다음에 거기에 JpaRepository 를 상속해주면 된다. 


3. Controller

컨트롤러에 대해 간단히 정리하자면, 사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 한다. 뷰를 연결하여 웹상에 띄우고, 뷰에서 가져오는 데이터들을 어떻게 처리하는지 사용자가 지정해놓으면 그 역할에 맞춰서 사용자의 요청을 처리하는 것이다. 

말 그대로 컨트롤러 답게 MVC 에서 웹상으로 들어오는 여러 요청들을 처리하는 역할이라고 보면된다. Dispathcer Servlet 도 컨트롤러를 통해서 많은 요청들을 처리한다.

위 이미지와 같이 특정 mapping 을 실행하면 거기에 기록된 요청사항을 수행한다. 즉 웹의 모든 요청을 컨트롤하는 컨트롤 타워 및 중앙 통로의 역할(?) 로 보면 좋을 것 같다.


4. Service

Service 는 Model이 데이터베이스에서 받아온 데이터를 전달받아 가공하는 역할을 한다.

위 이미지는 데이터를 생성하는 service 클래스인데

주석에서 기록한 스텝에 맞추어 데이터를 전달하는 프로세스로 이루어져 있는데, 데이터베이스에 데이터를 넣기위해 특정한 양식으로 데이터들을 2 번 user 생성에서 가공하고 있는 모습이다. 

이처럼 Service 객체는 controller 에서 전달받은 유저의 요청사항에 알맞게 데이터를 가공해서 데이터베이스로 전달하거나 반대로 데이터베이스에서 데이터를 전달받아 가공하여 view 의 유저에게 전달하는 역할을 맡고 있다.

 

 

간단하게 추후 공부를 위해 패스트 캠퍼스 java 웹개발 강의의 adminPage 만들기 파트를 보며 정리했던 내용들을 간단하게 블로그에 정리해보았다. 여기서 더 나아가 다른 프로젝트를 만들거나, 인강에 있는 다른 프로젝트를 만들 때 도움이 될 수 있을 것 같다.

반응형