Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

블로그 이름 뭐하지

[프로젝트]Team.11_JPA를 활용한 OutSourcing 구현 본문

카테고리 없음

[프로젝트]Team.11_JPA를 활용한 OutSourcing 구현

가는말이고우면오는말은come 2024. 11. 7. 21:20

관련한 링크 및 자료

#1 프로젝트 발제 노션

 

[Spring 3기] 아웃소싱 프로젝트 | Notion

1️⃣ 발제 영상 자료

teamsparta.notion.site

#2 팀 노션 페이지

 

11조 | Notion

4. 와이어프레임

teamsparta.notion.site

#3 프로젝트 깃허브 / 발표 시 사용한 PPT

 

GitHub - out-sorucing/out-sourcing

Contribute to out-sorucing/out-sourcing development by creating an account on GitHub.

github.com

프로젝트2.pdf
0.80MB

 


프로젝트 진행 (24.11.01-07)

24-11-01 24-11-04 24-11-05 24-11-06 24-11-07
팀 인사 후 서류 작성 및 역할 분배
(API 명세, ERD, 와이어 프레임)
필수과제
코드 작성
도전과제
코드 작성
팀 테스트 및 더미데이터 작성, 코드 수정 및 테스트 코드 작성 최종 수정 및 팀 발표
(ReadMe, 발표 시연 영상, PPT 준비)

 

진행 과정에서의 문제

  • 당일날 발표 자료를 준비했기 때문에 미흡한 점이 많았다.(특히 PPT)
     발표자료는 최소한 그 전날 준비하는 것으로 한다. 또한 발표 문서에는 API 명세, ERD, 와이어프레임(와이어 연결을 빼먹지 않도록 주의), 트러블 슈팅이나 회고, 각자 어려웠던 코드, 구현하기 힘들었던 것, 특별히 신경썼던 것을 함께 집어넣는 것을 생각하자.
  • JWT 토큰을 쿠키가 아닌 Header에 넣어 테스트를 하는데 효율적이지 못했다.
    쿠키를 사용하면 안전상의 문제가 생길 수 있다고 해서 Header에 넣은 건데, View가 없으니 일일이 넣어야 해서 효율 상의 문제가 생겼다. Refresh 토큰이라는 게 있다는데 그 부분을 사용해보는 것도 좋겠다.
  • 코드 리뷰 시간이 따로 없어 팀원들이 어떤 식으로 코드를 작성했는지 확인하는 것이 어려웠다
    시간이 부족해지더라도 코드 리뷰 시간을 따로 가지는 것이 좋겠다.
  • 트러블 슈팅이나 이슈에 대해 미리 작성해 두지 않아 프로젝트가 끝나고 회고를 할 때 힘들다.
    5분 기록하는 습관을 들여야겠다.

진행 과정에서 좋았던 점

  • 와이어 프레임을 서류 중 가장 먼저 작성 시켜서 API나 ERD를 정하는 데 조금 더 수월했고, 초기에 문서화를 제대로 작성시켜 계획이 변동되는 이슈가 발생하지 않았다.
  • PostMan 공유나 DB공유, 팀 와이어프레임 작성 등 팀원끼리 원활한 쌍방소통이 가능한 프로그램을 많이 사용해 팀 작업이 수월했다.
  • Issue나 Pr, 코드 작성(변수나 메서드명, DTO 사용 등) 관련 컨벤션을 미리 작성해 둬서 편했다.
  • 팀 별 발표를 통해 다른 팀의 기능과 사용한 스킬을 보고 참고할 수 있었다.
  • 지난 프로젝트 팀과 동일하여 팀 간의 소통이나 충돌 해결 방안을 고민할 필요가 많이 없어 좋았다.
  • 지난 프로젝트 때 했던 회원가입 기능을 다시 구현하게 됐는데, 지난 번에 구현하지 못했던 카카오톡 로그인이나, 지적받았던 HttpServlet 문제를 해결하는 ArgumentResolver 기능과 커스텀 어노테이션을 구현할 수 있게 되어 좋았다.
  • 지난 프로젝트에서 했던 메서드 분리문제나 Validation, Errorcode 관리 문제를 해결할 수 있어 좋았다.

개인적인 코드 개선 방안

  • Kakao가 아닌 다른 로그인 방안을 가져올 것을 생각해 Entity에 kakaoId가 아닌 다른 Column을 고안
  • 오픈 시간, 마감 시간, 주문 내역(옵션 추가) 같은 것을 List형태로 (ObjectMapper) 저장하는 것을 고안
  • 아웃소싱 프로젝트때는 도메인 패키지구조를 일반 유저, 관리자, 사장 등으로 나누는 것도 좋다

공부가 필요한 사항

  • DDD, Aggregate 방식
  • N+1 해결방안
  • 이미지 파일 올리는 방식(프리사인드 url)
  • Soft Delete >> @Scheduled 사용(자동 delete) 또는 테이블을 따로 생성
  • HttpServlet 처리 방식>> Header, Cookie, Refresh Token
  • 테스트 자동화
  • Oauth 처리(다른 API 아이디 사용)
  • 테스트 코드와 리졸버 사용

트러블 슈팅

1) 리뷰 조회 시, 다른 url로 들어가는 문제

 

Controller가 구분되지 않아 발생하는 문제였다.

리뷰 전체 조회의 url은 GET/api/stores/{storeId}/reviews

별점 별 리뷰 전체 조회의 url은 GET/api/stores/{storeId}/reviews?rating=으로 설정해 두었는데,

알고보니 RequestParam 형식의 url은 처리가 되지 않아 리뷰 전체 조회 Controller url에 들어가게 된 것이었다.

GET/api/stores/{storeId}/reviews/rating으로 url을 변경하니 정상적인 Controller로 들어갔다.

 

2) index.html, img 파일이 보여지지 않는 문제

 

filter 쪽에서 해당 파일들을 걸러내지 못해 Jwt 토큰이 없다는 에러가 계속 난 것이었다.

html파일과 img 파일은 각각 localhost:8080,  localhost:8080/images 의 경로로 들어가게 되므로,

 url.equal("/") ||  url.equal("/images")로 필터에서 제외했다.

 

3) IllegalArgumentException 에러가 발생할 경우 기존의 에러들처럼 status, code 등으로 반환되지 않는 문제

 

GlobalExceptionHandler를 만들어두었는데, 그 안에 해당 에러코드를 넣지 않아 발생한 문제였다.

▷ 해당 에러코드를 Handler 안에 넣고 실행했더니 정상적으로 작동했다.