SpringBoot - 05

월요일좋아·2022년 11월 17일
0

SpringBoot

목록 보기
5/10

Restful 방식 웹페이지 만들기

새 프로젝트 생성

데이터베이스 설정 필요 : 현재 설정되어있지 않으므로 실행하면 오류가 난다.
build.gradle -> 아래 두 줄 주석처리

com.bitc.board2 -> 패키지 생성 : controller -> 클래스 생성 : BoardController

  • BoardController.java
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 생성(테스트용)

  • 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 의 리소스를 삭제
  • BoardController 코드 추가
@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에서 주석처리해뒀던 것 풀어주기

0개의 댓글