스프링 입문 - Ch 1. 프로젝트 환경설정

seren-dev·2022년 3월 20일
0

스프링 입문

목록 보기
1/11

김영한님의 인프런 강의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"의 강의 내용을 복습하며 기록한 내용입니다.


스프링을 왜 공부해야 하는가?

실무에서 제대로 동작하는 웹 어플리케이션을 개발하기 위해서!

간단한 웹 어플리케이션 개발

  • 스프링 프로젝트 생성
  • 스프링 부트로 웹 서버 실행
  • 회원 도메인 개발
  • 웹 MVC 개발
  • DB 연동 - JDBC, JPA, 스프링 데이터 JPA
  • 테스트 케이스 작성

프로젝트 생성

사전 준비물

  • Java 11 설치 (JDK 11)
  • IDE: IntelliJ 또는 Eclipse

스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
https://start.spring.io

  • 프로젝트 선택
    - Project: Gradle Project
    - Spring Boot: 2.6.4
    - Language: Java
    - Packaging: Jar
    - Java: 11
  • Project Metadata
    - group: hello (기업 도메인 명)
    - artifact: hello-spring (결과물)
  • Dependencies: Spring Web, Thymeleaf

참고: 스프링 입문 강좌 velog


선택을 마치고 Generate를 클릭하면 프로젝트가 zip 파일 형태로 다운 받아진다.
이제 프로젝트의 실체를 보기 위해 압축을 해제하고 원하는 폴더에 넣은 후 IntelliJ에서 임포트를 하도록 하자.
Intellij에서 Open or Import를 클릭 한 후 다운받은 프로젝트 폴더로 찾아가 build.gradle 파일을 열어준다.

  • src/main/java: 비즈니스 로직 구현을 할 Java 파일
  • java안에 있는 hello.hellospring은 패키지
  • src/main/resources: 그 외 화면을 구성할 HTML/CSS/JS 혹은 설정 파일 등
  • src/test: test와 관련된 코드

IntelliJ Gradle 대신에 자바 직접 실행, Gradle JDK 설정

윈도우 사용자 File -> Setting

프로젝트 JDK 설정

  • Windows: File -> Project Structure(Ctrl+Alt+Shift+S)

  • Gradle 빌드 툴: 버전 설정, 라이브러리 가져오기

build.gradle

plugins {
	id 'org.springframework.boot' version '2.6.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

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'
}

tasks.named('test') {
	useJUnitPlatform()
}
  • dependencies에 있는 라이브러리들을 어디서 다운로드받냐
    -> mavenCentral 공개 사이트에서 다운로드 받도록 설정

HelloSpringApplication.java

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {

		SpringApplication.run(HelloSpringApplication.class, args);
	}

}
  • main 메소드를 실행하면 SpringApplication.run() 에서 HelloSpringApplication 클래스를 넣어주면, @SpringBootApplication 어노테이션으로 인해 스프링부트어플리케이션이 실행됨
    -> Tomcat 웹 서버(내장되어있음)를 자체적으로 띄우면서 스프링부트도 같이 띄워짐

실행: localhost:8080

라이브러리 살펴보기

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

Intellij 우측 상단에 Gradle을 누르면 Dependencies를 누르면 확인할 수 있다.

스프링부트 라이브러리

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

logging

  • System.out.println보다 log를 씀
  • log로 남겨야 심각한 에러만 따로 모아볼 수 있고, log 파일 따로 관리
  • dependencies -> thymeleaf -> string-boot-starter -> logging -> logback, slf4j

테스트 라이브러리

  • junit: 테스트 프레임워크
  • mockito: 목 라이브러리
  • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
  • spring-test: junit으로 테스트할 때 스프링과 통합해서 테스트를 할 수 있도록 도와주는 라이브러리

View 환경설정

Welcome page

<!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>

thymeleaf 템플릿 엔진


HelloController.java

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";
    }
}
  • GetMapping: 웹 어플리케이션에서 /hello가 들어오면 이 메소드를 호출
  • 스프링이 model을 만들어서 넣어줌
  • model 속성 추가: key는 data, value는 hello!!
  • return "hello" : /resources/templates/hello.html을 찾아서 렌더링

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>
  • <html xmlns:th="http://www.thymeleaf.org"> : 템플릿 엔진으로서 thymeleaf 문법을 쓸 수 있다.
  • 실행: http://localhost:8080/hello

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

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

빌드하고 실행하기

콘솔로 이동

  1. ./gradlew build
  2. cd build/libs
  3. java -jar hello-spring-0.0.1-SNAPSHOT.jar
  4. 실행 확인

윈도우 사용자를 위한 팁

  • 콘솔로 이동 -> 명령 프롬프트(cmd)로 이동
  • ./gradlew -> gradlew.bat 를 실행하면 됩니다.
  • 명령 프롬프트에서 gradlew.bat 를 실행하려면 gradlew 하고 엔터를 치면 됩니다.
  • gradlew build

cd build/libs폴더의 .jar 파일만 복사해서 서버에서 넣어주고 java -jar 해서 실행시킴 -> 서버에서도 spring 동작

0개의 댓글