-
이 프로젝트는 무엇인가요?
- 이 프로젝트는 회원가입 및 로그인 후, 자유게시판에서 게시글을 작성하거나 질문 게시판을 통해 궁금한 점을 물어볼 수 있는 커뮤니티 형태의 게시판입니다.
- 댓글을 통해 사용자 간 의견을 공유할 수 있으며, 비회원도 게시글 및 댓글을 조회할 수 있습니다. 하지만 작성 및 삭제 권한은 회원에게만 부여됩니다.
-
왜 만들었나요?
- 단순한 게시판 기능 구현을 넘어, 프로젝트를 진행하면서 새롭게 적용하는 내용은 학습하고 기존에 알고 있던 내용을 복습하고, 부족한 부분을 보완하는 데 초점을 맞췄습니다.
- 특히, 실제 운영 환경에 배포 후 발생하는 문제를 개선하고, 쿼리 성능 최적화, 인덱스 튜닝, DB 백업 및 복원 등 비기능적 요구사항(NFR, Non-Functional Requirements) 을 고려하며 프로젝트를 진행하였습니다.
-
어떤 문제를 해결했나요?
1. MyBatis에서
keyProperty가 정상적으로 인식되지 않는 문제- 문제:
INSERT쿼리를 실행할 때, 여러 필드를 개별적으로 파라미터로 전달하면keyProperty="id"옵션이 정상적으로 동작하지 않는 문제가 발생함.
- 해결 방법:
- 필드들을 개별적으로 전달하는 대신, 객체 단위로 파라미터를 전달하는 방식이 더 안정적임.
- MyBatis에서
keyProperty를 정상적으로 인식하려면 객체로 파라미터를 전달하는 것이 권장됨.
2.
created_at컬럼이NULL로 조회되는 문제- 문제:
post테이블에서created_at값을 조회했을 때, DB에는 데이터가 존재하지만 Java 객체에서는NULL로 반환되는 문제가 발생함.
- 해결 방법:
datetime타입이 Java의LocalDateTime필드와 정상적으로 매핑되지 않는 경우, MyBatis의resultMap을 사용하여 명시적으로 매핑해야 함.resultMap을 설정하여 Java 객체와 DB 컬럼 간 타입 매칭을 정확히 지정하여 해결함.
3. EC2 배포 후 게시글 작성이 안 되는 문제
- 문제:
- 로컬에서는 게시글 작성이 정상적으로 동작하지만, EC2 서버에서는
INSERT가 실패하는 문제가 발생함.
- 로컬에서는 게시글 작성이 정상적으로 동작하지만, EC2 서버에서는
- 원인:
- 로컬과 EC2의 데이터베이스 문자셋(charset) 설정이 다름.
- 로컬 DB:
utf8mb4 - EC2 서버 DB:
latin1(인코딩 불일치)
- 해결 방법:
- EC2의 데이터베이스 문자셋을
utf8mb4로 변경하여 로컬과 일치시킴.
- EC2의 데이터베이스 문자셋을
4. GIthub Action 적용 중 실수로 ssh키를 노출한 문제
- 문제:
- GitHub Actions 설정 중 실수로 EC2 접속용 SSH 프라이빗 키가 노출되는 실수가 발생함.
- 노출된 키는 누구나 EC2에 접근할 수 있는 위험이 있기 때문에 즉시 조치가 필요했음.
- 원인:
- GitHub Secrets을 설정하는 과정에서 SSH 프라이빗 키를 실수로 노출함.
- 해결 방법:
- 기존 SSH 키 폐기 및 새로운 키 생성
- AWS Systems Manager Session Manager를 통해 EC2 서버에 접속 후, EC2 내부에서
~/.ssh/authorized_keys파일을 수정하여 새로운 SSH 키 적용.
- 문제:
- ✅ 게시글 CRUD (작성, 수정, 삭제, 조회)
- ✅ 카테고리 분류 및 필터링 (공지사항, 자유게시판, 질문게시판)
- ✅ 검색 기능 (게시글 제목, 내용 검색, 사용자의 닉네임 검색, 게시글의 댓글 검색)
- ✅ 좋아요 기능 (게시글에 좋아요 클릭 가능)
- ✅ 회원가입 및 로그인 (Spring Security 기반 세션 방식)
- ✅ 비회원 제한 (비회원은 조회만 가능, 작성 및 삭제는 불가)
- ✅ 댓글 기능 (작성, 수정, 삭제)
- Backend: Java, Spring Boot, MyBatis
- Frontend: Thymeleaf, JavaScript
- Database: MariaDB
- Infra: AWS EC2
- CI/CD: GitHub Actions
- JDK 17+
- MariaDB 10.5+
- Gradle 8.11+
- 설정 파일 (
application.yml) 추가 필요
# 1️⃣ 프로젝트 클론
git clone https://github.com/your-repo/PostProject.git
cd PostProject
# 2️⃣ MariaDB 실행 확인 및 데이터베이스 설정
# MariaDB가 실행 중인지 확인 후, 실행되지 않았다면 실행
sudo systemctl start mariadb # (Linux)
brew services start mariadb # (Mac)
# 3️⃣ 데이터베이스 및 테이블 생성 (필요 시 변경)
mysql -u root -p -e "CREATE DATABASE post_project DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 4️⃣ DB 스키마 및 초기 데이터 적용
mysql -u root -p post_project < src/main/resources/schema.sql
mysql -u root -p post_project < src/main/resources/data.sql # (초기 데이터가 있는 경우)
# 5️⃣ 프로젝트 실행
./gradlew build && SPRING_PROFILES_ACTIVE=prod ./gradlew bootRun