클론코딩 프로젝트
2023.07.21~30. newneek 클론코딩
개발하면서 어려웠던 점
- 이번에도 협업이 가장 어려웠다!
- 엔티티나 API 명세서를 따르지 않고 내용을 수정했을 경우 팀원에게 서로 알려줘야하는데 그러지 않아서 병합충돌이 많이 발생했다.
- 응답 처리 방식, 프로젝트 폴더 구조, 코드 스타일 등을 처음에 확실하게 정리하고 협업을 했어야하는데 그렇지 않아서 나중에 리팩토링을 해야했다.
트러블 슈팅
Github Action으로 CI/CD
참고자료1
참고자료2
- github action을 통한 자동 배포: github action으로 빌드 후 이미지를 docker에 저장, 저장한 이미지를 AWS EC2 서버에 올리는 방법을 사용.. 15번 만에 성공적으로 배포를 하긴 했으나 서버에서 mysql 권한 거부 에러가 뜨면서 실행되지 않음...ㅠ
발생에러1
Error: Gradle script '/home/runner/work/back-end/back-end/gradlew' is not executable.
해결방법
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew
발생에러2
ec2에서 도커 이미지를 실행시키니 스프링에서 뜨는 에러...ㅠ
java.sql.SQLException: Access denied for user 'admin'@'172.31.46.103' (using password: YES)
시도
권한도 줘봤으나 그대로 였다...ㅠ
GRANT ALL PRIVILEGES ON *.*TO 'user_id'@'%' IDENTIFIED BY 'user_password' with GRANT OPTION;
refresh 토큰 추가: redis 적용
참고자료1
참고자료2
참고자료3
- redis 적용해 리프레쉬 토큰 저장: 도커를 사용해 설치, 로컬 & 서버 모두 적용 성공, 저장/업데이트/삭제 성공
필터 예외 처리
참고자료
- 필터 예외 처리: JwtFilter들에서 발생하는 Custom Exception을 Catch하고 처리할 JwtExcetpionHandlerFilter를 구현하였고, JwtExcetpionHandlerFilter에서는 ObjectMapper를 통해 OutputStream에 ApiResponsedto 객체를 적용하여 통일된 양식으로 Response가 전달될 수 있도록 구현함
회고
- access 토큰 재발급을 api로 처리해보기
- 테스트 해보기
기술매니저님 피드백
- BE
- 실전프로젝트에서는 CI/CD 해보기
- redis를 왜쓰는지 생각해보기
- 실전프로젝트에서는 Oauth 꼭해보기
- 수정될때, 이전값과 수정된 값을 모두 반환해주는 것도 고려해줘야함
- DB에는 null은 안들어가는게 좋음!!!
- 프로젝트 구조(패키징)
- 패키징은 병렬적으로 하는 게 좋음
- mypage는 entity이름이 아니라서 이질적임
- member내에서 mypage를 서비스 분리만 해줘도 될듯
- 공통
- git commit, issue, PR, wiki 잘 써보기
- 트러블슈팅이나 기술적 의사결정 등은 위키에 적는것도 좋아보임
- 서비스 소개, API, ERD, 아키텍처, 트러블슈팅
- 기획단계에서 노션에서, 배포후에는 swagger로
- 포트폴리오로는 보여주는 부분으로는 리드미 좋음
- 협업툴: 슬랙, 노션 → 가장 많이 씀