[스프링 입문] 스프링 웹 개발 기초 및 환경설정
[공지사항] [해당 내용은 인프런 김영한의 ‘‘스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술’’ 강의 입니다.] 강의를 듣고 이해한 내용을 바탕으로 직접 필기한 내용입니다. 인프런 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 소개
-
초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다.
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다.
-
해당 강의 파트는 무료 강의이며, 수강하며 직접 정리한 내용을 포스팅 해보겠습니다!!
- 뒤의 유료 강의 파트는 코드에 있어서 간단 예제를 제외하면 비공개 하도록 하겠습니다.
김영한 로드맵
spring 완전 정복 코스 -> 스프링 부트와 jpa실무 완전 정복 로드맵
- spring 완전 정복
- 스프링 기본(스프링 입문, 스프링 핵심원리)
- 전체적인 코드와 감만 잡기
- 대략적인 큰 입문
- 스프링 웹(HTTP 스프링, MVC 1v편, 2편)
- 간단한 웹페이지 만들기
- 스프링 DB 접근(스프링 DB1편, 2편)
- 스프링 DB
- 스프링 고급
- 스프링 부트
- 스프링 기본(스프링 입문, 스프링 핵심원리)
1. 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
-
요즘에는 ‘스프링 부트’라는 걸 가지고 스프링 프로젝트를 만든다.
-
<순서도>
순서도>
-
-
http://start.spring.io<접속> 스프링에서 운영하는 스프링 부트 기반 사이트접속>
-
(maven, Gradle 중 Gradle - Groovy선택) 필요한 라이브러리를 가져오고 라이프사이클까지 관리해주는것이다. 과거에는 Maven을 썼지만 요즘에는 Gradle로 넘어오는 추세이다. 실무에서도
-
language는 java 를 선택한다.
-
spring boot 에서 버전선택 SNAPSHOT은 버전 업데이트 진행중인것.
-
Group 에는 기업 도메인 명을 적음. Atrifact 는 build의 결과물 = 프로젝트 명 -
Dependencies(2가지 필요)
-
Spring boot 기반으로 프로젝트 진행, 어떤 라이브러리를 쓸것이냐.. → 웹프로젝트 = Spring Web T
-
Thytmeleaf : html을 만들어주는 템플릿 엔진이 필요함 회사마다 다른것을 사용함.
-
- Generate
-
-
intelliJ 접속 후 , build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
}
#버전
group = 'hello'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
#자바 버전
repositories {
mavenCentral()
}
#mavenCentral : dependencies 라이브러리 들을 다운로드 받기위한 사이트
#필요에 따라 원하는 url을 넣는것도 가능하다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
#템플릿 엔진 : html을 생성하기 위한 thymeleaf
tasks.named('test') {
useJUnitPlatform()
}
라이브러리 살펴보기
Gradle은 의존되어 있는 라이브러리를 다 가져온다.
스프링 부트 라이브러리
- spring-boot-stater-web
- spring-boot-starter-tomcat : 톰캣(웹서버)
- spring-webmvc : 스프링 웹 MVC
- spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)
- spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback,slf4j → 거의 국룰이다.
- spring-boot
테스트 라이브러리
- spring-boot-starter-test
- junit : 테스트 프레임워크, 거의 5버전을 쓰는 추세이다.
- mockito : 목 라이브러리
- assertj : 테스트 코드를 좀 더 편하게 작성하도록 도와주는 라이브러리
- spring-test : 스프링 통합 테스트 지원
view 환경설정
- Welcome Page
- 도메인 누르고 들어왔을 때 첫 페이지
- 접속 방법 : main → resources → static → new → Files(파일생성) → index.html
<!DOCTYPE HTML>
<html>
<head>
<title>안녕 나는 문성준이야</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
안녕 문성준
<a href="/hello">hello</a>
</body>
</html>
- 스프링 부트가 제공하는 Welcome Page 기능
- static/index.html을 올려두면 Welcome page 기능을 제공한다.
- 스프링의 기능은 너무 많기 때문에 필요한 기능을 직접 찾는 능력이 중요하다.
- spring.io → project → spring boot → lean → reference → 접속 후 필요한 기능 찾아보기
thymeleaf 템플릿 엔진
- static의 정적 페이지와는 달리 템플릿 엔진을 쓰면 원하는 내용으로 모양을 바꿀 수 있다.
- 컨트롤러
- 웹 어플리케이션의 첫번째 진입점
- main -> java -> hello.hellospring -> controller패키지 생성 -> HelloController class 생성
package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation. GetMapping;@ Controllerpublic class HelloController { @GetMapping("hello") public String hello(Model model){ model.addAttribute("data","hello!!"); return "hello"; } }
- 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>`
스프링 웹 개발
웹 개발은 크게 3가지로 나뉜다.
- 정적 컨텐츠
- 파일을 그대로 전달해주는것을 뜻한다.
- MVC와 템플릿 엔진
- Model View Controller(컨트롤러와 모델 템플릿 엔진 화면)
- 요즘에는 이방식을 많이 사용한다.
- 서버에서 변형, html을 바꾸는 방식이다.
- API
- 안드로이드나 아이폰 앱 개발시 json이란 데이터 포멧으로 클라이언트에게 전달.
정적 컨텐츠
스프링 부트는 정적 컨텐츠를 자동적으로 제공한다.
resources -> 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>
http://localhost:8080/hello-static.html
주소를 들어가면 자동적으로 생성된다.
MVC와 템플릿 엔진
- MVC : Model, View, Controller
- 컨트롤러와 뷰를 쪼개는 것이 기본이다.
- 뷰는 화면과 관련된 것만 비지니스 로직에 관련된 것은 컨트롤러에서만 한다. 모델에다가 담아서 뷰에다가 넘겨주는 패턴을 많이 사용한다.
- 뷰를 찾아서 템플릿 엔진을 통해 화면을 렌더링해 Html을 웹 브라우저에 넘겨주는 방식이다.
Java -> controller 패키지 -> HelloController 클래스
- Controller
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name",name);
return "hello-template";
Resources -> templates -> 리턴 값과 동일한 파일 hello-template.html 생성 후
- View
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello' + ${name}">hello! empty</p>
</body>
</html>
- Controller에서 Param을 생성 했기때문에 웹페이지 접속 할 때 name = “ “ 을 입력해야 해당 페이지로 접속 할 수있다.
- ex ) http://localhost:8080/hello-mvc?name=hello
ViewResolver
는 Spring Framework에서 웹 애플리케이션에서 뷰(View)를 찾아주는 역할을 하는 인터페이스입니다. 주로 Spring MVC에서 사용되며, Controller에서 반환하는 뷰 이름을 실제 뷰 객체로 매핑하는 역할을 합니다. 이를 통해 개발자는 뷰 이름만을 신경쓰고, 실제 어떤 뷰 구현체가 사용될지는ViewResolver
에 의해 결정됩니다.
API
정적 컨텐츠 방식을 제외하면
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
@ResponseBody 는 html body 응답 부에 내용을 직접 넣어주겠다는 의미이다.
- 다음 링크처럼 name에 값을 입력하면 자동으로 넣어지는 모습을 볼 수 있다.
- MVC방식처럼 템플릿이 있는 상황에서 html을 넘겨주는 방식이 아니라 데이터 그 자체를 바로 넘기는 방식이다.
ex) http://localhost:8080/hello-string?name=hello
@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;
}
}
}
http://localhost:8080/hello-api?name=hello!!
코드에서 public Hello helloApi(@RequestParam("name") String name)
메서드는 Hello
객체를 생성하고 반환합니다. 이렇게 반환되는 객체를 클라이언트에게 전송할 때, 일반적으로 데이터를 표현하는 형식 중 하나로 JSON(JavaScript Object Notation)을 사용합니다.
JSON은 경량 데이터 교환 형식으로, 사람이 읽고 쓰기 쉽고 기계가 분석 및 생성하기도 용이한 형식입니다. 주로 웹 애플리케이션에서 데이터 교환의 목적으로 사용되며, 여러 언어에서 지원하고 있습니다.
여기서 코드에서의 관련은 다음과 같습니다:
@ResponseBody
어노테이션: 이 어노테이션이 사용된 메서드는 HTTP 응답 본문으로 사용될 데이터를 반환하는 역할을 합니다. 반환된 데이터가 객체이면, Spring은 기본적으로 이를 JSON 형식으로 변환하여 클라이언트에게 응답합니다.Hello
클래스:Hello
클래스는 데이터를 담는 간단한 자바 객체입니다. 이 클래스의 인스턴스가 생성되고 데이터가 설정된 후에, 이를 반환하는 메서드에서 이 객체는 JSON으로 변환되어 클라이언트에게 응답됩니다.
클라이언트는 이 JSON 데이터를 수신하여 필요에 따라 해석하고 사용할 수 있습니다. 일반적으로 클라이언트는 JSON을 파싱하여 객체로 변환하거나, 웹 페이지에서 JavaScript를 사용하여 JSON 데이터를 처리합니다.
HttpMessageConverter
는 Spring Framework에서 HTTP 요청 및 응답의 메시지를 변환하는 역할을 하는 인터페이스입니다. 이를 통해 서로 다른 미디어 타입 간에 데이터를 변환할 수 있습니다. 주로 Spring MVC에서 사용되며, 클라이언트와 서버 간의 데이터 전송 형식을 조정하는 데 사용됩니다.
댓글남기기