Home [프로젝트] 캡스톤디자인 후기
Post
Cancel

[프로젝트] 캡스톤디자인 후기

이번 우리조의 캡스톤 디자인 주제는 대학생들을 위한 워크스페이스로, 시중에 나와있는 Notion을 모티브로 하여, 조금 더 대학생들의 편리성에 맞게 웹서비스를 만들기로 하였다. 우리팀은 총 4명으로 프론트 2명과 백앤드 2명으로 구성하고 프론트는 리액트, 백엔드는 스프링 프레임워크를 사용하였다.

기술 스택


우리 백엔드 팀은 프론트와 백엔드간의 RESTful API를 이용해 통신하고 이에 따라 RESTful API 개발에 필요한 다양한 기능을 제공해주는 스프링 프레임워크를 사용하기 하였다. 또한 자바는 많은 기업과 개발자들이 오랜 기간동안 사용해왔기에 커뮤니티가 활발해져있어 수월한 정보 수집을 할 수 있어 스프링 프레임워크를 선택하였다.

서버 배포에는 적은 비용으로 쉽고 편리하게 서버를 배포할 수 있는 aws를 사용하였다.

개발


이번 프로젝트에서의 개발 과정은 DB설계, API설계, 개발순으로 이루어졌다. 먼저 DB설계는 회원 테이블부터 시작해서, 작업공간 테이블 그리고 스케줄 테이블까지 필요한 테이블들을 생각하고 이 테이블들 간의 연관관계를 적용시켰다. 이를 토대로 프론트와 JSON기반으로 통신하기 위해 API설계를 했으며, 여기서는 어떻게 하면 프론트 쪽에서 데이터를 쉽게 가져다 쓸수 있을지에 대해 고민하면서 만들었다.

이후 스프링 부트를 사용하여 개발을 시작하였고, 나는 스케줄쪽 기능을 맡아 DB설계를 토대로 JPA를 통한 엔티티 매핑을 통해 테이블을 생성하고, RESTful API 개발에서는 Spring Web의 MVC패턴을 이용해 개발하였다.

서버 배포


aws Ec2를 사용해 서버를 배포하였고, 나중에는 우리팀은 2개의 서버를 만들어서 운영하였다. 이 2개의 서버를 운영하기 위해 로드밸런싱(aws ELB)을 사용하였고, 로드밸런싱을 하기 위해서는 도메인을 적용해야 되서 도메인도 구입하여 route53을 이용해 도메인도 설정하였다.

aws Ec2의 데이터베이스로는 amazon Rds를 이용해 mysql 데이터베이스를 사용하였다. 서버 배포 자동화를 위해 git actions를 이용해 CI/CD 환경을 만들어 git에 push할때마다 배포하도록 만들었다. 각 ec2인스턴스마다 nginx를 설치해 상황에 맞게 프로세스를 배포하고, 한 인스턴스마다 2개의 프로세스를 띄울 수 있었다. 또한 여기서 사용자 인증과정에서 토큰을 이용하는데, 이 과정에서 토큰을 가로채지 못하게 API서버에 SSL(암호화)도 적용시켰다.

배운점


스프링을 사용했기에 올 1월부터 종강전까지 계속 스프링 프레임워크에 대해 공부하였으며, 스프링 MVC, Spring JPA, Spring Data Jpa, queryDsl까지 개발에 필요한 기술들을 배웠다. 이에 더해서 나는 이번 프로젝트에서 주로 서버 인프라 구축을 담당하였다. 서버를 배포하는 과정에서 ec2가 리눅스 운영체제를 사용하다보니 리눅스에 관한 지식도 많이 공부하게 되었다. 서버 생성부터 도메인적용, 암호화 적용, 로드밸런싱 등 배포 환경을 구축하면서 aws로 클라우드 서비스를 이용해 다양한 기능들을 써볼 수 있었고, 클라우드 지식들을 많이 배울 수 있었다. 그리고 내 팀원은 주로 서비스 기능을 구현한 어플리케이션 개발을 담당했는데, 여기서 구글 간편로그인, JWT기반 사용자 인증, SpringSecurity, Websocket을 이용하여 기능들을 구현했고, 나도 팀원의 코드를 보면서 이에 대한 내용들을 공부할 수 있었다.

아쉬운점


이번 프로젝트를 진행하면서 아쉬웠던 점은 먼저 단위 테스트를 제대로 못해본것이다. 실제 개발에서 단위 테스트가 정말 중요하다고 알고있는데, 이번 프로젝트에서 백엔드 개발이 처음이다보니 테스팅 까지는 많이 신경을 쓰지 못했다. 또 JPA를 사용하면서 DB에 쿼리를 보낼때의 성능을 최적화하는 부분도 굉장히 중요했지만 여기서는 기능을 완성하는데만 급급해서 성능 최적화까지 신경을 못써 아쉬웠다. 마지막으로는 프론트 쪽에서 리액트와 통신하는 과정 중에 Websocket을 구현하는데 굉장히 애를 먹었다. 웹소켓에 대해 지식도 부족했고, 이 HTTP통신에 대한 개념이 정말 중요하다고 깨닫게 되었다. 이를 통해 네트워크 개념을 더 공부하고 더불어 데이터베이스, 운영체제와 같은 CS과목들도 더 공부해야겠다고 느꼈다.