이제 발표를 거의 눈앞에 두고 있다!
이번 과제를 진행하면서 나는 스스로가 부족한 점을 많이 깨달았고, 그러면서 해야할 일을 추가로 더 알게 되었다. 바로 팀 과제 전체를 한 번 돌아보고, 모르는 부분을 조금 더 정리해야 한다는 것이다.
물론 이전에도 했어야 맞다. 하지만 내게 주어진 부분을 학습하고 구현시키는 데에만 급급했고, 그러다보니 다른 분들이 한 과제들에 대해서는 어렴풋한 이해만 하고 넘어가는 경우가 많았다. 결국은 이런 만행이 쌓여서 이번 과제도 새로운 것들을 공부하는 데에 시간이 너무 많이 걸렸다.
그래서 이번에는 팀원 전체가 했던 과제들을 다시 나의 방식으로 회고하는 기록을 해 보려고 한다.
이번 팀은 팀장님과 부팀장님, 그리고 나, 또 다른 팀원분 한 분으로 구성되었다.
사실 부팀장님과 팀장님이 너무 잘해주셔서 그분들 코드를 보고 내 공부를 해봐야겠다는 생각이 들었다.
일단 기본적인 구성은 배달앱의 기초구성이고 각자의 역할에 따라 조금 더 부가적인 사항들을 추가한 상태이다.
이 부분은 사실 전 포스팅에서 많이 다룬 부분이고 내가 주로 한 부분이라 적을 게 크게 없다. 굳이 적자면 내가 구현하기 전에 이미 기초 코드로 jwt 토큰을 생성하고, Filter로 관리하는 부분일텐데 Filter 관리 부분도 이미 내가 해석(?)을 다 해서 적어 놓은 상태이다.
아, 달라진 부분이 있긴 한데 Filter 부분은 현재 화이트 리스트로 url을 관리하고 있다.
이번 과제에서는 유저를 따로 구분하지 않고 손님과 사장님 모두가 권한만 다르게 부여된 채 작동 될 수 있도록 했다.
그래서 aop를 따로 작성해서 어노테이션으로 Controller에 각자 맞는 권한을 추가하였다.
@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface UserCheck {
UserRole value() default UserRole.USER;
}
@Aspect
@Component
public class UserCheckAspect {
private final NativeWebRequest webRequest;
public UserCheckAspect(NativeWebRequest webRequest) {
this.webRequest = webRequest;
}
@Around("@annotation(userCheck)")
public Object userCheck(ProceedingJoinPoint joinPoint, UserCheck userCheck) throws Throwable {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
UserRole userRole = (UserRole) request.getAttribute("userRole");
if (userRole == null) {
throw new ForbiddenException(ErrorCode.FORBIDDEN_OPERATION);
}
if(!userRole.equals(userCheck.value())){
throw new ForbiddenException(ErrorCode.FORBIDDEN_USER);
}
return joinPoint.proceed();
}
}
공부할 거리가 생각보다 너무... 많다. 사실 온몸에 두드러기도 나고 감기도 지속되면서 상태가 안 좋았기도 하고... 뭐 변명하자면 쓸 거리는 엄청 많지만.. 아무튼 내 사정에 비해서 공부할 시간이 너무 부족하다는 생각이 들었다.
그래서 일단 우리과제가 어떠한 역할들을 했는지 한번 더 쭉 써서 정리했다. 그리고 자세한 사항은 내 역할 위주로 적고, 다음에 추가적으로 다른 팀원들 역할을 보면서 공부를 조금 더 하기로 했다.