본문 바로가기
Back-End/Spring Boot

프로젝트 환경 설정

by 달의 조각 2022. 2. 22.
이 글은 김영한 님의 스프링 입문 강의(https://inf.run/hcic)를 수강하며 학습한 내용을 정리한 글입니다.

 

  • Java 11
  • IDE: IntelliJ

 

https://start.spring.io/ - GENERATE 클릭 하여 zip 다운

 

압축 해제 후 IntelliJ에서 build.gradle OPEN

 


 

View 환경 설정

 

1. Welcome Page 만들기

resources/static/index.html 생성 - 스프링 부트의 Welcome Page(첫 홈 화면) 기능

 

2. 동적 페이지 만들기

  • hello-spring/src/main/java/hello/hellospring에 controller 패키지 - HelloController.java 생성
  • 템플릿 엔진: 동적 컨텐츠 생성 방법(주로 View를 만든다)으로, 본 강의에서는 Thymeleaf를 사용한다

 

  • @Controller: 사용자 요청 진입 지점으로, 요청에 따라 어떤 처리를 할지 결정만 한다. ViewResolve가 설정에 맞게 View를 찾아 랜더링 하면 사용자에게 View를 보내 주는 중간 제어자 역할을 한다.
  • @GetMapping: HTTP GET 요청을 처리하는 메서드를 매핑하는 어노테이션으로, 메서드에 따라 어떤 페이지가 보일지 결정한다.
  • addAttribute(): Model에 데이터를 담을 때 사용한다.
  • 컨트롤러의 return을 문자로 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다. (resources:templates/ +{ViewName}+ .html)
Model addAttribute(String name, Object value) //name: View에서 name으로 value을 사용한다
Model addAttribute(Object value)
더보기

클라이언트 → 서버 요청 보내기

1. GET: 정보를 가져와서 조회할 때 사용
       1) URL에 변수를 포함하여 서버에 전달한다. (보안에 취약)

       2) 데이터를 header에 포함하여 전송한다.
       3) 캐싱이 가능하다. (재접근 시 속도 향상을 위해 레지스터에 데이터를 저장)

2. POST: 데이터를 서버로 제출하여 추가 또는 수정을 위해 데이터를 전송할 때 사용
       1) URL에 변수를 노출하지 않아서 보안성이 높다.
       2) 데이터를 Body에 포함하여 전송한다.
       3) 길이 제한이 없다.
       4) 캐싱이 불가능하다.

thymeleaf 템플릿 엔진 동작 환경

 


 

1. 정적 컨텐츠

  1. hello-static 관련 컨트롤러를 먼저 찾는다.
  2. 매핑된 컨트롤러가 없으면 static/hello-static.html을 찾는다.

그대로 출력하기 때문에 프로그래밍하여 출력할 수는 없다.

 

2. MVC와 템플릿 엔진

템플릿 엔진을 MVC(Model, View, Controller)로 나눠서 View를 템플릿 엔진을 통해 Html을 프로그래밍, 랜더링 하여 이를 고객에게 전달한다.

Controller

  • @RequestParam("가져올 데이터의 이름") [데이터타입] [가져온 데이터를 담을 변수]
  • Model 객체를 이용해서 View로 값을 넘겨 준다.

 

View

  • ${name}: model의 Key값이 name인 데이터를 꺼냄

 

3. API

@ResponseBody 문자 반환: HTTP 통신 프로토콜(헤더부, 바디부)의 바디를 직접 넣어 준다.

 

@ResponseBody 객체 반환, JSON: 객체를 반환하면 객체가 JSON(Key, Value 구조)으로 변환된다.

@ResponseBody 사용 원리

  1. 웹 브라우저를 통해 localhost 주소에 접속한다.
  2. 톰캣 서버가 hello-api 요청을 받아서 스프링에게 전달한다.
  3. 스프링은 hello-api를 찾는다.
  4. @ResponseBody라는 애노테이션이 붙어 있으면 HTTP의 BODY에 문자 내용을 직접 반환한다.
    => return 값이 문자이면 그대로 해당 데이터를 반환하지만 객체일 경우 JSON 방식으로 데이터를 넘긴다.
    @ResponseBody라는 애노테이션이 붙어 있지 않으면 ViewResolver에게 전달하여 맞는 템플릿을 전달 요청한다.
  5. HttpMessageConverter가 동작한다. 넘겨 온 값이 단순 문자열일 경우 SpringConverter가 동작하고, 객체일 경우 JsonConverter가 동작한다.
  6. 웹 브라우저와 웹 서버에 각 방식으로 전달된다.

댓글