Graphy, 프로젝트를 기록하다

mineii
6 min readMay 24, 2023

--

개발자를 준비하다 보면, 좋은 프로젝트에 대한 고민이 많아진다.

하지만 처음부터 좋은 프로젝트를 개발하는 것은 어렵기에 대부분 프로젝트 레퍼런스를 참고하거나, 주변에 평가를 받아 개선하기도 한다.

Graphy는 이를 도와줄 수 있는 프로젝트 공유 플랫폼이다.

개발자로 취업 준비 중인 사용자를 타겟팅한 포트폴리오 기록 사이트로, 사람들이 보다 좋은 프로젝트를 개발할 수 있도록 도와주는 것을 목표로 하고 있다.

System Architecture

CI/CD

Frontend

Frontend Tech Stacks : Vite, React, TypeScript, Tailwind, Recoil, Jest, React Testing Library

Vite

Vite는 빠른 빌드 속도를 제공하는 웹 프로젝트 빌드 도구이다. Es build와 브라우저 모듈을 사용하여 개발 모드, 개발 서버, 번들링, HMR 등의 기능을 통합하였다. 이는 간결한 사용법과 안정성을 보장하며, Webpack에 비해 빌드 시간이 대폭 줄어 수정 사항이 빠르게 반영된다. 이러한 특징들로 인해, 이번 프로젝트에서 Vite를 사용하기로 결정하였다.

코드를 수정할 때마다 수정사항이 바로 적용된다.

Tailwind

Tailwind는 스타일 네이밍에 대한 부담을 줄여주고, 반응형 웹 페이지를 간편하게 구축하는 데 도움을 준다. 또한 일관된 디자인 시스템을 쉽게 구현할 수 있고, 복잡한 오버라이드 없이 스타일 변경이 가능하다는 점 때문에 Tailwind CSS를 선택하였다.

이미지의 class 속성(typeScript에선 className) 안에 스타일을 직접 지정한 모습.

AWS S3

AWS S3는 데이터의 안정성과 확장성을 보장하며, 강력한 보안 기능을 제공한다. 또한 사용한 만큼의 비용을 지불하는 방식으로 서비스를 제공하여 비용 효율성이 뛰어나다. 이러한 특징들로 인해 AWS S3를 이미지 호스팅 서비스로서 선택하였다.

S3로 이미지를 업로드하는 모습

Recoil

Recoil은 Facebook이 개발한 상태 관리 라이브러리로, React 애플리케이션에서 컴포넌트 간 공유 상태를 관리하는데 특화되어 있다. 상태 간의 종속성을 명확하게 표현하고, 비동기 작업에 대한 최적화를 가능하게 하기 때문에 상태 관리가 복잡한 애플리케이션에서 높은 효율성을 제공한다. 무엇보다도 API가 간결하고 사용법이 직관적이므로 쉽게 학습하고 적용할 수 있었다. 이러한 이유로 이번 프로젝트에서 Recoil을 상태 관리 도구로 선택하였다.

Atom을 한 파일에서 관리하며 파일들끼리 State를 공유한다.

Backend

Springboot

Springboot는 Spring으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해주는 별도의 프레임워크이다. 자주 사용되는 라이브러리들의 버전을 자동으로 관리하고, 자체적인 내장 웹 서버 제공하기 때문에 빠르고 간편하게 배포할 수 있다. 또한, 독립적으로 실행 가능한 Jar 파일로 프로젝트를 빌드할 수 있어, 가상화 환경에 빠르게 배포할 수 있다.

Nginx

Nginx는 클라이언트로부터 동시 접속 처리에 특화된 웹 서버로 http 요청을 받아 요청 파일을 http 통신을 통해 응답해주는 프로그램이다. 서버 확장에 용이하고, 보안도 더 뛰어나다. 서버가 두대 이상이 될 경우 서버 부하를 줄여 주기 때문에 선택하였다.

SonaQube

코드 품질 분석 및 취약점 파악하고 코드 스멜과 코드 중복 제거하기 위해 SonaQube를 선택했다.

JaCoCo

Java 코드의 커버리지 체크 하기 위해 Jacoco를 선택했다.

Demo

메인 페이지
프로젝트 공유글 작성 페이지
프로젝트 공유글 검색 및 상세 페이지
프로젝트 공유글 수정 및 댓글

Member

--

--