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
- 회원 가입 ✅
- 로그인 (form login과 OAuth login 방식 모두 제공) ✅
- 일지 작성 및 수정 / 삭제 기능 ✅
- 달력으로 일지 표시 ✅
- 공복 혈당 / 식사 혈당/ 평균 혈당 관련 차트 ✅
- 음식 검색 게시판 ✅
- 프로필 및 회원 탈퇴 ✅
- 아이디 ,비밀 번호 찾기 ✅
- 클린코드 리팩토링 (진행중)
- 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%
- 1:N 관계 엔티티 save시 update 쿼리가 추가로 발생 및 전파되는 이슈 해결
- JPA 및 Querydsl 사용 경험 정리
- 도메인 테스트 코드 작성하기
- 컨트롤러 레이어 테스트 코드 작성하기
- 오타에서 안전한 코드 만들기
- 예외 처리
- 스프링 시큐리티 적용하기
- 일지 기능 구현하기
- 배포
- 음식 게시판 페이징 처리하기
- Querydsl BooleanBuilder로 중복 코드 제거하기 리팩토링
- JPA batch insert 실험하기
- save, update 성능 40% 향상
- HTTPS 적용된 것을 Nginx로 무중단 배포해보자.
- 생성 시간 및 수정 시간 dirty check 원인 분석하기
- ec2 중지 후 재기동 시 연결 불가 해결하기
- 클린 코드 적용하기
-
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
-
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"
- Backend
- Frontend
-
데이터 재설계 및 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 [스타트 스프링 부트]