Home 스프링 입문 1강
Post
Cancel

스프링 입문 1강

이 글은 인프런 무료 강의인 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 을 바탕으로 작성되었습니다.

스프링 부트 스타터

https://start.spring.io 스프링 부트 스타터 웹사이트를 이용하면 손쉽게 초기 설정을 할 수 있다.

  • Project : Gradle - Groovy
  • Language : Java
  • Spring Boot : 2.7.x
  • Group : hello
  • Artifact : hello-spring
  • Packaging : Jar
  • Java : 11
  • Dependencies : Spring web, Thymeleaf

강의 환경이 Java 11 이기 때문에 11로 설정합니다.
Java 11 은 Spring boot 2.x.x 버전을 사용해야 한다고 합니다.
Group 이름은 회사 도메인을 입력한다고 합니다. 실습단계에선 자유롭게 작성합니다.
Artifact 명은 빌드명입니다. 자유롭게 작성합니다.
이외에 설정 값들도 강의에서 요구하는대로 맞춰줍니다.

파일열기

2023-07-31_1
스프링 부트 스타터에서 다운받은 파일을 압축해제합니다.
intelliJ IDE 에서 open 을 누르고 압축해제한 폴더로 갑니다.
build.gradle 파일을 선택하고 open 합니다.

자동으로 설정된 파일들 둘러보기

2023-07-31_2
가장 처음으로 볼 파일은 bundle.gradle 입니다.
스프링 부트 스타터에서 설정한 값들이 보입니다.
dependencies 블럭을 보면 thymeleaf, spring web, test 가 있습니다.
test 는 자동으로 들어가는 라이브러리라고 합니다. JUnit 설명을 하시는걸보니 유닛테스트 라이브러리인가 봅니다.

repositories 블럭은 라이브러리를 다운받는 경로입니다. mavenCentral()도 경로 중 하나입니다.

2023-07-31_3
이번엔 src를 살펴봅니다.
src를 누르면 main과 test로 나뉘는데, test는 테스트코드와 관련된 폴더라고 합니다.
main으로 들어가면 java와 resources로 나뉩니다. resources는 java외 모든 파일들이 포함됩니다.

2023-07-31_4
2023-07-31_5
main/그룹명.아티팩트명/아티팩트명Application.java 파일을 눌러보면 main 메소드를 볼 수 있습니다.
main 메소드의 왼쪽에 실행을 눌러 실행합니다.
이후 콘솔창을 보면 tomcat이 실행되는 것을 확인할 수 있고, 8080포트를 사용하는것을 볼 수 있습니다.
웹 브라우저 주소창에 localhost:8080 을 입력하면, 웹서버에 접근할 수 있습니다.
이는 스프링에 웹서버가 내장되어(embedded)있음을 알 수 있습니다.
지금은 welcome page(기본 웹페이지)가 없어서 에러가 나옵니다.

라이브러리 둘러보기

2023-07-31_6
라이브러리는 좌측의 external libraries에서 볼 수 있고, 의존관계는 우측상단 gradle에서 볼 수 있습니다.
우측 상단에 gradle - dependencies - compile class path 를 누르면 thymeleaf 와 web을 볼 수 있습니다.
2023-07-31_7
의존에 의존에 의존관계 등을 볼 수 있고, web이 톰캣을 의존하고 있는것을 볼 수 있습니다.

뷰 동작환경 학습

2023-07-31_8
welcome page의 기본 경로는 resources/static/index.html 입니다.

1
2
3
4
5
6
7
8
9
10
11
<!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>

static 에 우클릭으로 새 파일(index.html)을 만들고, 위 코드를 붙여넣습니다.
코드를 읽어보면 Hello hello 가 출력되고 hello에 링크가 걸려있는것을 볼 수 있습니다.
2023-07-31_9
hello를 클릭하면 get 방식으로 서버에 hello를 요청하게 됩니다.

2023-07-31_10
java -> 그룹명.아티팩트명 -> controller 에 new java class를 만듭니다.
클래스명은 HelloController 로 합니다.

1
2
3
4
5
6
7
8
@Controller
public class HelloController {
 @GetMapping("hello")
 public String hello(Model model) {
 model.addAttribute("data", "hello!!");
 return "hello";
 }
}

새로만든 클래스에 위 내용을 붙여 넣습니다.
controller는 웹 어플리케이션의 첫번째 진입점이라고 합니다.
따라서 컨트롤러가 hello를 받습니다.
컨트롤러에서 hello 요청을 수행할 메소드를 찾습니다.
@GetMapping(“hello”) 는 get으로 hello를 받을때 매칭됩니다.
@GetMapping(“hello”)에 해당되는 메소드는 “data”:”hello!!” 라는 키:값 쌍을 model에 추가하고 “hello”를 리턴합니다.
리턴값을 받는 대상은 viewResolver 입니다.
veiwResolver는 hello 받았으므로, hello.html을 resources/templates/에서 찾은 뒤 사용자에게 전송합니다.

resources/templates/hello.html 파일을 생성합니다.

1
2
3
4
5
6
7
8
9
10
<!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>

data에 대한 값을 model에서 찾아서 가져옵니다.
컨트롤러에서 data:hello!! 를 추가하였으므로 ‘안녕하세요. hello!!’가 출력됩니다.


요약
웰컴 페이지 출력 -> hello 링크 클릭 -> get hello 전송 -> controller에서 get hello에 반응하는 메소드 호출 -> 뷰 리졸버에게 hello 리턴 -> 뷰 리졸버는 templates 에서 hello.html 파일을 서치 -> 요청자에게 hello.html을 전송

콘솔에서 빌드하고 실행하기 (윈도우)

1
2
3
4
5
6
7
8
9
C:hello-spring> gradle 
C:hello-spring> gradle build  // 빌드 완료

C:hello-spring> cd build/libs
C:hello-spring\build\libs> dir  // hello-spring-0.0.1-SNAPSHOT.jar 파일여부 확인
C:hello-spring\build\libs> java -jar hello-spring-0.0.1-SNAPSHOT.jar // 실행

//localhost:8080 접속해서 실행여부 확인하기
//control c 눌러서 종료

배포할 때는 hello-spring.0.0.1-SNAPSHOT.jar 파일만 배포하면 된다고 한다.
근데 왜 그런지는 모르겠음. hello.html 같은 resource 파일들도 다 포함이 되어있나??

-끝-

This post is licensed under CC BY 4.0 by the author.

chirpy comments 활성화 하는 방법

DDL 이란