오늘 포스팅하는 날짜(4/1)를 기준으로 라이징캠프의 모든 과정이 끝났다. 🥳 7주차와 8주차는 실제 앱을 클론 코딩하면서 그 동안 배웠던 내용들을 복습하고 활용해보는 시간이었다. 나는 백엔드 서버 개발로 API 개발에 주로 시간을 썼고, iOS개발 담당자들과 같이 프로젝트를 진행했다. 구체적인 진행 방법은 얘기할 수가 없어서, 프로젝트 하면서 있었던 이슈사항들과 새로 알게된 내용들 위주로 포스팅한다.
📖 강의 주제
- 라이징테스트
프론트엔드, 백엔드 실전 프로젝트 진행
📝 목표
- 마켓컬리 클론코딩
▶️ 개발 일지
1. AWS 서버 구축
1) EC2 설치
- 이전에 진행한 방식대로 AWS EC2에 리눅스 우분투(20.04)를 설치했다.
- zsh로 설정하는 과정에서 오타가 있어 기본 쉘 설정이 이상하게 됐다. 다행히 직접 쉘 설정 파일을 수정해서 bash를 zsh로 변경할 수 있었다.
2) RDS 설치
- 관계형 데이터베이스인 MySQL을 사용할 계획이었다. AWS의 RDS 서비스를 이용해서 MySQL을 설치했다.
- 강의 중 실습때와 다르게 클라이언트에서 접속할 때 SSL인증을 통해서만 접속 가능하도록 설정했다. 설정하는 것 까지는 좋았는데 Node.js에서 접속할 때 에러가 발생해서 원인 찾는데 시간이 꽤 걸렸다.
알고보니 원인은 내가 포트 설정을 다르게 해놓은 간단한 문제였다... (이것 때문에 하루를 날렸다 😢)
3) HTTPS 및 DNS 설정
- HTTP 프로토콜은 보안상 문제가 있으므로 SSL을 적용한 HTTPS로 서버에 접속이 가능하게 했다.
- DNS는 실습 중 만든 가비아 DNS를 사용했다. 그리고 하위 도메인은 개발 서버로 dev를, 실제 운영 서버로는 prod를 사용했다.
- 기본적으로 IP 접속과 HTTP 접속은 모두 HTTPS로 리다이렉팅 시켰다.
2. 어플 핵심 기능 정리
1) 개발 범위 설정
- 클론 코딩을 함에 있어 모든 것을 구현하는데 한계가 있다. 그래서 2주동안 프로젝트를 진행하면서 어디까지 구현해볼지에 대해 같은 조원들과 회의를 했다.
- 여러 기능을 고려해봤지만, 가장 핵심으로 생각했던건 사용자 정보(회원가입/로그인/마이페이지)와 상품 주문(장바구니 담기/주문하기) 이었다.
2) API 초안 정리
- iOS(클라이언트)와 서버간 인터페이스 함에 있어 필요한 API를 생각해봤다.
- 큰 범주로는 개발 범위에서 정한 사용자 정보와 상품 주문이 있었고, 추가적으로 부가기능들을 넣었다.
- API에 주고받을 데이터는 아래와 같이 화면을 보며 추정해서 초안을 작성했다.
3. API 개발
1) ERD 설계
- 먼저 개념 데이터 모델링을 진행했다. 어떤 테이블을 만들고 각 테이블간의 관계를 도식화 했고, 아래와 같이 정리함으로써 ERD 설계를 준비할 수 있었다.
- ERD 설계는 AqueryTool 라는 설계 도구를 사용했다. 현업에서는 ERD설계를 따로 하지 않고 나중에 데이터베이스 다이어그램으로 본다고 하지만, 실력도 경험도 없는 나는 설계 도구를 이용해서 쉽게 데이터베이스를 구성할 수 있었다.
무엇보다 설계 도구를 사용하면서 가장 좋았던 건 ERD를 다 만들고 나서 바로 DDL 쿼리를 작성해준다는 것이다!
2) API 리스트업
- 이전에 작성한 API 초안을 바탕으로 구체적으로 API 리스트를 작성했다.
- 구체적으로 들어갈 데이터들은 뒤로하고 REST API 생각하며 작성했고, 처음에는 대략 35개 정도의 API 리스트를 만들었다.
- 구글 스프레드 시트를 이용해서 만들었고, 폼은 강의 기관으로부터 제공받은 것이라 따로 올리지 않는다.
3) API 개발
- 나는 개발 언어로 자바스크립트를 사용했고, Node.js 런타임으로 서버를 만들었다. 물론 웹 프레임워크인 Express도 사용했다.
- 디자인 패턴은 실습 때 사용한 것과 같은 Router / Controller / Provider / Service / Dao 로 만들었다. 이번에는 적용 못했지만 다음에는 MVC 패턴을 한 번 사용해보고 싶다.
- 도메인을 정리한 뒤 디자인 패턴대로 코딩을 시작했고, 이 작업만 일주일이 넘게 걸렸다. 중간중간 클라이언트와 피드백을 통해서 보완하거나 수정할 부분들은 자주 바꾸었다.
4. 최종 결과물
- 결론부터 말하면 다행히 처음에 계획했던 개발 범위는 90% 정도 완료했고 실제 앱으로도 어느정도 구현을 완료했다.
- 시간이 짧아서 아쉽긴 하지만, 일주일이 조금 넘는 시간동안 집중해서 작업했기 때문에 결과물이라도 나왔다고 생각한다.
- 서버쪽에서 기능 구현 외에 보완할 내용들이 더 있었는데 시간상 다 끝내지 못했다. 나중에 따로 토이 프로젝트를 진행할 때 적용할 예정이다.
마지막에 짧게 글을 작성하고 끝내서 후다닥 끝난 느낌이지만, 실제로는 라이징 테스트를 진행하면서 많은 고민을 하고, 피드백을 통해 소스를 수정했다. 그리고 혼자서 강의만 들으며 클론 코딩을 했다면 이렇게 클라이언트 담당자와 소통하며 작업을 하지 않았기에, 개인적으로 정말 즐거운 경험이었다.
다음 라이징캠프 포스팅에는 회고록을 작성할 계획이다. 벌써 이 주제에 대한 마지막 포스팅 이라는게 아쉽지만, 이 회고록을 시작으로 개발자로서의 삶이 막 시작되는거 같아서 기대되기도 한다. 😌
& 링크모음
[1] : 라이징캠프