이시은
🗂 프로젝트 개요
프로젝트 명: CRUD 게시판 인기 기능 서비스(redis 캐싱 적용)
진행 기간: 2025.06.22-2025.07.06
사용 기술 스택: Spring Boot, JPA, MySQL, Docker, AWS EC2, GitHub Actions, ...
간단 설명:
Spring Boot 기반의 게시글 API 서버입니다. Redis 캐싱을 활용한 인기 게시글 조회 기능과, Docker + GitHub Actions + EC2 배포를 구성했습니다.
🧩 주요 기능
[ ] 회원가입 / 로그인 (JWT)
[ ] 인증/인가 처리
[x] CRUD 기능 (예: 게시글, 상품 등)
[ ] 관리자 기능
[ ] 외부 API 연동 (예: GPT, SUNO)
[ ] Swagger 연동
[x] CI/CD (GitHub Actions → EC2)
[x] Docker + HTTPS 배포
[ ] 기타:
📁 프로젝트 구조
📦project-root
┣ 📂domain (Post)
┣ 📂dto (PostForm)
┣ 📂controller (PostApiController, RootController)
┣ 📂service (PostService)
┣ 📂repository (PostRepository)
┣ 📂config (RedisConfig)
┗ 📜Application.java SpringBootApplication 시작점
🛠 트러블슈팅 & 기술 이슈
1. 이슈 제목 (ex: Swagger 500 오류 발생)
현상: 기존에 글을 작성하면 views값이 자동으로 0으로 초기화 되지않아서 생성 시도 시, 400 에러 발생
MethodArgumentNotValidException: Validation failed ...
Field error in object 'articleForm' on field 'views': rejected value [null];
default message [Failed to convert value of type 'null' to required type 'int']
원인 분석:
views 필드가 int (원시형)인데, HTML <form>에서 값이 아예 전달되지 않아서 Spring이 null을 int로 바꾸지 못하고 예외 발생
즉, views 값이 <form>에서 넘어오지 않으면 → null → 그런데 Java 원시형 int에는 null이 들어갈 수 없음 → 400 Bad Request 발생
기존에 설정은 Default값이 0으로 잘 설정되어있는 것을 볼 수 있었다. (mysql, db에서 확인)
mysql> SHOW COLUMNS FROM article LIKE 'views';
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| views | int | YES | | 0 | |
+-------+------+------+-----+---------+-------+
근데 딱 보면 NULL값이 허용되도록 정해져있었다... not null 속성이어야한다!
그래서 추가해주었다
해결 방법:
기존 int views로 선언했던것을 Wrapper클래스로 선언해주었다.
private Integer views로 수정하였다.
Wrapper 클래스.
2. (사실 대부분의 오류는 배포에서 발생할텐데,, 배포를 제가 안했습니다.)
🤔 아쉬웠던 점
팀프로젝트라 각각 배포를 하지 않아, 코드만 작성하였었다.
배포과정에서 겪는 어려움이 많을 텐데, 이후에 따로 해보고싶다.
✨ 좋았던 점 & 성장 포인트
전체적인 로직을 구성해볼 수 있었음
API명세서를 작성하는 방법을 실제로 익힐 수 있었음.
*새로 배운 어노테이션
@PrePersist:db 저장(insert) 직전에 자동으로 실행된다. 즉, 엔티티 생성시점에 자동으로 값 초기화된다.(글을 작성할때, 제목, 내용, 저자만 써서 submit 눌렀을 때 시점에 자동으로 시간값초기화되는 것!)
💡 다음 프로젝트에 적용할 것들
배포해보기
게시판 프론트 까지 해서 예쁘게 만들어보기
게시글/코멘트 공감/비공감 및 코멘트에 생성시각 추가하기
📸 화면 예시 or Swagger 캡처
https://backendteamb.site/api/posts
🙋 회고 한 줄 요약
이번 프로젝트를 통해 실전 백엔드 개발과 배포의 전체 흐름을 처음부터 끝까지 직/간접적으로 경험할 수 있었다.
