본문 바로가기

백/spring boot

스프링 부트 프로젝트 생성하기(gradle)

1. Maven vs Gradle 

 Maven

 프로젝트의 라이브러리들을 관리해주는 도구이고, 자바로 개발된 어플리케이션에만 사용 가능 하다는 특징이 있다.

또한, 관리 대상 의 라이브러리와 연관된 다른 라이브러리들까지 연동되어 관리된 다는 편리함이 있다.

아파치 라이선스로 배포되는 오픈소스 SW이다. Maven은 XML 기반.

 Gradle

 Groovy 기반의 빌드 자동화 시스템이다. (Groovy: Java와 문법이 유사한 프로그래밍 언어로, JVM위에서 작동함) Maven과 다르게 Python, Java, C, C++ 등 다양한 언어를 지원한다는 특징이 있다.

안드로이드 스튜디오의 공식 빌드 시스템이다.=> 앱개발시 gradle  사용

기존 Maven을 통 해 XML로 빌드처리를 하는 경우 복잡한 내용을 작성 시 XML로 작성하기 까다로워지지만, Gradle에서는 Java와 유사한 문법으로 빌드 관리가 가능해진다.

왜 요즘은 Gradle인가?

 Gradle은 Maven에 비해

 성능이 좋다. 빌드 속도가 다양한 시나리오 상에서 10~100배까지 빠르다고 한다.

 빌드 처리에 대한 설정이 간결하고, 이 때문에 대규모의 프로젝트 에서는 Gradle을 사용하는 것이 유리하다고 한다.

 이러한 이유 때문에 아직까지 현재 점유율은 Maven이 높지만 Gradle을 더 사용하는 추세라고 한다.

 

그레이들 이용해 스프링 부트 생성하기

 build.gradle
 dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-web'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
 implementation 'javax.servlet:jstl:1.2'
 }
 application.properties
 #Server
 server.port=8393
 server.servlet.session.timeout=30
 #Spring MVC
 spring.mvc.view.prefix=/WEB-INF/views/
 spring.mvc.view.suffix=.jsp

만들어보자고

프로퍼티

#server
server.port=8382
server.servlet.session.timeout=30

톰캣 스탑 안하면 포트 충돌나니께 맨날 스탑앤리런하는습관

com.boot에 DemoController만들자

 

package com.boot;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class DemoController {
	@RequestMapping("/")
	public String home() {
		log.info("Boot Gradle~~!!!");
		return "gradle";
	}

}
@ResponseBody 어노테이션은 Spring Framework에서 사용되는 어노테이션입니다. 이 어노테이션은 메서드나 클래스에 적용될 수 있으며, 해당 요청 핸들러 메서드가 생성하는 결과를 HTTP 응답의 본문으로 직접 보내도록 지정합니다.

위의 코드에서 @ResponseBody 어노테이션은 DemoController 클래스에 적용되어 있습니다. 이는 home() 메서드가 반환하는 문자열을 HTTP 응답의 본문으로 사용하도록 지정하는 역할을 합니다.

일반적으로 Spring MVC에서는 @Controller 어노테이션이 적용된 클래스의 메서드들은 View를 반환하는 데 사용됩니다. 그러나 @ResponseBody 어노테이션을 사용하면 해당 메서드가 반환하는 데이터가 직접 응답 본문에 작성되어 JSON, XML 또는 일반 텍스트와 같은 형식으로 클라이언트에 전송될 수 있습니다.

즉, home() 메서드가 "gradle" 문자열을 반환하면, 이 문자열이 HTTP 응답의 본문으로 전송되어 클라이언트에게 반환됩니다.

 

gradle 문자열이 그대로 뜬다

package com.boot;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
@ResponseBody
public class DemoController {
	@RequestMapping("/")
	public String home() {
		log.info("Boot Gradle~~!!!");
		return "gradle";
	}
	
	@RequestMapping("/hello.do")
	public String home(Model model) {
		log.info("안녕하세요~~!!!");
		model.addAttribute("message","hello.jsp입니다.");
		return "hello";
	}

}

@ResponseBody를 컨트롤러 전체가아니라

저 메소드에만 적용하면?

/hello.do는 404,

/는 "gradle"이 정상적으로 뜬다.


이제 뷰단을 띄워보자.

아까 한 프로젝트에서(롬복프로젝트)

webapp을 통째로 복사해오자 => gradle은 webapp조차 없음!

이제 경로설정하자

프로퍼티에

#server
server.port=8382
server.servlet.session.timeout=30
#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

추가하고,

디펜던시 추가하러 build.gradle에 가자(jsp파싱해주는거 추가해야지)

	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl:1.2'

그런데도 

"Path with "WEB-INF" or "META-INF": [WEB-INF/views/hello.jsp]" 오류

gradle은 프로젝트 리프레시해줘야 build.gradle적용이됨(인텔리제이에서 그 코끼리버튼 누르고 빌드했던건가봄)

그럼 드디어뜬당.


이제 이미지를 추가해보자 

static에 image폴더 추가후

이미지 아무거나 하나 넣어줌

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!-- 프로젝트 경로를 contextPath 변수에 저장 -->
 <c:set var="contextPath"  value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	안녕하세요<br>
	<img width="200"  height="200"  src="${contextPath}/image/duke3.png">
</body>
</html>

static에 image를 찾아가게끔 hello.jsp에 저렇게 세팅해줌(인텔리제이는 이거 자동으로 되는거였군)

 

인텔리제이 (IntelliJ)는 일반적으로 정적 파일(예: 이미지, CSS, JavaScript)을 자동으로 처리하기 위해 내장된 웹 서버를 사용합니다. 이를 통해 개발 중인 웹 애플리케이션의 정적 자원을 쉽게 제공할 수 있습니다.

주어진 코드는 JSP(JavaServer Pages) 파일의 일부분입니다. JSP 파일은 동적인 웹 페이지를 생성하는 데 사용되는 Java 기반 서버 사이드 템플릿입니다. JSP 파일에서는 JSTL(JSP Standard Tag Library)을 사용하여 Java 코드를 간결하게 작성할 수 있습니다.

IntelliJ에서는 JSP 파일을 자동으로 처리하기 위해 추가적인 설정이 필요합니다. 일반적으로 IntelliJ에서는 웹 애플리케이션을 개발할 때 Tomcat 또는 다른 웹 컨테이너를 사용합니다. 이 경우, 웹 애플리케이션의 정적 파일은 해당 웹 컨테이너의 기본적인 디렉토리 구조에 맞게 배치해야 합니다.

일반적으로 IntelliJ에서는 정적 파일을 `webapp` 또는 `resources/static` 디렉토리에 배치하는 것이 권장됩니다. IntelliJ는 이러한 디렉토리를 자동으로 인식하고 내장된 웹 서버를 통해 정적 파일을 제공합니다. 따라서 별도의 설정이 필요하지 않습니다.

그러나 프로젝트 구조나 IntelliJ 설정에 따라 다를 수 있으므로, 정적 파일의 위치와 관련된 설정을 확인하는 것이 좋습니다. 일반적으로는 IntelliJ의 설정이나 프로젝트의 `build.gradle` 파일에 추가적인 설정이 필요하지 않을 것입니다.

 

잘뜬당


자바스크립트 추가하기

이제 static 폴더에 js 폴더도 만들어주고

거기에 scriptTest.js 만들어줌

 

function test(){
alert("spring boot test 입니다.");
}

이렇게 테스트 함수 하나 만들어주고

hello.jsp에서 사용해보자

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!-- 프로젝트 경로를 contextPath 변수에 저장 -->
 <c:set var="contextPath"  value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<script type="text/javascript"  src="${contextPath}/js/scriptTest.js"></script>
</head>
<body>
	안녕하세요<br>
	<img width="200"  height="200"  src="${contextPath}/image/duke3.png">
	<input type="button"  name="테스트" value="테스트"  onclick="test();">
</body>
</html>

 

잘됨!

 

안녕하세요 밑에 컨트롤러에서 모델로 담아놓았던 메시지를 출력해보자

이거

질뜸