본문 바로가기

Dev/[Java]

[Spring boot] spring boot + mariaDB 프로젝트 만들어보기 [JSP사용]

반응형

 

INTRO


[Spring boot] spring boot + mariaDB 연동하기[JSP사용] - 1편

틀린 부분이 보인다면 댓글을 주시길 바란다.

 

 


 

 

 

1. spring boot 프로젝트 생성

--> 우선 스프링부트 프로젝트를 생성한다.

 

 

 

--> 프로젝트 이름은 Test_App2로 하고,

--> Gradle Project 로 생성할 것이다.

--> Java version은 11이다.
--> 추가적으로 package 이름을 헷갈리지 않게 하기위해 com.gg로 만들었다.

 

 

-->종속성은 다음과 같이 4개를 추가한다.

 

 

 

--> 완료된 모습


 

 

 

 

 

2. MariaDB 설정하기

--> MariaDB 설치와 테이블 생성(Create)은 아래 포스팅을 참고한다.

--> 설치

rangsub.tistory.com/94

 

[MariaDB] MariaDB(마리아디비) 설치하기

INTRO 마리아디비를 설치하는 과정. 마리아디비는 오픈 소스 RDBMS이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. MySQL이 오라클에 인수되어 저작권이 걸렸고, 이를 해결

rangsub.tistory.com

-->테이블 생성

rangsub.tistory.com/97

 

[MariaDB] 테이블 생성(Create)하고 Select, Insert, Update, Delete 해보기(HeidiSQL 사용)

INTRO [MariaDB] 테이블 생성하고 Select, Insert, Update, Delete 해보기 지난 포스팅에서 mariaDB를 설치했다. rangsub.tistory.com/94 [MariaDB] MariaDB(마리아디비) 설치하기 INTRO 마리아디비를 설..

rangsub.tistory.com

-->user 테이블을 생성하고, 데이터를 몇개 추가해준다.

 


 

 

 

3. application.properties 파일 수정

--> 다음과 같이 DB 접속에 관련된 정보들을

--> 자동 생성된 파일인 application.properties에 적어준다.

--> 주의깊게 볼 점은,

--> url에서 localhost:3306뒤에 /test1이라고 적은 것이다.

--> 데이터베이스 이름을 적어준다. 아까 생성한 test1을 적었다.

 

application.properties

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test1
spring.datasource.username=root
spring.datasource.password=root

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

-->위 4줄은 MariaDB 를 사용하기 위한 접속 정보이다.

-->아래 2줄은 기존 Spring에선 View Resolver라 불렀던 내용으로,

JSP파일을 사용하기 위해 접두어, 접미어를 설정하는 것이다.

추후 저 경로에 .jsp파일이 저장 될 것이다.

 

--> 여기까지 진행한 뒤 프로젝트를 실행해본다.

 

 

--> 정상 실행된다면 Boot Dashboard에 서버가 정상적으로 올라왔다는 표시가 나타난다.

(localhost:8080은 접속은 되나 아직 아무것도 있지 않아 404 error가 뜬다.)

--> 만약 아래와 같은 오류가 Console 창에 뜬다면, 오타가 없는지 잘 살펴본다.

--> DB 접속에 관련된 '종속성'을 프로젝트 생성할 때 추가했으나, application.properties에 정의되어있지 않다는 내용의 오류다.

 

--> 이외에도 여기까지 실행이 되지 않으면 프로젝트를 삭제하고 다시 만들어 차근차근 따라해 본다.


 

 

 

4. Gradle 종속성(Dependency)추가

--> 최초 프로젝트 생성 후 아무것도 추가하지 않았다면 다음과 같은 화면일것이다.

build.gradle

 

 

--> 여기에 Lombok을 사용하기 위한 아래 종속성을 추가한다.

	compileOnly 'org.projectlombok:lombok'

Lombok설치에 관련된 내용은 아래 포스팅을 참고한다.

rangsub.tistory.com/96

 

[lombok] lombok 설치해보기

INTRO Lombok을 설치해본다. lombok설치 --> 아래 링크에서 LOMBOK을 받는다. projectlombok.org/download Download projectlombok.org 다운받은 파일 실행하면 아래와 같은 화면 볼 수 있다. specify locatio..

rangsub.tistory.com

 

 

--> Spring boot의 내장 Tomcat에서는 jsp를 기본 지원 하지 않는다고한다.

따라서 jsp를 사용하기 위한 아래 종속성을 추가한다.

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

 

--> 추가 한 뒤의 모습

 

--> 이후 프로젝트 우클릭 -> gradle ->refresh gradle project 를 해준다.

 

 

--> 여기까지 하고 또 실행해본다. 계속 실행해보는 이유는 어디서 오류가 났는지 쉽게 찾기 위함이다.

 


 

 

6. Mapper만들기

--> com.config라는 패키지를 하나 만들고, 그 안에 UserMapper.xml이라는 xml파일을 만들어준다.

--> 이 Mapper는 DB에 날릴 쿼리문을 정의하는 곳이다.

--> Mybatis가 있기 때문에 이 Mapper를 통해서 DB에 접근이 가능한것이다.

--> 아래와 같이 Mapper를 만들어준다.

--> 주의깊게 볼 점은,

--> namespace에는 파일 이름을 적어준다.

--> id에는 나중에 DAO에서 사용할 함수명(메서드명)을 적어준다.

--> resultType에는 원래 com.gg.dto.UserDTO 와 같이 적어주어야 하지만, Spring 의 @Alias 어노테이션을 사용할 것이므로, "User"만 적어주면 된다.

 

 

UserMapper.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="UserMapper"> 
	<select id="userList" resultType="User"> 
		SELECT * from user; 
	</select> 
</mapper>

 

--> 이후 application.properties파일에 매퍼의 경로와 DTO의 경로를 적어준다.

 

application.properties

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root


mybatis.type-aliases-package=com.gg.dto
mybatis.mapper-locations=com/config/*Mapper.xml

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

 


 

 

 

 

7. Package추가(dto,dao,service,controller)

-->패키지 4개를 생성해준다.

주의할 점은, 최초 생성된 root package인 com.gg패키지의 하위 패키지로 생성해야 한다는 점이다.

 

 

-->1. dto(VO)를 만든다.

--> 주의깊게 볼 점은,

--> Mapper에 DTO를 쉽게 알리기 위해 @Alias 어노테이션을 사용하였다는 점.

--> lombok을 사용하여 @getter, setter, tostring을 사용했다는 점.

--> 기본 생성자를 포함한 생성자들을 만든 점.

package com.gg.dto;

import org.apache.ibatis.type.Alias;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Alias("user")
@Getter
@Setter
@ToString
public class UserDTO {
	int id;
	String name;
	String gender;
	String city;
	
	public UserDTO() {}

	public UserDTO(int id, String name, String gender, String city) {
		super();
		this.id = id;
		this.name = name;
		this.gender = gender;
		this.city = city;
	}

	public UserDTO(String name) {
		super();
		this.name = name;
	}
}

 

 

 

--> 2. (@Repository) DAO interface와 impl(Class)를 만든다.

--> 이 DAO가 실질적으로 DB를 사용해 데이터를 조회/수정/삽입/삭제 등을 한다.

--> Data Access Object의 약자이다.

--> 주의깊게 볼 점은,

--> interface를 만들고, 추상 메서드를 만든다.

--> 이 메서드 명은 Mapper의 id와 같아야 한다.

--> class를 만들고, 추상 메서드를 구현한다.

--> 이 메서드 명도 Mapper의 id와 같아야 한다.

--> 또한 이 구현 class에는 @Repository 어노테이션을 넣어줘야한다.

 

 

UserDAO.java(Interface)

package com.gg.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import com.gg.dto.UserDTO;

public interface UserDAO {
	public abstract List<UserDTO> userList(SqlSessionTemplate session);
}

 

UserDAOImpl.java

package com.gg.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.gg.dto.UserDTO;

@Repository
public class UserDAOImpl implements UserDAO{

	@Override
	public List<UserDTO> userList(SqlSessionTemplate session) {
		return session.selectList("UserMapper.userList");
	}

}

 

--> 3. (@Service)Service interface와 impl(Class)를 만든다.

--> 이 Service에서 DAO를 접근한다. 

--> 그리고 실질적인 비즈니스 로직을 여기서 구현한다.

--> 주의깊게 볼 점은,

--> interface를 만들고, 추상 메서드를 만든다.

--> 이 메서드 명은 Mapper의 id와 같아야 한다.

--> class를 만들고, 추상 메서드를 구현한다.

--> 이 메서드 명도 Mapper의 id와 같아야 한다.

--> 또한 이 구현 class에는 @Service 어노테이션을 넣어줘야한다.

 

UserService.java

package com.gg.service;

import java.util.List;

import com.gg.dto.UserDTO;

public interface UserService {
	public abstract List<UserDTO> userList();

}

 

 

UserServiceImpl.java

package com.gg.service;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gg.dao.UserDAO;
import com.gg.dto.UserDTO;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	UserDAO dao;
	
	@Autowired
	SqlSessionTemplate session;
	
	@Override
	public List<UserDTO> userList() {
		return dao.userList(session);
	}

}

 

 

--> 4. (@Controller) Controller를 만든다.

--> 이 Controller에서 Service에 접근한다.

--> 주의깊게 볼 점은,

--> @Controller어노테이션을 넣어줘야 한다는 것이다.

 

package com.gg.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.gg.dto.UserDTO;
import com.gg.service.UserService;

@Controller
public class UserController {
	
	@Autowired
	UserService service;
	
	@RequestMapping("/")
	public ModelAndView SelectAllFromUser() {
		ModelAndView mav = new ModelAndView("test");
		List<UserDTO> userList = service.userList();
		mav.addObject("list",userList);
		return mav;
	}

}

 


8. JSP파일 만들기

--> 아래와 같은 경로에 test.jsp파일을 만들어준다.

--> 주의해야 할 점은, main-> webapp-> WEB-INF -> views(또는 jsp)이런 경로를 꼭 맞춰줘야 한다.

--> 이렇게 하면  controller에서 test.jsp를 참조할것이다.

 

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View Test Page</title>
</head>
<body>
	<h2>Hello!</h2>
	<div>JSP List Test</div>
	<c:forEach var="item" items="${list}" varStatus="idx">
 	${idx.index} Hello! ${item.name} <br />
	</c:forEach>
</body>
</html>

 


 

 

 

9. 실행해보기

--> 이제 모든 준비가 끝났다. 실행해본다.

--> 정상적으로 뜨는 것을 확인할 수 있다.

 

 

--> 다음과 같은 에러가 뜰 수 있다.

--> 아래 포스팅을 참고하면 된다.

rangsub.tistory.com/98

 

[Spring-Mybatis]Mapped Statements collection does not contain value for 에러

INTRO Mapped Statements collection does not contain value for 에러에 대한 원인과 해결방법 해당 에러는 Mybatis관련 에러이다. 1. Mapper를 참조하지 못하는 경우 -->Mapper를 만들었지만, Config..

rangsub.tistory.com


 

 

 

 

 

 

마무리

 

초보의 입장에서 spring boot + mariaDB (jsp사용) 프로젝트를 만들어봤다.

틀린 부분, 문의사항 등이 있는 경우 댓글에 남겨주시면 수정하도록 하겠다.

 

 

 

 

 

 

-퍼가실 때는 출처를 꼭 같이 적어서 올려주세요!

 

반응형