데이터베이스 설정 필요 : 현재 설정되어있지 않으므로 실행하면 오류가 난다.
build.gradle -> 아래 두 줄 주석처리
com.bitc.board2 -> 패키지 생성 : controller -> 클래스 생성 : BoardController
package com.bitc.board2.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class BoardController {
@RequestMapping("/")
public String index() throws Exception {
return "index";
}
}
templates 폴더 밑에 index.html 생성(테스트용)
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/css/bootstrap.css" th:href="@{/css/bootstrap.css}">
<script src="/js/jquery-3.6.1.js" th:src="@{/js/jquery-3.6.1.js}"></script>
<script src="/js/bootstrap.bundle.js" th:src="@{/js/bootstrap.bundle.js}"></script>
</head>
<body>
<h1>Restful 방식 웹페이지 만들기</h1>
<h2>인터페이스 구현</h2>
</body>
</html>
로컬호스트 접속해서 서버가 정상적으로 돌아가는지 확인
구성편집 설정 추가
초기 설정 완료
// < Rest 란? >
// Representational State Transfer 의 약자
// 기존 웹은 웹의 프로토콜인 HTTP 의 기능을 다 활용하지 못하고 있어, 그것을 해결하기 위한 방법으로 제시된 방식
// 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것
// HTTP 프로토콜을 그대로 활용(GET, POST, UPDATE, DELETE)하여 해당 자원의 CRUD 명령을 적용하는 것을 의미함
// 웹의 모든 자원에 고유한 ID인 HTTP URI 를 부여함
// 자원 (Resource) URL :
// 모든 자원에 고유한 ID가 존재하고, 이 자원은 서버에 존재
// 자원을 구분하는 ID는 /orders/order_id/1 형태 같은 HTTP URI 임
// 행위 (Verb) Http Method :
// Http 프로토콜의 Method 임
// Http 프로토콜은 GET, POST, UPDATE, DELETE 와 같은 메서드를 제공
// 표현 (Representation of Resource) :
// Client 가 자원의 상태에 대한 조작을 요청 시 서버는 이에 적절한 응답을 보냄
// REST 에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation 으로 나타낼 수 있음
// 현재는 JSON 으로 주고 받는 것이 대부분임
// GET : 해당 URI 의 리소스를 조회
// POST : 리소스를 생성
// UPDATE : 해당 URI 의 리소스를 수정
// DELETE : 해당 URI 의 리소스를 삭제
@RequestMapping(value="/board", method = RequestMethod.GET)
public ModelAndView openBoardList() throws Exception {
ModelAndView mv = new ModelAndView("board/restBoardList");
List<BoardDto> boardList = boardService.selectBoardList();
mv.addObject("boardList", boardList);
return mv;
}
com.bitc.board2 아래에 패키지 생성 : dto, configuration, mapper, service
dto - BoardDto 생성
package com.bitc.board2.dto;
public class BoardDto {
private int idx;
private String title;
private String contents;
private String userId;
private String pwd;
private String createDt;
private String updateDt;
private int hitCnt;
}
application.properties : 전 파일에서 그대로 복사해서 가져오기
# 데이터 베이스 연결 board1에서 가져옴
# 서버 포트 주소 설정
server.port=8080
# 사용할 데이터 베이스 종류 설정
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
# 데이터 베이스 접속 주소 설정
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
# 사용자 계정 설정
spring.datasource.hikari.username=test1
spring.datasource.hikari.password=java505
# 접속 테스트 쿼리
spring.datasource.hikari.connection-test-query=SELECT 1
# mybatis 사용 시 DB의 컬럼명을 자바의 카멜 명명법으로 사용 설정
mybatis.configuration.map-underscore-to-camel-case=true
# 감지된 지역 정보에 대한 파일 설정 : true면 시스템 지역 정보, false는 메세지 프로퍼티 타입(message.properties 파일 사용)
spring.messages.fallback-to-system-locale=true
DatabaseConfiguration : 전 파일에서 그대로 복사해서 가져오기
package com.bitc.board2.configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
// @Configuration : 해당 파일이 스프링 프로젝트 설정 파일임을 나타내는 어노테이션
@Configuration
// @PropertySource : 지정한 파일에서 설정 내용을 가져오는 어노테이션
// classpath:/ : resource 폴더를 의미함
@PropertySource("classpath:/application.properties")
public class DatabaseConfiguration {
@Autowired
private ApplicationContext applicationContext;
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() throws Exception {
DataSource dataSource = new HikariDataSource(hikariConfig());
System.out.println(dataSource.toString());
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
// 주의! Location이 아니라 Locations 임, getResources 도 마찬가지로 getResource 아님
// 스프링에서 별 두개(**)는 모든 파일/모든 폴더 등, 모든! 을 뜻함.
// sql-*.xml는 sql-아무 파일명.xml 형식에 맞는 파일을 들고옴
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/**/sql-*.xml"));
sqlSessionFactoryBean.setConfiguration(mybatisConfig());
return sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration mybatisConfig() {
return new org.apache.ibatis.session.Configuration();
}
}
데이터 베이스 설정이 완료되었음 -> build.gradle에서 주석처리해뒀던 것 풀어주기