이 프로젝트를 처음 시작한 건 올해 7월쯤입니다. 그 당시 저는 첫 프로젝트를 시작한지 약 2달이 되어가고 있었는데, 개발할 기회가 주어지지 않아 약간 상심한 상태였습니다. 회사에서 개발할 수 없다면, 그냥 개인적으로 개발을 해보면 되지 않을까?하는 생각이 들어서 주변 동료분들께도 말씀드렸더니, 저와 같은 생각을 하신 분들이 계시더라고요. 사실 저는 생각만 오래 하고 있었는데, 추진력이 좋은 동료분 덕분에 순식간에 첫 회의 날을 잡고, 프로젝트를 시작하게 되었습니다.
연습용 프로젝트인 만큼, 가벼운 기능만을 가진 웹사이트를 기획하기로 했고, 친구들끼리 안부인사를 주고받을 수 있는 사이트를 만들고 싶다는 아이디어가 나와 바로 채택하게 되었습니다.
저희 프로젝트의 목적은 스프링을 공부하는 것이었습니다. 회사에서 주로 사용하는 전자정부 프레임워크의 기반이 되는 스프링을 공부해서 업무에 도움이 되었으면 하는 생각이었죠. 그래서 호기롭게 우리 프로젝트를 스프링으로 구현하기로 결정했지만, 사실 셋 다 스프링을 해 본 경험은 거의 없거나 전무했습니다. 아무런 기반 지식 없이 시작하려고 하니 프로젝트 생성해서 git으로 공유하는 것부터 막히더라고요. 그래서 스프링 무료 강의를 같이 듣고 실습하는 것부터 시작하기로 했습니다.
저희가 수강한 강의는 인프런의 '스프링 입문 - 코드로 배우는 스프링부트, 웹MVC, DB 접근기술' 이라는 무료강의입니다. 프로젝트 생성부터 서비스 작성, DB연결, 빌드하고 실행하는 것까지의 과정을 아주 간단하게 연습해볼 수 있는 강의였습니다. 스프링 강의이긴 하지만, 개인적으로는 이 강의를 통해 개발 전반에 써먹을 수 있는 중요한 개념을 2가지 배웠습니다.
첫번째로는 객체지향 프로그래밍의 다형성을 좀 더 이해하게 되었습니다.
처음에 어떤 DB를 사용할지 정해지지 않은 상황을 가정해 'Repository'라는 인터페이스를 만들고, 하위에 MemoryRepository를 두었습니다. 나중에 DB를 H2로 변경하고, JPA를 사용하는 JpaRepository를 만든 후 새로운 repository를 사용하도록 설정파일만 수정해주니, 기존 코드를 수정하지 않고도 바로 정상작동하는 것이 정말 인상깊었습니다. 설명만 듣기보다 직접 실습해보니 얼마나 편리하고 안전한지 체감이 되었습니다.
두 번째로 배운 것은 테스트코드의 작성법입니다.
저는 강의를 듣기 전에는 테스트코드를 작성하고 실행해본 적이 없었습니다. 직접 해보니 기능 테스트 시간이 훨씬 단축되는 것을 느꼈습니다. 일부는 TDD(Test-Driven Develop)라고 테스트코드를 먼저 작성한 후 거기에 맞는 실제 코드를 작성하는 순서로도 작업을 한다고 하는데, 기회가 되면 시도해보고 싶다는 생각이 들었습니다.
스프링 기초 강의를 다 들은 후에는 우리 프로젝트의 설계를 하는 시간을 가졌습니다. 그 당시 회사 프로젝트에서도 기능정의서, 테이블 정의서 등 여러 문서들을 작성하고 있을 시기라 업무에서 배운 것을 간단하게나마 적용해 보았습니다. 참고로 'Homey'라는 서비스명은 제가 지었는데 볼수록 어울리는 것 같아서 만족스럽습니다.
프로젝트 시작 전, 앞으로 어떤 사이트를 만들 것인가 정리하기 위해 기능정의서를 작성하였습니다. 기능정의서 양식은 회사 프로젝트에서 사용하는 것을 간단하게 바꾼 모습입니다. 해당 기능 정의서를 기준으로 서로 구현할 기능을 분배하였고, 기능 구현 진행 상황을 체크할 때도 참고하였습니다.