🌿Spring 설치
Spring Tools 3
full distribution on Eclipse 4.19
- Spring Tools 3 > Spring Tool Suite 3.9.18 > spring-tool-suite-3.9.18.RELEASE-e4.19.0-win32-x86_64.zip
위 링크에서 압축파일을 다운로드한다.
이 파일은 이클립스에서 스프링을 개발할 수 있게 배포한 Spring Tool Suite로, 줄여서 STS라고 부른다.
Spring을 할 때에는 STS 3를 사용하고, Spring Boot를 할 때에는 STS 4를 사용할 예정이다.
이와 같이 구분하여 사용하는 이유는 그냥 Spring은 STS 4에서 작업할 수 없기 때문이다.
JDK 버전 확인
- javac --version
cmd에서 JDK가 11 버전인지 확인한다.
Lombok
Lombok 설치 및 설정은 위 글을 참고한다.
Lombok 설치
a. 프로그램에 직접 설정하는 방법
b. 프로젝트에서 참조하는 방법
-javaagent:C:\Class\dev\sts-3.9.18.RELEASE\lombok.jar
Lombok이 설치되면 위와 같이 ini 파일의 가장 아래에 lombok.jar가 추가된다.
STS.ini
JDK 및 ini 설정은 위 글을 참고한다.
-vm
C:\Program Files\Java\jdk-11\bin\javaw.exe
--launcher.defaultAction 아래에 위 내용을 추가한다.
🌿Spring Lagacy Project
🍃Spring MVC Project
스프링은 프로젝트 종류별로 작업하기 편하게 템플릿을 제공한다. 하지만 스프링 전용 템플릿을 여러 가지 제공하는데 사실상 Spring MVC Project 말고는 쓸 일이 거의 없다.
Project Settings
스프링은 자바 기술이 아니기 때문에 스프링을 이용하기 위한 jar 파일을 설치해야 한다. 이 추가 기능에 대한 설치를 다운로드하겠다는 페이지를 넘어가고 나면 패키지를 적는 화면이 나타난다.
Sample을 보면 1단계 com, 2단계 mycompany, 3단계 myapp으로 구성되어 있다.
회사에서 보통 1, 2단계는 관리하기 힘들기 때문에 약간은 복잡하되, 너무 복잡하지 않은 3단계부터 시작한다. 이게 프로젝트의 기본 패키지가 된다.
Package Explorer
src/main/java, src/main/resources와 같이 main은 실제 작업을 할 때 사용하며, 테스트하는 소스를 작성할 때에는 원래 소스와 분리하여 작업할 수 있도록 test 공간에서 작업하도록 한다.
이중 resource는 java 클래스 파일이 아닌 나머지 파일을 보관할 수 있도록 만들어 둔 공간이다.
Maven은 이클립스나 스프링을 설치하면 자동으로 설치되는 프로그램이다. 메이븐을 설정하기 위한 전용 파일이 pom.xml 파일이다.
webapp
Spring MVC Project는 WEB-INF 안에 views가 미리 만들어져 있다.
이때 WEB-INF의 spring 폴더가 스프링의 핵심이다.
폴더나 파일에 s가 붙은 것은 스프링이 직접적으로 관리하고 있는 파일이라는 것을 의미한다.
워크스페이스 설정
encoding
Workspace, CSS, HTML, JSP 모두 UTF-8로 바꿔준다.
그리고 Content Types에서 Text를 클릭하고 UTF-8을 입력하고 Update 버튼을 눌러준다.
이외에도 font, theme 설정 등을 개별적으로 진행한다.
서버 설정
서버 설정은 위 글을 참고한다.
아파치 톰캣 9.0을 설정하고 서버를 시작한다.
서버 테스트
- http://localhost:8090/spring
HomeController.java
package com.test.spring;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
</body>
</html>
Spring에 기본적으로 HomeController.java 파일이 작성되어 있다.
위 링크로 들어가면 "Hello wolrd!" 메시지와 현재 시간이 화면에 출력된다.
🌿Servlet/JSP과 Spring
Spring Framework
Servlet/JSP는 초반에는 쉽지만, 후반에 가면 어려워진다. 그러나 Spring은 반대로 초반에 어려운데 후반으로 갈수록 쉬워진다. 이는 Spring의 특징이 아니라 프레임워크의 특징이다.
스프링은 초반 작업이 이미 끝나있다. 반제품을 받아다가 거기에 추가하여 완제품을 만드는 형식인데, 초반이 어려운 이유는 그 구조를 이해하는 게 어렵기 때문이다.
스프링은 간단히 게시판 수준이 아니라 굉장히 큰 프로젝트를 진행하기 위한 프레임워크이기 때문에 이해하는 데 초반에 세팅하는 게 어렵고, 시간이 오래 걸린다.
스프링은 생산성이 높기 때문에 Servlet/JSP를 사용할 때 5일 걸리는 업무를 스프링을 사용하면 2~3일 만에 구현할 수 있다.
스프링은 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다.
콘솔 프로그램, 일반 응용 프로그램, 웹 응용 프로그램 등에 다양하게 사용할 수 있으며, 현업에서는 웹 응용 프로그램을 제작할 때 사용한다.
Spring/JSP를 개량하여 버전 업 시킨 게 스프링이라고 보면 된다.
스프링은 현재 1.0 ~ 6.0까지 나와 있으며, 현업에서는 3.XX ~ 5.XX를 메인으로 사용한다.
버전에 따라 문법이 완전히 다른 기술이 많은 편이다. 지금은 5.XX를 다룰 것이기 때문에 만약 회사에서 3.XX를 사용하고 있을 경우 문법이 다를 수 있다.
전자 정부 표준 프레임워크
Spring을 사용하기 전에는 EJB로 웹을 만들었는데, 민간 개발 시장에 정부가 개입하여 전자 정부 표준 프레임워크로 채택되었다.
사용하는 프로그램부터 개발 패턴이나 구조가 완전히 달라서 경력자들이 이직을 해도 바로 투입되기가 어렵다는 문제가 있었다. 그래서 정부가 모든 개발 환경을 통일시키겠다고 나서게 되었던 것이다. 애초에 틀을 짜버리면 누구나 그 틀 안에서만 일을 할 수 있기 때문에 개발이 파편화되는 것을 막을 수 있었다.
스프링과 프로젝트
스프링 코어 + 추가 프로젝트 = 스프링
모든 기술들이 별도의 프로젝트(확장팩)으로 개발이 된다.
그 중심이 되는 게 Spring이고, 나머지 기술들은 모두 프로젝트들이다.
가장 유명한 프로젝트는 다음과 같다.
- Srping MVC
- Spring AOP
- Spring Data
- Spring Security
- Spring Boot
공식적으로 핵심 기술만 Spring으로 부르고, 나머지는 프로젝트라고 부른다.
스프링 프로젝트 구성 요소(주요 기술)
1. POJO 기반
POJO(Plain Old Java Object)는 Java로 생성하는 순수한 객체를 의미한다.
객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트로, 간단히 말하면 그냥 평범한 클래스이다.
제한적이지 않고 평범한 클래스를 기반으로 스프링 환경을 구축할 수 있도록 Spring을 만들어 두었다.
따라서 Servlet/JSP와 달리 코드가 중립적이며, 생산성을 높이기 위해 반드시 필요한 종속 관계가 적다.
2. 의존성 주입 지원 (DI)
스프링에 DI와 AOP는 가장 중심이 되는 기술이다.
DI는 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴을 의미한다.
다시 말하자면 객체 간의 의존성을 외부에서 주입하는 방식이다.
Spring DI에 대해서는 위 글을 참고한다.
3. 관점 지향 프로그래밍 지원 (AOP)
AOP는 소프트웨어 개발에서 횡단 관심사(cross-cutting concerns)를 모듈화 하고 캡슐화하는 프로그래밍 패러다임이다.
AOP를 이용하면 공통적인 관심사를 모듈화 하여 코드 중복을 줄이고 유지 보수성을 향상시킬 수 있다.
Spring AOP에 대해서는 위 글을 참고한다.
4. Spring MVC
Spring MVC는 스프링으로 웹 사이트를 만드는 기술이다.
Spring MVC에 대해서는 위 글을 참고한다.
레이아웃 지원 (Tiles)
Tiles는 중복되는 include 코드 등 반복되는 부분들을 한 곳에서 관리할 수 있게 도와주는 템플릿 프레임워크이다.
데이터베이스 연동 지원
- JDBC
- Spring JDBC
- ORM (JPA)
- MyBatis
Java로 하는 모든 DB작업은 JDBC를 사용하지만, 이를 그대로 사용하기에는 생산성이 떨어지므로 그대로 사용하지 않고 Spring JDBC, ORM, MyBatis 등을 사용한다.
국내에서는 MyBatis를 주로 사용하며, 해외에서는 JPA 의존도가 높다.
🌿Maven (메이븐)
빌드 도구, 라이브러리 관리 도구 등으로 부른다.
프로젝트를 만들거나 유지 관리를 하거나 배포를 도와주는 프로그램이다. 한 마디로 옆에서 이것저것 도와주는 집사 같은 프로그램이다.
현재는 메이븐을 라이브러리 관리용(jar)으로 사용할 예정이다.
jar 파일을 가져오면 Build Path에서 참조를 했어야 하는데, Maven에 맡기면 jar 파일을 다운로드부터 참조하는 것까지 모든 일을 해준다.
🍃pom.xml
m은 메이븐이 관리하는 파일이라는 것을 의미한다.
<dependency>는 의존성을 의미하며,필요한 jar 파일에 대한 기술 내용이다.
dependency는 최신 파일을 알아서 다운로드 해서 적용까지 시켜준다. 그리고 atrifactId는 jar 파일 이름, groupId는 패키지 이름이라고 보면 된다.
- C:\Users\zhzkd(사용자)\.m2\repository
위 폴더 경로에 메이븐이 설치한 jar 파일이 모두 들어있다.
우리가 할 일은 pom.xml에 dependency 태그로 표현만 하는 것이다. 그러면 메이븐이 알아서 다 가져온다.
Maven으로 Lombok 추가
Maven의 Dependency로 Lombok을 추가해 보도록 하자.
현재 Lombok은 1.18.30 버전이다.
https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.30
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
이제 링크에서 Lombok을 찾아 추가한다.
저장을 하는 순간 jar 파일을 가져와서 컴퓨터에 복사하여 그 파일을 현재 프로젝트에 적용까지 해 준다.
실제 팀 작업을 할 때에는 이 작업을 누군가 해서 pom.xml만을 전달하면 된다.
스프링 버전 설정 + JDK 버전 설정
Spring MVC Project
- 스프링 3.XX
- JDK 1.6
이 두 가지를 우리가 원하는 버전으로 바꿔 주어야 한다.
이는 매번 해야 하는 작업이므로 잘 기억해 두는 것이 좋다.
pom.xml 시작 부분과 끝 부분에서 <properties>와 <configuration>을 찾아 자바 버전을 모두 11로 변경해 준다.
Properties
프로젝트의 Properties에서 위와 같이 버전을 변경해 준다.
스프링 버전을 5.0.7.로 바꿔주었다.
그러자 메이븐이 jar 버전을 모두 5.0.7에 맞게 교체를 한 것을 확인할 수 있다.
JSP html 5 Template
<%@ page language="java" contentType="text/html; charset=${encoding}"
pageEncoding="${encoding}"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="${encoding}">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
<style>
</style>
</head>
<body>
<!-- ${cursor} -->
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script>
</script>
</body>
</html>
Mapping Template
getmapping
@GetMapping(value="/${name}.do")
public String ${name}(Model model) {
return "${name}";
}
postmapping
@PostMapping(value="/${name}.do")
public String ${name}(Model model) {
return "${name}";
}