

장점: 가장 단순하며 Primary key에 자동으로 index가 걸리는 MySQL 설정상 삽입, 삭제, 정렬시 UUID보다 빠르다(UUID는 AUTO INCREMENT와 비교시 크기가 크기 때문), 유저&개발자 입장에서 봤을 때 이해하기 쉽다(몇번째 게시물인지 바로 확인할 수 있기 때문).
단점: 분산되어 저장될시 각 서버별로 ID가 AUTO INCREMENT로 생성되기 때문에 다른 글이어도 같은 아이디를 가질 수 있다. 분산된 데이터를 병합시 시간이 오래걸릴 수도 있다, id가 단순히 증가하는 숫자이기 Primary key를 예측하기 쉬워 보안상 문제가 있을 수도 있다, 외부 노출시 규모 추정이 쉬워진다.
장점: UUID는 언제나 다른 값을 지니기 때문에 분산 저장후 데이터를 병합시 문제가 전혀 없다, 완전히 랜덤한 값이 생성되는 것이기 때문에 규모 추정이 어렵고 Primary key를 예측하기 어려워 보안에 이점이 있다.
단점: Primary key에 자동으로 index가 걸리는 MySQL 크기가 큰 UUID는 삽입,삭제, 정렬시 많은 오버헤드가 있을 수 있다, 유저&개발자 입장에서 봤을 때 이해하기 어렵다, 크기가 크다
현재 기획중인 게시판의 경우에는 분산저장되는 경우가 없기 때문에 AUTO INCREMENT 를 적용하는게 적합할 것 같다. PK가 외부에 노출될 시 규모추정을 막고 보안을 높이고자 pk를 암호화/복호화 하여 원본 PK의 노출을 막고자 할 것이다.
CREATE DATABASE dash_board; // DB생성
CREATE TABLE `DASH_BOARD`.`ARTICLE` //article 테이블 생성 쿼리
(
`ID` INT NOT NULL auto_increment,//자동으로 증가하게 하였다.
`TITLE` VARCHAR(255) NOT NULL,
`CONTENT` TEXT NOT NULL,
`USERNAME` VARCHAR(100) NOT NULL,
`CREATEDDATE` TIME NOT NULL,
`CHANGEDATE` TIME NOT NULL,
PRIMARY KEY(`ID`) //기본키 설정
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 collate=utf8mb4_0900_ai_ci;
//테이블을 어떻게 관리할지 설정해주는 내용으로 엔진은 INNODB를 이용하며 글은 utf8을 통해 렌더링해주며 정렬 기준은 utf8mb4_0900_ai_ci 임을 의미한다.
CREATE TABLE `DASH_BOARD`.`ARTICLEFILE`
(
`ID` INT NOT NULL auto_increment,
`ARTICLEID` INT NOT NULL,
`UPLOADDATE` TIME NOT NULL,
`FILENAME` TEXT NOT NULL,
`FILE` BLOB NOT NULL,
PRIMARY KEY(`ID`),
FOREIGN KEY (`ARTICLEID`) REFERENCES `ARTICLE` (`ID`) ON DELETE CASCADE
//외래키 설정 ARTICLE의 ID와 ARTICLEFILE의 ARTICLEID를 맺어주었다.
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 collate=utf8mb4_0900_ai_ci;
CREATE TABLE `DASH_BOARD`.`REPLY`
(
`ID` INT NOT NULL auto_increment,
`ARTICLEID` INT NOT NULL,
`CONTENT` VARCHAR(255) NOT NULL,
`CREATEDDATE` TIME NOT NULL,
PRIMARY KEY(`ID`),
FOREIGN KEY (`ARTICLEID`) REFERENCES `ARTICLE` (`ID`) ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 collate=utf8mb4_0900_ai_ci;

# application.properties
# MYSQL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/dash_board?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password= ~
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# SQL 출력여부
spring.jpa.show-sql=false
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
# hibernate 설정
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=false
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
# dev실행
spring.profiles.active=dev # dev property의 설정을 사용하게 한다.
///////////////////////////////////////////////////////////
# application-dev.properties
spring.jpa.sho-sql = true # 기존에 설정된 값은 false 였지만 dev의 내용이 덮어써진다.
//test Post Controller
package com.board.board.Component;
import java.sql.Connection;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
@RequestMapping("/test")
public class checkDBCon {
@Autowired
DataSource dataSource;
@GetMapping("/db")
public String getMethodName() throws Exception{
Connection con = dataSource.getConnection();
return con.getMetaData().getURL();
}
}

잘 연결 되었다!