Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

api version library 적용 #84

Merged
merged 14 commits into from
Nov 13, 2023
Merged

api version library 적용 #84

merged 14 commits into from
Nov 13, 2023

Conversation

GIVEN53
Copy link
Member

@GIVEN53 GIVEN53 commented Nov 11, 2023

Changes 📝

  • 라이브러리 구현
  • 라이브러리 적용
  • deprecated 코드 제거

Details 🌼

API version library

https://github.com/GIVEN53/api-versioning-library
자세한 구현 내용은 링크에서 확인할 수 있습니다!

API 스펙이 변경될 경우 (ex. request body, end point, ...) 이전 메서드는 남겨두고 새로운 메서드에 @ApiVersion("1")와 같은 어노테이션을 추가하면 돼요
클래스, 메서드 모두 적용할 수 있고 둘 다 있을 경우 메서드에 있는 어노테이션이 우선됩니다.

현재 api 버저닝이 하나도 되어 있지 않아서 쿼카와 협업해서 하나씩 전환해야 해요
과도기 상태라 controller class, SecurityConfig에 중복된 코드가 많은데 전환이 끝나면 모두 제거될 예정입니다

추가로 버저닝된 api는 테스트가 없어서 SonarQube 실패해요 엔드포인트 변경때문에 13개의 테스트 클래스를 모두 손보기가 좀 그래서 냅뒀습니다! 작동 여부는 다 확인했기 때문에 prod 선반영하고 전환 마무리되면 테스트 수정하면 될 것 같아요

고민

  • 현재 하나의 컨트롤러에 버전마다 메서드를 두는 형태로 구현했지만 클래스를 아예 버전마다 분리할지
  • 컨트롤러와 서비스 간의 N:M 관계 때문에 커플링이 증가하면 Mediator 패턴 적용

모두 전환 후 할 일

  • 버저닝 안된 이전 api 코드 제거
  • @ApiVersion 클래스 레벨로 이동
  • SecurityConfig 수정
  • Controller Test 수정

Check List ☑️

  • 테스트 코드를 통과했다.
  • merge할 브랜치의 위치를 확인했다. (main ❌)
  • Assignee를 지정했다.
  • Label을 지정했다.

@GIVEN53 GIVEN53 added the feature 기능 label Nov 11, 2023
@GIVEN53 GIVEN53 self-assigned this Nov 11, 2023
*/
@Deprecated(since = "1.4.0")
Copy link
Contributor

@13wjdgk 13wjdgk Nov 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

만드신 라이브러리 리드미를 확인했지만 설명이 더 추가되면 좋을 것 같아요 ~
필요한 이유와 https://github.com/apiversion("1") 어노테이션이 어떤 역할을 하는지 정도만 간단히 정리해두면 좋을 것 같습니다. 😄

@apiversion("1")을 추가한 아래 loginKakaoV1 메서드와 동일한 기능을 제공하는데 decrecated 시키는 이유가 궁금해요 ! decrecated 시키지 않고, @apiversion("1")으로 변경하는 건 어떨까요 ?

아래 loginNaver,reissue 등 모든 메서드 포함!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모든 컨트롤러의 모든 메서드가 2개씩 존재해요
전부 중복으로 생성한 이유는 현재 안드로이드에서 버전없는 api를 바라보고 있고 해당 api에 바로 수정이 이루어질 경우 서버가 업데이트됐을 때 싱크가 맞지 않기 때문이에요 따라서 쿼카가 엔드포인트 변경을 모두 마치면 @Deprecated 어노테이션이 적용된 메서드는 삭제될 겁니다
앞으로 서버에서의 api 스펙 변경은 /api/v1/..., /api/v2/... 식으로 버저닝을 통해 관리됩니다
예를 들어 안드로이드에서 /api/v1/user/signup 엔드포인트와 연결되어 있고 서버에서 해당 api 스펙에 수정이 발생할 경우,/api/v2/user/signup에 수정 사항을 반영하고 두 엔드포인트를 같이 운영해서 안드로이드의 업데이트와 관계없이 서버를 배포해요 안드로이드에서 v2로 업데이트를 완료하면 v1은 삭제합니다

@@ -15,11 +16,11 @@
* @since 1.1.0
*/

@EnableScheduling
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 ) @EnableScheduling 어노테이션이 DangjangApplication 클래스에 추가되어 있는데, 다시 추가하신 이유가 궁금해요 !

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메인 클래스에 있는 것을 옮긴거에요!

Copy link
Contributor

@13wjdgk 13wjdgk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고했어요 테오 ~

@GIVEN53 GIVEN53 merged commit 904caed into dev Nov 13, 2023
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 기능
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants