스프링 입문 - 프로젝트 환경설정, 웹개발 기초

Song Chae Won·2023년 4월 3일
0

스프링부트와 AWS

목록 보기
3/20
post-thumbnail

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 작성하였습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

프로젝트 환경설정

프로젝트 생성

🔻 프로젝트 선택

  • Project: Gradle - Groovy Project
  • Spring Boot: 3.5.x
  • Language: Java
  • Packaging: Jar
  • Java: 11

🔻 Project Metadata

  • groupId: hello
  • artifactId: hello-spring
  • Dependencies: Spring Web, Thymeleaf

라이브러리 살펴보기

  • Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다.

스프링부트 라이브러리

  • spring-boot-starter-web
    - tomcat: 톰캣(웹서버)
    • webmvc: 스프링 웹 MVC
  • spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
  • spring-boot-starter(공통): 스프링부트 + 스프링코어 + 로깅
    - spring-boot
    - spring-core
    • spring-boot-starter-logging
      • logback, slf4j

테스트 라이브러리

  • spring-boot-starter-test
    - junit: 테스트 프레임워크
    • mockito: 목 라이브러리
    • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    • spring-test: 스프링 통합 테스트 지원

View 환경설정

Welcome Page 만들기

  • resources/static/index.html
<!DOCTYPE HTML>
<html>
<head>
 <title>Hello</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
  • resources/templates/hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <title>Hello</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
  • 동작 환경 그림

  • 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.
    - 스프링 부트 템플릿엔진 기본 viewName 매핑
    - resources:templates/ +{ViewName}+ .html

빌드하고 실행하기

(1) 콘솔로 이동 명령 프롬프트(cmd)로 이동
(2) ./gradlew ➡️ gradlew.bat 를 실행
명령 프롬프트에서 gradlew.bat 를 실행하려면 gradlew 하고 엔터
(3) gradlew build
(4) 폴더 목록 확인 ls ➡️ dir
윈도우에서 Git bash 터미널 사용하기

스프링 웹 개발 기초

정적 컨텐츠

  • 스프링 부트 Static Content 기본적으로 /static 폴더에서 자동 제공
  • resources/static/hello-static.html
<!DOCTYPE HTML>
<html>
<head>
 <title>static content</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
  • 정적 컨텐츠 이미지

MVC와 템플릿 엔진

  • MVC: Model, View, Controller

🔻Controller

@Controller
public class HelloController {
 @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
 model.addAttribute("name", name);
 return "hello-template";
 }
}

🔻View

  • resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
  • MVC, 템플릿 엔진 이미지

API

🔻 @ResponseBody 문자 반환

@Controller
public class HelloController {
 @GetMapping("hello-string")
 @ResponseBody
 public String helloString(@RequestParam("name") String name) {
 return "hello " + name;
 }
}
  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

실행: http://localhost:8080/hello-string?name=spring

🔻 @ResponseBody 객체 반환

@Controller
public class HelloController {
 @GetMapping("hello-api")
 @ResponseBody
 public Hello helloApi(@RequestParam("name") String name) {
 Hello hello = new Hello();
 hello.setName(name);
 return hello;
 }
 static class Hello {
 private String name;
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 }
}

🔻 @ResponseBody 사용원리

  • @ResponseBody 를 사용
    - HTTP의 BODY에 문자 내용을 직접 반환
    - viewResolver 대신에 HttpMessageConverter 가 동작
    - 기본 문자처리: StringHttpMessageConverter
    - 기본 객체처리: MappingJackson2HttpMessageConverter
    - byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
profile
@chhaewxn

0개의 댓글