포폴/JPABlog
JPA 블로그 게시판
slown
2023. 3. 4. 01:35
게시판 만들기(블로그)
목차
1.만들게 된 이유
2.개요
3. 목표
4.DB ERD
5.프로젝트 아키텍처
6.api 문서
7.구현 및 트러블 슈팅내용
8.회고
1.만들게 된 이유
JPA를 배우게 되어서 공부하고 적용을 하기 위해서 간단하게 블로그를 만들어보고 추가적으로 새로운 기술을 적용하기 위해서 만들게 된 프로젝트입니다.
2.개요
- 프로젝트명: jpapractice
- 개발 인원: 1인
- 개발 기간: 2022.09.12~2023.08.20
- 주요기능
- 게시판 - crud 기능, 페이징,검색, 조회수,파일 업로드/다운로드,게시글 좋아요, 해시태그, 실시간 알림
- 사용자- 회원가입 , 로그인 및 로그아웃 , 회원 수정 ,회원 탈퇴, 아이디 중복처리, 회원 검색
- 댓글 - 댓글 목록, 댓글 작성, 댓글 삭제
- 관리자 - 게시글 관리, 댓글 관리, 방문자수 관리
- 개발언어:JAVA 17
- Back-end:Spring boot 2.6.6 ,Spring Data JPA ,Query Dsl,Spring Security,Redis,Jwt
- Front-end : Theymleaf ,jQuery
- DataBase: MariaDB
- Test : Junit5
- Etc: Postman, GitHub
- Deploy : Aws ,S3,RDS, GithubAction
3.목표
- myBatis가 아닌 JPA를 사용
- 테스트 코드를 작성해서 견고한 코드를 작성하기.
- 스프링 시큐리티를 사용하고 jwt를 활용한 로그인 기능
- QueryDsl을 활용해서 검색 쿼리를 작성해 보기.
- Redis를 활용해서 DB와의 접근을 줄이면서 조회 속도를 개선해 보기.
- AWS를 활용해서 직접 배포해 보기.
- CI/CD 툴을 사용해서 수동 배포가 아닌 커밋을 하면 자동으로 빌드를 하고 배포를 하게끔 하기.
4.ERD
5.프로젝트 아키텍처
6.Api 문서
포스트맨 api 문서 : JpaBlog (getpostman.com)
JpaBlog
# Introduction jpa 블로그에 관련된 api 명세서입니다.
documenter.getpostman.com
7.구현 및 트러블 슈팅
- Jwt를 활용한 로그인 구현
- Redis Global Cache로 조회성능 향상시키기
- JPQL에서 QueryDSL을 활용한 동적쿼리 작성
- 게시글 조회수에서 발생한 동시성 제어하기
- AOP를 사용해서 공통로직을 리팩토링하기
- SSE로 실시간 댓글 알림기능 구현하기
8.회고
- 처음에 jpa를 배운다고 해서 가볍게 게시판 crud기능만 붙여서 몇 주만에 끝낼 생각이었는데 개별적으로 공부한 내용을 붙이면서 제작기간이 기하급수적으로 늘어났다. 지난 번에 만들었던 포트폴리오에서도 만드는데 기간이 오래걸렸었는데 이 부분에 대해서는 반성을 해야 되는 부분이다.
- 이전에는 단순히 기능을 구현하기 위해서만 코드를 작성을 했는데 테스트 코드를 알게 되면서 기능을 구현하기 전에 내가 의도한대로 코드가 제대로 구현이 되는지 그리고 에러가 발생했을 경우 의도한 에러가 나는지를 확인을 해서 성공하는 케이스와 실패를 하는 케이스를 구별을 해서 좀더 견고하게 코드를 작성을 할 수 있었습니다.
- 성능측정을 해보면서 내가 작성한 코드가 작동은 잘 되지만 어떻게 하면 좀 더 원활하게 잘 움직일수 있는지를 고민을 해볼수 있는 기회였습니다.
- Mybatis에서는 쿼리에 매핑만 하면 별 어려움 없이 진행이 되었지만 엔티티간의 연관관계를 이해하면서 적용해야 되는 점에서 마냥 쉬워보였던 JPA였는데 생각보다 데이터베이스의 공부가 많이 부족한 점이 많아서 데이터 베이스 공부를 해야겠다는 생각이 많이 들었고 jpa를 사용하면서 스트림을 사용하게 되었는데 사용을 많이 해보지 않아서 처음에 코드를 작성할 때 많이 애를 먹어서 자바공부를 하는 좋은 계기 되었습니다.
- 소규모 프로젝트였지만 기능에 대한 성능을 올리는 방법으로 캐싱을 알게 되었고 Redis를 사용해서 반복되는 데이터의 조회를 줄임으로서 디비의 부하를 줄일 수 있었고, 게시글 조회수를 통해서 경쟁상태와 동시성에 대해서 알게 되었고 동시성을 제어하기 위해서 데이터베이스의 락과 쓰레드에 대한 개념에 대해서 알게 되었습니다.
- AWS와 CI/CD 파이프라인 구축 프로세스를 통해 추후 유지 및 보수에 용이한 서버 아키텍쳐를 구축함으로써 무중단 배포와 같이 서버 환경 운영에서의 이슈들을 해결할 수 있는 역량을 기를 수 있게 되었습니다.
Github
https://github.com/well0924/jpapractice
GitHub - well0924/jpapractice: jpa 게시판
jpa 게시판. Contribute to well0924/jpapractice development by creating an account on GitHub.
github.com