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

[fix] #204 - SuccessReponse 메서드 타입 수정 및 회원 예매 조회 타입 일치 완료 #205

Merged
merged 2 commits into from
Sep 2, 2024

Conversation

hoonyworld
Copy link
Member

Related issue 🛠

Work Description ✏️

  • 이전에는 SuccessResponse 클래스의 of 메서드에서 제네릭 타입을 명시적으로 지정하지 않았기 때문에, 컴파일러는 제네릭 타입을 원시 타입(Raw Type)으로 취급했습니다.
  • 따라서 원시 타입을 사용할 경우, 컴파일러는 타입 검사를 엄격하게 수행하지 않았고, 발생할 수 있는 타입 불일치에 대해 경고만을 제공했습니다.
  • 그러다 이번 기회에 메서드에서 제네릭 타입을 명시적으로 선언하여 컴파일을 해보았고, 다음과 같은 문제점이 있다는 것을 확인했습니다.

기존

  • List와 MemberBookingRetrieveResponse 간의 불일치가 있어도 경고만 발생하고 컴파일은 성공하였습니다.
  • 이유는 원시 타입으로 사용될 때, 컴파일러는 타입 불일치에 대해 경고를 발생시키지만, 이를 컴파일 오류로 간주하지 않기 때문이였습니다.

변경

  • SuccessResponse의 메서드에서 제네릭 타입을 명시적으로 선언했습니다.
  • 따라서 컴파일러에게 “이 메서드는 특정 타입을 정확하게 처리해야 한다”는 신호를 주게 되고, 결과적으로 컴파일러는 반환 타입과 실제 전달된 타입 간의 일치 여부를 엄격하게 검사하게 되었습니다.
  • 따라서 T가 MemberBookingRetrieveResponse로 선언되었을 때 List가 전달되면, 컴파일러는 T와 List 간의 불일치를 발견하고 이를 컴파일 오류로 처리하였고 문제점을 발견하여 해결할 수 있었습니다.

Trouble Shooting ⚽️

Related ScreenShot 📷

타입 일치 후 회원 예매 조회 재실행

image
  • 문제없이 get이 되는 것을 확인했습니다.

Uncompleted Tasks 😅

To Reviewers 📢

@hoonyworld hoonyworld self-assigned this Aug 31, 2024
@hoonyworld hoonyworld linked an issue Aug 31, 2024 that may be closed by this pull request
1 task
@hoonyworld hoonyworld added the fix fix label Aug 31, 2024
Copy link
Collaborator

@hyerinhwang-sailin hyerinhwang-sailin left a comment

Choose a reason for hiding this comment

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

SuccessResponse의 메서드에서 제네릭 타입을 명시적으로 선언함으로써 컴파일러가 반환타입과 실제 전달된 타입의 일치여부를 엄격하게 검사하도록 할 수 있군요! 문제점 발견 및 해결까지 고생하셨습니다👍

@hoonyworld hoonyworld merged commit e2b48bb into develop Sep 2, 2024
1 check passed
@hoonyworld hoonyworld deleted the bug/#204 branch September 2, 2024 05:49
hoonyworld added a commit that referenced this pull request Sep 5, 2024
* [#204] fix(SuccessResponse): 메서드에 제네릭 타입 명시

* [#204] fix(BookingController): 회원 예매 조회 response 타입 일치하도록 수정
hoonyworld added a commit that referenced this pull request Sep 10, 2024
* [#190] chore(Booking): 공백 제거

* [#190] feat(FileSuccessCode): S3 관련 성공 메시지를 관리하는 열거형 생성

* [#190] feat(PresignedUrlFindAllResponse): 공연 생성 관련 presignedUrl 응답 DTO 구현

* [#190] refactor(FileService): 메서드 명 변경 및 정적 팩토리 메서드로 반환하도록 변경

* [#190] feat(FileApi): Performance PreSigned Url 스웨거 명세서 작성

* [#190] feat(FileController): FileApi 인터페이스를 구현하도록 리팩토링 및 SuccessResponse로 반환하도록 변경

* [#190] refactor(SecurityConfig): AUTH_WHITELIST에 /error url 추가

* [#190] refactor(SwaggerConfig): 릴리즈 버전 수정

* [#190] refactor: 폴더 변경 및 이동

* [feat] #200 - 공연회차 등록 10회까지 가능하도록 수정 (#201)

* [#200] fix(ScheduleNumber): 10회차까지 추가

* [#200] fix(PerformanceModifyService): 공연 회차 수정 중 회차 추가 시 검증 로직 10회차까지 허용 가능하도록 변경

* [#200] feat(PerformanceErrorCode): MAX_SCHEDULE_LIMIT_EXCEEDED message 수정

* feat #202 - allowedMethods에 PATCH 메서드 추가 및 allowedOriginPatterns에 도메인 명시 (#203)

* [#202] feat(WebConfig): PATCH 메서드 추가 및 allowedOriginPatterns에 도메인 명시

* [#202] feat(WebConfig): 클라이언트 localhost 주소 추가

* [#202] fix(WebConfig): 문자열 오타 수정

* [fix] #204 - SuccessReponse 메서드 타입 수정 및 회원 예매 조회 타입 일치 완료 (#205)

* [#204] fix(SuccessResponse): 메서드에 제네릭 타입 명시

* [#204] fix(BookingController): 회원 예매 조회 response 타입 일치하도록 수정

* [#206] fix(TokenErrorCode): 토큰 만료 메시지 status 401로 변경 (#207)

* [#190] refactor: 패키지명 변경

- service에서 application으

* [#190] refactor(KakaoSocialService): 변수명 camelCase로 변경

* [#190] refactor(MemberService): 가독성을 위한 소셜로그인 서비스 로직 리팩토링

* [#190] refactor(MemberService): 메서드명을 역할에 부합하도록 수정

* [#190] refactor(MemberController): 변경된 메서드명으로 리팩토링

* [#190] feat(MemberRegistrationService): 서비스 분리 및 회원 등록 서비스 생성

* [#190] feat(AuthenticationService): 서비스 분리 및 인증 서비스 생성

* [#190] feat(SocialLoginService): 서비스 분리 및 소셜로그인 관리 서비스 생성

* [#190] refactor(MemberService): 회원 서비스 분리를 위한 리팩토링

* [#190] refactor(MemberController): 서비스 객체 변경

* [#190] feat(Role): 사용자의 역할을 관리하는 열거형 생성

* [#190] refactor(Users): 열거형 필드 추가 및 protected 기본생성자 추가

* [#190] refactor(LoginSuccessResponse): 로그인 성공 응답 DTO에 역할 필드 추가

* [#190] refactor(Member): 기본생성자의 접근제어자 protected로 수정 및 user 필드 지연 로딩으로 변경

* [#190] feat(AuthenticationService): 역할에 따른 토큰 발급 및 유효성 검사 추가

- 리프레시 토큰이 만료된 경우, generateAccessTokenFromRefreshToken 메서드에서 만료 에러 반환을 추가.
- 사용자의 Role (Admin 또는 Member)에 따라 각각의 권한으로 새로운 Access Token을 발급하도록 수정.
- generateLoginSuccessResponse 메서드에서 로그인 성공 시 사용자 역할에 따라 인증 객체를 생성하고, Access 및 Refresh 토큰을 발급.

* [#190] feat(AdminAuthentication): Admin 사용자 인증 객체 추가

- Spring Security의 UsernamePasswordAuthenticationToken을 상속하여, 관리자 권한을 포함한 인증 객체 생성 가능.

* [#190] refactor(JwtTokenProvider): JWT 토큰 발급시 역할 부여 및 검증 로직 개선

- JWT 토큰 발급 시 사용자 정보(memberId)와 역할(role)을 포함한 클레임 생성.
- getMemberIdFromJwt 및 getRoleFromJwt 메서드를 통해 토큰에서 사용자 정보와 역할을 추출하는 기능 구현.
- "ROLE_" 접두사를 제거한 후, 역할을 추출하여 Role Enum에 맞게 변환하는 로직 추가.

* [#190] refactor(SocialLoginService): 사용자 정보 조회 로직 수정

- `generateLoginResponseFromMemberInfo` 메서드에서 회원 정보를 조회할 때 `memberService.findUserByMemberId(memberId)`를 통해 Users 객체를 조회하도록 수정.

* [#190] refactor(MemberRegistrationService): 유저 정보로 회원등록시 역할을 MEMBER로 설정하도록 변경

* [#190] feat(MemberService): 회원 ID로 Users 정보 조회 메서드 추가

* [#190] feat(TokenErrorCode): 리프레시 토큰 만료 에러 코드 추가

* [#190] refactor(MemberController): 로그인/회원가입 API에서 역할도 반환하도록 수정

* [#190] refactor(JwtAuthenticationFilter): JWT 토큰 검증 및 인증 설정 로직 개선

- JWT 토큰이 만료되었거나 유효하지 않은 경우 적절한 HTTP 상태 코드(401, 400)를 반환하도록 처리 추가.
- `setAuthentication` 메서드를 통해 토큰에서 추출한 memberId와 role로 권한 설정.
- `handleInvalidToken` 메서드를 분리하여 토큰 상태에 따른 응답 처리 설정.
- `createAuthentication` 메서드에서 role에 따라 Admin 또는 Member 인증 객체 생성.

* [#190] chore(.gitignore): application-local.yml을 .gitignore에 추가

* [#190] chore(JwtAuthenticationFilter): 불필요한 import문 삭제

* [#190] chore(TokenService): 코드 가독성을 위한 리팩토링

* [#190] refactor(JwtTokenProvider): SignatureException 에러처리 추가 및 로그 추가

* [#190] refactor(AuthenticationService): 리프레시 토큰을 이용해 새로운 액세스 토큰 발급 시 토큰 검증 구체화 및 로그 추가

* [#190] refactor(TokenErrorCode): 리프레쉬 토큰 관련 에러코드 추가

* [#190] refactor(AuthenticationService): 에러코드 변경

* [#190] feat(SecurityConfig): ADMIN 권한 설정 추가

* [#190] feat(UserFindAllResponse): 유저 테이블의 정보를 반환하는 응답 DTO 생성

* [#190] delete(UserResponse): UserResponse 삭제

* [#190] feat(AdminSuccessCode): 관리자 성공 코드 및 모든 유저 조회 성공메시지 생성

* [#190] feat(AdminService): 관리자가 모든 유저를 불러올 수 있는 서비스 로직 생성

* [#190] feat(AdminController): 관리자가 모든 유저를 불러오는 GET API 생성

* [#190] refactor(AdminController): 토큰을 줘서 역할 검증을 하도록 변경

* [#190] feat(UserResponse): 유저 정보를 객체로 반환하는 응답 DTO 생성

* [#190] refactor: CurrentMemberArgumentResolver로 클래스 이름 수정

* [#190] fix(UserFindAllResponse): Users 객체가 Hibernate 프록시 객체로 반환되어 직렬화되지 못했던 부분 수정

* [#190] chore(GlobalExceptionHandler): ExceptionHandler 분리 및 로그 명시

* [#190] chore(CustomAccessDeniedHandler): 권한 부족 로그 명시

* [#190] chore(CustomJwtAuthenticationEntryPoint): 인증되지 않은 요청 로그 명시

* [#190] refactor(CustomJwtAuthenticationEntryPoint): 토큰에서 추출한 memberId가 DB에 존재하는지 확인하는 로직 추가

* [#190] chore(FileApi): 스웨거 문서 수정

* [#190] chore(AdminApi): 관리자 API 스웨거 문서 작성

* [#190] chore(AdminController): 스웨거 인터페이스 implements 및 메서드 오버라이딩

* [#190] rename(PerformanceMakerPresignedUrlFindAllResponse): 공연 메이커를 위한 presignedUrl을 발급하는 응답 DTO 역할에 맞게 레코드 rename

* [#190] rename(UserFindResponse): 기존 UserResponse를 역할에 부합하는 이름으로 rename

* [#190] refactor(UserFindAllResponse): rename된 이름으로 변경

* [#190] chore(FileSuccessCode): 성공메시지 구체화

* [#190] refactor(AdminSuccessCode): 캐러셀, 배너 presignedUrl 발급 성공메시지 추가

* [#190] refactor(AdminUserManagementService): AdminUserManagementService로 rename 및 ifPresentOrElse로 가독성 개선

* [#190] refactor(BannerPresignedUrlFindResponse): 배너 presignedUrl 응답 DTO 생성

* [#190] refactor(CarouselPresignedUrlFindAllResponse): 캐러셀 presignedUrl 응답 DTO 생성

* [#190] refactor(FileController): 공연 메이커를 위한 presignedUrl 응답 DTO의 이름 변경으로 인한 반환 레코드명 수정

* [#190] refactor(FileService): 캐러셀/배너 presignedUrl 서비스 로직 구현 및 컨벤션에 맞게 메서드명 수정

* [#190] feat(AdminController): 캐러셀/배너 presignedUrl GET API 구현

* [#190] feat(AdminApi): 캐러셀/배너 presignedUrl GET API 스웨거 명세 작성

* [#190] refactor(FileApi): DTO 이름 변경으로 인한 명세서 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[bug] SuccessResponse 로직 수정
2 participants