본문 바로가기
programming/SpringBoot

스프링부트3의 동작과 흐름 Controller Service Repository

by 개코 - 개발과 코딩 2024. 7. 7.

스프링부트는 Controller, Service, Repository 순서로 동작하고 데이터가 흘러간다. Controller와 Service는 스프링MVC와 비슷하지만, DB를 연동하는 부분인 Repository 부분에서 차이가 있다.스프링부트의 Repository는 스프링MVC의 DAO 부분과 같은 역할을 한다. 버전의 차이가 있지만, 전체적인 부분에서 프레임워크의 동작은 같다.

스프링부트3의 동작과 흐름
Controller Service Repository

IT하면 빼놓을 수 없는 것이 스프링부트이며 포스팅을 하는 시점 버전 3.x 까지 존재한다.

정부사업부터 개인홈페이지까지 다양한 분야에서 사용되는 스프링부트는 만능에 가깝게 보이긴 하지만, 그 흐름이나 사용법이 방대하여 꾸준한 학습이 필요한 것이기도 하다.

겨우 스프링 레거시를 익혀 뭔가 하려고 했더니 스프링부트가 출시되고 IT업계는 최신 버전을 따라가며 프로젝트들이 발전되어 간다.

스프링부트3 또한 동작 흐름을 보면 Controller, Service, Repository, JPA 의 과정을 거친다.

스프링 레거시가 Controller, Service, DAO, SQL Mapper 의 흐름 구조를 비교하면 DB를 연동하는 과정을 제외하면 기본적인 구조는 같다고 볼 수 있다.

스프링MVC 레거시와의 차이점

기존에 스프링을 개발했다고 하면 스프링MVC 레거시일 수 있다.
Controller, Service, DAO 를 구성하여 DB프로그래밍을 할 수 있다.

물론, SQL 쿼리는 XML로 구성하여 직관적인 쿼리가 가능하다.

지금 유행하는 스프링부트는 어떨까.

버전의 차이는 있겠지만, 스프링MVC와 흐름은 같다.

다만, DB와 연동하고 쿼리하는 방식에 차이가 있다.

스프링부트는 JPA와 QueryDSL과 같은 것들을 사용하여 DB프로그래밍이 가능하다.

큰 흐름을 본다면

Controller, Service, DB연동하는 과정은 같다는 것이다.

다른 차이들도 많지만, 스프링MVC 경험이 어느정도 있는 본인의 눈에 직관적으로 보였던 부분은 이것이다.

하지만, JPA와 QueryDSL을 다시 공부해야 된다는 점에서 스트레스가 조금은 쌓였다.

JPA, JPQL, QueryDSL 알면 편하다.

스프링부트3를 공부하면서 새롭게 만난 것이 JPA와 JPQL, QueryDSL이다.

어떤 프로그램이든 데이터를 저장하고 조작해야하는데 DB(데이터베이스)는 가장 효율적인 도구일 수 있다.

물론, 다른 대안들도 있겠지만, 웹이란 특성을 살펴보면 딱히 대안이 생각나질 않는다.

JPA, JPQL, QueryDSL은 스프링부트3에서 DB를 연동하고 CRUD할 수 있으며, 코드로써 거의 모든 것이 가능하다.

하지만, 만능은 아니기에 직관적인 SQL Query에 익숙한 사람이라면 불편할 수 있다.

JPA의 경우 DB 테이블과 데이터구조만 맞춘다면 아주 간단하게 모든 CRUD가 가능하지만, 복잡한 구조의 경우 코드 길이가 늘어난다.

JPA에서 어려운 쿼리는 JPQL을 통해 직관적인 쿼리를 작성하여 DB연동을 할 수 있다.

QueryDSL은 람다식과 같은 구조로 DB 테이블을 CRUD 할 수 있다.

스프링MVC에서 사용했던 SQL mapper 보다 어쩌면 불편할 수 있겠지만, 본인이 생각하는 긍정적인 한가지가 있다.

하나의 쿼리가 가능하다면 이기종간의 모든 DB를 코드 수정없이 사용이 가능할 수 있다는 점에 있다.

스프링MVC에서 XML mapper 를 통해 쿼리를 작성했을 경우 만약 DB를 바꾼다면 모든 쿼리를 살펴보고 변경해야 한다. 거의 SELECT 문이 해당되겠지만, 이건 이것대로 괴롭다.

하지만, 스프링부트3의 JPA, JPQL, QueryDSL을 사용하면 DB변경이 일어나도 코드의 수정은 일어나지 않는다.

직관적인 쿼리를 사용한 JPQL의 경우는 얘기가 다를 수 있다.

스프링부트3의 데이터 동작과 흐름

이제 스프링부트3의 데이터 동작과 흐름을 보자.

비슷한 단어지만, 조금 차이가 있을 것이다.

스프링부트3가 데이터를 CRUD하기 위해선 기본적인 스프링부트의 프레임워크의 동작을 이해하면 된다.

스프링MVC에 익숙하다면 동작은 어렵지 않을 것이다.

스프링부트3 동작과 흐름

위의 이미지는 스프링부트3의 동작을 표현하며, 데이터는 그 순서대로 진행한다.

스프링MVC의 그것과 아주 많이 비슷하다.

여기서 조금 다른 부분이 있을 것이다.

스프링MVC는 DAO XML mapper를 사용하여 DB의 데이터를 조작할 수 있지만 스프링부트3의 경우 Repository란 것이 존재한다.

Repository는 DAO와 같은 역할을 하며, JPA, JPQL, QueryDSL을 사용하여 DB 데이터를 조작한다.

스프링부트3에 요청받은 데이터는 위의 이미지의 화살표대로 이동하며 응답결과는 반대로 return 하게 된다.

그렇다면 우리가 익혀야 부분은 단순해 진다.

스프링부트3를 처음 익힌다면 처음부터 살펴봐야 겠지만, 스프링MVC에 익숙한 상태라면 Repository를 사용하는 방법에 익숙해지면 된다.

 

반응형

댓글