티스토리 뷰
프로젝트 주제 선정, 구상 및 기술 분석
📜 프로젝트 주제 선정
: 최근 지인이 갤러리를 오픈하게 되었는데, 갤러리에서 취급하는 미술품과 전시회 일정 등에 대해 알려줄 페이지가 필요하다고 문의. 이전에 웹 서버 개발을 위한 작은 프로젝트를 여러 번 해봤고, 현재 클라이언트 부분도 공부를 하고 있어서, 실제로 트래픽이 발생할 수 있는 페이지를 만들고 운영해보는 것이 큰 경험이 될 것이라 보아 갤러리 페이지 개발을 결심하였다.
🗒️ 프로젝트 구상
: 갤러리라는 테마를 생각해 여러 기능들을 구상해보았다.
- 유저 기능
본 갤러리의 새 소식이나 일정을 얻기 위해 알림을 받을 수 있고, 상품 구매나 상품 문의, 상담 등의 서비스를 할 수 있
도록 하기 위해 유저 관련 기능 필요. 알림 설정의 경우 이메일과 문자 메시지 발송을 이용할 예정. - 상품 기능
업로드 된 상품(작품)을 조회할 수 있고, 구매도 가능하도록 구현할 것. 다만 현재로서는 수요를 파악할 수 없기에 i'mport나 Paypal같은 외부 서비스를 사용하지 않고 구매예약 및 입금확인 형태로 진행할 것이며, 추후 추가를 시도해볼 예정. - 채팅 기능
고객과의 실시간 상담을 위해 작은 채팅 기능을 제공할 것이며, 문의가 발생하였을 시에도 해당 문의에 대해 문자 메시지 발송을 이용할 예정. - 관리자 기능
페이지를 보다 용이하게 관리할 수 있도록 관리자 페이지를 생성하고, 방문자 수나 상품 조회 통계 등 여러 서비스를 제공할 예정.
큰 기능은 위와 같이 4가지밖에 안되지만, 해당 사이트의 전망을 모른다는 점과 1인 개발인 점을 감안하면 추후의 기능은 필요할 때 개발하는 것이 좋을 것으로 보인다.
🛠️ 요구 기술
- 클라이언트
- React : 잦은 상태 변화가 존재하는 사이트로 구성될 예정이며, 이에 아주 적합.
- Typescript : 코드의 완성도를 높이며, React와의 호환성도 좋음.
- Vite : 변경 사항이 발생되었을 때 빠른 배포를 위한 Bundling 도구로서 채택.
- Recoil : 페이지 특성 상 컴포넌트를 공유할 일이 많아 보이며, 초기 단계에는 규모가 작게 유지될 것으로 보임.
때문에 Context API를 사용하며, 중앙 관리 시스템과 같이 큰 규모에 적합한 것을 배제하여 Recoil을 채택.
- React-Router : React는 SPA 기반의 프레임워크이므로, 적절한 링크 분할 및 렌더링을 위해 사용.
- AXIOS : 서버와의 원활한 Restful API 통신을 위해 사용.
- Tailwind CSS : 간편하고 원활한 CSS 디자인을 위해 미리 정의된 CSS 프레임워크 사용.
- ⚠️Three.js : 작품을 조회할 때, 미술품과 인테리어 매칭 시뮬레이션을 위해 고려 중. 사용 미정.
- ⚠️StompJS : 실시간 상담 기능을 위한 서버 측과의 WebSocket 연결을 위해 고려 중. 대체될 수 있음. - 서버
- Spring Boot : 확장성이 좋고 보안적으로 뛰어나며 추후에 규모가 커질 것을 대비한 서버로서 아주 적합.
- Spring Security : Spring Framework의 보안을 매우 강하게 해줌. OAuth 2.0을 통한 유저 인증에도 적합.
- Spring Batch : 데이터 백업을 위한 데이터베이스 복제를 위해 일정 시간마다 스케줄링을 해 줄 예정.
데이터 양이 방대해질 것과, 스케줄링에서의 누락 문제에 대한 안전 대책으로 Batch 채택.
추후에 환율 데이터가 필요할 시, 매일 환율 데이터를 가져오는데도 사용할 것으로 고려 중.
- WebSocket : 실시간 상담 기능을 위해 WebSocket 기능 구현 예정.
- STOMP : WebSocket을 원활하게 사용하기 위한 프로토콜로서 채택.
- Kafka : 단일 모듈 내 비동기 처리 또는 모듈 간의 이벤트 브로커로서 채택.
- ⚠️Avro : Kafka 통신에 효율적인 이진 직렬화를 위해 고려 중. 사용 미정.
- ⚠️JSoup : 환율 데이터가 필요할 시, 적절한 스크래핑을 위해 사용할 것으로 고려 중.
- Querydsl : JPA를 통한 탐색의 원활성과 repository 함수의 단순화를 위해 사용.
- Redis : 적절한 캐싱 처리를 통한 속도 향상을 위해 사용.
- MySQL : 서버의 메인 데이터베이스로, 많은 관계형 데이터의 무결성을 위해 RDBMS를 채택.
- AWS S3 : 다양한 이미지를 저장하여 내부 DB의 사용량을 줄이고 손쉽게 이미지를 불러오게 하기 위해 사용.
- AWS SNS : 모바일 메시지 알람을 위해 사용. 초기 통신량이 많을 것으로 보이지 않아 프리티어 구독 예정.
- Google OTP : 관리자 계정의 보안 강화를 위해 2차 보안 인증 체계 도입 예정. - 데브옵스
- Docker : 배포 서버에 필요한 여러 소프트웨어를 컨테이너로 관리하기 위해 사용.
- Jenkins : 원활하고 안정적인 서버의 CI/CD 작업을 위해 채택.
- Vercel : 원활하고 안정적인 클라이언트의 CI/CD 작업을 위해 채택.
- Google Cloud Platform : 접근성이 용이하고 비교적 설정이 간단하며 적절한 비용으로 서버를 구축할 수 있어 채택.
❓이후 계획
: 서버를 모놀로식으로 구성하되, 멀티 모듈로 구현하려고 한다. 그에 대한 상세한 이유와, 어떻게 구성할지에 대해 고찰하고, 이에 대해 작성해 보려고 한다.
댓글