[Lv2 - 프로젝트 : SUPP] 개발 이야기

2020. 9. 6. 21:28일상/우아한테크코스

본 게시글에서는 우아한테크코스2기 과정에서 사이드로 진행했던 프로젝트를 소개합니다. 

식전 수프처럼 페어와의 협업 맛을 돋우는 애피타이저, SUPP

 

이 포스팅에서는 SUPP 프로젝트의 시스템 구조와 배포 과정, 그리고 어려웠던/아쉬웠던 것에 대해 공유해보도록 하겠습니다.

 

1) 시스템 구조와 배포과정

 

 

 

서버는 SpringBoot를, 프론트는 Mustache를 이용해 개발했습니다. 서버 외에도 우아한테크코스 사이트에서 크루의 정보를 볼 수 있는 익스텐션도 따로 개발을 진행했습니다. Spring Data JPA와 Spring Security 그리고 Oauth2를 이용한 깃허브 로그인 연동까지가 SUPP의 기술 스택이라고 말할 수 있겠네요.


이렇게 만들어진 서버는 EC2를 통해 배포되고 있습니다. 저희는 기능 개발이 완료되고, 하나의 버전이 완성되면 master브랜치에 merge를 합니다. 그리고 EC2에 접속해서 master 브랜치를 clone받고 build 및 실행을 하여 배포를 해요. 이 과정은 현재 스크립트파일을 따로 생성하여 EC2에 접속해 스크립트 파일 하나만 실행하면 되도록 구성되어 있는데요, 나중에 CICD환경을 구성할 생각도 하고 있습니다.

 

2) 어려웠던점 - HTTP와 HTTPS간의 통신

가장 어려웠던건 저희 서버와 우아한테크코스 서버 사이의 통신이었습니다. 그 과정에서 MixedContent에러와 CORS문제까지 경험해 보았는데요, CORS는 스프링부트의 어노테이션을 통해 해결했지만 MixedContents에러는 꽤나 험난했어요.

@CrossOrigin을 적용하여 CORS문제 해결

 

우선, 익스텐션이 실행되고 있는 우아한테크코스 사이트는 https를 기반으로 통신합니다. 하지만 익스텐션의 서버, 즉 SUPP의 서버는 http로 통신합니다. 이러한 차이 때문에 서버가 우아한테크코스 사이트에 데이터를 뿌려줄 때 MixedContents에러가 발생합니다. 이를 해결하기 위해서는 저희 서버를 https로 바꿔주어야 합니다.

어떻게 http서버를 https로 변경할 수 있을까요? 가장 근본적인 해결책은 서버의 도메인을 구입한 후 SSL인증서를 발급받는 것입니다. 하지만 당장 출시가 얼마남지 않았고, 팀원 모두 미션으로 인해 일정이 빠듯했기 때문에 다른 대안이 필요했습니다. 1기 루피님의 테코브러리 서비스 발표 영상을 통해 CloudFront를 사용하는 방법에 대해 알 수 있었고, 임시로 이 문제를 해결할 수 있엇습니다. 

3) 아쉬웠던 점 - 테스트의 중요성 

사실 책에서는 테스트 코드에 대한 내용이 많은데, 저희 서비스는 베타버전까지 테스트 코드가 한 줄도 없었습니다. 중요하다는 것을 배웠지만 체감하기가 어려웠고, 그 결과 테스트 코드를 등한시하게 된 것이죠. 테스트코드 없이 기능을 구현하다 보니 구현한 기능에 대해 검증할 때는 직접 서버를 켜야 하는 일이 발생했습니다. 톰캣을 직접 실행 시켜 기능을 테스트해보거나 Postman을 통해 API 요청과 응답을 확인해야 했어요. 이 과정은 테스트코드를 작성하는 것보다 더 큰 시간과 비용을 잡아먹었습니다. 또 기능을 구현할 때마다 다른 코드에 영향을 끼치진 않을지 불안해하며 코드를 작성했던 경험도 떠오르네요. 단위테스트가 존재했더라면, 테스트를 기반으로 더 안전하게 코드를 작성해나갈 수 있었을 것이라 생각해요.

 

하지만 이런 아쉬운 경험 덕분에, 테스트의 필요성을 절실히 느꼈고 레벨3 방학을 이용해 급히 테스트 코드를 작성했습니다.

 

 


 

 

이렇게 SUPP의 개발기에 대해 다뤄보았습니다. (개발기치고는 기술적인 내용이부족해 보이긴 하네요😅) 하지만, 기술적인 측면보다는 서비스와 경험 그 자체에 중점을 두었던 프로젝트인 만큼 50명의 크루들에게 서비스를 해보았다는 경험으로 충분히 만족스러운 프로젝트였습니다. 앞으로도 개선해나가야 할 부분이 한둘이 아닌 만큼 계속해서 유지보수를 해나갈 예정입니다. ㅎㅎ