Posts [Spring] Spring Framework 살펴보기 : Pet Clinic 프로젝트[2/4]
Post
Cancel

[Spring] Spring Framework 살펴보기 : Pet Clinic 프로젝트[2/4]


[Spring] Spring Framework 살펴보기 : Pet Clinic 프로젝트[2/4]

이전 : (1/4) IntelliJ 설치 및 Pet Clinic 프로젝트 설치하기

스프링에서 공식적으로 제공하는 예제 프로젝트인 Pet Clinic 프로젝트로 spring framework에 대해 알아보겠습니다.

이전에는 설치 과정을 살펴보았고, 이번에는 프로젝트를 전반적으로 살펴보겠습니다.


1. 로그 확인을 위한 작업 - Spring MVC 패턴 확인

프로젝트가 실행될 때 어떤 과정을 거치는지 로그에서 확인해 보는 것이 좋은데, 이를 위해서는 설정이 필요합니다.

왼쪽 경로를 참고하여 application.properties 파일에 들어간 뒤,

logging level에 DEBUG도 추가해 줍니다.

그 다음 프로젝트를 다시 실행합니다.

  • 프로젝트 실행은, src/java/org.springframework.samples.petclinic 밑의 PetClinicApplication 에 가셔서 실행해도 무방합니다.

실행하고 localhost:8080 에 접속합니다. 터미널에 무언가 출력될 것입니다.

초기 실행 시, package명.servlet.DispatcherServlet 에서 초기화를 했음을 알 수 있습니다.

여기서 localhost:8080 에 다시 가서 새로고침을 눌러 보면, 위 메세지가 뜨지 않을 것입니다.

초기 실행 시에만 DispathcerServlet 의 초기화가 이루어짐을 알 수 있습니다.


이제 localhost:8080 홈페이지에서 Find Owner 메뉴를 클릭해 보세요.

주소창을 보면 localhost:8080 뒤에 owners/find 가 붙었음을 확인할 수 있습니다.

그러면 다음과 같이 Servelet 다음에 HandlerMapping으로 OwnerController 의 initFindForm이 동작했음을 알 수 있습니다.

또한, DispatcherServlet - HandlerMapping - ViewResolver - DispatcherServlet 의 간략한 진행 과정도 살펴볼 수 있습니다. 이것이 후술할 spring의 MVC 패턴에 해당합니다.

즉 InitFindForm 메소드가 동작하면서 홈페이지에 보여졌던 것입니다.

위에서 return 하는 것은 view의 이름입니다. 즉, 어떠한 view를 보여줄 것인가에 대한 정보인데, “owners/findOwners”를 return하고 있습니다. 이 파일은 어디에 있을까요?

src/main/resources 밑에 templates/owners 에 있는 findOwners.html이 보여지게 됩니다.

과정을 간단하게 정리하면 다음과 같습니다. 이 과정이 MVC 패턴에 해당합니다.


MVC 패턴이란?

Model View Controller의 약자

  • Model 과 View를 분리하고자 양측 요소 사이에 Controller를 배치한 설계 패턴
  • Spring 은 DispatcherServlet이 Front Controller(프런트 컨트롤러) 역할을 담당합니다.
    • 프런트 컨트롤러는 우선적으로 클라이언트의 모든 요청을 받습니다.
    • 그 요청을 분석한 프런트 컨트롤러는 세부 컨트롤러들에게 필요한 작업을 나눠줍니다.
    • 세부 컨트롤러들은 Business Logic을 수행하고 모델을 생성합니다.
    • 세부 컨트롤러 작업이 완료된 이후, 프런트 컨트롤러가 이에 맞는 뷰를 선택해 최종적으로 클라이언트(사용자)에게 보여줍니다.
  • Spring은 MVC 패턴 중 Model2를 채택한 예시인데, MVC 패턴에 대해서는 다른 포스팅에서 따로 자세히 다룰 예정입니다.

위 프로젝트의 Find Owners를 눌렀을 때의 과정

  • Client(사용자) 는 owners/find 라는 특정 URL을 이용해 요청을 보냅니다.

  • 그러면 spring에 있는 DispatcherServlet은 이 요청을 받고 HandlerMapping에게 넘깁니다.
  • HandlerMapping이 이에 해당하는 알맞는 Controller를 찾고, 실행할 Controller의 메서드를 찾습니다.
  • Controller가 메소드를 실행하고 Model을 return합니다.
    • Controller가 Business Logic을 실행하는 서비스 요청 후 Model을 만들며 그것을 ModelAndView에 넘기면, DispatcherServlet에 이에 맞는 View를 넘겨 줍니다.
  • DispatcherServlet은 받은 View 정보를 토대로 View 를 찾아달라는 요청을 ViewResolver 에게 보냅니다.
  • ViewResolver가 처리한 결과를 View에 송신하고, 그 View는 다시 처리 결과를 포함한 ViewDispathcerServlet 에게 송신합니다.
  • DispathcerServlet 은 최종적으로 Client 에게 결과를 출력합니다.

이제 이 프로젝트의 Find Owners 기능을 변경해 보도록 하겠습니다.

초기에는 Last Name 으로 검색하게 되어 있는데, 이것을 First Name 으로 검색하게끔 하겠습니다.

위의 파란색 칸에 Last name으로 되어 있던 것을 Fisrt name으로 변경합니다.

이후 OwnerController에 와서, getter, setter 메소드를 모두 FirstName으로 바꾸어 주세요.

그리고 그 밑에도 고쳐줍니다.

findByFirstName 이라는 메소드가 없기 때문에 새로 만들어 줍니다.

위의 findByLastName 이 만들어져 있는 형태와 유사하게 만들면 됩니다.

그리고 맨 뒤에 LIKE :firstName% 부분이 있는데, 이 부분은 DB Select문의 LIKE 연산자입니다.

  • LIKE 연산자란? 검색할 대상의 값을 정확히 몰라도 검색할 수 있게, 와일드카드인 %문자와 함께 사용하여 쿼리문을 구성합니다.
  • :firstName% 이라고 쓰면 firstName으로 입력받은 문자열 뒤에는 어떤 문자가 와도 검색하겠다는 의미입니다.
  • 만약 %:firstName% 이라고 쓰면, firstName으로 입력받은 문자열 앞 뒤에 어떤 문자가 와도 검색하겠다는 의미입니다.
    • 즉, firstName이 Maria 라는 사람을 검색하려면 ria, ri, aria, Maria 등으로 검색해도 Maria 의 정보가 나오게 됩니다.

이 포스팅은 예제로 배우는 스프링 입문(백기선 님) 내용에 기반하여 학습한 사항을 정리한 것입니다.