토이프로젝트는 나의 취업을 위한 포트폴리오 & 개인적인 공부를 위한 프로젝트이다. 회사에서의 결과물은 당연히 깃허브에 공유 할 수는 없었다. 개인적으로 공부했던 내용도 대부분 강의의 예시 코드를 따라하는 수준이었기에 따로 내 세울만한 결과물도 없었고, 나중에는 이런 코드는 별로 의미가 없는 것 같아 깃허브에 올리지 않기로 했다. 결국 지금까지 나의 PR을 위한 코드적 결과물은 하나도 없는 상태로, 이 결과물을 만들기 위한 목적으로 토이 프로젝트를 기획하고 있다.
1인 개발과 몇가지 전제조건을 가지고 프로젝트를 기획 및 설계 할 예정으로, 제약 사항이나 기타 특이사항을 미리 인지하고 적용하려고 한다.
사용자 요구사항을 먼저 정의 하는 것이 아닌, 나(개발자)의 특수성을 먼저 정의 한다.
이 전제 조건을 가지고 나는 다음과 같은 사실을 인지하고 비합리적인 선택을 한 프로젝트를 구상했다.
학습한 내용을 구현 해보는 것을 전제로 하기 때문에 익숙하지 않은 기술스택을 마구 고를 예정이다. 만약 가장 익숙한대로 구현 및 배포까지 한다고 가정하면
Thymeleaf로 화면을 구성, Java 스프링 프레임워크 MVC 구조의 레이어드 아키텍처로 구현 및 배포는 AWS에서 EC2의 모놀리스 형태로 구현하는 것이 가장 빠르게 완성 결과물을 볼 수 있을 것이다.
나는 별도의 사이드 프로젝트 개념이 아니기 때문에 (운이 좋다면 수익화도 도전 해 본다던지의 협업의 전제 조건이 없음) 최대한 사용해 보고 싶은 기술과, 비록 처음 사용 해보는 기술이라도 관심이 있다면 써보는 것을 선택하기로 한다. 이 이유로 구현의 속도는 더딜 것으로 예상한다.
위 내용과 이어진다. 나는 적어도 MSA의 구성과 함께, 백엔드의 설계 구조에서도 헥사고날 아키텍처를 구현 해 보려고 한다. 1인 개발의 특성과 그리 높지 않은 복잡도가 예상됨에도 학습을 위한 기술 선정을 이유로 정말 과도한 오버엔지니어링을 전제로 개발 할 것이다. 만약 사이드 프로젝트 내지는, 스타트업의 경우라면 일단 빠른 시간내에 외부에 공개할 서비스를 만드는 것이 훨씬 경제적으로 나은 선택이기에 이것도 아주 비합리적인 선택 중 하나가 된다.
설계 자체를 나름대로 열심히는 할 예정이지만, 시행착오를 겪을 것을 예상하면서 대략적인 뼈대만 구상 해 놓고, 구체적인 부분은 비워두거나 언제든지 변경 가능하도록 설계할 예정이다. 설계가 완벽하면 좋겠지만 완벽이란 것은 존재하지도 않고, 과도한 설계가 오히려 구현을 방해 할지도 모른다. (1인 개발의 특성상 내 머릿속에서 끊임없이 설계를 바꾸는 편이 좋다고 생각한다.)
추구하는 설계구조나 방향은 있지만 실제로 구현을 해보면서 어려움이 느껴진다면 과감히 다른 방향으로의 전환도 예상하고 있기에 애자일 한 개발을 빙자한 아주 유연한 설계와 개발 체계를 지향으로 삼을 예정이다. (달리 말하면 이도저도 아닌 설계를 하겠다!)
위 준비요건을 인지하며, 나는 토이프로젝트의 주제를 선정했다. 특별한 아이디어가 있거나 한 것은 아니고, SNS 서비스를 기본 주제로 삼기로 했다.
대규모 트래픽을 경험 할 수는 없겠지만, 그런 상황을 가정 하고 Kafka를 통한 이벤트 분산을 구현 해 보고 싶었다. 또 SNS 서비스 자체는 도메인을 이해하는데 아주 특별한 지식이 필요하지도 않고, 익숙한 주제라는 판단도 있다.
그리고 여기에 나름의 아이디어만 한 스푼 추가 해서, 나는 토이프로젝트 명 '나혼자챌린지' 라는 이름으로 모의 SNS 서비스를 구현 하려고 한다.
사용자가 일상의 소소한 자신만의 도전과제를 선언하고 (ex. 일주일 동안 야식을 먹지 않겠습니다!)
그 진행 상황과 결과를 다른 사람들과 공유하는 SNS 서비스를 구상했다.
전반적인 단계 설계와 과정은 이렇게 될 예정이다.
그리고 이것을 구체화 하기 위한 첫 순서인 설계 단계부터 다음 포스팅으로 이어진다.