본문 바로가기
프로그래밍/Project

[Project01] MiniBoard(1) - 프로젝트 생성, 데이터베이스 연결

by 코딩중독 2024. 1. 23.

목차

    시작하며

    기본적인 자바 문법과 스프링부트를 이용한 실습이 어느 정도 진행이 된 상황이라 여러 가지 기능을 가진 게시판 프로젝트를 진행한다.

    중간에 실력이 부족하다고 느끼면 학습하는 시간이 필요하겠지만 프로젝트에 필요한 내용들일테니 모두 기록에 담고 진행 예정이다.

    첫 번째 기능구현은 사용자 가입과 로그인에 대한 내용이다.

    jdk 버전을 변경하느라 환경변수 설정부터 적지 않은 시간을 썼지만 너무 많은 정보들이 다른 블로그에 있으니 jdk 환경변수 설정은 생략한다.

     

    프로젝트 생성

    • IDE : IntelliJ Ultimate
    • Language : Java
    • BuildSystem : Gradle-Groovy
    • JDK version : Oracle 21
    • SpringBoot version : 3.2.1
    • DataBase : MySQL
    • Server : Tomcat 9.0.82

    Dependencies

    현재는 최초 설정이고, 프로젝트를 진행하면서 필요한 것들이 있다면 계속 추가 예정이다.

    • Lombok
    • Spring Web
    • Validation
    • Spring Data JPA
    • MySQL Driver
        implementation 'com.mysql:mysql-connector-j'
        implementation 'org.springframework.boot:spring-boot-starter-validation'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'

    MySQL Shema, Table 생성

    MySQL Workbench에서 생성이 가능하다.

    프로젝트에 연결할 Shema 생성 (mini_board)

    사용자를 저장 할 테이블 생성 (user)

    CREATE TABLE IF NOT EXISTS `mini_board`.`user` (
      `id` BIGINT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(50) NOT NULL,
      `email` VARCHAR(100) NOT NULL,
      `salt` VARCHAR(100) NOT NULL,
      `password` VARCHAR(100) NOT NULL,
      `status` VARCHAR(50) NOT NULL,
      `registered_at` DATETIME NULL DEFAULT NULL,
      `unregistered_at` DATETIME NULL DEFAULT NULL,
      PRIMARY KEY (`id`));

     

    EER Diagram
    EER Diagram

    사용자 가입 시나리오에 필요한 이름, 이메일, 비밀번호를 입력받는다.

    가입 시나리오는 이후에 사용자 가입 로직을 진행할 때 내용에 담을 예정이다.

    사용자 비밀번호를 암호화해서 저장할 때 사용할 salt라는 column을 추가했다.

    application.yaml 설정

    JPA, MySQL 연결 설정

    최초 프로젝트 생성시에는 [Project > src > main > resources > application.properties]로 생성이 된다.

    [Shift + F6] 을 눌러서(Windows OS 기준) application.yaml로 rename 진행

    spring:
      jpa:
        show-sql: true
        properties:
          format_sql: true
          dialect: org.hibernate.dialect.MySQL8Dialect
        hibernate:
          ddl-auto: validate
      datasource:
        url: jdbc:mysql://localhost:3306/"본인의 MySQL schema 입력"?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: "본인의 MySQL username 입력"
        password: "본인의 MySQL password 입력"

     

    혹시 해당 내용을 동일하게 사용할 때 실수하지 않아야 하는 것은

    datasource 하위에 있는 url, username, password이다.

    첫 번째로 url에 있는 localhost:3306에서 3306 은 mysql port 번호이다. 설치할 때 변경했다면 변경한 포트번호를 적어줘야 한다. 변경하지 않았다면 기본적으로 3306일... 듯?

    두 번째로 username에는 본인의 mysql User를 적어줘야 한다. 이 또한 기본은 root로 설정되어 있다.

    세 번째로 password에는 본인의 mysql password를 적어줘야 한다.

    학습 목적으로 mysql을 오래전에 설치하고 방치했다가 다시 시작하는 사람은 mysql password 찾기/재설정에서 상당히 오래 걸린다. 블로그 검색하면 좋은 글들이 많이 있으니...

    마지막으로 코딩을 처음 시작하는 분들은 위의 내용을 그대로 사용하거나 변경해야 하는 부분들 인지했다고 하더라도 쌍따옴표(double quotation)를 넣어야 하나 고민할 수도 있다고 생각한다.

        url: jdbc:mysql://localhost:3306/board?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 1234

     

    이런 형태로 작성해야 한다.

    추가로 application.yaml 파일에서의 들여 쓰기는 문법과도 같으니 정확히 맞춰줘야 한다.

    모든 설정이 완료된 후 프로젝트의 Application 파일의 main 메서드를 실행한다.

    정상적으로 설정이 완료된 상태라면 다음과 같은 화면을 볼 수 있다.

    Running Tomcat

     

    마치며

    개인 프로젝트를 진행하며 기록하는 내용이라 정보를 얻고자 하는 누군가에게는 불친절한 글이 될 수도 있지만 댓글에 질문 주시면 제가 아는 선에서는 답변드리도록 하겠습니다.

    잘못된 내용도 지적해 주시면 감사하겠습니다.