[Spring 스터디] 02. 스프링 웹 개발 기초

주영진·2024년 10월 10일

Spring 스터디

목록 보기
2/5

정적 컨텐츠

서버에서의 특별한 작업 없이 바로 클라이언트에 전달되는 파일들을 의미한다. HTML, CSS, Javascript, 이미지 파일과 같은 리소스들이 이에 해당된다.

스프링 부트는 정적 컨텐츠 기능을 자동으로 제공한다.

웹 브라우저에서 localhost8080/hello-static.html에 대한 정보를 스프링에 요청하면 톰캣 서버를 통해 스프링에 전달된다. 스프링은 우선적으로 hello-static 관련 컨트롤러가 있는지를 확인하고, 그게 없다면 static에 있는 hello-static.html 파일을 그대로 웹 브라우저에 전달해준다. 이것이 스프링부트가 제공하는 정적 컨텐츠의 기능이라고 할 수 있다.

MVC

MVC는 Model, View, Controller의 약자이다. View는 말 그대로 화면에 보여지는 부분을 의미하고, Controller는 내부 로직을 처리하는 부분을 뜻한다. 과거에는 view, controller 다 한꺼번에 담겨 개발 과정이 이루어졌지만, 최근에는 이렇게 세 가지 컴포넌트로 나누는 아키텍처 패턴을 활용한다.

이 이미지를 설명하자면, 먼저 웹 브라우저에서 톰캣 서버를 거쳐 스프링으로 요청이 들어오면, 스프링은 컨트롤러에 있는 매핑되어 있는 메소드를 호출해준다. 그 후에 viewResolver를 거쳐 thymleaf 엔진이 HTML 변환을 처리해서 변환 후에 웹 브라우저에 나타나게 된다.

코드설명:

@GetMapping("/hello-mvc"):

이 어노테이션은 /hello-mvc 경로로 들어오는 HTTP GET 요청을 처리하도록 메서드를 매핑합니다. 클라이언트가 /hello-mvc라는 URL로 접근할 때 이 메서드가 호출됩니다.
public String helloMvc(@RequestParam(value = "name") String name, Model model):

@RequestParam(value = "name") String name: 이 부분은 요청에서 전달되는 쿼리 파라미터 name의 값을 name 변수에 바인딩하는 역할을 합니다. 예를 들어, 클라이언트가 /hello-mvc?name=John과 같은 요청을 보낸 경우, name 변수에는 "John"이 저장됩니다.

value = "name": 이 속성은 HTTP 요청에서 쿼리 파라미터의 이름을 지정합니다. 즉, 요청 파라미터 중 "name"이라는 이름을 가진 값을 가져옵니다.

String name: 가져온 name 파라미터 값을 이 변수에 저장합니다.
Model model:

Model은 데이터를 뷰에 전달하기 위해 사용됩니다. 이 메서드에서 뷰로 데이터를 넘기기 위해 사용합니다.

model.addAttribute("name", name):
model 객체에 "name"이라는 이름으로 name 변수를 추가합니다. 이렇게 하면 뷰 템플릿에서 name이라는 변수를 사용할 수 있습니다.

return "hello-template":
이 부분은 뷰의 이름을 반환합니다. hello-template이라는 이름의 뷰 파일을 찾아 렌더링합니다. 보통 템플릿 엔진(예: Thymeleaf)을 사용해서 해당 이름의 HTML 파일을 출력합니다.


hello-template.html파일의 코드를 다음과 같이 짜주고, 실행시켰을 때 다음과 같은 결과가 나오는 것을 확인할 수 있다.

API

API란, 애플리케이션의 특정 기능을 외부에 제공하기 위한 인터페이스 역할을 하며, 클라이언트와 서버 간의 상호작용을 가능하게 하는 중요한 요소이다.

스프링에서 api를 활용하는 코드 예시는 이와 같다. 이는 JSON을 활용하여 반환하는 방식인데, JSON이란 데이터를 저장하거나 전송할 때 사용되는 경량의 데이터 포맷으로, 사람이 읽기 쉽고, 컴퓨터가 파싱하고 생성하기 쉬운 구조로 설계되어 있다. 키-값 쌍(key-value pairs)을 사용하여 데이터를 표현하며, 대부분의 프로그래밍 언어에서 JSON을 쉽게 사용하고 처리할 수 있는 라이브러리를 제공한다.

API의 작동원리는 이와 같다.

mvc방식과의 차이는 @ResponseBody라는 body 부분에 메서드의 리턴값을 넣어주는 어노테이션을 활용하는 것인데, 리턴 값이 문자열일 경우에는 StringConverter가 작동을 하여 웹 브라우저에 반환하지만, 리턴 값이 객체일 경우에는 JSONConverter가 작동하여 객체를 처리하여 웹 브라우저에 반환해주게 된다.

profile
'개발사(社)' (주)영진

0개의 댓글