[Spring] 개발환경 설정

1. Spring 개발환경 설정

 

1.1 Spring 개발환경 설정

1.1.1 스프링 개발 툴

1.1.1.1 이클립스 + 스프링 플러그인

1.1.1.2 STS(Spring Tool Suite - 이클립스에 스프링 플러그인이 포함된 버전)

1.1.1.3 IntelliJ

 

1.1.2 STS 다운로드 및 설치

STS 4 다운로드(윈도우 64bit용 다운로드)

  • 압축을 해제한 후 eclipseec.exe 실행
  • 에러가 발생할 경우 - 환경변수에 JAVA_HOME, path에 JAVA_HOME/bin 추가
  • 주의: sts 설치디렉토리 및 workspace는 한글 이름이 들어간 디렉토리를 사용하지 말 것

 

1.1.3 STS 3 플러그인 추가 설치

STS 4부터는 Spring Legacy Project를 지원하지 않으므로 Eclipse Marketplace에서 Spring Tools 3 Add-On 3.9.7.RELEASE를 추가 설치해야 함

 

1.1.4 프로젝트 기본 설정

기본 인코딩을 UTF-8로 변경

html/css/JSP의 인코딩을 UTF-8로 변경

JSP 페이지의 템플릿 변경

 

1.1.4.1 General - Workspace - Text File encoding 속성을 UTF-8로 변경

(변경하는 스샷)

1.1.4.2 General - Editors - Text Editors - Spelling - Encoding 속성을 UTF-8로 변경

(변경하는 스샷)

1.1.4.3 Web-CSS Files, Web-HTML Files, Web-JSP Files Encoding을 UTF-8로 변경

(변경하는 스샷)

1.1.4.4 JSP 템플릿 편집

Window → Preferences → Web → JSP Files → Editor → Templates → New JSP File(html) 선택 후 → Edit 클릭

(변경하는 스샷)

1.1.4.5 DOCTYPE을 HTML 4.01에서 HTML5 형식으로 변경

변경 전

변경 후

바) Get 방식의 한글데이터 처리(Tomcat 구버전)

Server.xml 편집

URIEncoding="UTF-8" 속성 추가(2군데)

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"

redirectPort="8443" URIEncoding="UTF-8" />

<Connector port="8009" protocol="AJP/1.3"

redirectPort="8443" URIEncoding="UTF-8" />

 

 

1.2 Spring sample 프로젝트를 다운로드 받은 후 압축을 풀고 import

(google drive - sample.zip)

 

 

1.3 spring01 프로젝트 생성

  • Spring Legacy Project → Spring MVC project
  • 패키지 이름: com.example.spring01
  • 메이븐 라이브러리: 사용자/.m2 디렉토리 확인
  • JDK 버전 수정: Project Facets, Java compiler 버전 확인
  • Spring 버전 변경: pom.xml 수정
<java-version>1.8</java-version>
<org.springframework-version>5.1.4.RELEASE/<org.springframework-version>

 

  • 2019년 1월 현재 스프링의 최신 버전은 5.1.4이며 에러가 발생할 경우 하위 버전으로 설정(Java 최신 버전은 11이지만 호환성을 위하여 1.8로 설정함)

JDK 8+ for Spring Framework 5.x

JDK 6+ for Spring Framework 4.x

JDK 5+ for Spring Framework 3.x

 

  • sample 프로젝트에서 설정파일 복사
  1. pom.xml 복사
  2. src/main/resources/mappers 디렉토리 생성
  3. src/main/resources/mappers/sampleMapper.xml 복사
  4. src/main/resources/log4j.xml 복사
  5. src/main/resources/log4jdbc.log4j2.properties 복사
  6. src/main/resources/logback.xml 복사
  7. mybatis-config.xml 복사
  8. src/main/webapp/WEB-INF/web.xml 복사
  9. src/main/webapp/WEB-INF/spring/root-context.xml 복사
  10. src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 복사
  • 톰캣 9.0으로 변경하여 실행
  • Java Build Path에서 Tomcat을 추가할 것

 

  • home.jsp 페이지의 한글이 깨짐, 페이지 지시어 수정 및 meta tag 추가
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home</title>
</head>
<body>
	<h1>Hello world!</h1>
    <p>The time on the server is ${serverTime}.</p>
</body>
</html>

 

 

1.4 home.jsp의 실행과정

web.xml 웹 프로젝트의 배치 기술서

deploy descriptor

웹 프로젝트의 환경 설정 파일

 

/WEB-INF/spring/root-context.xml

스프링의 환경설정 파일

 

스프링에 내장된 DispatcherServlet을 Default 서블릿으로 설정

- 모든 서블릿 요청은 DispatcherServlet에서 처리됨

/WEB-INF/spring/appServlet/servlet-context.xml 참조

xml 파일 안에 정의된 객체들을 로딩함

HomeController.java 로딩됨

<servlet>
	<servlet-name>appServlet</servlet-name>
    <servlet-class>
    	org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
	<init-param>
    	<param-name>contextConfigLocation</param-name>
        <param-value>
        	/WEB-INF/spring/appServlet/servlet-context.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

 

bean을 xml로 등록하는 방법

<bean id="참조변수" class="클래스이름">
</bean>

<bean id="homeController" class="com.example.spring01.HomeController">
</bean>
HomeController homeController = new HomeController();

 

bean을 자동으로 검색해서 등록

<context:component-scan base-package=*"기준 패키지 경로"* />
  • @Controller: 컨트롤러 빈
  • @Repository: DAO(데이터베이스 관련 작업) bean
  • @Service: 서비스(비즈니스 관련 로직) bean
  • @Inject: 의존관계 주입

 

 

1.5 스프링의 디렉토리 구조

  • src/main/java - 자바 코드(Controller, Model, Service)
  • src/main/resources - 자바 코드에서 참조하는 리소스 파일들
    sqlMapConfig.xml, mybatis의 mapper
  • src/test/java - 테스트 관련 코드
  • src/test/resources - 테스트 코드에서 참조하는 리소스 파일들
  • src/main/webapp - 웹 서비스 루트 디렉토리(외부에서 접근 가능)
  • src/main/webapp/resources - js, css, image 등의 웹 리소스 파일
  • src/main/webapp/WEB-INF/classes - 컴파일된 클래스
  • src/main/webapp/WEB-INF/spring - 스프링의 환경설정 파일
    src/main/webapp/WEB-INF/spring/root-context.xml - 서블릿과 관련되지 않은 모든 리소스에 대한 설정
    src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml - 서블릿과 관련된 리소스에 대한 설정
  • src/main/webapp/WEB-INF/views - html, jsp 페이지
  • src/main/webapp/WEB-INF
    외부에서 접근 불가능(보안을 위해서)
    컨트롤러를 경유해서 접근 가능
  • pom.xml - 메이븐에서 참조하는 설정 파일

 

 

1.6 스프링의 주요 특징

  • POJO(Plain Old Java Object) 기반의 구성: 별도의 API가 필요하지 않은 일반적인 자바 코드를 이용하여 개발 가능
  • 의존성 주입(DI)을 통한 객체 간의 관계 구성
  • AOP(Aspect Oriented Programming) 지원: 반복적인 코드를 줄이고 개발자가 비즈니스 로직에만 집중할 수 있도록 지원함
  • 편리한 MVC 구조
  • WAS에 종속적이지 않은 개발 환경

 

1.6.1 IoC(Inversion of Control, 제어의 역전) - 객체에 대한 제어권

  • 기존에는 개발자에게 제어권이 있음(new 연산자)
  • 객체의 제어권을 스프링에게 넘김
  • 인스턴스의 라이프 사이클(생성부터 소멸까지)을 개발자가 아닌 스프링 프레임웍이 담당

1.6.2 DI(Dependency Injection, 의존관계 주입)

- 객체 간의 의존성을 개발자가 설정하는 것이 아닌 스프링 컨테이너가 주입시켜 주는 기능

- 객체를 쉽게 확장하고 재사용할 수 있음

1.6.2.1 의존 관계

B의 코드가 변경되면 A의 코드도 변경되는 경우

A와 B는 의존관계가 있다.

A는 B에 의존한다.

A B

코드 변경 발생 유연한 확장이 어려움

```note. BoardDAO.java

​ MemberDAO.java → 관련된 코드를 바꿔야 함

​ (코드 변경 상황 시)

강한 결합과 느슨한 결합

B의 코드 변경에 A에 영향을 미치지 않도록 느슨하게 설계

A B

코드 변경 불필요 유연한 확장이 가능함

핵심 기능의 변경이 쉬워짐

강한 결합은(결합도가 높으면) 유지보수를 어렵게 함

한 곳의 수정 -> 나비효과

1.6.2.2 강한 결합과 느슨한 결합

// 생성자가 private으로 바뀌면// MemberUse class도 수정해야 함public class MemberUse {  public MemberUse() {    Member m = new Member();  }} class Member {  String userid;  String passwd;  String name;  private Member() { }} // 생성자가 private으로 바뀌어도// 영향을 받지 않음public class MemberUse {  public MemberUse(Member m) { }} class Member {  String userid;  String passwd;  String name;  private Member() { }}
   

 

 

1.7 maven repository 조회

 

 

1.8 메이븐 빌드 에러 발생시 해결 방법

  1. Java Build Path에서 JDK 버전을 1.8로 조정
  2. Project Facets에서 JDK 버전을 1.8로 조정
  3. [프로젝트] - [Properties] - [Deployment Assembly] - [Add] - [Java Build Path Entries] - [Maven Dependencies] 선택
  4. pom.xml에서 spring version 조정
  5. 프로젝트 clean, server clean
  6. STS를 종료한 후 메이븐 저장소(.m2) 삭제, STS 재시작

댓글(0)

Designed by JB FACTORY