스프링 프로젝트를 처음 생성 했는데, unknown 에러가 발생하여 난감하신 분들이 많다고 생각됩니다.

아래 그림(1-1), 그림(1-2) 같은 에러가 발생 하는 분들에게 도움이 되고자 포스팅 합니다.

 

해당 문제는 막 생성된 maven을 생성 할 수 있게 pom.xml 에 등록을 해주시면 쉽게 해결 됩니다.

 

 

그림(1-1)
그림(1-2)

 

 

 

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

   해당 URL에서 사용 하고 싶으신 플러그인 버전을 선택 해주세요.

 

Maven Repository: org.apache.maven.plugins » maven-jar-plugin

Builds a Java Archive (JAR) file from the compiled project classes and resources. VersionRepositoryUsagesDate3.1.x3.1.2Central 0 May, 20193.1.1Central1Dec, 20183.1.0Central5Apr, 20183.0.x3.0.2Central10Jun, 20163.0.1Central 0 Jun, 20163.0.0Central 0 May, 20

mvnrepository.com

 

 

 

2. pom.xml 의 <properties>에 아래와 같이 추가 해주고, 해당 jar파일이 다운로드 될 때까지 기다려 주세요.

	
	
		3.1.1
		1.8
	

위에 글이 깨지시는 분은 아래 텍스트를 추가 해주세요 !

<properties>  <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties>

 

 

 

3. 우선 pom.xml 에 에러가 해결된것을 확인 하실 수 있지만, 여전히 프로젝트 아이콘에는 에러 표시가 존재 합니다.

그림(3-1)

 

 

4. 'Problems' 항목에서 해당 에러를 확인 후, 그림2, 3과 같이 우클릭 -> 'Quick Fix' -> 'Finish' 버튼을 눌러주세요. 

(못 찾으시면, 상단 Window -> Show View -> Problems 를 선택 해주세요)

그림(4-1)
그림(4-2)
그림(4-3)

 

 

 

5. 해당 과정을 완료 하시면 그림(5-1) 같이 모든 에러가 해결 됬음을 확인 하실 수 있습니다.

그림(5-1)

 

개인 프로젝트를 진행하기 위해서 DB를 구축해야 할 필요성을 느꼈습니다.

어떤 DB를 사용할지 고민을 하다가 개인 프로젝트에는 mariaDB 가 가장 적합하다 생각했습니다.

mariaDB는 Mysql 의 제작자들이 해당 DB를 기반으로 새로운 DBMS를 개발 하였습니다. 

보통 mariaDB를 Mysql의 자매품이라고 부르는데, 그만큼 호환성이 좋고 Mysql 기능들을 mariaDB에서 사용할 수 있습니다. 


설치 작업을 진행 하겠습니다. 아래 url에서 필요하신 버전을 선택 하시고 설치 파일을 다운로드 해주시기 바랍니다.


https://downloads.mariadb.org/






























우선 DB root권한 접근에 사용될 비밀번호를 입력 해주세요.

그리고 저는 개인 프로젝트를 진행할 때 DB서버를 구축해놓고 원격으로 관리를 하려고 합니다. 

그래서 'Enable access from remote machines for 'root' user' 를 체크 하였습니다.

그리고 서버에서도 default Encoding을 UTF-8로 사용할 예정이기 때문에 'Use UTF8 as default server's character set'도 체크 하였습니다.

























설치가 종료된 후 잘 완료 되었는지 확인 하기위해 mariaDB에 직접 접근 해보려고 합니다.

파일 검색에서 'MySQL Client (MariaDB 10.3(x64)) 를 실행 해주세요.









아래처럼 비밀번호 입력 하라는 콘솔을 뜨면, 설치 당시 입력 하셨던 비밀번호를 입력 해주시면 됩니다.







비밀번호를 올바르게 입력하시면 로칼 DB 서버에 접속하게 됩니다.












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

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


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 등 다른 내용을 진행 하겠습니다.


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

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

그래서 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 

위 명령어를 입력 하세요.

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





+ Recent posts