framework/spring

[spring] 6. Spring 프로젝트 파일명의 종류 | 라이브러리 | maven빌드툴 | 버전변경 | context루트경로변경 (with Eclipse)

jeri 2024. 7. 25. 09:36
반응형

01. Spring 프로젝트 파일명의 종류

 

 

 main : 배포하기 위해 만들어진 프로그램 - main프로그램

  • src/main/java : main 프로그램에서 사용하는 클래스를 두는 파일 : servlet, model, dto, dao
  • src/main/resources : main 프로그램 만들 때 필요한 값들을 저장하는 폴더 : xml파일 , properties파일
  • src/main/webapp : 웹프로그램과 관련된 자원 : 이미지파일, 동영상파일, 음악파일, html파일, css파일, js파일, jsp파일

test : test를 하기위해 만들어진 프로그램 - test프로그램

  • jUnit을 이용하면 test 프로그램을 만들 수 있음
  • dao, service, model 역할 하는 프로그램이 제대로 동작되는지 확인 가능
  • 왜 필요할까? 출력할 수 있는 프로그램이 필요하므로
  • 현업에서는 출력은 프론트엔드가 하므로 그 전까지 확인할 수 없으니..
  • 테스트 프로그램을 통해 명령들이 제대로 동작되는지 확인할 수 있음 모듈 테스트 테스트 폴더 내 만든 프로그램은 배포되지 않음!!
  • src/test/java : test 프로그램에서 사용하는 클래스를 두는 파일 : servlet, model, dto, dao
  • src/test/resources : test 프로그램 만들 때 필요한 값들을 저장하는 폴더 : xml파일 , properties파일

 

 

 

02. Spring에서 사용하는 라이브러리

1) JRE SYSTEM 라이브러리 (최소버전으로 빌드됨)

  • java가 제공해주는 라이브러리 (jdk)
  • 기본적으로 우리는 jdk 11버전을 다운받아 사용했었음
  • 최신버전(17) spring 프로젝트가 만들어지지 않으므로 사용못함
  • spring은 JRE SYSTEM 라이브러리의 default가 1.6(최소화)으로 되어있음
  • 왜? 스프링 라이브러리가 4가 아닌 3으로 되어있는데, spring이 제공해주는 최소버전이 1.6이라 변경 필요함

2) Maven Dependencies 라이브러리 (최소버전으로 빌드됨)

  • maven 빌드 툴이 제공해주는 라이브러리

  • maven의 로컬 레파지토리의 위치임
  • 팁) 첫번째 프로젝트 만들 때 빌드처리 되어야 하기 때문에 시간이 조금 오래걸리고, 그 이후로 두번째, 세번째 프로젝트 빌드처리 시에는 가져다쓰므로 오래안걸림
  • 라이브러리 빌드가 잘 되도록 프로젝트 생성 시 와이파이 끊기지 않는 곳에 서 해주기

3) maven 라이브러리 빌드 처리 시 주의점

  • 빌드가 완료되면 아래처럼 워크스페이스 .metadata에 파일들이 생김

4) 만약 home.jsp 실행 시 ContextLoader클래스의 ClassFoundNotException 발생??

① 제대로 다운은 되었지만 프로젝트에 빌드처리가 안되었을 때

  • 밑에처럼 web deloyment assembly에서 maven dependencies가 web-inf/lib있나 확인
  • 있어야 프로젝트에 제대로 빌드처리 되었다는 것

  • 만약 없다면 add 눌러 maven 추가하기

 

② 와이파이가 끊어져 로컬레파지토리에 라이브러리가 정상적으로 빌드처리 안될 경우

  • maven은 UCP를 이용하므로, 중간에 무선인터넷이 끊어진다면 완전하지 않은 라이브러리를 제공함ㅠㅠ
  • 그럴 때는 로컬 레파지토리를 삭제하고, 이클립스 종료 후 다시 실행 하면 로컬 레파지토리를 다운받음!!
  • 에러메세지 확인해서 ClassFoundNotException 떨어지는 라이브러리를 찾아 해당 라이브러리만 삭제

  • 만약 잘 몰라서 라이브러리를 다 삭제하고 다시 빌드처리 하고 싶다면? 이클립스 종료 후 -> /m까지 폴더 싹 다 삭제
    • 그러나 위처럼 다 삭제하고 다시 빌드처리하면 시간이 오래 걸리니, 해당 라이브러리를 찾는 데에 익숙해지면 해당 라이브러리에만 들어가서 그것만 삭제하는 것을 권장

 

03. Spring VS Springboot 기본 빌드 툴

  • spring 기본 빌드 툴 : maven -> 최소버전으로 빌드되므로, 코드작성을 통해 최신버전으로 변경해야함
  • spring boot 기본 빌드 툴 : gradle -> 프로젝트 생성 시 최신버전으로 빌드 가능

 

 

04. spring 프로젝트가 사용할 버전 변경

Maven >> project Facets

  • spring 프로젝트가 내부적으로 쓰는 실제적인 것들이 적혀있음
  • 프로젝트에서 쓰는 JDK와 웹모듈 버전 변경
  • 변경을 해야 서블릿이 제공해주는 기능들 모두 사용 가능

  • jre system library을 확인해보면 변경이 완료되어있음

 

 

 

05. home.jsp utf-8 추가

  • utf-8 코드 추가
<%@ taglib uri="<http://java.sun.com/jsp/jstl/core>" prefix="c" %>
<%@ page session="false" pageEncoding="utf-8"%>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 

 

 

06. 실행 - HomeController 서블릿

  • 실행은 서블릿으로! MVC패턴이니 당연히 그래야 겠죠? .. - ctrl + f11

package xyz.itwill.controller;

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

}

 

 

 

 

07. context 루트 경로를 project 명과 동일하게 변경

  • spring이라는 프로젝트 외 다른 프로젝트를 만들면 똑같이 localhost:8000/controller/로 인식되어
  • 다수 프로젝트가 있을 경우 충돌이 된다고 할 수 있다!
  • 그래서 프로젝트명과 동일하게 변경이 필요함

 

 

변경후 localhost:8000/spring/home.jsp 호출

반응형