YONG-MIN

Spring 개발 - 2. Spring Project 생성/GitHub 연동

개발언어/Java, Spring 2017. 11. 7. 09:43


지난글 에서 JDK, STS, Maven, Tomcat 을 설치하고 개발환경울 구성하였습니다.

이번 글에서는 STS에서 Spring Project를 생성하는 주제를 다루겠습니다.


※ Index

1. Spring Project 생성

2. Sample Spring MVC Project 분석

2.1. HomeController.java

2.2. home.jsp

2.3. web.xml

2.4. servlet-context.xml

3. Spring Project GitHub에 연동하기

3.1. STS에 GitHub 연동하기(생략)

3.2. 연동된 GitHub에 프로젝트 업로드하기

3.3. 업로드(Push) 된 프로젝트 가져오기

3.3.1. Local Repository에서 프로젝트 가져오기

3.3.2. GitHub(오픈소스)에서 가져오기


1. Spring Project 생성

1.1. [File] > [New] > [Other] 선택

1.2. [Spring] > [Spring Legacy Project] 선택 

1.3. Project Name을 원하는 이름을 입력하고, Spring MVC Project 선택

1.4. Package를 입력한다. 최소 3단계로 구성하게 되어 있다. 

(  Java Coding Convention )

1.5. [Finish]를 누르면 웹에서 프로젝트에 필요한 라이브러리를 자동으로 다운로드 받는다. (STS 우측 하단에 진행 표시)

(프로젝트 생성과 동시에 Maven에 설정된 라이브러리를 다운받는 과정)


1.6. 다운로드 완료 후 오류가 없음을 확인하고 아래와 같은 구조의 기본 프로젝트가 생성된다.


2. Sample Spring MVC Project 분석

2.1. HomeController.java

@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";

}

2.1.1. @RequestMapping 

클라이언트(jsp)의 요청에 해당하는 비즈니스 로직을 찾아주는 역할을 수행한다.

(뒤에 method는 요청이 get, post 방식인지 정의함)


2.1.2. model.addAttribute("serverTime", formattedDate)

수행한 결과를 화면으로 보내주기 위한 부분이다.

serverTime이라는 이름으로 formattedDate를 전송하는 것을 의미하며,

아래에서 나올 home.jsp에서 표시될 수 있도록 한다.


2.1.3. return "home" 

수행결과에 대한 응답을 어디로 전송할지를 정의한다. 

단순히 "home"이라고만 정의하는 이유는 Servlet 설정을 통해 자동으로 "/WEB-INF/views/"가 prefix되고,

뒤에 ".jsp"가 suffix되도록 되어 있다.

결과적으로 단순히 return "home"; 만을 통해서 

"src/main/webapp/WEB-INF/views/home.jsp" 가 호출된다.


2.2. 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>

2.2.1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL을 사용하기 위한 선언 부분이다. 

2.2.2. ${serverTime}

EL(Expression Language)를 사용해서 2.1.2에서 전송한 데이터를 출력한다.


2.3. web.xml

2.3.1. 서블릿 배포 기술자 (Deployment Descriptor)

2.3.2. WAS가 최초로 구동될 때, WEB-INF의 web.xml을 읽어 그에 해당하는 웹어플리케이션 설정을 구성

  (설정을 위한... 설정파일)

2.4. servlet-contex.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->

<annotation-driven />


<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->

<resources mapping="/resources/**" location="/resources/" />


<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>

<context:component-scan base-package="com.momobs.kintro" />

</beans:beans>


2.4.1. <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">...</beans:bean>

2.1.3. 에서 prefix, suffix를 Servlet이 자동적으로 수행한다고 하였습니다.

바로 위에 색칠된 bean에 대한 부분이 이것을 담당합니다.

이를 통해 우리는 일일히 전체경로 및 .jsp를 붙이지 않아도 되서 편의성이 향상됩니다.


2.4.2. <context:component-scan base-package="com.momobs.kintro" />

Spring에서 사용할 bean을 일일히 xml에 선언하지 않고도 필요한 것을 Annotation을 자동으로 인식하게 하는 역할을 수행합니다.


3. Spring Project를 GitHub에 연동하기

작은 프로젝트여도 형상관리에 대해 익숙해지기 위해 GitHub를 사용하도록 하겠습니다.

3.1. STS에 GitHub 연동하기

STS에서 GitHub에 연동하는 방법은 지난번 다룬적이 있기 때문에 아래 포스팅을 참고해주시기 바랍니다.

[STS에 GitHub 연동하기] 


3,2, 연동된 GitHub에 프로젝트 업로드하기

3.2.1. [Package Explorer 內 업로드할 프로젝트 우클릭] > [Team] > [Share Proejct...] 실행

3.2.2. Local Repository와 연결하기위해 [Repository] 를 선택하고 [Finish]

  [Finish]를 누르면 Git Repository에 아직 아무것도 올라가있지 않기 때문에 프로젝트에 ?가 생깁니다. (식별할수 없는 프로젝트)


3.2.3. 인덱스 추가하기 : [Package Explorer 內 업로드 프로젝트 우클릭] > [Team] > [Add To Index] 실행

  빈 저장소에 프로젝트 항목을 추가하는 작업으로 물음표가 다음처럼 변경됩니다.



3.2.4. Commit&Push 하기: [Package Explorer 內 업로드 프로젝트 우클릭] > [Team] > [Commit] 실행


Project를 처음으로 업로드하는 것이기 때문에 Staged Changes를 보면 전부 추가(+)인 것을 알 수 있습니다.

(깜빡하고 Add to Index를 안하면 Unstaged Changes에 표시됩니다. 3.2.3을 수행합니다.)

Commit Message를 작성하고 [Commit and Push]를 수행합니다.

Commit과 Push의 차이는 아래와 같습니다.

- Commit : STS에서 Local Repository로 프로젝트를 업로드 (즉, 로컬 드라이브의 git 저장소에 프로젝트가 commit 됨)

- Push: Local Repository에 있는 프로젝트를 원격 저장소(GitHub)로 업로드 (즉, 로컬 드라이브에 commit된 프로젝트를 github로 업로드함)

즉, Commit and Push는 Local Repository로 프로젝트를 업로드 후 바로 원격 저장소인 GitHub에 업로드하는 작업입니다.


정상적으로 Push 되었다고 출력됩니다 ^^


Local Repository에도 잘 업로드 되었음을 확인합니다.



GitHub에서도 확인해봅니다 .. 역시 올라가있습니다



3.3. 업로드(Push)된 프로젝트 가져오기

GitHub에서 프로젝트를 가져오는 것은 개발환경을 만들고 있는 지금 단계에선 사실 필요없는 부분이지만,

주제 연관성 때문에 지금 다루고 넘어가겠습니다.

3.3.1. Local Repository에서 프로젝트 가져오기

- 테스트를 위해 프로젝트를 삭제한다. 

  [Package Explorer 內 업로드 프로젝트 우클릭] > [Delete] 실행

삭제된것 확인

- [Git Repositories]로 이동해서 [Working Tree] 內 업로드할 프로젝트 우클릭 > [Import Projects] 실행


- 업로드할 프로젝트가 체크되었는지 확인하고 [Finish]


- 정상적으로 업로드된 프로젝트 확인


3.3.2. GitHub(오픈소스)에서 가져오기

- 테스트를 위해 프로젝트를 삭제한다. 체크박스를 선택해서 3.3.1과 다르게 로컬 저장소에 있는 부분도 함께 삭제한다.

 로컬 저장소까지 삭제되었음을 확인한다.


- STS에서 [File] > [Import] 를 실행하고, Import 창에서 [Git] > [Projects from Git] 을 선택한다.


- [Clone URI]를 선택하고 [Next]

-  GitHub를 STS에 연동할때 했던 과정과 유사하다.

   복사할 GitHub 주소와 본인의 GitHub 계정을 입력후 Next.


- 가져오고 싶은 Branch를 선택후 Next.

- 프로젝트를 저장할 Local Repository를 지정하고 Next.

  (기존에 STS에 생성한 springHub가 존재해서 Local Repository 때문에 생성이 안된다. 그래서 기존 것을 그냥 삭제하고 진행)


- Import existing Exclipse projects 선택 후 Nex.t

- 가져올 프로젝트를 선택하고 Finish. 


- 결과적으로, 아래처럼 프로젝트와 Repository 가 생긴 모습을 볼 수 있습니다.