Fascination
article thumbnail

[Spring Intro] Section 01. 프로젝트 환경설정

강의: 김영한의 스프링 입문

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/


#  사전 환경 설정

필자는 맥북 M1 pro를 사용하고 있으며, 강의를 듣다 환경설정 오류를 마주하여 이 글을 읽는다면 자신의 OS에 맞게 설치할 수 있도록 주의하시길 바랍니다 !

 

1. 자바 설치

  • https://www.oracle.com/kr/java/technologies/downloads/#java17
  • 강의 내용을 정리하는 2023. 02. 17 기준으로, 스트링 부트 3.0을 선택하게 될 경우 강의 내용과 다르게 Java 17 이상을 설치해야 한다.
  • 필자 같은 경우 이미 17.6 버전을 사용하는 중인데, 만약 설치하지 않았다면 위에 링크에서 다운할 수 있다.
  • M1칩 혹은 그 이후 칩셋 사용자 기준으로 Arm64 DMG Installer를 설치하면 된다.

- 자바가 잘 설치되었는지 터미널에서 다음과 같이 확인한다.

$ java -version

 

2. IntelliJ 설치

 

 

# 프로젝트 생성

1. 스프링 부트를 기반으로 스프링 관련 프로젝트를 만들어주는 사이트

https://start.spring.io/


* Spring Boot Version 선택 시 버전 뒤에 (SNAPSHOT)이 붙어있으면 비정식 버전이므로, 정식 버전 설치를 권장한다.
* 스프링 부트 3.0 사용 시에는 다음과 같은 조건이 필요하다.
1. Java 17 이상을 사용한다.
2. javax 패키지 이름을 jakarta로 변경한다.
- 오라클과 자바 라이센스 문제로 모든 javax 패키지를 jakarta로 변경하기로 했다.
3. H2 데이터베이스를 2.1.214 버전 이상으로 사용한다.
  • Group: 보통은 기업명을 작성한다.
  • Artifact: 빌드되어 나오는 결과물이다.
  • Dependencies: 필요한 dependencies를 추가할 수 있다.
    • 현재 만들 프로젝트에서는 웹 프로젝트를 생성해야하므로 Spring Web을 선택한다.
    • HTML 엔진을 만들어주는 템플릿으로 Thymeleaf를 선택한다.

다음 사진과 같이 설정

  • 사진과 같이 설정한 뒤 GENERATE 버튼을 누르면 프로젝트가 다운로드되며 압축을 풀어 원하는 위치로 옮긴다.

 

2. IntelliJ에서 프로젝트 열기

  • Open > 다운받은 폴더를 저장한 경로 > hello-spring > build.gradle 선택 후 Open > Open as Project 선택

  • 기본적으로 src 폴더 아래 main과 test가 나눠져 있고, test에는 테스트 코드와 관련된 소스들이 들어있다.

  • build.gradle에서는 버전 설정과 라이브러리 implementation이 이루어진다.
    • dependencies: 현재 프로젝트에서 사용하는 라이브러리
    • repositories: 사용할 라이브러리를 다운로드하는 경로를 명시
    • mavenCentral(): 사용할 라이브러리를 다운로드할 수 있는 공개된 사이트

 

3. 프로젝트 실행

  • HelloSpringApplication.java
    • 자바는 main 메소드가 모든 프로그램의 시작이다
    • main method 내 SpringApplication.run을 통해 HelloSpringApplication 클래스를 실행하는 것이다
    • 톰캣 웹서버가 자동으로 열리고 spring boot가 같이 올라가는 방식이다
package hello.hellospring;

import ...

@SpringBootApplication // SpringBoot를 사용한다는 annotation
public class HelloSpringApplication {
	public static void main(String[] args){ // run시킬 부분
    	SpringApplication.run(HelloSpringApplication.class, args);
    }
}
  • HelloSpringApplication을 실행시키면 IntelliJ 터미널에 오른쪽과 같은 화면이 뜬다.

  • 위 터미널에서 밑줄쳐져있는 Tomcat started on port(s) : 8080를 통해 8080번 포트를 통해 실행되고 있음을 확인할 수 있으므로, 웹에서 localhost로 접속해본다.
    • 이 때 아래 사진과 같이 에러 페이지가 뜬다면 성공한 것이다.
    • 다시 인텔리제이 터미널을 확인해보면 접속 이후 추가된 Info를 확인해볼 수 있다.
    • 인텔리제이에서 실행되는 과정을 stop하고 웹페이지를 새로고침하면 에러페이지가 아닌 사이트에 연결할 수 없다는 메시지가 뜬다.

Preference -> Gradle -> Build and run using & Run tests using을 IntelliJ IDEA로 변경하면 인텔리제이에서 자바를 띄워 실행하므로 빠르게 실행할 수 있다

 

 

# 라이브러리 살펴보기

1. 의존 관계

  • Gradle은 의존관계가 있는 라이브러리들을 함께 다운로드 한다
  • 예전에는 웹 서버를 직접 서버에 설치하고 자바 코드를 밀어넣는 식으로 웹 서버 개발과 라이브러리가 분리되어 있었으나, 현재는 소스 라이브러리에서 웹서버를 내장하고 있기 때문에 자바 메인 메소드만 실행해도 웹서버가 실행된다
라이브러리들은 의존 관계를 가질 수 있으며 다른 라이브러리에 의해 이미 사용 중인 라이브러리들은 (*) 표시가 옆에 붙는다

 

2. 스프링 부트 라이브러리

  •  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를 요즘은 많이 사용

 

3. 테스트 라이브러리

  • spring-boot-starter-test
    • junit: 테스트 프레임워크 → 4에서 5으로 넘어가는 추세
    • mockito: 목 라이브러리
    • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    • spring-test: 스프링 통합 테스트 지원

 

4. 로깅

  • 실무에서는 System.out.println()이 아닌 로그를 출력해야 함 → 심각한 에러나 로그 파일의 관리에 유용하기 때문이다
  • logback → 실제 로그를 어떤 구현체로 출력할 것인가?
  • slf4j → 인터페이스
  • logback + slf4j 조합을 많이 사용하며 표준으로 채택된다고 생각하면 좋다 → 따라서 spring-boot-starter-logging에서는 의존관계에 의해 이와 관련된 라이브러리를 자동으로 주입한다

 

 

# View 환경설정

1. Welcome 페이지 만들기

Welcome 페이지란 도메인만 입력해서 접속했을 때 보여지는 첫 화면이다.

  • 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>
  • 실행결과

index.html 실행결과

 

2. thymeleaf 템플릿 엔진

  • Templete-Engine
    • 스프링부트는 다음 4가지 템플릿 엔진을 위한 auto-configuration 지원을 포함한다
      • FreeMarker
      • Groovy
      • Thymeleaf
      • Mustache

- thymeleaf 템플릿 엔진: https://www.thymeleaf.org/
- 스프링 공식 튜토리얼: https://spring.io/guides/gs/serving-web-content/
- 스프링부트 메뉴얼: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines
  • thymeleaf 템플릿 엔진은 Controller를 이용한 값 반환 및 사용이 가능하다
Controller는 웹 애플리케이션에서 첫 번째 진입점이다
  • 실습
    • src>main>java 아래 controller 패키지를 생성한다
    • 생성한 controller 패키지안에 HelloController.java 파일을 생성한다
    • resources/templates/경로에 컨트롤러와 연결되는 hello.html 파일을 생성한다 

  • src/main/java/hello.hellospring/controller/HelloController.java
    • 스프링에서는 컨트롤러 사용을 위해서 @Controller를 주석으로 선언해주어야 한다
    • @GetMapping(): 괄호 안에 들어오는 값이 호출될 때 아래 정의되는 메소드를 실행한다
package hello.hellospring.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";
    }
}
MVC: model view controller
  • resource/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. thymeleaf 템플릿엔진 동작 확인

  • 실행: http://localhost:8080/hello

  • 동작 환경
    • 웹브라우저에서 localhost:8080/hello를 보내면 내장 tomcat 서버가 받아서 spring에게 전달한다
    • helloController의 @GetMapping을 통해 "hello" url에 매핑된다
    • Spring이 model(data:hello!!)를 만들어서 넣어주고 hello를 리턴한다
    • hello를 리턴하는 것은 resources/templates/hello를 찾아 {data: hello!!}를 화면에 넘겨 랜더링 시키라는 의미이다
    • 즉, 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다
      • 기본적인 스프링 부트의 설정 값은 resources/templates 아래의 {ViewName}.html을 찾아서 매핑한다

thymeleaf 템플릿엔진 동작 과정


spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다
* IntelliJ 컴파일 방법: 메뉴 build > Recompile

 

 

# 빌드 및 실행

반드시 IntelliJ에서 실행 중이던 프로젝트를 stop한 후 진행해야 한다
  • gradlew를 통해 build를 실행하면 build 폴더가 생성됨
$ cd [구축한 프로젝트 경로]
$ ./gradlew build

  • build/libs 아래 생선된 hello-spring-0.0.1-SNAPSHOT.jar를 확인
$ cd build
$ cd libs
$ ll

  • 생성된 jar 파일을 java로 실행
$ java -jar hello-spring-.0.0.1-SNAPSHOT.jar

  • 정상적으로 배포되었는지 확인하기 위해 localhost:8080에 접속
실제 배포시에는 .jar 파일을 실 서버로 옮겨 실행하면 된다

  • 에러가 날 경우 clean build를 진행하고 다시 빌드한다
$ ./gradlew clean	//build와 관련된 내용(폴더 등등)이 사라짐
$ ./gradlew build

// clean과 build를 한번에 하려면 아래 명령어를 사용하면 된다
$ ./gradlew clean build

 

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!