JAVA/프로젝트

Spring Boot: 게시판 설계, ERD Diagram, DB 연동

whyHbr 2024. 4. 26. 18:21
728x90
반응형

 

게시판 board- 글post - 댓글 reply

 

게시판과 글은 1:N 관계

글과 댓글은 1:N 관계

 

  • Language : Java17
  • Framework: Spring Boot 3.1.11
  • DBMS: MY SQL 5.7.37
  • DB Library: JPA
  • Tool: Intellij

https://start.spring.io/

 

프로젝트 오픈 후, application.properties -> application.yaml 으로 변경 후 DB에 맞게 설정해준다. 

spring:
  jpa:
    show-sql: true
    properties:
      format_sql: true
      dialect: org.hibernate.dialect.MySQL8Dialect
    hibernate:
      ddl-auto: validate
  datasource:
    url: jdbc:mysql://localhost:3306/my_board?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: [...]

 

 

MySql에 my_board 스키마 생성

 

 

board, post, reply 테이블의 ERD diagram 제작

board 과 post 는 1: N 관계이고 

post와 reply 는 1: N 관계이다.

 

완성 했다면 스키마 이름을 변경하고

 

 

File - Export - Foward Engineer 선택, SQL 구문을 만들어 준다.

 FK에 대한 설정을 제거해준다.

FK를 사용하면 강한 제약이 걸리기 때문에 현업에서 테이블을 수정할 때 많은 에러를 만들어 낸다고 한다. 

그래서 보통은 id 컬럼을 만들고 join을 통해 사용한다고 한다. 

 

-- MySQL Script generated by MySQL Workbench
-- Fri Apr 26 17:48:01 2024
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering


-- -----------------------------------------------------
-- Table `my_board`.`board`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_board`.`board` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `board_name` VARCHAR(100) NOT NULL,
  `status` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `my_board`.`post`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_board`.`post` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `board_id` BIGINT NOT NULL,
  `user_name` VARCHAR(45) NOT NULL,
  `password` INT(4) NOT NULL,
  `status` VARCHAR(45) NOT NULL,
  `title` VARCHAR(45) NOT NULL,
  `content` TEXT NULL,
  `posted_at` DATETIME NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `my_board`.`reply`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_board`.`reply` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `post_id` BIGINT NOT NULL,
  `user_name` VARCHAR(45) NOT NULL,
  `password` INT(4) NOT NULL,
  `status` VARCHAR(45) NOT NULL,
  `title` VARCHAR(45) NOT NULL,
  `content` TEXT NOT NULL,
  `replied_at` DATETIME NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

 

실행해주고 테이블이 생성된 것 확인 후, 

메인을 실행 시켜 포트가 잘 뜨는 지 확인. 이렇게 나오면 성공

 

my-board 하위에 sql file을 만들어 관리하는 것도 좋은 방법이라고 합니다. 

 

728x90