/modooary

모두 함께 쓰는 다이어리

Primary LanguageJava

모두어리


모두 함께 쓰는 다이어리, 모두어리는 교환일기 컨셉의 웹서비스입니다


2021-07-07 21 18 12

기술 스택

  • Java, Spring Boot
  • JPA
  • H2 database
  • Thymeleaf
  • JavaScript
  • HTML, CSS

모두어리 프로젝트에서는 새로 공부한 JPA를 이용하는 것을 최우선 목표로 했습니다
프로젝트 빌드와 엔티티 관계도에 사용한 라이브러리와 엔티티 관계도가 있으니,
상세한 개발 내역을 확인하기 전에 먼저 봐주시면 감사합니다
또한, 개발과정 에서 JPA를 통한 엔티티 설계와 서비스 클래스 구현 및 테스트 작성 과정을 보실 수 있습니다


구현한 기능들


각 항목을 클릭하시면 상세 코드와 설명이 있는 개별 마크다운 문서로 이동합니다
항목 밑에 들어있는 구현 기능에 대해 간략이 적어두었습니다
공통으로 거의 항상 들어가는 부분(예: DB CRUD, MVC 패턴 이용, ajax 통신 등..)은 편의상 생략한 항목이 많으나 상세 문서에는 다 적혀있습니다


✉️ 이메일을 통한 회원가입

  • DB CRUD
  • 자바 메일과 gmail smtp 서비스를 이용한 메일 전송
  • url 파라미터를 이용한 메일 인증
  • javascript ajax 통신과 유효성 검증

🤝 로그인과 임시 비밀번호 발급

  • 인터셉터와 세션을 이용한 로그인 처리
  • DB 키워드 검색
  • 자바 메일과 gmail smtp 서비스를 이용한 메일 전송

🙋 내 프로필 수정과 파일 업로드

  • 사용자가 선택한 파일 서버단에 업로드하기
  • 세션값으로 엔티티 조회하고 수정하기

📖 서비스 메인 페이지와 게시글 페이지네이션

  • thymeleaf 템플릿을 이용해 회원에 따라 특정 기능 노출하기
  • 노출된 url 조작을 통한 접근 막기
  • Spring Data JPA의 PageRequest 구현체를 이용한 페이지네이션
  • javascript로 페이지네이션 무한 스크롤 처리하기

📚 모두어리 개설과 수정

  • 엔티티 생성자 이용하기
  • thymeleaf 템플릿을 이용해 회원에 따라 특정 기능 노출하기
  • 세션값으로 엔티티 조회하고 수정하기

✏️ 게시글과 댓글 작성

  • 엔티티 생성자 이용하기
  • ajax로 서버단과 통신해 DB에 데이터 쓰고 조회값 받기

📬 회원 검색과 초대장 주고받기

  • Spring Data JPA 인터페이스를 이용해 조건 검색하기
  • ajax로 서버단과 통신해 DB에 데이터 쓰고 조회값 받기
  • DB 키워드 검색

프로젝트를 하면서

이 프로젝트의 1순위 목적이었던 서비스 분석을 통한 도메인 설계와 JPA 이용하기를 성공해서 좋았습니다
이전 프로젝트와 다른 기술스택을 쓰고 익히는 것이 목표였던 만큼, 진행하며 다음 항목들을 배웠습니다

  1. 서비스를 분석해 도메인을 설계하고 엔티티를 작성
  2. Gradle로 프로젝트 빌드
  3. H2 Database 연동
  4. JPA로 DB CRUD 처리
  5. thymeleaf로 화면단 구성
  6. JavaScript로 화면 제어 및 비동기 통신

이전 프로젝트에서는 MyBatis를 이용했기에, 도메인 연관관계에 대한 개념적인 이해만 있었는데,
JPA에서는 이를 이용해 연관된 엔티티와 정보를 함께 조회하는 등의 실질적인 기능을 만들어 볼 수 있었습니다
그 과정에서 MyBatis를 쓸 때는 몰랐던 순환참조로 인한 무한 쿼리문 실행 같은 문제도 겪어보고 고쳤습니다
다만, Spring Data JPA에 대한 공부가 부족해 Raw JPA로 먼저 만들어 뒀던 부분이 많고 일부만 사용했는데,
Spring Data JPA를 더 심도있게 공부해서 차후 프로젝트에서는 모두 Spring Data JPA를 이용해보고 싶습니다


앞으로의 계획

서비스를 배포할 계획이 없었기에 H2 Database를 이용하였는데,
이 프로젝트나 추후의 개인 프로젝트를 AWS를 이용해 실제 웹 배포를 해보고 싶어졌습니다
또, 팀 프로젝트를 할 때는 서로가 테스터여서 오류를 빨리 찾아내 고칠 수 있었는데,
개인 프로젝트를 하다 보니 생각치 못했던 곳에서 오류가 간간히 나와 꾸준히 수정하며 기록하고 싶습니다