프로덕트

아직 프로덕트가 없습니다.

아티클

전체 보기
이시은

이시은

백엔드스터디 회고록

🗂 프로젝트 개요

  • 프로젝트 명: 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

https://backendteamb.site/api/posts/1

https://backendteamb.site/api/posts/popular (인기순정렬


🙋 회고 한 줄 요약

이번 프로젝트를 통해 실전 백엔드 개발과 배포의 전체 흐름을 처음부터 끝까지 직/간접적으로 경험할 수 있었다.

1
0

포스트

아직 포스트가 없습니다.