이번에 스프링을 훨씬 더 깊게 공부하기 위해, 제 마음속 스프링의 신 백기선님의 강의를 듣기 시작 했습니다.

백기선님은 강의 진행에 IntelliJ 를 사용하시는데, 저는 굳이(?) 이클립스를 이용해서 진행 하고 싶었습니다.

분명...인텔리제이가 어려워 이클립스를 사용하실 분이 계시다는 생각으로... 도움이 되고자 포스팅 합니다.

 

 

 

1. 우선 이클립스 상단 메뉴의 File->New->Others에서 SCM을 검색 하신다음, 아래 항목을 선택 해주세요.

 

 

 

 

2. SCM URL 항목에서 git을 선택 하신다음, git repository URI를 입력 하고 Finish 눌러주세요.

 

 

 

 

3. 위에 과정을 거치면 빌드를 위해 Maven이 열심히 파일들을 다운로드 받습니다.

 처음 이 과정을 거치시는 분은 상당히 많은 시간이 소요될 수 있습니다.

 

 

 

4. 빌드가 완료되서 프로젝트가 완성 되면 좋겠지만... 제가 직장 동료의 피씨와 제 노트북으로도 테스트 해본 결과

   공통된 에러가 발생 했습니다.

Multiple annotations found at this line:  - Execution default-testResources of goal    org.apache.maven.plugins:maven-resources-plugin:   3.1.0:testResources failed: Plugin    org.apache.maven.plugins:maven-resources-plugin:3.1.0 or one    of its dependencies could not be resolved: Failure to transfer    com.google.code.findbugs:jsr305:jar:2.0.1 from https://   repo.maven.apache.org/maven2 was cached in the local    repository, resolution will not be reattempted until the update    interval of central has elapsed or updates are forced. Original    error: Could not transfer artifact    com.google.code.findbugs:jsr305:jar:2.0.1 from/to central    (https://repo.maven.apache.org/maven2): The operation was    cancelled. (org.apache.maven.plugins:maven-resources-plugin:   3.1.0:testResources:default-testResources:process-test-resources)

해당 에러는 maven-resources-plugin 이 없어 빌드가 진행되지 않아서 발생 합니다. 해당 플러그인의 dependency를

pom.xml 에 등록하면 에러 사라집니다. 아래 URI에서 원하시는 버전을 선택 하시고,

아래 소스 코드를 pom.xml dependencies에 등록 해주시면 됩니다.

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin

		

    org.apache.maven.plugins
    maven-resources-plugin
    3.1.0

 

 

 

5. pom.xml 저장 후 프로젝트 우클릭->Run As->Maven Install 을 실행 해주세요. 

  그러면 프로그램이 열심히 돌기 시작합니다.

 

 

 

 

 

6. 빌드가 종료되면, 프로젝트 우클릭 -> Run As -> Spinrg Boot App 을 실행 해주세요.

   그림(2)와 같이 서버가 실행 됩니다.

  

그림(1)

 

그림(2)

 

 

 

7. 웹 브라우저에 localhost:포트번호(8080) 을 입력 하시면 시작된 고대하던 petclinic 페이지가 접속 됩니다.

 

 

안녕하세요, 지난주 까지 스프링+Maven 프로젝트를 진행 하고 있었는데, 갑작스럽게 스프링부트+Gradle을 진행하게 되었습니다.

회사에 계신 사수분이 지금 환경을 더 잘 한다고 하셔서 많이 배우고자 변경 하게 되었습니다.


Gradle는 Ant 와 Maven 의 장점을 합쳐 만든 빌드 도구이며 4.x 버전 이후로 개발에 최적화가 진행 되었다고,

빠른 빌드 속도, 동적 요소 관리 유연, 코드 길이와 가독성이 좋은 등 여러가지 장점이 있다고 합니다.




저는 이클립스 기반의 STS를 이용 해서 프로젝트를 생성 하겠습니다.

STS설치, JDK설치 및 설정은 제가 작성한 포스트를 따라 해주시면 됩니다.



1-1. STS 설치는 아래 링크에서 필요한 버전을 다운 받아주세요, 저는 3.9.6 버전을 사용 설치 하였습니다.

https://spring.io/tools3/sts/legacy


1-2. JDK 다운 및 환경 변수 설정

https://gabrielyj.tistory.com/162?category=629044








2. File -> New -> Spring Starter Project










3. 이 부분에서는 프로젝트의 환경 설정을 해주게 됩니다


Service URL : 해당 프로젝트가 다운로드되는 URL 입니다. 프로젝트 생성 Finish 때 연동 됨

Name : 프로젝트 명을 선택, 원하시는 내용으로 네이밍 하셔도 됩니다.

Type : 빌드 방식 설정, Maven이나 Gradle 방식 선택. 선택 방식에 따라서 프로젝트의 구조가 변경 되게 됩니다. 

Packaging : Jar는 embeded 톰캣(내부) 를 사용하고 War는 외부 톰캣을 사용합니다. 기존 Spring의 서버 사용 방식과 똑같습니다.

Java Version : 현재 사용 중인 자바 버전 선택

Language : 프로젝트의 개발 언어 선택

Group / Package : 그룹 및 패키지명을 선택, 원하시는 내용으로 네이밍 하셔도 됩니다.










4. 프로젝트에서 사용될 라이브러리를 시작 하기전에 설정 할 수 있습니다.

하지만 기존 스프링의 Maven 에서는 pom.xml 에 사용자가 원하는 라이브러리를 언제든지 추가가 가능 한 것 처럼,

그레이들에서도 프로젝트 생성 후에 아무때나 추가 할 수 있습니다. 저는 우선 아무것도 선택하지 않고 진행 하겠습니다.










5. 3번 스텝에서 선택된 정보를 바탕으로, 입력된 url 을 통해 zip파일을 내려 받으며 다운로드 완료 후 자동으로 임포트 됩니다.

페이지에서 직접 받게 되시면 zip파일을 다운/압축 해제 후 워크스페이스에 임포트 하시면 됩니다.









6. 생성 완료 후 프로젝트의 구조를 확인 할 수 있습니다.

우선 프로젝트 실행을 한 번 시켜 본 후 , 각 폴더 및 파일의 설명은 다음 포스트에서 진행 하겠습니다.

src/main/java 패키지에 TestController.java 클래스를 만드신 후 아래 간단한 컨트롤러 코드를 입력 해주세요.


package com.theblack.page;

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

@RestController
public class TestController {
	@RequestMapping(value="/")
	public String testMethod() {
		return "HelloWorld";
	}
}







7. Run -> Run As -> Spring Boot App 을 실행 하신 다음, 인터넷 창에 localhost:8080 및 설정하신 포트를 입력 해주시면,

아래 첨부된 그림처럼 HelloWorld 가 표시 되는것을 확인 하실 수 있습니다. 










간단하게 필요한 라이브러리에 대해서 설명 드리자면,

Mybatis 생산성/유지보수/성능/이식성을 향상 시키고, 간단하게 DB 사용을 지원 해주는 오픈소스입니다

Mybatis-spring는 하나의 모듈로써 Mybatis와 Spring를 연결 해주는 역할을 합니다.

jdbc는 자바와 데이터베이스의 연결을 해주는 역할을 합니다.

dbcp 디비의 연결을 미리 예측하고 일정 갯수의 connection을 유지하는것 입니다.(효율적인 db사용 가능)


첫 번째로 pom.xml 에 Mybatis, MyBatis-spring 을 추가 해주세요. 각 버젼 확인은 아래 url 에서 해주세요

Mybatis - https://mvnrepository.com/artifact/org.mybatis/mybatis

Mybatis-Spring - https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

spring-jdbc - https://mvnrepository.com/artifact/org.springframework/spring-jdbc

spring-dbcp - https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp


저는 3.4.6(Mybatis) , 2.0.0(Mybatis-Spring), 5.0.0(spring-jdbc), 1.4(commons-dbcp) 을 사용 하겠습니다.



		
		
		
			org.mybatis
			mybatis-spring
			2.0.0
		

		
		
			org.mybatis
			mybatis
			3.4.6
		


		
		
			org.springframework
			spring-jdbc
			5.1.0.RELEASE
		

		
		
			commons-dbcp
			commons-dbcp
			1.4
		




라이브러리 등록이 완료되면 root-context.xml 파일을 설정해야 합니다. 이 파일은 웹과 관련 없는 나머지 객체(bean)을 설정 해줍니다.

원래는 web.xml 최초 서버가 실행될 때 이 파일을 참조 할 수 있게 설정을 해야 하는데, 스프링 프로젝트 생성시 자동으로 입력 됩니다.



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



DB 연결하는 부분은 웹이 아니기 때문에 이부분에서 설정을 해줍니다. (웹은 servlet-context)

아래 항목 중 Namespace를 누르시면 Configure Namespaces 화면을 확인 하실 수 있습니다.

 aop, bean, context, mybatis-spring을 체크 해주세요. 체크를 하시면 아래 그림과 같이 자동으로 bean의 경로가 설정 됩니다.









자동 입력된 root-context.xml 파일에서 주석 밑에 DB접속 정보를 입력 해주시면 됩니다. 

mariadb 는 mysql jdbc를 이용해서 접근이 가능합니다. 찜찜하신 분들은 mariadb jdbc를 사용 해주시면 됩니다.

그리고 dataSource의 destory-method 는 bean 객체의 스코프가 종료될 때 선언된 클래스를 종료하기 위해 close()메소드를 실행 합니다.



	
	
	
      
      
      
      
      
   

   
	
      
      
      
	
    
    
	
      
	
 	



root-context.xml 에 데이터 베이스 관련 정보들을 입력 하신 다음에 아래와 같이 src/main/resources 폴더에

 config, mappers 폴더를 만들어 주세요.

config 폴더에는 mybatis-config.xml 파일을, mappers 폴더에는 testMapper.xml 파일을 생성 해주세요.

각 폴더 및 파일을 생성 하신 다음 아래 내용을 해당 파일에 복사해서 붙여 넣어주세요 !!!

원래 하나의 파일에 설정을 할 수 있지만 저는 다른 config 파일들이 추가 될 예정이라서 효율적인 관리를 위해 따로 등록 하였습니다.






이 두놈은 syntaxHighlight 가 도저히 먹히지 않습니다ㅠㅠ 


(mybatis-config.xml)

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

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration></configuration>



(testMapper.xml)

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

<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


  <mapper namespace="mapper">

  

  </mapper>









여기까지 스프링 프로젝트의 DB설정 및 Mybatis 연동이 끝났습니다.

다음 포스트 부터 실제 mybatis를 이용해서 데이터를 불러오고 입력하는 예제를 진행 해보겠습니다.

감사합니다 :)



처음 스프링 프로젝트가 생성되면 아래와 그림과 같은 구조를 확인 하실 수 있습니다.

간단하게 구성을 설명 하겠습니다.


src/main/java 는 프로젝트에서 개발되는 모든 Java코의 경로가 됩니다.

개발자나 프로젝트의 기호에 따라 sql mapper, tiles 등 xml 의 경로가 포함되기도 합니다.


src/main/recoursec 는 서버가 작동될때 사용되는 파일들의 경로입니다.

DB 연동을 위한 sql mapper의 xml 파일, titles의 template.xml 파일, 다국어 지원을 위한 properties.xml 등이 포함됩니다.


src/test/java 와 src/test/resources 는 말 그대로 테스트용 경로입니다. 위 두 경로와 목적만 다릅니다.


JRE System Library 세팅된 자바 버전을 나타냅니다.


Maven Dependencies 는 pom.xml 에 등록된 라이브러리들이 표시 되어 있습니다.


src->webapp->resources 는 이미지, 자바스크립트 등 페이지를 구성하는 resources들의 경로입니다.

src->webapp->WEN-INF->spring  스프링을 구성하는 설정 파일들의 경로입니다.

src->webapp->WEB-INF->views 실제 페이지를 구성하는 jsp, html 등의 파일들의 경로입니다.





 아래부터 home.jsp 의 작동 원리를 설명 하겠습니다.





기존 Dynamic Web 프로젝트는 jsp 등 웹 파일에서 서버를 실행 하면 바로 해당 페이지에 접근을 할 수 있었습니다.

하지만 스프링에서는 보안을 위해 웹 파일들을 WEB-INF 안에 저장 하고 있습니다.

이유는 WEB-INF 는 직접 접근을 할 수 없기 때문입니다. 이러한 이유로 home.jsp 를 바로 실행 시키면 

아래처럼 404 에러가 발생합니다. 그렇기 때문에 우리는 컨트롤러를 통해 페이지를 호출 해야 합니다.

그림(스프링 작동 순서) 에서 부터 순서대로 설명 하겠습니다.





- 그림(스프링 작동 순서)




1. web.xml 은 프로젝트의 환경 설정을 해주는 파일입니다. 프로젝트가 실행되면 이 파일이 가장 먼저 실행 되고, 

DispatcherServlet이 해당 프로젝트로 들어오는 요청들을 낚아채고 핸들링을 해줍니다.

이 부분은 낚아챈 요청들을 servlet-context.xml 로 보내주는 부분입니다.





	
	
		contextConfigLocation
		/WEB-INF/spring/root-context.xml
	
	
	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		appServlet
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			/WEB-INF/spring/appServlet/servlet-context.xml
		
		1
	
		
	
		appServlet
		/
	







2. servlet-context 는 낚아챈 요청을 받아 <annotation-drive/> 란 태그를 사용하여 컨트롤러에서 어노테이션을 사용할 수 있게 해줍니다.

<context:component-scan base="com.프로젝트.패키지명"/> 태그는 어노테이션을 사용할 영역(패키지)를 설정 할 수 있게 해줍니다.

낚아챈 요청은 com.포르젝트.패키지명에  요청된 url에 맞게 맵핑이 됩니다.

  




	
	
	
	

	
	

	
	
		
		
	
	
	
	
	
	


  



3. @RequestMapping(value = "/", method=RequestMethod.GET) 에 있는 value 값을 참조하여 요청된 url과 맵핑을 합니다.

return 되는 값은 "home" 이지만, 과정 4에서 페이지 경로를 prefix(/WEB-INF/views/) , suffix(.jsp) 가 자동으로 완성해주기 때문에,

최종적으로 /WEB-INF/view/return값.jsp 가 호출이 됩니다.








localhost:8080 을 실행 해보시면 아래와 같은 결과가 나오게 됩니다.

@RequestMapping 에서 value값을 "Index" 라고 설정을 하게 되면, localhost:8080/Index 라는 url로 접근 하면 됩니다.




지난 2018년 1월에 국비지원 교육을 이수하며 까먹지 말자란 결심으로 스프링 프로젝트 생성 관련 포스팅을 했습니다.

1년이 지난 지금, 적어도 그때보다 더 많은 공부를 하고난 후, 지금 보니까 너무 형편 없는 포스트 였습니다...

그래서 지금의 지식으로 다시 한 번 스프링 프로젝트 생성 및 초기 설정을 진행 하려고 합니다.


 틀린 부분이 있으면 언제 지적 해주셨으면 좋겠습니다 






저는 이클립스 기반의 STS를 이용 해서 프로젝트를 생성 하겠습니다.

STS설치, JDK&Maven 설치 및 설정은 제가 작성한 포스트를 따라 해주시면 됩니다.




1-1. STS 설치는 아래 링크에서 필요한 버전을 다운 받아주세요, 저는 3.9.6 버전을 사용 설치 하였습니다.

https://spring.io/tools3/sts/legacy


1-2. JDK 다운 및 환경 변수 설정

https://gabrielyj.tistory.com/162?category=629044


1-3. Maven 다운 및 환경 변수 설정

https://gabrielyj.tistory.com/161?category=735500






모든 준비가 완료되었습니다. 바로 스프링 프로젝트 생성을 진행 하겠습니다. 

2-1. 이클립스 좌측 상단 File -> New -> spring 검색 후 Spring Legacy Project를 선택 해주세요.







2-2. 프로젝트 이름을 입력 한뒤, Templates 에서는 'Spring MVC Project'를 선택 하신다음, Configure tmeplates 에 들어가주세요.

저는 프로젝트를 2개 진행 할 수 있는 상황을 고려하여 Maven Repository 설치 경로를 local 로 잡겠습니다.






2-3. 설치된 Maven 폴더에 있는 setting.xml 파일을 열고, 그 안에 있는 <localRepository> 경로를 수정 합니다.

사용자가 원하는 경로를 설정 하실 수 있고, 그냥 default를 사용 하고 싶으시면 그대로 놔두고 바로 2.6 을 진행 해주세요.








2-4. Maven -> Installations -> Add 를 선택해서, 그림(2-4-2) 처럼 메이븐 설치 경로를 지정 해줍니다.



(그림 : 2-4-1)


(그림 : 2-4-2)







2-5. Maven -> User Settings -> Browse 를 선택해서, 2-3에서 수정한 setting.xml 을 선택 합니다.

그러면 자동으로 아래  Local Repository 가 세팅됩니다.

그리고 Apply and Close 를 하시고 Next를 합니다.


(그림 : 2-5-1)






2-6. 마지막으로 패키지 이름을 정해줍니다.

저는 보통 com.프로젝트.모듈.패키지 이런식으로 네이밍을 합니다.







2.7 생성된 프로젝트에서 맨 아래에 있는 pom.xml 파일을 열어서 스프링, 자바, 메이븐 버전 설정을 해야 합니다.





<Properties> 

<java-version> 은 현재 등록된 jdk 버전을 입력 해주시면 됩니다.

<org.springframework-version> 은 사용하고 싶은 스프링 버전을 입력 해주시면 됩니다.

하지만 스프링 버전별로 최소 요구 자바 버전이 다르고 잘 못된 버전을 입력 하시면 에러가 발생하니 주의 해주세요!


<plugin>

<version> 설치된 메이븐의 버전

<source> <target> 설치된 자바의 버전을 입력 해주시면 됩니다.






이번 포스트에서는 pom.xml 까지만 설정 하고 

그 다음 포스트에서 web.xml 과 servlet-context.xml 등 다른 내용을 진행 하겠습니다.


스프링 프로젝트에 톰캣을 설정하려고 합니다.

참고하시는 분들의 PC에 이미 톰캣이 설치 되어 있다고 가정하겠습니다.(in Program Files or anywhere)





이클립스에서 프로젝트를 생성 하듯이 File -> New -> server 검색을 하고 다음 버튼을 눌러주세요.









준비하신 톰캣의 버젼에 맞게 선택 해주세요. 저는 8.0버전이라 Tomcat v8.0 Server를 선택 하였습니다. 그리고 다음 버튼을 눌러주세요.










Tomcat Installation Directory 는 준비하신 톰캣 폴더로 정해주시고,

JRE에는 해당 프로젝트에서 사용하실 jdk 로 정해주시면 됩니다. 그리고 Finish 버튼을 눌러주세요.








서버 생성은 완료 되었고 웹 서버 사용이 필요하신 프로젝트를 서버 작동을 위해 포함 해주세요.









그리고 생성된 서버의 server.xml 파일에서 path를 "/" 로 바꿔주세요.

물론 사용하시는 분에 따라서 해당 내용은 변경되야 할 필요가 있습니다.





실무에서 두개 이상의 프로젝트를 진행하다 보면 각 프로젝트가 환경이 다를 수 있습니다.

저도 기존에 작업하던 프로젝트 말고 새로운 프로젝트를 진행 하고 있습니다.

그래서 Maven의 라이브러리 들이 충돌 되지 않도록 각 프로젝트(워크스페이스) repository를 다르게 설정 하였습니다.


아래 과정은 기존 default 경로(c:/user/.m2/repository)가 아닌 자신이 원하는 경로에 maven을 설정하는 내용 입니다.



1. 설치된 Maven 폴더->config-> setting.xml 파일을 열어줍니다.

그리고 중간쯤에 있는 <localRepository> 부분의 주석을 그위로 이동한 뒤, 원하는 경로명을 입력 해줍니다.








2. 프로젝트가 아닌 워크스페이스의 Preferences -> Maven -> Installations 에서 Add버튼 클릭

(자료.1) 아래 (자료.2) 처럼 위에서 수정하신 setting.xml 이 존재하는 경로를 등록 해줍니다.

setting.xml 수정하신 경로는 maven 설치 경로와 똑같습니다.


(자료.1)



(자료.2)






3. 마지막으로  Preferences -> Maven -> User Settings 항목에서 User Settings 부분에 

모든 과정을 마친 setting.xml 를 등록 해줍니다. 그러면 그 아래 항목인 Local Repository 에 

입력한 로컬 경로가 자동으로 표시 됩니다.




처음 스프링 프로젝트를 생성한 다음 pom.xml 에 있는 Maven 버전을 수정 해야 합니다.

cmd 창에서 mvn -v 명령어를 입력 하시면 아래와 설치된 해당 maven의 정보가 출력 됩니다.










pom.xml 파일에 입력된 내용 중 <version>에 설치된 maven 의 버젼을 입력 해주시고,

그 아래 <source> 와 <target>에는 설치된 자바 버젼을 입력 해주시면 됩니다.







스프링에서 라이브러리를 자동으로 관리해주는 Maven을 사용하기 위해

메이븐을 설치 및 환경 변수 설정을 해줘야 합니다.


아래 링크로 이동 후 다운로드 해주세요.


http://maven.apache.org/download.cgi








빨간 박스의 압축 파일을 다운로드 한 다음 C드라이브의  Program Files에 복사 후 붙여넣어 주세요.

그 다음에는 환경 변수 설정을 해야 합니다.









위에 처럼 변수 이름은 MAVEN_HOME 으로 설정 하신 다음,

변수 값으로는 폴더가 존재하는 경로를 넣어주면 됩니다.(C드라이브에 붙여넣은 폴더 경로)


그다음 다운로드와 설정이 완료 됬는지 확인 하기 위해서 cmd창을 열으신다음

mvn -version 

위 명령어를 입력 하세요.

아래 처럼 나오면 다운 및 설정에 성공한 것이고, 실패 했다면 처음부터 다시 실행 해주세요 :) 





스프링 프로젝트에 이미지를 업로드 하려고 하는데, 자꾸만 500에러가 발생합니다..


org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException


에러의 원인을 파악하지 못 했었는데, 제가 바인딩에 개념이 없었습니다...


form에 인코딩 타입 enctype="multipart/form-date" 해주시면 파일 업로드가 가능한데,

input="file" 의 name은 컨트롤러의 MultipartFile 객체가 선언되는 이름과 같아야 합니다.

예를들어, <input type="file" name="thumnail_file" /> 이라면,

컨트롤러에서 MultipartFile thumnail_file 이 되야 합니다.


*500 NullpointerException 에러는 이 에러 말고도 다양하게 발생됩니다.



public ModelAndView fileUpload(HttpServletRequest request, MultipartFile thumnail_file) throws Exception {
   // write something
}


+ Recent posts