이번 주에 처음으로 프론트와 협업을 진행했다.
간단한 미니 프로젝트로 CRUD 구현해서 통신해보는게 목표였다.
겪었던 어려운점들을 기억나는대로 적어보려한다.
이 전까지 나만 알아보면 쉬운 api를 설계하였고 erd또한 진행하면서 자주 수정하는 방향으로 진행했었다. 그러나 막상 기획이 시작되고 서로의 방식을 모르는 상태로 api 명세서를 작성하려니 통일성도 없고 뭐가 필요한지, 뭐가 중요한지를 잘 몰랐었던 터라 설계자체가 까다로웠다.
다음에 설계를 하게 된다면 머릿속에 구조를 먼저 그리고 일관된 형식과 필요한 정보 위주로 설계해야겠다는 생각이 들었다.
위와 비슷한 경우로 프론트와 데이터 전송 테스트 시에 명확하게 오류를 알려줄 수 있는게 중요했었 던 것 같다. 우리도 나름 꼼꼼히 예외처리를 했다고 생각했지만 발생 필드를 정보가 노출되지 않는 선에서 명시해 준다던지, 발생할 수 있는 예외를 미리 생각하여 같은 종류 끼리 잘 정리를 해놓는 다던지 의 아쉬운 점이 있었다.
모든 테스트에서 로깅을 해놓았다면 어느부분에서 문제가 발생하는지 보다 쉽게 알 수 있었을 것 같다. slf4j ? 에 대해 좀더 알아보고 공부해 봐야겠다.(어떻게 사용되는 지)
cors에 대해 처음 알게되고 이해하게 되었다. 이번에는 통신이 되는게 우선인지라 모든 cross origin 을 허용하여 진행했는데 다음에는 필요에 의해서 원하는 origin과 method를 설정할 수 있도록 노력해봐야겠다. (어노테이션 두개 꼭 붙여야하는지와 cors().쪽에 객체 넣는거 확인해보자
access토큰이 만료되었을 때 다시한번 프론트에서 api요청을 보낼 수 있다면 재발급 기능을 남겨두는 것도 괜찮은 것 같다. 또한 재발급 시 리프레쉬 토큰을 어떻게 관리할 지, 로그아웃 시 어떻게 토큰을 삭제할 지 (아마 access에 대해서는 쿠키에서 삭제되도록 프론트에서 해주는 것이 맞는 것 같고) 에 대한 고민을 더 해봐야 할 것 같다.
추가로 access 검증 시 유효기간 지났을 시만 재발급 해주는 기능도 까먹지말고 추가해보자
시큐리티에서 인증객체 넘길 때 권한도 설정하여 넘겨주고 권한에 대한 accessDenied 도 다루어 보았으면 좋았을 것 같다.
실전에는 반드시 사용할 테니 꼭 다시한번 보자
찾아 봤을 때는 Pageable 객체를 이용하고 프론트에서 값을 일정하게 증가하도록 넘겨주면 될 것 같았는데 꼭 구현해 보자
Http 에서 Https 변환하는 과정에서 애를 먹었다. 발표직전이라 시간이 없기도 했지만 Http 등에대해 조금더 공부하자 (영한님 HTTP 틈날 때 마다 보자)
무중단 배포 꼭 구현하자 , 그 외에도 실시간 알림 등 다양한 기술들을 미리 생각해보자!!
(지난 기수 최우수 실전)
https://github.com/pnci1029/hanghae_8D_BE/blob/master/src/main/java/com/example/checkcheck/controller/ArticleController.java
이번에는 다른 팀원이 배포하고 관리하여 많이 익숙해질 시간이 없었다. 한번더 구조를 정리해볼 필요가 있겠다.
S3는 구현해 놓은 코드 및 블로그 참고하여 구현하면 문제 없을 것 같다.
폼데이터로 이미지를 받을 때 RequestParam으로 받아왔는데 항목별로 받아올 수 도있겠지만
Json을 String으로 받아 파싱하여 Dto에 담을 수 있는 방법? 혹은 이전 기수에서는 그냥 Dto로 받았는지 확인해 볼 필요가 있겠다.
로컬 브랜치 관리 및 Main 브랜치 관리방식에 미숙하여 애로사항이 조금있었던 것 같다.
또 터미널로만 했었는데 인텔리제이의 git 기능을 이용해보니 더 직관적으로 다양한 기능을
이용할 수 있었다. 팀원들에게 많이 배웠다.
그리고 중간에 꼭 머지하고 브랜치 삭제하고 다시시작하는 방식도 괜찮을 것 같다.
리턴을 해줄 경우 ResponseEntity나 ResponseDto를 통일적으로 사용하는 방법도 괜찮을 것 같다.
포스트맨 변수설정 및 각종 기능에 대하여 조금은 알 필요가 있을 것 같다.
윤서님의 성실함을 배우자
다음 클론 때 나 실전 때 자료구조를 활용하여 효율적인 사용을 할 수 있도록 고민해 봐야겠다.
이왕이면 컬럼이름도 직접 명시적으로 지정해주면 좋을 것 같다 (카멜케이스 알아서_로 변환해준다)