스프링 입문 2. 스프링 웹 개발 기초

박철민·2023년 4월 18일
0

스프링 입문

스프링 웹 개발 기초


정적 컨텐츠

실제 수강 날짜 : 23-04-10

정적 컨텐츠란 무엇인가?
움직이지 않는 정적인 내용? 해석하면 이런 의미를 가지고 있는데 맞습니다! 정적 컨텐츠는 변화가 없는 파일 자체를 넘겨주는 방식입니다.

저번 예제와 같이 Welcome 화면 처럼 index.html을 그대로 파일로 넘겨주는 것을 정적 컨텐츠라고 합니다.

이러한 HTML 파일, 이미지 파일 자체를 건네주는 방식이고 클라이언트들은 그 파일들을 브라우저를 통해 보는데요.

스프링 부트는 정적 컨텐츠를 기본 지원!
스프링 부트는 기본적으로 이러한 정적 컨텐츠를 지원하고 있습니다.
그래서 우리는 /static 폴더에 html 파일을 올려 간단하게 Welcome 페이지를 작성할 수 있었습니다!

static으로 올라온 파일들은 spring이 올라가면서 자동으로 서버에 올라가게 됩니다!

어떻게 동작할까요?

  1. 정적 파일을 요구하는 요청이 들어옵니다.
  2. 스프링 컨트롤러에서 이것을 처리할 컨트롤러 여부를 확인합니다.
  3. 처리하는 컨트롤러가 없다면 정적 파일로 가서 해당하는 html 파일이 있는지 확인합니다.
  4. 그것을 클라이언트에게 넘겨줍니다.

정적 컨텐츠의 문제점
정적 컨텐츠는 요구사항이 오면 그에 해당하는 파일을 넘겨주는 방식으로 매우 단순합니다.
하지만 웹에서는 이런 단순한 것 보다는 복잡한 내용이 필요로 합니다.

오늘의 주식 상황에 대해서 알려주는 사이트가 있다고 해봅시다. 이러한 주식 상황은 매일 매 시간 마다 바뀔건데데 이를 정적 컨텐츠로 표현한다면 어떻게 될까요?

프로그래머는 바뀌는 순간마다 새로운 파일을 만들어서 건네줘야하는 문제가 발생합니다!

생각만해도 할일이 많군요! 기본적인 틀은 유지하고 값이 바뀌면 바뀐 부분만 동적으로 바뀌게 할 수는 없을까요?

그래서 탄생한 것이 바로 동적 컨텐츠입니다!


MVC와 템플릿 엔진

실제 수강 날짜 : 23-04-10

MVC란?
M : Model
V : View
C : Controller

MVC는 설계 패턴입니다!

기존 JSP에서는 뷰에서 모든 것을 해결하려고 하였는데 이러한 방식을 "모델 1방식"이라고 하는데요.

모델 1방식은 코드의 역할이 구분되지 않아 코드를 이해하기 위해서 전체 코드를 보고 탐색해야 했습니다. => 유지보수성이 떨어지겠죠.

에러 발생 했는데 이게 어디서 문제일까 하고 찾으면 마치 놀이터에서 보물 찾기를 하듯이 코드를 봐야 할 겁니다.

이러한 방식을 없애기 위해 "모델 2방식"이 탄생하였습니다.

이 방식으로 우리는 화면, 컨트롤러, 데이터가 분리가 되었습니다.

이제 우리는 각 기능 별로 집중할 수 있게 되었습니다. 이를 통해서 기본적인 화면을 뷰에 정의하고 데이터들을 모델과 컨트롤러에서 관리하여 뷰에 넘겨줄 수 있게 되었습니다!

어떻게 동작할까요?

  1. 요청이 들어옵니다
  2. 요청을 스프링에서 해당하는 컨테이너가 있는지를 확인합니다.
  3. 동적 컨텐츠는 이를 다루는 컨테이너가 있기에 컨테이너가 처리합니다.
  4. 모델에 데이터를 key와 value로 묶어서 viewResolver에 넘겨줍니다.
  5. 템플릿 엔진이 이것을 랜더링 해서 HTML 변환을 해서 넘겨줍니다!

템플릿 엔진이란 무엇인가?

템플릿 양식과 특정 데이터 모델에 따른 입력자료를 합성하여 결과 문서를 출력하는 소프트웨어 및 컴포넌트를 템플릿 엔진이라고 합니다.

위의 모델로 넘겨진 데이터와 templates에 있는 view를 합성하여 결과 HTML 문서를 변환하여 넘겨주는 역할을 템플릿 엔진에서 해주는 것입니다.

동적 컨텐츠의 부족한점

이제 우리는 실시간 주식들이 바뀌면 그 주식들이 바뀐 값들이 저장된 데이터를 참고하여 화면에 계속 바뀌어서 건네줄 수 있게 되었습니다!

근데 우리가 이러한 실시간 주식 데이터를 너무 잘 만들어서 만약 다른 사람들이 이 데이터를 사용하고 싶어하는데 어떻게 해야할까요?

데이터만 건네줄 수는 없을까요?
이런 부분을 해결하기 위한 것이 바로 API입니다.


API

실제 수강 날짜 : 23-04-10

API란 무엇인가?
Application Programming Interface

API는 통신에 대한 응답으로 문자를 보내주는 방식입니다!

여태까지는 화면과 관련된 정보들을 보냈지만 이제는 데이터만 건네주는 방식으로 한거죠

보내지는 문자의 형식을 "데이터 포멧"이라고 하고 이러한 데이터 포멧은 문자열, XML, JSON이 있습니다.

현재 많은 사람들이 사용의 편리함과 우수한 성능으로 JSON을 사용하고 있습니다!

자세한 내용은 블로그로 포스팅하였습니다. https://velog.io/@fe26min_/API%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

API를 이용하면 API를 통해서 객체를 JSON 형식으로 반환이 가능해지는데요.

어떻게 동작할까요?

  1. 요청이 들어오게 되면 스프링 컨테이너에서 해당하는 컨트롤러를 찾아갑니다.
  2. ResponseBody 어노테이션을 만나면 아 이거는 HTTP 바디에 데이터를 담는 형식으로 보내주는 애구나! 라는 것을 알게 됩니다.
  3. 이를 HttpMessageConverter에게 넘겨주면 해당하는 형태에 맞춰서 응답 Body에 값을 담아서 보내주게 됩니다!

기본 정책은 JSON으로 보내는 방식이지만 설정을 통해서 다른 방식으로 보내줄 수 있습니다!

요약

우리가 요청에 대해서 응답하는 방식은 3가지로 구분됩니다.
그냥 파일을 그대로 보내주는 정적 컨텐츠, 템플릿 엔진을 통해 파일을 가공하여 그것을 보내주는 동적 컨텐츠, HTTP BODY에 데이터를 담아서 보내주는 API 이렇게 3가지 방식이 있습니다.

profile
멘땅에 헤딩하는 사람

0개의 댓글