[TIL] 아웃소싱(배달앱) (2)

J쭈디·2025년 1월 10일
0

Sparta_프로젝트

목록 보기
8/35

이제 발표를 거의 눈앞에 두고 있다!

이번 과제를 진행하면서 나는 스스로가 부족한 점을 많이 깨달았고, 그러면서 해야할 일을 추가로 더 알게 되었다. 바로 팀 과제 전체를 한 번 돌아보고, 모르는 부분을 조금 더 정리해야 한다는 것이다.
물론 이전에도 했어야 맞다. 하지만 내게 주어진 부분을 학습하고 구현시키는 데에만 급급했고, 그러다보니 다른 분들이 한 과제들에 대해서는 어렴풋한 이해만 하고 넘어가는 경우가 많았다. 결국은 이런 만행이 쌓여서 이번 과제도 새로운 것들을 공부하는 데에 시간이 너무 많이 걸렸다.

그래서 이번에는 팀원 전체가 했던 과제들을 다시 나의 방식으로 회고하는 기록을 해 보려고 한다.

1. 과제를 돌아보기

1. 각자의 역할과 특이사항

이번 팀은 팀장님과 부팀장님, 그리고 나, 또 다른 팀원분 한 분으로 구성되었다.
사실 부팀장님과 팀장님이 너무 잘해주셔서 그분들 코드를 보고 내 공부를 해봐야겠다는 생각이 들었다.

일단 기본적인 구성은 배달앱의 기초구성이고 각자의 역할에 따라 조금 더 부가적인 사항들을 추가한 상태이다.

  • 회원가입 및 로그인, 로그아웃 기능 (jwt 토큰 사용)
  • 장바구니 관리 (Spring Cache을 이용)
  • 주문관리 (aop로 user 권한에 따라 분리)
    • 주문요청
    • 배달상태변경 (Spring Scheduler 사용)
    • 배달상태조회
    • 배달거절 (Spring Cache 이용)
    • 현재주문조회
  • 메뉴관리
  • 가게관리
  • 리뷰관리
  • 알림기능 (WebSocket과 aop를 사용)

1. 회원가입과 로그인, 로그아웃 (jwt 토큰)

이 부분은 사실 전 포스팅에서 많이 다룬 부분이고 내가 주로 한 부분이라 적을 게 크게 없다. 굳이 적자면 내가 구현하기 전에 이미 기초 코드로 jwt 토큰을 생성하고, Filter로 관리하는 부분일텐데 Filter 관리 부분도 이미 내가 해석(?)을 다 해서 적어 놓은 상태이다.

아, 달라진 부분이 있긴 한데 Filter 부분은 현재 화이트 리스트로 url을 관리하고 있다.

2. aop로 유저 권한 분리

이번 과제에서는 유저를 따로 구분하지 않고 손님과 사장님 모두가 권한만 다르게 부여된 채 작동 될 수 있도록 했다.

그래서 aop를 따로 작성해서 어노테이션으로 Controller에 각자 맞는 권한을 추가하였다.

<사용자를 구분하기 위한 어노테이션>

@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface UserCheck {
    UserRole value() default UserRole.USER;
}

<사용자를 구분하기 위한 aspect>

@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();
    }
}

2. 결론은?

공부할 거리가 생각보다 너무... 많다. 사실 온몸에 두드러기도 나고 감기도 지속되면서 상태가 안 좋았기도 하고... 뭐 변명하자면 쓸 거리는 엄청 많지만.. 아무튼 내 사정에 비해서 공부할 시간이 너무 부족하다는 생각이 들었다.

그래서 일단 우리과제가 어떠한 역할들을 했는지 한번 더 쭉 써서 정리했다. 그리고 자세한 사항은 내 역할 위주로 적고, 다음에 추가적으로 다른 팀원들 역할을 보면서 공부를 조금 더 하기로 했다.

profile
언제 어느 위치에 있더라도 그 자리의 최선을 다 하는 사람이 되고 싶습니다.

0개의 댓글