☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]SpringBoot 웹 개발 환경 구축

조반짝 2023. 10. 12. 12:18
728x90
반응형

 

SPRINGBOOT_STUDY 워크스페이스를 생성합니다.

 

1. 첫번째 스프링 부트 프로젝트 생성 방법 : 스프링 부트 스타터(https://start.spring.io/) 에서 생성

 

1) 스프링 부트 스타터(https://start.spring.io/) 웹 주소 접속

 

Project : Maven Project

 

Language : Java

 

Spring Boot : 2.7.2

 

groupId(Group): SpringBootProject

 

artifactId(Artifact): SpringBootDemo

 

Package name: com.springboot.first

 

 

Packaging : War

 

Java : 8

 

우측 ADD DEPENDENCIES... 클릭하고, 아래 의존성들 추가함

Spring Web, Spring Boot DevTools, Lombok

 

- 아래 "GENERATE" 버튼 클릭

 

2) 중요 : STS 또는 Eclipse Import

File - Import - Maven - Existing Maven Projects

- Browse... 앞서 "GENERATE" 생성 다운로드 받은 압축 파일을 해제하고 디렉토리 선택

 

[오류 해결 : Maven Project Import 안될 경우,

C:\Users\starh\.m2\repository 폴더에 있는 파일들을 모두 삭제하고,

다시 Maven ProjectImport 해보시기 바랍니다.

또는 Maven Clean - Maven Install을 해보시기 바랍니다]

 

3) STS(또는 Eclipse)에서 SpringBootDemo 프로젝트 생성 확인 후에 Delete 삭제합니다.

이때, Delete project contents on disk(cannot be undone) 체크하고 삭제합니다.

 

================================================================

 

2. 두번째 스프링 부트 프로젝트 생성 방법 : STS 또는 Eclipse에서 프로젝트 생성

 

New - Spring Starter Project -

 

Service URL 란에 https://start.spring.io 확인

 

Name : SpringBootWeb

 

Type: Maven 선택, Packaging: War 선택,

 

Java Version: 8 선택, Language: Java 선택

 

Group : SpringBootProject

 

Project : Maven Project

 

Artifact : SpringBootWeb

 

Version : 0.0.1-SNAPSHOT

 

Description : First project for Spring Boot

 

Package : com.springboot.first

 

Spring Boot Version : 2.7.2

 

Available: 란에서 아래 Selected: 검색해서 추가 바랍니다.

 

Selected:

Spring Web, Spring Boot DevTools, Lombok

 

- Finish 버튼 클릭

 

==================================================================

 

[중요 참고]

스프링 부트를 이용해서 Dynamic Web 개발 시 html 수정은

spring-boot-devtools 라이브러리 활용을 권장합니다.

(Dynamic Web Page Server Script View 파일 자동 리로디드)

이것은 hello.html 파일 텍스트 View 내용 수정 후 톰캣 Restart 없이

새로고침(동글화살표) 버튼 클릭하면

Chrome 웹브라우저 리로딩이 되어 쉽게 수정 확인을 할 수 있습니다.

, "DevTools"는 컨트롤러의 소스 코드를 수정하면

자동으로 스프링 부트를 재시작해 주는 편리함이 있기 때문에

개발자분들이 많이 사용하고 있습니다.

 

[참고 ADD]

Validation, Thymeleaf(JSP 대신 View 활용)

 

==================================================================

 

2. pox.xml 파일 확인 : <dependencies> 태그, <dependency> 태그 내용 등 확인 바랍니다.

 

[중요 : pom.xml 붉은색 에러날 경우 문제 해결 방법]

1) SpringBootWeb 클릭 선택 - 우클릭 - Run As - Maven clean

2) SpringBootWeb 클릭 선택 - 우클릭 - Run As - Maven install

3) SpringBootWeb 클릭 선택 - 우클릭 - Maven - Update Project

 

==================================================================

 

[Maven dependency 확인 CMD 명령어 참고 바랍니다]

C:\SPRINGBOOT_STUDY\SpringBootWeb>mvnw dependency:tree

= dependency를 계층적으로 보여줍니다. indentation 된 것이 transient dependency를 보여줍니다.

 

[Gradle Import 참고]

* Eclipse Gracle Project Import - File - Import - Gradle

- Existing Gradle Project - Next - Next - Finish

(gradle 프로젝트의 경우, build.gradle 파일 확인)

 

[참고] Gradle Dependencies 의존 관계 라이브러리 파일 확인

 

C:\SPRINGBOOT_STUDY\SpringBootWeb>gradlew dependencies

 

==================================================================

 

3. 스프링부트 웹서버 포트 변경

1) 스프링부트 Web의 기본포트는 8080

다른 포트를 사용하려면 application.properties 를 수정

server.port = 포트번호

server.port = 9008

 

2) 적용방법

STS --- Package Explorer

프로젝트명 [boot] --- src/main/resources --- application.properties 더블클릭

server.port = 9008

원하는 포트 번호 기입

특별히 기입한 것이 없다면 파일 내용은 비어 있음

 

3) 중요 : SpringBoot STS(또는 이클립스) 내장 톰캣과 외부 톰캣 사용 시

외부 톰캣 버전은 Tomcat9.0 이상을 권장합니다.

아울러, 외부 톰캣 사용 시 포트 설정(예시 : 9007)을 하더라도,

application.propertiesserver.port = 9008 로 했다면

WAS 포트는 9008로 접근할 수 있습니다.

 

4) src\main\java\com\springboot\first 패키지 안에 SpringBootWebApplication.java 소스 코딩

 

[src\main\java\com\springboot\first 패키지 안에 SpringBootWebApplication.java 소스 코딩]

package com.springboot.first;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

@SpringBootApplication

public class SpringBootWebApplication {

 

public static void main(String[] args) {

// System.out.println("SpringBoot 첫 실행 확인입니다~ ^^/"); // 아래 1번 실행되고, args에 의해서 추가 1번 실행됨

SpringApplication.run(SpringBootWebApplication.class, args);

System.out.println("SpringBoot 첫 실행 확인입니다~ ^^/"); // 1번 실행됨

}

 

}

 

5) 실행 확인

SpringBootWeb 클릭 선택 - 우클릭 - Run As - Spring Boot App 클릭 실행!

 

6) STS WAS 프로그램 실행 상태 netstat -an 명령어로 확인

 

C:\Users\starh>netstat -an

내용 많이 나옴(다음과 같이 | findstr 에 찾고 싶은 포트 번호 기재해 보기 바람)

 

C:\Users\starh>netstat -an | findstr 9008

 

7) 좌측 하단 Boot Dashboard 탭에서 local 클릭 - Install local cloud services 클릭 설치

 

 

==================================================================

 

4. Lombok 설치

 

1) Package Explorer - lombok-1.18.18.jar - 더블클릭 - Specify location.. 클릭 - 이클립스 STS 실행 파일 클릭 - STS 재시작

 

[중요_1] 좌측 Package Explorer에서 Maven Dependencies 에서 [예시] lombok-1.18.18.jar 파일을 확인합니다.

 

[중요_2] Lombokhttps://projectlombok.org/download 공식사이트, maven, gradle 등 다양한 경로를 통해 다운받을 수 있고,

 

공식사이트 pom.xml 직접 작성(Maven) springboot 초기설정 등

 

3가지 방법으로 다운받고 설치할 수 있습니다.

 

maven 또는 springboot 초기 설정 등을 이용해 다운로드한 경우 : maven repository lombok 디렉토리로 이동 설치해 줍니다.

 

[중요 : 필히! 진행하기 바랍니다]

 

이클립스 Maven Dependencies - lombok.jar 파일에서 마우스 우클릭 - Run as - Java Application 실행

 

- 사용중인 STS IDEini 파일을 지정해준 뒤 STS IDE를 종료 후 재시작합니다.

 

재시작하고나서 Project - Clean 해주면 됨

 

 

[중요 참고]

 

(예시 : C:\Users\starh\.m2\repository\org\projectlombok\lombok\1.18.18 폴더에서

 

java -jar lombok-1.18.18.jar 실행 - Specify Location...

 

- C:\DEV_SPRING\sts-bundle\sts-3.9.12.RELEASE 폴더에 sts.exe 실행 파일 선택)

 

- install/update - Quit Installer)

 

[참고] https://projectlombok.org/download 웹 사이트에서 Maven build된 버전과 같은

 

Lombok 버전을 다운로드 받아서 cmd 창에서 실행도 가능함 [예시] java -jar lombok-1.18.18.jar

 

=====================================================================================

 

2) SpringBootWeb 프로젝트 - src - main - java - com - springboot - first 패키지 폴더에 Hello.java 파일 생성

 

[Hello.java 파일 소스 코딩]

 

package com.springboot.first;

 

import lombok.Getter;

import lombok.Setter;

 

@Getter @Setter

public class Hello {

private String data;

 

}

 

=====================================================================================

 

3) SpringBootWebApplication.java 파일 수정

 

[SpringBootWebApplication.java 파일 수정 코딩]

 

package com.springboot.first;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

@SpringBootApplication

public class SpringBootWebApplication {

 

public static void main(String[] args) {

 

Hello hello = new Hello();

hello.setData("hello");

String data = hello.getData();

 

// System.out.println("lombok 적용 data = " + data); // 실행 한번되고 (결과 확인 후 주석 처리 또는 삭제 바람)

 

SpringApplication.run(SpringBootWebApplication.class, args); // 여기서, 실행 한번더 됨 (로그 기록도 나타남)

 

System.out.println("lombok 적용 data = " + data);

 

}

}

 

=================================================================================

 

5. SpringBoot 실행 확인 : STS에서 프로젝트 실행 ( Ctrl+F11 )

SpringBootWeb 프로젝트 - 우클릭 - Run As - Spring Boot App [ restartedMain] [Spring DevTools 실행]

[또는, 좌측 하단 Boot Dashboard 탭에서 local - SpringBootWeb devtools - 마우스 우클릭 - 실행]

 

[STS 콘솔 창 확인]

... Tomcat started on port(s): 9008 (http)

... Started HelloStarterApplication in 2.886 seconds (JVM running for 3.87)

text

9994 포트로 실행됨

cmd 실행 ( Win cmd Enter )

 

* STS WAS 프로그램 실행 상태에서 다음을 확인 바람

 

C:\Users\starh>netstat -an | findstr 9008

TCP 0.0.0.0:9994 0.0.0.0:0 LISTENING

TCP [::]:9994 [::]:0 LISTENING

 

===================================================================================

 

6. application.properties 파일 내용 추가

# 기존 스프링에서 프로젝트 설정 정보들은 dispatcher-servlet.xml이나 web.xmlXML파일로 설정을 했었으나,

# 스프링 부트는 XML파일 사용하는것을 권고하지 않습니다. 일반적으로 application.properties파일이나

# JAVA파일에 Configuration으로 작성하여 관리하는 것을 권고합니다.

 

[application.properties 파일 내용 추가]

server.port=9008

 

# 기존 스프링에서 프로젝트 설정 정보들은 dispatcher-servlet.xml이나 web.xmlXML파일로 설정을 했었으나,

# 스프링 부트는 XML파일 사용하는것을 권고하지 않습니다. 일반적으로 application.properties파일이나

# JAVA파일에 Configuration으로 작성하여 관리하는 것을 권고합니다.

spring.mvc.view.prefix=/WEB-INF/jsp/

spring.mvc.view.suffix=.jsp

 

===================================================================================

 

7. pom.xml 파일에 다음과 같이 jstl, tomcat-embed-jasper 추가해 줌

 

[pom.xml 파일 내용 추가]

 

~~ 위에 생략 ~~

 

<!-- 아래 dependency를 추가해 줍니다 -->

 

<dependency>

<groupId>org.apache.tomcat.embed</groupId>

<artifactId>tomcat-embed-jasper</artifactId>

</dependency>

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>

 

<!-- =========================================== -->

 

~~ 아래 생략 ~~

 

=========================================================================================

 

[참고 1] 이클립스의 경우 project -> build automatically 설정

 

[참고 2] IntelliJ IDEA의 경우, Build - Recompile "index.html" 클릭

 

=========================================================================================

 

8. webapp 폴더 아래에 "WEB-INF 폴더 생성"하고, 그 아래에 jsp 폴더 생성함. 그리고, 다음과 같이 main.jsp 파일 소스 코딩

 

[중요] SpringBootWeb 프로젝트에서 마우스 우클릭 - Properties - 하단 - Web Project Settings - Context root: 란에서

SpringBootWeb 를 지우고 / 를 입력해 줍니다. 그리고, Apply - Apply and Close 를 클릭해 줍니다.

 

[중요 : webapp 폴더 아래 - WEB-INF 폴더 생성하고 - 그 안에 jsp 폴더 생성하고

그 안에 main.jsp 파일 생성 및 소스 코딩]

 

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

pageEncoding="UTF-8"%>

<html>

<head><title>webapp 폴더 안에 WEB-INF 폴더 안에 jsp 폴더 안에 main.jsp 소스 코딩</title></head>

<body>

<h1>1부터 10까지의 합</h1>

<%

int sum = 0;

for (int i = 1 ; i <= 10 ; i++) {

sum = sum + i;

}

%>

 

<%

int testValue = 21;

%>

1 부터 10까지의 합은 <%= sum %> 입니다.<br>

<%= testValue %>

 

 

</body>

</html>

 

============================================================================================

 

9. SpringBootWeb 프로젝트 - src - main - java - com - springboot - first 패키지 밑에 controller 패키지 생성

 

1) controller 패키지에 다음과 같이 JspController.java 파일 생성

 

[중요 : src - main - java - com - springboot - first 패키지 밑에

controller 패키지 생성하고, JspController.java 파일 소스 코딩해야 합니다.

왜냐하면, SpringBoot에서 @Controller java 소스는 SpringBootWebApplication.java 소스와 같은

위치 또는 하위 패키지 안에 생성해야 인식할 수 있기 때문입니다.

여기서는 @Controller JspController 클래스 파일은

com.springboot.first.controller 패키지 안에 생성해야 합니다]

 

package com.springboot.first.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

public class JspController {

 

@RequestMapping(value="/")

public String jsp() throws Exception {

return "main";

}

 

}

 

2) JspController.java 소스 코딩 후에(기존 WAS 실행 중지 확인)

 

- SpringBootWeb 프로젝트 - 우클릭 - Run As - Spring Boot App [ restartedMain] [Spring DevTools 실행]

 

3) Chrome 브라우저 실행 - http://localhost:9008

 

============================================================================================

 

10. webapp - WEB-INF - jsp 폴더에 main.jsp 파일 소스 수정 코딩

 

[main.jsp 파일 소스 코딩]

 

<%@ page contentType = "text/html; charset=utf-8" %>

<html>

<head><title>1-10까지의 합</title></head>

<body>

<%

int sum = 0;

for (int i = 1 ; i <= 10 ; i++) {

sum = sum + i;

}

%>

 

<%

int testValue = 7; // testValue 변수값을 7로 변경하고 Ctrl + S 저장함

%>

1 부터 10까지의 합은 <%= sum %> 입니다.<br>

<%= testValue %> <!-- 앞서 testValue 변수값이 21에서 7로 변경된 것을

Chrome 브라우저에서 Tomcat 재시작이 아닌

새로고침(F5) 해서 dynamic web page 수정 내용 확인 -->

</body>

</html>

 

==========================================================================================

 

1) SpringBoot devtools 미적용 확인 : 앞서 1) 항목에서 SpringBoot devtools <dependency> 주석 처리함

 

2) 기존 WAS 실행 중지 - SpringBootWeb 프로젝트 - 우클릭 - Run As - Spring Boot App [ main] [Spring DevTools 미적용 확인]

 

3) Chrome 브라우저 실행 - http://localhost:9008

 

4) webapp - WEB-INF - jsp 폴더에 main.jsp 파일의 jsp dynamic web 소스 부분(변수, 제어문 등) 수정 코딩

 

5) Chrome 브라우저 - http://localhost:9008 상태에서 새로고침 F5 확인(jsp dynamic web 소스 수정 안됨 확인

 

6) SpringBoot devtools 적용 : 앞서 1) 항목에서 SpringBoot devtools <dependency> 주석 처리 해제함

 

7) Chrome 브라우저 실행(http://localhost:9008) SpringBoot devtools 적용 확인

 

==========================================================================================

 

[참고 : SpringBoot devtools 적용]

SpringBootWebApplication.java - 우클릭 - Run As - Spring Boot App [ restartedMain] [Spring DevTools 실행]

* 참고 : Run As - Run on Server 했을때 [ main] [Spring DevTools 실행안된 상태임]

[중요 : Spring Boot DevTools [ restartedMain] 활용하면, 매번 Tomcat 서버를 재시작 안하고도,

새로고침(F5)만 해도 jsp 같은 서버측 스크립트 언어 Web Page View 수정 작업된 내용이 보여짐.

, html 같은 static web은 수정 시 그냥 보여짐, 이것은, html 같은 static web이 아닌

jsp 같은 서버 스크립트 언어 변경시 WAS 재시작 안하고도 새로고침(F5)만으로도 dynamic web 수정 확인 가능함.

참고로, SpringBoot에서 Spring DevTools 실행 없이 jsp 같은 서버 스크립트 언어 변경시

WAS 재시작 안하면 새로고침(F5) 해도 dynamic web 수정 확인 안됨. 그래서, SpringBoot DevTools를 활용함]

 

[springboot 초기 설정에서 SpringBoot devtools 추가(또는 pom.xml 파일 dependencySpringBoot devtools 추가)

 

[pom.xml 파일에서 SpringBoot devtools 추가 <dependency> 엘리먼트]

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

</dependency>

 

[중요] spring-boot-devtools 가 제대로 적용이 안될때, 다음의 scope(범위/영역)optional(선택) 엘리먼트를 삭제해 보기 바람

<scope>runtime</scope>

<optional>true</optional>

 

===================================================================================

 

참고 : Controller 없이 SpringBootWeb 프로젝트 - 우클릭 - Run As - Spring Boot App [ restartedMain] [Spring DevTools 실행] 하고,

Chrome 브라우저 실행 - http://localhost:9994 하면, 다음과 같이 Whitelabel Error Page 에러가 나타남.

 

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

 

Fri Apr 16 20:44:57 KST 2021

There was an unexpected error (type=Not Found, status=404).

No message available

 

============================================================================================

 

[참고 : 주요 스프링 부트 라이브러리]

1) 스프링 부트 설치 라이브러리

spring-boot-starter-web

spring-boot-starter-tomcat: 톰캣 (웹서버)

spring-webmvc: 스프링 웹 MVC

spring-boot-starter-data-jpa

spring-boot-starter-aop

spring-boot-starter-jdbc

HikariCP 커넥션 풀 (부트 2.0 기본)

hibernate + JPA: 하이버네이트 + JPA

spring-data-jpa: 스프링 데이터 JPA

spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅

spring-boot

spring-core

spring-boot-starter-logging

logback, slf4j

 

2) 테스트 라이브러리

spring-boot-starter-test

junit: 테스트 프레임워크

spring-test: 스프링 통합 테스트 지원

 

3) 핵심 라이브러리

스프링 MVC

스프링 ORM

JPA, 하이버네이트

스프링 데이터 JPA(스프링 데이터 JPA는 스프링과 JPA를 먼저 이해하고 사용해야 하는 응용기술입니다)

기타 라이브러리

H2 데이터베이스 클라이언트

커넥션 풀: 부트 기본은 HikariCP

로깅 SLF4J & LogBack

테스트

 


Spring Initializr

옵션설정

스프링 부트파일 다운로드 됨

스프링부트 임포트


 

 

프로젝트 단위 확인하기

# 기존 스프링에서 프로젝트 설정 정보들은 dispatcher-servlet.xml이나 web.xml등 XML파일로 설정을 했었으나,
# 스프링 부트는 XML파일 사용하는것을 권고하지 않습니다. 일반적으로 application.properties파일이나
# JAVA파일에 Configuration으로 작성하여 관리하는 것을 권고합니다.

한글로 인코딩 되었다.

webapp 폴더 안에 WEB-INF 폴더 안에 jsp 폴더 안에 main.jsp 소스코딩

주석걸면 데이터가 변경이 안되지만

주석을 풀면 데이터 변경이된다.

728x90
반응형