프로젝트 생성
JetBrains Account
account.jetbrains.com
JetBrains Account에서 인텔리제이 학생 라이센스를 갱신해줬다.. !
졸업한지 벌써 4년이 지났는데 아직도 접속 가능하다니 .. 감격
우선 인텔리제이를 사용할 예정이라 intellij 학생 라이센스를 갱신해줘야 한다. 구매할거면. ... 구매해도 됨
강의에서는 java 11을 사용하는데, 이미 노트북에 java 17(jdk 17)이 설치되어있어서 .. 그냥 17버전으로 진행할 예정
https://start.spring.io/에 들어가서 프로젝트를 생성해준다.
과거 프로젝트들은 Maven으로 생성했는데, 요즘은 Gradle로 생성하는 것이 추세
Dependencies 추가해서 프로젝트 파일 만든 후 해당 zip 파일 내 build-gradle을 intellij에서 import해서 열어준다
프로젝트 실행하면,
http://localhost:8080/ 에서 이렇게 Whitelabel Error Page가 뜨면 잘 실행 된 것
라이브러리 살펴보기
요새는 톰캣 WAS 서버를 따로 설치하는게 아니라, 라이브러리로 제공되기 때문에 Gradle이 의존관계가 있는 라이브러리를 함께 다운로드한다.
스프링부트 라이브러리
- spring-boot-starter-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
Slf4j logback 이란 무엇이며, 왜 로깅을 해야할까? 💁♂️
…
haon.blog
Logger는 사드세요... 제발: SLF4J와 Logback - 인하대학교 인트아이
자바의 로깅(Logging) 라이브러리로는 Log4j 등 다양한 종류가 있지만, 현재 가장 좋은 조합은 SLF4J+Logback이라고 생각합니다. SLF4J는 Simple ...
int-i.github.io
Logger에 대한 부분은 조금 더 공부한 뒤에 다시 한번 정리해볼 생각이다!
나 또한 System.out.println()으로 로그를 출력하면서 테스트를 해왔는데,
로그를 사용하면 우선적으로
- Sysout을 할 때 잡아먹는 리소스를 낭비하지 않을 수 있고,
- 직접 코드를 작성해 원하는 정보를 만들지 않아도 Logger를 통해 클래스의 이름, 시간, 레벨 등의 다양한 정보를 제공받을 수 있다.
- 또, 로그를 콘솔 밖에서 원하는 조건, 원하는 형태에 따라 쉽게 파일로 관리할 수 있다.
테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
- assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
View 환경설정
<!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/static/index.html
스프링부트가 제공하는 Welcome Page 기능
- static/index.html을 올려두면 Welcome Page 기능을 제공한다.
package hello.hello_spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!!");
return "hello";
}
}
HelloController를 생성해 "hello"로 GetMapping해줬다.
<!DOCTYPE HTML>
<html xmlns:th="https://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>
<p th:text="'안녕하세요.' +${data}">안녕하세요. 손님</p>
body 내부에 th:문법을 사용하는 걸 볼 수 있는데, 이 문법은
<html xmlns:th="https://www.thymeleaf.org">
html 상단에 위처럼 Thymeleaf 템플릿 엔진을 선언하면 Thymeleaf 문법을 상용할 수 있다.
<p th:text="'안녕하세요.' +${data}">안녕하세요. 손님</p>
또한 여기서 나타난 ${data}는
model.addAttribute("data", "hello!!");
컨트롤러에 선언한 이 부분에서 "hello!!" value로 치환된다.
동작 환경 그림
- 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버('viewResolver')가 화면을 찾아서 처리한다.
- 스프링부트 템플릿엔진 기본 viewName 매핑
- resources: `templates/` + {ViewName}+`.html`
viewResolver: 실행할 뷰를 찾는 일을 한다. 페이지 컨트롤러가 리턴한 뷰 이름에 해당하는 뷰 컴포넌트를 찾는 역할
빌드하고 실행하기
`./gradlew build`
`cd build/libs`
`java -jar hello-spring-0.0.1-SNAPSHOT.jar`
실행 확인
서버에 배포할 때는 이 jar 파일 하나로 배포하면 된다.
'Backend > Spring 입문' 카테고리의 다른 글
[Spring] 5. 회원관리 예제(웹 MVC 개발) (3) | 2025.04.29 |
---|---|
[Spring] 4. 스프링 빈과 의존관계 (1) | 2025.04.29 |
[Spring] 3. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트 (0) | 2025.04.25 |
[Spring] 3. 회원 관리 예제 - 비즈니스 요구사항 정리 / 회원 도메인과 레포지토리 생성 (1) | 2025.04.19 |
[Spring] 2. 스프링 웹 개발 기초 (0) | 2025.04.19 |