241210 아웃소싱 프로젝트 회고 시작

물고기가자라면어그로·2024년 12월 10일
0
post-thumbnail

그래.. 이번 프로젝트는 숨기지도 않겠다. 블로그 못 썼다고...
근데 진짜로 바빴다... 프로젝트 내적으로나 외적으로나...
프로젝트 기간이 짧기도했고 시국이 불안정해져서 주말에 시위나갔다와서 밤새서 코딩하고 그랬다.
그래도 할 건 해야지. 지금부터 짧게 프로젝트 회고를 시작하겠다.

배달 어플리케이션 API 구현하기

아웃소싱이란?

기업이나 조직이 특정 업무나 프로젝트를 외부 전문 업체나 프리랜서에게 위탁해 수행하는 방식으로, 내부에서 처리하기 어려운 작업을 외부 리소스로 해결하는 것

우리는 우리가 배달 어플리케이션 개발에 대한 아웃소싱을 맡았다고 가정하고 배달 어플리케이션에 필요한 API를 구현하는 프로젝트를 시작하게 되었다!

기한은 일주일이었고 우리는 회원을 가게 사장님손님으로 나누어서 회원가입을 하고
가게사장님은 가게를 만들고 메뉴를 생성하여 주문을 받고, 손님은 그 주문을 하는 식의 기본적인 기능부터 구현을 하고 시간이 남으면 장바구니나 관리자 권한의 주문통계 조회 같은 도전 과제를 진행해보기로 했다.

우리는 바쁘게 달려 도전과제 몇가지를 구현하는 데에 성공했고 최종적으로 구현한 기능의 리스트는 다음과 같다.

기능

공통 기능

  • BCrypt를 통한 비밀번호 암호화
  • /S3Client 설정을 통한 AWS S3통신할 수 있는 클라이언트를 생성
  • 인증/인가 : CUSTOMER, OWNER, ADMIN 권한에 따른 기능 접근 제한
  • 예외처리 커스텀화
    GlobalExceptionHandler를 통한 애플리케이션 예외의 전역적 처리 가능

User

  • 회원가입, 로그인, 로그아웃, 회원탈퇴 기능 구현
  • 소셜 로그인 부분 구현

Order

  • 고객 : 주문 생성, 조회, 포인트 자동 적립, 사용, 조회
  • 가게 사장 : 주문 조회, 주문 거절, 상태 변경, 포인트 생성, 유효시간 만료 시 자동 삭제

Coupon

  • 고객 : 자신의 쿠폰 정보 조회, 가게 쿠폰 조회, 쿠폰 발급
  • 가게 사장 : 자신의 가게의 쿠폰 생성, 조회, 쿠폰 상태 변경

Image

  • 이미지 CRUD 구현

Review

  • 고객 : 리뷰 생성, 전체 조회, 나의 리뷰 조회 기능 구현
  • 가게 사장 : 리뷰 조회 기능(리뷰의 최소 및 최대 별점 기준으로 필터링 가능)

Admin

  • 관리자의 주문 통계(일간 및 월간 주문 수와 일간 및 월간 주문 금액) 조회 기능 구현
  • 광고 관리

Store 기능

  • 고객 : 가게 전체 및 단건 조회 기능
  • 카테고리 및 검색 조건에 맞게 데이터 처리 및 조회
  • 장바구니 CRUD 기능
  • 광고 기능 (가게 리스트 상단 노출)
  • 고객 : 메뉴 조회
  • 가게 사장 : 메뉴 CRUD

이렇게 정리하니 정말 많아보인다. 3명의 다른 팀원들과 다 함께 역할 분배를 해서 이정도 구현을 할 수 있었던 것 같다.

개발 방향

사실 적은 기능을 구현하더라도 다양한 케이스들을 계속 테스트하고 오류들을 잡아가며 ' 기능을 완전하게 구현하는게 나을까?'라는 생각도 들었지만 아직 배움의 단계에 있고 처음으로 기본적인 CRUD 기능에서 벗어나 복잡한 기능들을 구현해볼 수 있는 프로젝트였기때문에 팀원들과 다양한 기능구현을 시도를 해보자는 의견이 나왔다.
(그렇다고 예외처리를 안 한 것은 아니다. 시간을 많이 들이지 못했을 뿐 당연히 기본적인 예외처리나 생각나는 케이스들은 전부 테스트해가며 했다. )

나의 역할

내가 맡은 기능들은 다음과 같다.

  • 회원 관련 로직 구현
  • 인증 / 인가 관련 처리
  • 리뷰 관련 로직 구현
  • 소셜 로그인 부분구현 (로그인, 권한 설정, 로그아웃)

사람들이 우리 앱에 회원가입을 하고 로그인, 회원 탈퇴할 수 있게 하고
회원가입 할 때 설정했던 권한을 토대로 제한적인 기능에 접근할 수 있게 했다.
손님 권한으로 로그인한 사람들이 주문한 주문 건에 리뷰를 달고 수정할 수 있게 했고, 작성된 리뷰들을 손님과 사장님이 상황별로 조회할 수 있도록 했다.

소셜 로그인은 시간이 남으면 꼭 도전해보고 싶었던 기능이었는데 생각보다 시간이 부족해서 부분적으로만 구현할 수 있었다.
카카오톡으로 로그인(정보 연결)해서 첫 회에 받아온 데이터를 db에 저장하고 다른 기능들을 사용할 때 필요한 '권한'만 따로 api로 설정할 수 있게 하였다. (이메일 가입자는 회원가입할 때 한 번에 권한 정보까지 받지만 소셜로그인은 그럴 수 없어서 분리했다.) 로그인을 할 때 받아온 정보를 캐시에 저장하고 로그아웃을 하면 캐시가 만료되도록 하였다.
다만 시간이 부족해서 소셜 로그인 유저들이 소셜 로그인과 관련된 부분을 제외한 다른 기능들을 사용할 수 있게끔 하지는 못하였다. (세션을 사용하는 이메일 유저와 분리해서 생각을 해야하기때문에 시간이 더 필요할 것 같았다.)

짧은 소감

사실 저번 팀프로젝트 때도 회원과 인증인가 부분을 맡았어서 (다른 걸 하고싶다고 말씀드렸는데 결국 사다리타기로 결정되었다ㅠㅠ) 이번에는 다른 방식으로 인증인가를 시도해보거나 소셜로그인을 도전해보려고 노력했다. 인증인가가 그렇게 어렵다고 생각 안했었는데 오류도 나고 소셜로그인을 더하니 복잡해져서 헤매기도 하면서 시간을 많이 들이게 되었다. 그래도 결국 handler interceptor 에 대해 공부도 많이 되었고 소셜로그인도 공부를 많이 하고 이해하려 노력하면서 부분적으로는 구현하는 데에 성공했기때문에 굉장히 뿌듯하다.

0개의 댓글

관련 채용 정보