프로젝트 마무리가 보이고 있다. 끝이 보이는 시점에 문제 또한 하나 씩 더 더 보이는 중이다.ㅎㅎ
🚨 역할 부여 오류
권한을 부여하는데 있어서 아무 문제 없을 것이라 생각했는데 어느날 확인해보니 카카오로 만들어진 회원들은 문제가 없었으나, 일반 회원 가입을 진행한 회원에는 "ADMIN"과 "USER"가 동시에 부여되고 있었다.
정상적인 코드에서는 설정한 ADMIN_EMAIL과 다르다면 "USER" 권한을 주고, 똑같으면 "ADMIN"과 "USER"권한을 주게 되어 있는 것인데 현재 코드에서는 ADMIN 이메일에 "ADMIN"권한만 주고 일반 회원에게 두 가지 권한을 다 주고 있었던 것이다.
🔻일반 회원 가입
🔻ADMIN EMAIL로 회원 가입
🔨 문제 해결 방법
문제를 해결하기 위해 권한을 부여하는 "CustomAuthorityUtils" 클래스를 확인해보았다.
사실 코드를 처음 훑어 보았을 때는 무엇이 잘못 된지 알지 못하고 있었다.
이메일이 관리자랑 다르면 USER, 아니면 ADMIN 맞잖아! 이러고는 혹시나 환경변수 설정이 잘못되었나 ? 하여 확인해보았다.
환경변수 확인
현재 서비스를 배포한 상태기 때문에 로컬 환경 변수가 아닌 인스턴스의 환경변수를 살펴 보았다.
우선 프로세스가 잘 실행중인지 확인하기 위해 명령어를 입력해 확인 해보았다.
✅ 운영 체제에서 실행 중인 프로세스 확인 명령어
$ ps -ef |grep java
잘 실행 중인 것을 확인하고 현재 설정된 환경 변수를 확인해보았다.
✅ 환경변수 확인 명령어
$ printenv
환경변수 또한 원하는대로 잘 설정되어 있었다.
CustomAuthorityUtils 클래스 확인
코드를 다시 살펴보았다. 다시 차근 차근 살펴보니 모든 사용자에게 ADMIN 권한을 주고 있었던 것이다.
이런 실수를 하다니... if-else 구문에서 else를 빼먹고는 권한을 주고 있다고 생각했다.
게다가 ADMIN 권한은 USER 권한을 함께 가져야 한다. else 를 넣는다고 하더라도 이 것 또한 만족하지 않는 것이다.
그래서 코드를 다음과 같이 수정해주었다.
public List<String> createRoles(String email) {
List<String> roles = new ArrayList<>();
// 이메일이 관리자 이메일과 일치하면 "ADMIN" 역할을 추가
if (email.equals(admin)) {
roles.add("ADMIN");
}
// 모든 사용자에게 "USER" 역할을 추가
roles.add("USER");
return roles;
}
혹시 모를 MemberService 내의 코드도 확인해보았는데 아무 문제 없이 작성되어 있어서 코드 수정은 하지 않았다.
🚨 북마크 조회 시 회원 정보 무시
회원 정보를 조회하면 북마크와 함께 회원 정보가 반복하여 표시 되고 있었다.
🔨 문제 해결 방법
Board, Answer 등 다른 부분들은 이미 @JsonIgnore를 해 둔 상태였기에 쉽게 문제를 찾고 고칠 수 있었다.
@JsonIgnore 어노테이션을 사용하면 데이터를 직렬화하거나 역직렬화할 때 특정 필드를 무시하도록 지시할 수 있다.
✨ @JsonIgnore 어노테이션은 클래스 레벨에서 적용할 수는 없다. 즉, 각각의 필드를 무시하도록 설정할 수는 있지만 클래스 전체를 무시하도록 설정할 수는 없는 것이다.
💬 느낀 점
코드를 꼼꼼히 살펴보자..! 그리고 다시 보니 오류가 계속 발생하고 있어서 수정 할 부분들이 계속 나타나고 있는데 기능을 추가 추가 하는 것 보다도 이것들이 우선 순위 되어야 할 것 같다는 생각을 한다. 또한, 여러 번 보니 나도 이전에는 검색하고 배우면서 급하게 작성 했던 코드들에 대해 조금씩 더 배우는 과정이 되는 것 같아 좋다.
추가로 관리자가 따로 회원을 관리할 수 있는 페이지를 아직 만들지 않고 회원 전체 조회 페이지만 만들어서 회원 정보를 볼 수 있는 것만 할 수 있도록 되어있는데 여기서 조금 더 발전시켜 회원을 관리할 수 있는 관리자 페이지를 따로 더 만들어볼까 생각 중이다.
오류가 발생했을 때 관리 할 수 있는 페이지가 없으니 불편함을 느꼈기 때문이다...! : )
'PROJECT' 카테고리의 다른 글
[PROJECT] 알림기능 웹소켓 사용 후퇴 및 SSE 사용 결정 이유 (0) | 2023.11.25 |
---|---|
[PROJECT] 프로젝트 ver.2 업그레이드 시키기 (1) | 2023.10.30 |
[PROJECT] pre-project stackoveflow 클론 코딩 / WEEK2 기록 (0) | 2023.10.05 |
[PROJECT] 메인프로젝트 회고 / 기록 남기기 (1) | 2023.09.24 |
[PROJECT] Main 프로젝트 기록 / WEEK1 기록 및 회고 (1) | 2023.08.30 |