Skip to content

dasd412/RemakeDiabetesDiaryAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Diabetes Diary API Remake

버전 : 1.3.1


웹 사이트 주소

2022/06/08 기준 서버 중지했습니다. (ec2, route 53 등등 기능 중지)

https://www.diabetes-diary.tk/

블로그 주소

제가 어떻게 코드를 설계했고 버그를 해결했는 지 확인할 수 있습니다.

https://velog.io/@dasd412/series/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4


주요 기능

  1. 회원 가입 ✅
  2. 로그인 (form login과 OAuth login 방식 모두 제공) ✅
  3. 일지 작성 및 수정 / 삭제 기능 ✅
  4. 달력으로 일지 표시 ✅
  5. 공복 혈당 / 식사 혈당/ 평균 혈당 관련 차트 ✅
  6. 음식 검색 게시판 ✅
  7. 프로필 및 회원 탈퇴 ✅
  8. 아이디 ,비밀 번호 찾기 ✅
  9. 클린코드 리팩토링 (진행중)

사용 기술

  • SpringBoot
  • JPA
  • MySql
  • Spring Security
  • Junit
  • Mustache, css
  • AWS (ec2, route 53, ACM, rds, code deploy )
  • travis ci [trial plan 만료로 인해 사용 중지]
  • github actions
  • Nginx

사용 라이브러리

  • JavaMail
  • Querydsl
  • chart.js
  • JQuery
  • datepicker.js
  • bootstrap

테스트 커버리지

  • (2022-08-09 전체 패키지 기준)
    • 테스트 총 97개
    • 클래스 커버리지 90%
    • 메소드 커버리지 71%
    • 라인 커버리지 69%

본인 코드 작성 예시 및 설명


API end point

Controller

  • IndexController

    • GET "/" -> 대문 화면
    • GET "" -> 대문 화면
  • LoginController

    • GET "/login-form"
    • GET "/join-form"
  • CalendarFormController

    • GET "/calendar"
  • ChartFormController

    • GET "/chart-menu"
    • GET "/chart-menu/chart/fasting-plasma-glucose"
    • GET "/chart-menu/chart/blood-sugar"
    • GET "/chart-menu/chart/average"
    • GET "/chart-menu/chart/food-board/list"
  • DiaryFormController

    • GET "/post"
    • GET "/update-delete/{diaryId}"
    • GET "/update-delete/404" [circular view path 해결용]
  • ProfileController

    • GET "/profile/view

REST Controller

  • LoginRestController

    • POST "/signup/user"
  • SecurityDiaryRestController

    • POST "/api/diary/user/diabetes-diary"
    • PUT "/api/diary/user/diabetes-diary"
    • DELETE "/api/diary/user/diabetes-diary/{diaryId}"
    • GET "/api/diary/user/diabetes-diary/list"
  • SecurityChartRestController

    • GET "/chart-menu/fasting-plasma-glucose/all"
    • GET "/chart-menu/fasting-plasma-glucose/between"
    • GET "/chart-menu/blood-sugar/all"
    • GET "/chart-menu/blood-sugar/between"
    • GET "/chart-menu/average/all"
    • GET "/chart-menu/average/between"
  • ProfileRestController

    • PUT "/profile/info"
    • DELETE /profile/withdrawal"[회원 탈퇴]
    • PUT "/profile/password" [비밀 번호 변경]
  • FindInfoRestController

    • GET "/user-info/user-name"
    • GET "/user-info/password"

디렉토리 구조


다이어그램

  • ERD erd.png

  • 일지 저장 (프론트엔드) post_front.png

  • 일지 저장 (백엔드) post_back.png

  • 음식 게시판 조회 food_board.jpg

  • 회원 가입 signup.jpg

  • 시큐리티 관련 예외처리 security_exception.jpg

  • 로그인
    login.jpg

  • 배포 다이어그램 deploy.jpg

  • 무중단 운영 다이어그램 Nginx.jpg

  • 쉘 스크립트 요청 캐치 예시 Nginx_shellScript.jpg


진행 상황

  • 데이터 재설계 및 JPA 적용

    • DB 스키마 재설계
    • JPA 연관관계 재맵핑
    • JPA Repository 테스트 코드 작성 및 수행
    • 서비스 레이어 생성
    • JPQL @Query 코드 제거 후, QueryDSL 적용. 기존 테스트를 수행하여 정상 작동하는 지 확인하며 진행
    • 컨트롤러 레이어 생성
    • MockMvc 를 활용하여 컨트롤러 레이어 테스트 수행
    • n+1 문제 최적화 수행
    • 삭제 연산 최적화 수행 [벌크 연산 처리]
    • MySql 연동 완료
    • 삽입 연산 최적화 수행
    • 음식 엔티티에 수량 단위 추가 [요구사항 반영]
    • 중복 QueryDSL 코드 BooleanBuilder로 리팩토링. [BooleanBuider를 활용한 동적 쿼리 생성]
    • 프로필 엔티티 추가 및 작성자 엔티티와 1대1 관계 구성
    • 엔티티 저장 및 수정 코드 최적화 수행 [약 40% 향상]
    • 일지 내용 임시 저장 기능 구현하기(예정)
  • 스프링 시큐리티

    • 일반 회원가입과 로그인 구현
    • OAuth 로그인 및 회원 가입 구현
    • 기존 도메인 테스트에 스프링 시큐리티 적용 [관리자만 접근 가능하도록 변경]
    • 도메인 컨트롤러 매핑 url 에서 작성자 정보 제거하고 세션으로 판단하기
    • 회원 탈퇴 기능 구현 [회원 탈퇴 시 서명 필요]
    • 아이디 찾기 , 비밀번호 찾기 구현
    • JWT 적용 (예정)
    • 공통 메뉴 레이아웃 추가
    • 로그인 폼 추가
    • 회원 가입 폼 추가
    • 작성용 폼 생성 및 ajax 로직 추가
    • 수정 / 삭제용 폼 생성 및 ajax 로직 추가
    • 달력과 연동
    • 검색기능 만들고 그 결과로 차트 생성하기
    • 작성용 폼 더 이쁘게 만들기
    • 음식 검색 게시판 만들기
    • 프로필 기능 추가
  • 배포

    • amazon ec2 인스턴스 생성
    • amazon rds 생성 및 연동
    • aws 내에 jar 배포 완료
    • Freenom 과 aws route 53으로 무료 도메인 얻음.
    • acm 에서 무료 ssl 발급 받음
    • 사이트에 https 적용
    • oauth 로그인 리디렉션 url 변경 (크롬 브라우저 등에서 피싱 사이트 의심 발생. 조치 필요.)
    • travis ci 와 code deploy 를 활용하여 배포 자동화 [master branch 푸시하면 자동 배포됨.]
    • travis ci trial plan 만료로 인해 github actions로 바꾸었다.
    • 보안 상 중요한 properties를 mock으로 만들어 테스트 자동화 진행.
    • HTTPS 적용과 동시에 무중단 배포
  • 문서화

    • Readme
    • 코드 내 주석 처리 [JavaDoc 기준]
    • 다이어그램 작성 및 게시
    • dto에 swagger 입히기 (예정)

개선해야 할 사항

  • 크롬 브라우저 웹 사이트 검수 및 사이트 보안 강화 필요
  • 도커를 맛봤지만, 어떻게 기존 CI CD 구조에 적용해야 할지 모르겠다.
  • OAuth 로그인 처리가 느리다.
  • 일지에서 뒤로 가기 클릭 시, 일지의 달력을 참고해서 이동시키면 유저의 편의성이 더 늘어날 것이다.

참고 서적 [사용 용도]

  • 자바 ORM 표준 JPA 프로그래밍 [JPA 엔티티 설계 및 최적화]
  • 데이터베이스 개론 [정규화 적용]
  • 자바로 배우는 리팩토링 입문 [코드 리팩토링]
  • 자바와 JUnit을 활용한 실용주의 단위 테스트 [단위 테스트 작성법]
  • 스타트 스프링 부트 [게시판]
  • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 [AWS 배포]
  • 클린 코드 [코드 리팩토링]

본인 작성이 아닌 것.

  • /resources/static/vendor/* [colorLib 저작권 ]
  • /resources/static/sidebar-07/* [colorLib 저작권 ]
  • /resources/static/js/calendar/ (calendar.js ,formatter.js, stringBuffer.js) [구글링 코드]
  • src/main/java/com/dasd412/remake/api/controller/security/domain_view/FoodPageMaker [스타트 스프링 부트]