본문 바로가기

우아한테크코스

런칭 페스티벌 회고

 

레벨 3 의 마무리인 런칭 페스티벌을 잘 끝마쳐서 기분이 매우 좋은 상태로 회고를 작성한다.

 

마지막 스프린트에서 가장 중점을 두고 구현했어야 하는 부분들은 그동안 미룰 수 밖에 없었던 회원가입/로그인과 우리의 숙원사업이었던 쿠폰 커스텀 기능(이미지 저장) 이었다.

 

스프린트의 첫 날은 같은 코치들 아래 있는 두 팀(펀잇, 슉) 과 함께 하는 버그리포팅 데이였다. 사실 버그리포팅을 할때는 딱 보이는 것이 프론트 화면이어서 UI 관련 버그 리포팅이 많았다. 그래서 스프린트 첫주차에 우리 프론트엔드 크루들은 가득 쌓인 버그 이슈들을 수정하면서 디자인까지 엄청난 변화를 주었는데.. 정말 고생이 많았을 거였다😢

 

스프린트의 첫 주차에 백엔드는 추가 구현해야 할 간단한 API (스탬프 적립내역 조회, 리워드 사용 내역 등) 을 만들고 새로운 테이블이 추가됨에 따라 리팩터링이 필요한 로직들을 수정하였다. 그리고 목요일에 태풍때문에 재택근무라 깃짱이랑 게더타운에서 OAuth2 코드 구현을 맛보기로 하였고 금요일에 인프라 관련해서 주어진 EC2 3개와 받을 EC2 1개를 각각 어떤 용도로 쓸지 논의하고 EC2 를 달라고 요청하고 마무리하였다! 

 

그리고 대망의 마지막 주차가 시작되었는데.... 분명 바쁘게 한주를 보냈다고 생각했는데 아직 이번 스프린트의 핵심 기능인 OAuth2 도, S3 이미지 저장도 되지 않은 상태였다. 거기에 모니터링 대시보드도 구성해야 하는데 처음에 그라파나, 프로메테우스를 쓰려 했는데 젠킨스와 같은 서버에 띄우려했으나 주말에 프론트, 백엔드 빌드를 동시에 돌리다가 젠킨스가 죽는 사태가 일어나고.. 결국 토미가 추천해준 CloudWatch 를 사용하기로 결정하고 CloudWatch 를 받았는데 설정을 하려면 또 공부를 해야 하고.. 사실 월요일에는 이걸 다 할 수 있을까? 싶었다. 

 

월요일은 우테코 휴무일이었지만 깃짱 라잇 레고와 함께 출근해서 회원가입/로그인을 붙이는 작업을 했다. 로그인을 구현하려고 하니 민감 정보(우리의 Client Id, Client Secret 등) 들은 서브모듈로 빼야 해서 서브 모듈 설정도 하고, 서브모듈 설정을 하니 젠킨스에서 빌드하고 개발서버에서 jar 파일을 실행할때 서브모듈을 못읽어와서 자동 배포가 안되서 수동으로 풀받고 빌드해서 실행시키고.. 정말 힘들었다.

로그인도 처음에 네이버 OAuth 를 하려 했으나 분명 로컬에선 네이버 로그인 페이지로 리다이렉션 잘 되는데 개발 서버 환경에서 요청을 보내면 네이버 서버쪽에서 CORS 를 띄워서 삽질을 매우하고 절망을 하다가.... 카카오로 돌렸더니 CORS 문제는 해결되고 집에 갔다. (다시 해보면 네이버도 될거같은데 레벨 4때 네이버 로그인도 붙여야겠다) 그리고 집에 가서 redirection url 과 함께 authorization code 를 받은 후 client id 와 authorization code 를 이용해 jwt token 까지는 받아오는 것을 확인하고 잠에 들었다..

 

화요일은 광복절이었는데 서버가 캠퍼스에서만 접근이 가능한 관계로 캠퍼스에 출근을 했다! 전날에 jwt token 을 카카오로부터 받아온 건 확인했으니 이제 그 토큰을 이용해 유저의 프로필을 카카오로부터 받아와서 우리 데이터베이스에 있는지 확인하고, 없으면 가입을 시킨 후 member Id 를 이용해 우리 서비스의 토큰을 생성해서 클라이언트에 전달해주는 로직을 구현했다. 카카오에서 필수로 제공해주는 값이 닉네임밖에 없어서 우리 서비스에 가입되어있는지를 어떤 값을 이용해 확인할지 고민하다가 카카오의 멤버 Id 를 제공해준다는 사실을 알았고, 카카오의 멤버 Id(OAuth Id) 와 OAuthProvider (지금 경우에는 카카오) 로 레포지토리를 조회해서 없으면 save 를 시켜주는 식으로 구현했다. OAuth 를 구현하는 과정에서 Owner 와 Customer 의 테이블 컬럼이 변경이 좀 되었는데, 우리는 개발 서버에서 테이블 Drop 을 막아뒀고, ddl-auto 도 none 으로 되어있기 때문에 DB 에 직접 들어가서 alter 로 바꿔줘야 했고, 이런 DB 스키마 변경이 있을 때 flyway 를 사용하는 것 같은데 공부할 여력이 없어서 우선 alter 문으로 그냥 바꿔줬다. 

 

우리 서비스는 고객 모드, 사장 모드 둘다 개발을 해야 하기 때문에 로그인도 2개 구현을 해야 했었기에 (코드 복붙만 하면 되지만) 그때 아.. 우리 프로젝트 좀 힘들구나..! 를 느꼈던 것 같다. 그렇게 수요일까지 로그인/회원가입을 다 구현했는데 하나의 난관이 남아있었다! 카카오에서는 고객의 휴대폰 번호를 제공해주지 않는데 우리 서비스는 고객의 휴대폰 번호를 입력받아 스탬프를 적립해주기 때문에 고객은 무조건 핸드폰 번호 정보가 있어야 하는 상황이었다. 그래서 급하게 고객의 휴대폰 번호 정보가 존재하는지를 확인하는 API 와 고객의 휴대폰 번호를 저장하는 API 를 만들었다. 사실 이건 프론트에서 로그인 -> 휴대폰 번호 정보 있는지 확인 -> 없으면 휴대폰 번호 등록 페이지로 라우팅 이렇게 라우팅을 처리하느라 더 힘들었을 거 같다. 

 

그리고 하디가 S3 API 를 사용해서 쿠폰 커스텀 이미지 업로드하는 API 를 만드는데 성공했고, 레오가 CloudWatch 로 우리 개발서버와 운영 서버의 CPU 사용량, 메모리 사용량 등을 모니터링할 수 있는 대시보드를 생성하는데 성공했다.

목요일에는 QA 를 하면서 발견된 필요한 API 들을 급하게 구현했다.

 

그리고 금요일에 런칭 페스티벌이 열렸다. 목요일 밤까지 원하는 대로 동작하지 않던 스탬프 적립 기능이 레고의 노력으로 정상 동작하게 되었고, 홍보 부스를 위한 전지를 카페, 스탬프와 관련한 예쁜 그림을 그려가며 꾸몄다. (우리 팀만 오전 내내 전지만 꾸민 것 같다. 근데 너무 예쁘게 잘 꾸몄다. 라잇 레고 깃짱이 그림을 잘 그렸다.)

그리고 데모데이 발표를 잘 마무리하고 크루들이 우리 서비스를 사용해볼때 예쁘다고 칭찬도 많이 해주고 피드백도 좋게 남겨주어서 기분이 좋았다. 브라운도 2차 데모데이 이후로 처음 우리 서비스를 본 거 였는데 정말 엄청난 변화가 있었다고 칭찬도 해주셔서 보람찼다.

 

4차 스프린트는 우리 팀원들 7개의 멀티스레드가 잘 돌아가서 정말 잘 마무리 할 수 있었다. 프로젝트 기획부터 배포까지 함께 해볼 수 있어서 정말 좋은 경험이었다고 생각한다.

레벨 4 때는 지금 살짝씩 부족한 부분들 추가 구현하고 성능도 좀더 신경쓰고 진짜 카페 사장님이 써볼 수 있게 홍보하고, 실 사용자를 모을 수 있는 방향으로 프로젝트가 진행되었으면 한다!