백엔드/Spring Boot

Spring Boot 설정

두개의 문 2023. 7. 3. 22:31
Spring Starter Project 생성 

 

 File - Other - spring 검색 

 

 

 

 Spring Starter Project 클릭 - 마법사 화면 나옴 

 

 

 

 크롬에서 spring.io 검색 - Projects - Spring Initializr 클릭 → 두 화면 비교해보기 ( 동일함 )

 

 

• Service URL : https://start.spring.io = Springboot Starter 사용하여 프로젝트 생성한다는 의미 ( 수정하면 안됨 )

 

• Project : 어떤 빌드 관리 도구를 사용할 것인지 설정 

    - 빌드 관리 도구란? 프로젝트에서 작성한 파일들을 JVM이나 WAS에서 인식할 수 있도록 패키징해주는 도구 

   * 다이나믹 웹 - 빌드툴(ANT)

    컴파일 / 실행파일 만들기 = build

   * 스프링 부트 - 프로젝트 관리 툴

   컴파일 / 실행파일 / 라이브러리 / 프로젝트 관리 → 2종류의 툴이 유명함 

    Maven : 필요한 라이브러리를 땡겨오고 빌드하는 lifecycle까지 관리하는 빌드 관리 도구

                       → 라이브러리 수가 많아지면, 빌드 시간이 오래 걸릴 수 밖에 없다.

    ② Gradle : Maven과 다르게, 필요한 라이브러리에 대한 설정 파일(xml파일)의 코드가 매우 간결한 빌드 관리 도구

                       → 최근 많이 사용 / 이미 업데이트가 반영된 부분은 다시 빌드하지 않기에 빌드 시간이 maven에 비해 적어지게 된다.

 

 

 

 • Packaging : 어떤 패키징 방식을 사용할 것인지 설정

    ① Jar (Jar Archieve) : Java Application이 동작할 수 있도록 패키징하는 방식 

                                         → JRE만 있어도 실행 가능 

    ② War(Web Application Archieve) : Web Application 전체를 패키징하는 방식 

                                                                  → 별도의 Web Server 또는 WAS가 필요함 

                                                                      (라이브러리 파일이 맞지 않을 경우, 실행 안될 수도 있음 )

 

• Group : 프로젝트를 정의하는 고유한 식별자 정보 (보통 기업의 도메인명 입력)

 

 • Artifact : 버전없는 Jar 파일 이름 → 프로젝트명과 동일하다고 생각해도 됨 (빌드 결과물 이름 의미 )

 

• Version : 프로그램의 버전을 의미 → 0.0.1 - SNAPSHOT

 

• Description : 설명 

 

 Package : Group 동일하다고 보면  → Package >= Group

   

 

  ※ GroupId = Package명 

     프로젝트명 = ArtifactId = webapp명 

 

 

 

아래와 같이 설정한 후, Next 클릭 

 

 

 

• Dependencies : 어떤 라이브러리를 사용할 것인지 설정 → 아래 3개의 라이브러리는 항상 기본 설정하기 

    ① Spring Web : Embedded Tomcat 추가를 위함, Web 프로젝트 생성 시 필수

    ② Lombok : Annotation을 이용해 Compile 시점에 Getter, Setter, 생성자, toString, Builder 등 자동으로 만들어주는 라이브러리

    ③ Spring Boot DevTools : 소스 수정 , 스프링 서버를 자동 재시작해주는 라이브러리 ( 중지  재실행  필요 없음 )

 

 

 

Next - Base Url은 수정하지 않기 

 

 

 

Finish 하면, Project Explorer 창에서 생성된 프로젝트 확인 가능 

 

 

 

▷ 프로젝트 구조 

 - src 

   : main / test로 나뉨 

 

     ➊ main/java : 실제 패키지들과 소스 파일이 존재

     ❷ main/resources : 설정 파일들이 존재, java 파일을 제외한 모든 파일 → application.properties 파일 존재 (서버 및 스프링 설정)

     ❸ main/webapp : webapp 폴더 내에 '/WEB-INF/view' 폴더 생성 → View를 생성하는 jsp 파일이 존재 

     ❹ test/java : test 관련 코드들이 존재 

 

 - build.gradle 

 

 

 


Spring Starter Project 설정 

 

 - build.gradle 

plugins {
	id 'java'	// 선택한 언어 
	id 'org.springframework.boot' version '2.7.13'	// starter에서 선택한 버전 
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
 	id 'war'
}

// Metadata
group = 'org.zerock'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'	// java version
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

// 아래에 선택한 library를 다운로드 받는 곳, 필요하면 특정 사이트로 url 지정 가능 
repositories {
	mavenCentral()
}

// 선택한 library들 
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	
	// JSP를 가능하게 하는 라이브러리 
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	// war 압축파일을 외장 톰캣과 연동하려면 필요한 라이브러리 
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	// jsp에서 jstl을 가능하게 하는 라이브러리 
	implementation group: 'org.glassfish.web', name: 'jakarta.servlet.jsp.jstl', version: '2.0.0'
		 
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.projectlombok:lombok'
	
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

  • plugins 

   ➊ 프로젝트에서 사용할 플러그인인 스프링 부트 플러그인인 org.springframework.boot 추가

   ❷ 스프링의 의존성을 자동 관리해주는 spring.dependency-management 추가 

 

  • group : 프로젝트를 설정할 때의 기본값인 그룹 이름과 버전 입력 

 

  • repositories : 의존성을 받을 저장소 지정 - 기본값인 mavenCentral()로 설정 

 

  • dependencies : 프로젝트를 개발하며 필요한 기능의 의존성을 입력 

    - 스타터로 프로젝트 생성 시 추가했던 3개의 라이브러리 확인 가능 
    - 이 외에도 Libraries 내에 Project and External Dependencies에는 프로젝트 생성 시 처음 추가했던 3개의 라이브러리보다 훨씬 더 많은 수의 라이브러리가 땡겨와진 것 확인 가능 

    ∵ 우리가 사용하기 위해 추가한 3개의 라이브러리도 동작하기 위해서는 필요한 다른 라이브러리들이 존재함 

        ⇒ Gradle은 이러한 추가적인 라이브러리를 자동으로 External Libraries에 추가해줌 

 

 

- application.properties 설정 

 

 

[ 참고 자료 ]

https://velog.io/@bsu1209/Spring-%EC%B2%AB%EB%B2%88%EC%A7%B8.-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95

 

 

 

 

▷ Snippets

 

window - Show view - other 클릭 - snippets 검색 

 

 

Open 클릭 시 아래와 같은 화면이 나옴 

 

오른쪽 클릭 - Customize 클릭 

 

 

Customize Palette에서 Name 및 Template 설정하면, 추후 클릭만 하면 파일 생성됨 

 

 

 


화면에 출력시켜보기 

 

▷ index.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>어서오세요. 스프링부트의 세계로 ^^</h1>
	<h2>어서오세요. 스프링부트의 세계로 ^^</h2>
	<h3>어서오세요. 스프링부트의 세계로 ^^</h3>
	<h4>어서오세요. 스프링부트의 세계로 ^^</h4>
	<h5>어서오세요. 스프링부트의 세계로 ^^</h5>
	<h6>어서오세요. 스프링부트의 세계로 ^^</h6>
</body>
</html>

 

 

▷ HomeController

package org.zerock.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

// 서블릿의 WebServlet 같은 설정 
// 스프링에서는 '이 클래스는 컨트롤러입니다.' 라고 명시해야함 
@Controller
public class HomeController {
	// 이 요청주소는 여기서 처리합니다. 
	
	@GetMapping("/")	// GET 방식 요청 시, 아래 메서드가 처리함 
	public String index() {
		return "index";	
		// return값 String은 JSP 이름을 의미 
		// index.jsp 파일을 View 파일로 사용함 
	}
	
	@GetMapping("/calc_form")
	public String getCalcForm() {
		return "calc_form";
	}
}

 

 

프로젝트에서 오른쪽 클릭 - Run As - Spring Boot App 실행시키고, 서버창에 'localhost' 입력하면 화면 출력됨 

 

 


White label 출력될 때 체크해야할 부분 

 

① External Dependencies -> jasper tomcat core / provided 있는지 체크 

 

② build.gradle 수정 후, Gradle - Refresh grade project 를 통해 새로고침 해주기 

 

③ application properties