Spring Boot 기반의 간단한 게시판 API를 개발합니다
로그인 없이 누구나 게시글을 작성하고 댓글을 달 수 있습니다
글 내용이 좋다고 느낀다면 좋아요도 누를 수 있습니다
본 프로젝트는 CI/CD 자동화 및 테스트 코드, 예외 처리 학습목적을 위한 목적으로 개발합니다
기술 스택
- Java 17
- Spring Boot 3.4.4
- Spring Web
- Spring Data JPA
- Spring Validation
- MySQL Driver
- Lombok
- JUnit5
- Swagger
주요 기능
게시글 기능
- 게시글 등록 (제목,작성자,내용을 포함)
- 게시글 전체 조회
- 게시글 단건 조회
- 게시글 수정
- 게시글 삭제
- 게시글 좋아요 (좋아요 수 증가)
댓글 기능
- 댓글 작성
- 댓글 목록 조회
- 댓글 수정
- 댓글 삭제
ERD

개발 목표
- RESTful API 설계
- @Valid와 @ControllerAdvice를 활용한 유효성 검사 및 예외 처리
- 계층별 테스트 코드 작성 방법
- CI/CD 자동화 배포 작업
- CORS 개념 및 해결 방법
프로젝트 생성
현재 IntelliJ Ultimate 버전을 사용하고 있어 Spring Boot 프로젝트를 쉽게 만들 수 있는 툴을 사용하여 프로젝트를 생성합니다
프로젝트 이름과 빌드 도구 자바 버전을 지정하고 다음을 눌러 의존성을 추가합니다

Spring Boot 버전은 3.4.4 버전을 사용합니다
프로젝트에 사용할 의존성은 다음과 같습니다
- Spring Web
- Spring Data JPA
- MySQL Driver
- Validation
- Lombok
- JUnit5 (기본으로 포함)
- Swagger (적접 추가 예정)

Spring Boot 프로젝트를 생성하고 실행시키면 에러가 발생하게 됩니다

데이터베이스 의존성을 사용하는데 데이터베이스 연결 설정을 찾지 못해서 발생되는 에러 메시지입니다
application.properties에 DB 설정을 해주면 됩니다
application.properties
spring.application.name=OpenBoard
spring.config.import=optional:dotenv://
# MySQL 데이터베이스 연결 정보
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hibernate가 MySQL 8 버전에 맞는 SQL 문법을 생성
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
# 테이블 삭제후 엔티티 기반으로 생성
spring.jpa.hibernate.ddl-auto=create
# SQL 실행 로그 출력
spring.jpa.show-sql=true
# SQL을 가독성 있게 출력
spring.jpa.properties.hibernate.format_sql=true
민감한 정보를 환경변수 파일로 관리
데이터베이스 연결 정보를 보면 변수명으로 설정되어 있는 걸 볼 수 있습니다
환경변수 파일에 값을 저장하고 application.properties에서 변수를 통해 값을 사용하게 됩니다
# MySQL 데이터베이스 연결 정보
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
1. 환경변수 파일 생성
resources/properties 경로에 env.properties 파일 생성

env.properties
DB_URL=jdbc:mysql://localhost:3306/(스키마 이름)?serverTimezone=UTC&characterEncoding=UTF-8
DB_USERNAME=(유저 이름)
DB_PASSWORD=(패스워드)
.gitignore
env 파일을 .gitignore에 추가하여 git에 포함되지 않도록 설정

2. Spring Boot에 환경 변수 파일 연결
config 폴더 생성 후 PropertyConfig.java 생성

PropertyConfig.java
package com.domain.openboard.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
@Configuration // 설정 클래스 Spring이 클래스를 Configuration으로 인식하여 Bean 등록 등을 처리
@PropertySources({ // 여러 개의 프로퍼티 파일을 한 번에 불러올 수 있게 해주는 애너테이션
// classpath 하위의 properties/env.properties 파일을 불러오겠다는 설정
@PropertySource("classpath:properties/env.properties")
})
public class PropertyConfig {
}
MySQL 스키마 생성
MySQL에서 연결하려는 스키마가 존재하지 않으면 애플리케이션 실행 시 설정 오류가 발생됩니다
그러므로 설정했던 스키마를 MySQL에서 생성해줘야 합니다

스키마 이름은 openboard라고 작성했습니다

Apply를 눌러 스키마 생성 완료

애플리케이션 실행 시 정상 작동하는 걸 확인할 수 있습니다
프로젝트 GitHub와 연동하기
프로젝트를 관리하기 쉽게 GitHub와 연동하여 사용합니다
먼저 GitHub에 repository를 생성합니다

다음과 같이 README 파일도 포함시켜 생성했습니다

다시 인텔리제이로 돌아와서 git - 원격 관리를 눌러 Git 원격에서 + 버튼을 눌러 원격 저장소를 로컬 저장소와 연결해 줍니다

URL은 깃허브 repository에서 Code를 눌러 확인할 수 있습니다

원격 저장소는 README.md 파일을 포함하고 있기 때문에 Pull 작업으로 로컬 저장소를 최신화 작업을 해야 합니다
이런 최신화 작업이 이뤄지지 않은 상태에서 Push 작업 시 충돌 때문에 에러가 발생됩니다

Pull 작업이 이뤄지면 로컬 저장소에도 README.md 파일이 추가된 걸 볼 수 있습니다
Commit & Push

커밋 탭으로 이동해서 커밋 메시지를 작성하고 Push 작업을 통해 원격 저장소에 프로젝트를 업로드해 줍니다

다시 한번 원격 저장소에 올리 파일을 확인하고 푸시 버튼을 눌러줍니다

GitHub repository를 보면 Push한 프로젝트가 잘 업로드된 걸 볼 수 있습니다
'구름톤 유니브 스터디' 카테고리의 다른 글
| [구름톤 유니브] Spring 커뮤니티 게시판 JUnit 프레임워크를 활용하여 테스트 코드 작성하기 (0) | 2025.03.31 |
|---|---|
| [구름톤 유니브] Spring 커뮤니티 게시판 @RestControllerAdvice 기반 전역 예외 처리 구조 설계 구현 (0) | 2025.03.30 |
| [구름톤 유니브] Spring 커뮤니티 게시판 validation을 이용한 유효성 검사를 구현 (0) | 2025.03.30 |
| [구름톤 유니브] Spring 커뮤니티 게시판 CRUD 만들기 2 (조회,수정,삭제 기능 제작) (0) | 2025.03.30 |
| [구름톤 유니브] Spring 커뮤니티 게시판 CRUD 만들기 1 (엔티티 생성,게시글 작성 기능) (0) | 2025.03.29 |