본문 바로가기
코드프레소 체험단/Spring Boot를 활용합 웹 개발

[Spring Boot 웹 개발 입문] 계층형 아키텍처와 컨트롤러

by 의정부핵꿀밤 2022. 2. 3.
728x90

https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr


< 계층형 아키텍처의 이해 >

 

SW 아키텍처

  • 건축을 할 때 설계도를 그려서 건물이 어떻게 지어질지 구상한다
  • SW도 마찬가지로 실제 코드 개발 전에 최종 SW가 되어야 할 모습을 설계한다
  • SW 아키텍처란, SW의 구조를 정의한 것으로 SW를 구성하는 주요 요소들과 요소들의 관계를 정의한 것이다 
  • SW 아키텍처 = SW 설계도 라고 볼 수 있다

 

 

 

SW 아키텍처/디자인 패턴

  • 패턴 : 되풀이되는 사건이나 물체의 형태로, 예측 가능한 방식으로 되풀이 된다
  • 우리가 만드는 SW도 이전의 수많은 사람들도 만들었고 고민했던 유형일 가능성이 높다
  • 따라서 아키텍처/디자인 패턴이란, 특정 상황의 문제를 해결하기 위해 일반화된 솔루션이다
    • 카카오톡과 같은 메신저 서비스 개발을 위한 패턴
    • 웹 서비스 개발을 위한 패턴
    • 데이터 분석 시스템 개발을 위한 패턴

 

 

 

계층형 아키텍처 패턴

  • 다양한 분야에 사용되지만, 주로 웹 서비스 개발에 주로 사용되는 패턴이다
  • 웹 서비스 개발에 적용되는 패턴은 보통 SW를 서로 다른 역할을 하는 3-4개의 계층으로 구분한다
    • Presentation Layer - @Controller
    • Application Layer - @Service
    • Business Layer 
    • Data Access Layer - @Repository
  • 계층 간에 호출을 하고 데이터를 주고 받으며 협력하며 전체 웹 서비스를 구성한다
  • 각각의 역할 별로 계층을 나눠서 독립적으로 구현한다

 


< 컨트롤러의 구현 >

 

Spring Controller

  • 계층형 아키텍처의 Presentation Layer에 해당한다
  • Client(웹 브라우저, 모바일 앱)의 요청을 받는다
  • Application Layer에 요청에 대한 처리를 위임한다
  • Client에 최종 응답을 하는 역할을 한다
    • view : Client가 요청에 대한 응답의 결과로 보게 되는 웹 페이지
    • data : Client가 요청에 대한 응답으로 받는 데이터

 

 

 

Controller 코드

  • Spring Contoller를 구현하기 위해서는 3개의 기본 Annotation이 사용된다
  • @Controller와 @RestController
    • Controller 역할을 하는 클래스를 지정한다
    • 클래스 상단에 명시한다
    • 하나의 스프링 어플리케이션은 여러 개의 Controller 클래스를 가질 수 있다
  • @RequestMapping
    • 특정 Request를 처리하는 메소드를 지정한다
    • 클래스 또는 메소드 상단에 명시한다

 

 

 

Annotation

  • Java 소스코드에 추가적인 정보를 제공하는 방법
  • @ 으로 시작하며 클래스, 메소드, 멤버변수, 파라미터 등에 부착 가능하다
  • 3가지 유형의 Annotation
    • 자바 컴파일러에게 유용한 정보를 제공한다 -> 에러 등을 찾아내기 위해
    • SW 툴에 의해 사용되어 코드 생성이나 추가 작업을 진행한다
    • run-time 시 특정 동작을 추가적으로 실행한다

 

 

 

Controller 코드

@Controller vs @RestController

  • Framework 활용은 규칙을 지키는 것이다
  • 약속된 Annotation들을 Spring Framework가 스캔한다
  • Annotation이 부착된 코드들은 Spring Framework에 의해 관리되며, Spring Framework에 의해서 특정한 목적으로 사용된다

 

 

 

@Controller vs @RestController

  • 공통점 : 대부분의 동작은 유사하다
    • 요청을 받아서 처리하고 응답을 한다
  • 차이점 : 응답하는 형태가 다르다
    • @Controller : view를 응답한다 (html 파일 등)
    • @RestController : data를 응답한다 (문자열, Json, xml 등)

 

 

 

@RestController의 활용

  • 문자열을 return하면, 문자열을 화면에 출력하여 보여준다 
  • 즉, @RestController는 메소드가 반환하는 데이터 자체를 응답한다 = data 응답

 

 

 

@Controller

hello.html의 구조 및 위치
@Controller의 응답

  • 일반 @Controller를 사용 했을 땐, return하는 문자열은 html(혹은 view) 파일의 이름을 의미하게 된다
  • 무조건 html만 해당하는 것은 아니지만, 어쨌든 문자열이 의미하는 view 파일로 응답한다

 

 

 

정리!

  • Controller는 계층형 아키텍처에서 Presentation Layer의 요청과 응답 처리의 역할을 담당한다
  • @Controller, @RestController, @RequestMapping이 기본 Annotation으로 사용된다
  • Annotation은 SW 코드에 추가적인 정보를 제공하는 방식이며, Spring Framework는 약속된 Annotation을 인식하여 특정 작업을 수행한다
  • @Controller은 HTML 파일과 같은 view@RestController는 문자열, JSON 등의 데이터를 응답한다
728x90

댓글