Spring boot 입문(3)

이민우·2023년 6월 20일
0
post-thumbnail

오늘은 Spring boot의 Controller를 역할별로 분류하는 것을 알아보자.
JPA를 적용한 코드임을 알아두자.

우선 Controller에 대해 알아보자.

Controller란?

  • Model과 View 사이의 상호작용을 조정하고 제어한다.
  • 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트한다.

내가 이해한 Controller란 간단하게 클라이언트에서 url과 함께 그에 맞는 데이터를 Controller에 보내주고 Controller는 받은 url정보에 따라서 서비스가 그에는 행동을 하도록 하게 해준다.

예를 들어 보자면 사용자가 글을 생성할때와 글을 읽을때의 url이 다르고 그에 맞게 api를 설계하는 것이다.

위의 코드는 /memos 로 들어온 요청을 처리하는 Controller로 클라이언트가 생성한 게시글의 데이터들을 데이터베이스에 저장하는 역할을 한다.

이러한 Controller 는 url별로 동작할 기능을 선택해주는 것과 클라이언트에서 받은 데이터를 가지고 기능을 동작해 view로 나타내주는 것과 클라이언트에서 받은 데이터로 서버의 데이터베이스를 변경하거나 데이터를 확인하는 코드가 들어가게된다.
그로인해 코드량이 많을 수 밖에 없고 이러한 문제로 가독성이 떨어지기 때문에 Controller를 앞에서 말한 역할별로 나눌 수 있는데 바로 Controller, Service, Repository 이다.

처리 과정 Controller

처리 과정별로 나뉜 Controller에선 클라이언트에서 url로 요청을 해오면 그에 맞는 데이터들을 함께 받아서 Service 로 값을 전달해주고 Service 에서의 처리과정이 끝나면 결과를 클라이언트에 반환해 준다.

PostController

위의 예시 코드와 같이 어떠한 url을 처리하는지와 어떠한 데이터를 받아서 어떤 기능을 동작시키는지만을 간결하게 나타내게 된다.

처리 과정 Service

처리 과정별로 나뉜 Service에선 Controller에서 url별로 동작시킬 기능들을 모아둔 곳이다.

PostService

위의 예시 코드와 같이 Service에선 Controller에서 받은 클라이언트의 데이터들 가지고 정해진 기능을 수행한다.

처리 과정 Repository

처리 과정별로 나뉜 Repository는 데이터베이스와 관련된 작업을 수행한다.
앞서 살펴본 Service를 다시 살펴보자면 Controller에서 받은 클라이언트의 데이터를 데이터베이스 저장 하는 기능을 수행하는데 그과정에서 Repository를 불러오는 것을 확인 할 수 있다.

PostRepository

여기선 JPA를 사용했다는것을 알아두고 코드를 살펴보자.
앞선 내용인 Service에서 사용한 Repository 기능은 save로 jpa에 이미 있는 기능이다.
위의 예시 코드에서 findAllByOrderByCreatedAtDesc() 는 쿼리문을 메소드 이름으로 적으면 그에맞게 데이터를 반환해준다.
Service에서 Repository.findAllByOrderByCreatedAtDesc() 와 같은 식으로 Repository 기능을 사용할 수 있음을 나타내기 위해 포함 하였다.

마무리

예시 코드들은 Controller, Service, Repository 로 각각 다른 class로 Controller를 처리 과정별로 나눈 것을 보여준다.

이렇게 Spring boot의 구조를 알게 되면서 이러한 지식이 협업에서 팀원들의 코드를 이해하는데 도움이 될것 같다고 생각하고, 프로젝트를 진행하면서 어떤식으로 기능들을 나누어야할지 감이 잡히는것 같다.

오늘의 내용에선 Controller를 이러이러한 기능별로 나뉠 수 있다는 것을 보여주기 위해 간단하게 보여준 것이다.
사실 Controller를 나눌땐 Been과 같은 주입관련 정보들을 알아야 한다.
이러한 내용은 다음 글에서 다뤄보도록 하겠다.

profile
개린이

0개의 댓글