CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

[SPRING] 스프링 입문 | 프로젝트 환경 설정하기
스프링 SPRING/[SPRING] 김영한 스프링 입문

[SPRING] 스프링 입문 | 프로젝트 환경 설정하기

2022. 12. 31. 02:36

[1. 프로젝트 생성]

https://start.spring.io 에서 스프링 프로젝트를 생성할 수 있다. 

Build는 코드를 컴파일, 패키징, 테스트. 배포 등의 작업들을 말한다.

Build Tool 이란 말 그대로 Build를 도와주는 도구로, 작업들을 일관되게 할 수 있다.

 

1. Maven VS. Gradle 고르기

여기서 Maven 과 Gradle을 선택할 수 있다.

Maven으로 프로젝트를 생성하게 되면 pom.xml이 생성되고, Gradle로 프로젝트를 생성하게 되면 build.gradle, settings.gradle이 생성된다. 

  • Maven은 정형화된 빌드 시스템으로, 플러그인으로 구동되어 build를 진행하게 된다.
  • Gradle은 JVM 기반의 빌드 시스템으로, Task 기반으로 작업을 수행한다. Task는 종속성에 따라서 다음 작업을 연결하여 수행한다. 캐시를 이용하여 더 시간이 단축된다.

라고 아주 간략하게 정리..

나는 주로 Gradle을 사용해왔고, 앞으로도 Gradle로 사용할 것 같다. 요즘 자주 사용되고 있는 빌드 툴로 Maven 다음 세대이기도 하고, xml파일보다 gradle이 더 가독성이 좋다고 생각한다.

 

2. Spring Boot 버전 설정

Snapshot → M (Milestone) → RC (Release Candidate) 순으로 개발이 완료되어 가는 단계를 의미하고, 맨 마지막 단계쯤에서는 거의 개발 완료로 더이상 버그가 없다면 그대로 출시된다.

 

3. Project Metadata

Group에 기업과 같은 그룹명, Aritifact에는 프로젝트 명을 입력한다.

패키징은 Jar로, Java는 11로 설정해준다.

  • JAR (Java ARchive) 은 Class(자바 리소스, 속성파일), 라이브러리 압축 파일로 JRE(Java Runtime Environment)만 있어도 실행 가능하다.
  • WAR (Web application ARchive) 은 Servlet / Jsp 컨테이너에 배치할 수 있는, 웹 애플리케이션을 구성할 때의 필요한 요소들의 압축 파일로, WEB(웹서버) 혹은 WAS(웹 컨테이너)가 필요하다
  • +) EAR (Enterprise ARchive) 은 모든 파일 포함

로 간략 정리..

 

4. Dependencies

추가하고자 하는 라이브러리를 편리하게 넣을 수 있다. 이번 실습에서는 Spring Web과 Thymeleaf를 넣어준다.

추후에는 여러가지 많이 넣어서 편리하게 사용한다. 

 


  • .idea : Intellij가 사용하는 설정 파일
  • resources : html, css, js 등
  • test : 테스트 코드 관련 파일
  • build.gradle : 라이브러리 등의 내용이 포함되어 있음
  • .gitignore : git에 올라가지 않을 파일 설정 가능

등으로 간략 정리..


File > Settings > Gradle

Build and run using : Intellij IDEA

Run tests using : Intellij IDEA

로 설정해준다.

 

자바 11 이어야 하고 JDK 11이어야 하니 설정 확인해주어야 한다.


프로젝트를 실행하고 나면,

Tomcat started on port(s): 8080 (http) with context path ''를 확인하고 localhost:8080으로 접속 가능하다.

에러 페이지이지만, 화면에 띄워줄 클라이언트 부분이 형성되어 있지 않아서 그런 것일뿐, 잘 실행된 것이다.


[2. 라이브러리 살펴보기]

Gradle은 라이브러리의 의존 관계를 정리해주어 필요한 것들은 모두 자동으로 추가되어 있다.

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

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

2. 테스트 라이브러리

  • spring-boot-starter-test
    • junit : 테스트 프레임워크
    • mockito : mock 라이브러리
    • assertj : 테스트 코드 작성에 도움이 되는 라이브러리
    • spring-test : 스프링 통합 테스트 지원

테스트 코드를 매번 작성하다가,, 결국 급할 땐 api가 필요한 컨트롤러 부분만 테스트 코드를 작성했다... 다음부터는 다 작성해야지!


[3. View 환경 설정]

resources > static > index.html

 
<!DOCTYPE HTML>
 
<html>
 
<head>
 
<title>Helllo</title>
 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
</head>
 
<body>
 
Hello
 
<a href="/hello">hello</a>
 
</body>
 
</html>

1. 스프링 부트가 제공하는 Welcome Page 기능 (정적 페이지) 

resources > static 안에 index.html 파일은 주소창을 입력하고 보게 될 Welcome Page가 된다.

 

스프링 문서 - Welcome Page

[ spring.io > Projects > Spring Boot > Learn > 2.4.5 Reference Doc. > Spring Boot Features ]

 

Spring Boot Features

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

: 스프링 부트는 index.html을 찾고, 없다면 index template를 찾아 자동으로 Welcome page로 사용한다.

 

2. thymeleaf 템플릿 엔진 (동적 페이지)

java/hello.hellospring > controller pakage 생성 >HelloController 자바 클래스 생성

 
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") // "/hello"로 들어오면 이 메서드를 호출해준다.
 
public String hello(Model model){
 
model.addAttribute("data", "hello!!!"); //data로 hello!!!가 들어간다, key : value 쌍으로 전달됨.
 
return "hello"; //hello.html로 넘어가도록 한다.
 
}
 
}

resources > templates > hello.html 생성 (thymleaf 이용)

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

[실행 결과] localhost:8080/hello

 

1. localhost:8080/hello 로 입력하면, 내장 톰캣 서버가 컨트롤러에서 Get으로 매핑되어 있는 hello라는 메서드를 찾아 실행시킨다.

2. 컨트롤러에서는 model이라는 객체에 값을 담을 수 있다. key : value 형태로 "data" : "hello!!!" 의 형태로 담고 hello로 리턴한다.

  • Controller : 요청에 따라 비지니스 로직 처리를 위한 분기 담당 및 응답 View 리턴

3. viewResolver에서 리턴된 hello와 대응되는 templates의 html파일을 찾아 처리함

  • resources:templates/ + (ViewName) + .html
viewResolver란, 응답 view를 렌더링하는 역할로, view 이름으로부터 view 객체를 매핑하는 역할이다
viewResolver의 종류는 여러 가지가 있는데, DispatcherServlet은 디폴트로 InternalResourceView를 사용한다.

 

spring-boot-devtools 라는 라이브러리 추가 시, html만 컴파일하여 서버 재시작 없이 View 파일의 변경이 가능하다.
developmentOnly 'org.springframework.boot:spring-boot-devtools'​​

build.gradle의 dependencies에 추가
- 코드 변경 감지 시, 자동 재시작
- 탬플릿 캐시 비활성화
- H2 콘솔 자동 활성화
등으로 간략 정리,,


[4. 빌드하고 실행하기]

명령 프롬프트(cmd)로 이동해서 해당 파일까지 경로 이동

 

gradlew : gradelw.bat 실행된다

 

gradlew build

gradle이 빌드 실행 후, 완료되면 build/libs 폴더가 생성되며 jar 파일이 담겨 있다.

잘 안될 경우, gradlew clean 을 해주고 다시 빌드해주도록 한다.

 

폴더 목록 확인 dir

 

java -jar hello-spring-0.0.1-SNAPSHOT.jar

 

 

 

'스프링 SPRING > [SPRING] 김영한 스프링 입문' 카테고리의 다른 글

톰캣이 무엇을 의미할까? 아파치란?  (0) 2023.01.17
[인텔리제이] 인텔리제이 단축키 정리 | 외워야하는 단축키 정리  (0) 2023.01.03
[스프링 SPRING] 인텔리제이 Getter and Setter 게터 세터 단축키  (0) 2023.01.03
[SPRING] 스프링 입문 | 스프링 웹 개발 기초  (0) 2022.12.31
스프링 입문 수업 시작 전, JAVA  (1) 2022.12.29
    '스프링 SPRING/[SPRING] 김영한 스프링 입문' 카테고리의 다른 글
    • [인텔리제이] 인텔리제이 단축키 정리 | 외워야하는 단축키 정리
    • [스프링 SPRING] 인텔리제이 Getter and Setter 게터 세터 단축키
    • [SPRING] 스프링 입문 | 스프링 웹 개발 기초
    • 스프링 입문 수업 시작 전, JAVA
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바