티스토리 뷰

프로젝트 주제 선정, 구상 및 기술 분석

 

📜 프로젝트 주제 선정

  : 최근 지인이 갤러리를 오픈하게 되었는데, 갤러리에서 취급하는 미술품과 전시회 일정 등에 대해 알려줄 페이지가 필요하다고 문의. 이전에 웹 서버 개발을 위한 작은 프로젝트를 여러 번 해봤고, 현재 클라이언트 부분도 공부를 하고 있어서, 실제로 트래픽이 발생할 수 있는 페이지를 만들고 운영해보는 것이 큰 경험이 될 것이라 보아 갤러리 페이지 개발을 결심하였다.

 

🗒️ 프로젝트 구상

  : 갤러리라는 테마를 생각해 여러 기능들을 구상해보았다.

   

  1. 유저 기능
    본 갤러리의 새 소식이나 일정을 얻기 위해 알림을 받을 수 있고, 상품 구매나 상품 문의, 상담 등의 서비스를 할 수 있
    도록 하기 위해 유저 관련 기능 필요. 알림 설정의 경우 이메일과 문자 메시지 발송을 이용할 예정.
  2. 상품 기능
    업로드 된 상품(작품)을 조회할 수 있고, 구매도 가능하도록 구현할 것. 다만 현재로서는 수요를 파악할 수 없기에 i'mport나 Paypal같은 외부 서비스를 사용하지 않고 구매예약 및 입금확인 형태로 진행할 것이며, 추후 추가를 시도해볼 예정.
  3. 채팅 기능
    고객과의 실시간 상담을 위해 작은 채팅 기능을 제공할 것이며, 문의가 발생하였을 시에도 해당 문의에 대해 문자 메시지 발송을 이용할 예정.
  4. 관리자 기능
    페이지를 보다 용이하게 관리할 수 있도록 관리자 페이지를 생성하고, 방문자 수나 상품 조회 통계 등 여러 서비스를 제공할 예정.

   큰 기능은 위와 같이 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 : 접근성이 용이하고 비교적 설정이 간단하며 적절한 비용으로 서버를 구축할 수 있어 채택.
이후 계획

  : 서버를 모놀로식으로 구성하되, 멀티 모듈로 구현하려고 한다. 그에 대한 상세한 이유와, 어떻게 구성할지에 대해 고찰하고, 이에 대해 작성해 보려고 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함