- 연구실 홈페이지 개발 프로젝트를 소개한다.
계기
- 대학원 재학 중일 때 노후화된 연구실 홈페이지 유지보수를 담당하였다. 연구실 홈페이지는 난잡하게 개발되어 있었고 관련 문서가 하나도 없었기에 유지보수에 큰 어려움을 겪었다.
- 과거 회사 재직 중일 때 Spring을 사용하여 업무 시스템을 개발한 경험이 있다. 당시 초급 개발자로서 요구사항과 기간에 쫓겨 해당 프로젝트를 진행하였다. 프로젝트는 요구사항에 맞게 정상적으로 동작하였으나 비효율적인 구조와 난잡하게 개발됨에 따라, 코드 퀄리티와 유지보수성이 떨어졌다.
- 이러한 계기들로 Spring을 사용하여 체계적으로 개발하고 싶다는 생각을 가지게 되었으며, 이번 연구실 홈페이지 개발에 도전하게 되었다.
기존 홈페이지
- 기존 PHP로 개발된 홈페이지 화면이다.
목표
- 노후화된 연구실 홈페이지를 Spring boot를 사용하여 새로 개발한다.
- 가장 최적화되고 효율적인 방법을 찾아서 개발하며, 새로운 기술 스택을 사용한다.(Maven 대신 Gradle 등)
- 체계적인 프로젝트 구조를 가진 상태에서 개발한다.(패키지 구조, 폴더 구조, 사용하는 의존 라이브러리 등)
- 기존 연구실 홈페이지의 데이터 마이그레이션을 수행한다. 단, 일부 불가능한 데이터의 경우 마이그레이션에서 제외한다.
- 새로 개발한 연구실 홈페이지의 서버 운영 및 배포를 수행한다.
- 현재 명확환 요구사항이 정의되지 않았으며, 기존 홈페이지를 바탕으로 개발하되 연구실 홈페이지 관리자와 지속적으로 소통하면서 이를 반영할 계획이다.
- 프로젝트 개발 과정을 블로그에 게시한다.
- 기존과 동일하게 연구실 홈페이지에서 사용하는 언어는 한글이 아닌 영어로 개발한다.
프로젝트 기간
- 예상 기간: 2020.04.14 ~ 2020.12.31
실제 기간: 2020.04.14 ~ 2021.04.01
- 참고로 해당 프로젝트는 언제 완료될지 보장하지 못한다. 왜냐하면 개인 시간을 투자하여 개발하는 프로젝트이기에, 회사 업무가 바빠지면 시간 투자가 어렵기 때문이다.
- 2021.04.01 프로젝트 개발과 배포과 완료되었다. 시간이 많이 지연된 이유는 회사 업무, 생각하지 못한 요구사항 구현 그리고 버닝 아웃으로 많은 시간이 소요되었기 때문이다.
블로그에 게시되는 글은?
- 웹페이지를 개발하면서 해결한 문제와 코드를 순차적으로 공유하려고 하였다. 구현된 코드는 버그 및 결함이 발생할 수 있기에, 프로젝트 개발에 따라 코드가 지속적으로 변경 되었다. 따라서 지속적으로 변경되는 코드를 소개하기 어렵다고 느꼈기에, Project Lab 카테고리 게시글에서는 프로젝트 진행 과정을 소개한다.
- 프로젝트를 개발하면서 얻는 지식, 기능을 구현하고 어려움을 해결하는 과정을 간략하게 소개할 예정이다. 이 중 조금더 깊숙히 다루고자 하는 주제는 별도의 게시글로 작성할 예정이다.
- 우선 벡엔드를 우선하여 개발한다. 프론트엔드와 디자인 쪽 지식이 많이 부족하기에 해당 부분은 추후 개발할 예정이다.
프로젝트의 완성도
- 1년 남짓 스프링을 사용한 지식만으로 필자의 프로젝트가 높은 완성도를 보장할 수 없다. 또한 현재 업무와 전혀 다른 분야 도전하고 있기에 전문성을 보장할 수 없다. 물론 개인적으로 끊임없이 고민하고 공부하여 부족한 부분을 채울 것이며 이외에도 완성도를 높이기 위해서 다음과 같은 노력을 할 것이다.
1. 도서 참고
- ‘처음 배우는 스프링 부트 2’ 도서를 참고하여 개발할 것이다. 스프링 부트 게시판 코드를 참고한 도서로서, 프로젝트 개발에 큰 도움이 되었다. 앞으로 다른 도서를 참고한다면 추가하도록 하겠다.
자세히 보기: http://www.hanbit.co.kr/store/books/look.php?p_code=B4458049183
2. 개발자 친구 리뷰
- 주변에 Spring을 사용하는 개발자 친구들이 몇 명있다. 개발한 코드는 친구들과 리뷰를 진행할 예정이다. 실무자의 의견을 듣고 이를 반영하여 효율적인 방향으로 개발하도록 노력하겠다.
마음가짐
- 필자는 프로젝트 실무자로 투입될 때 프로젝트와 관련된 지식을 모두 깊숙하고 자세히 알아야 하며, 이에 따른 부가적인 지식을 모두 공부해야 한다고 생각하였다. 이러한 생각은 언젠가 부터 공부 습관이 되었다.
- 회사에서 수석 개발자분의 이야기를 듣고 이러한 습관은 버려야 한다고 생각하였다. 수석 개발자분은 전임 개발자분에게 “해당 기능을 구현하는데 모든 내용을 알아야 할 필요가 있을까? 너가 개발하고 싶은 것은 ㅇㅇ인데, ㅁㅁ만 알아도 된다. 더 깊숙히 공부하기 위해서는 대학원에 진학해야 한다” 라고 말하였다. 완벽히 이해하지 말아라 실무자는 어떻게 사용하는지를 이해하면 된다.
- 나는 이 조언을 듣고 큰 깨달음을 얻었다. 지식에 호기심을 가지고 깊숙하게 공부하는 습관은 하나의 분야를 철저하게 파고드는 연구 분야에서는 좋은 습관이다. 하지만 시간에 쫓기는 실무자에게는 좋은 습관이 아닌 것 같다. 물론 시간에 여유가 있다면, 이를 공부하는 것은 실무자의 역량을 개발하는데 도움이 되겠지만…
- 앞으로 지식을 공부할 때 많은 시간을 투자하지 않겠다. 궁금한 지식만을 완벽하게 습득할 수 있도록 공부하겠다. 또한 해당 지식을 빠르게 찾을 수 있도록 책갈피 역할을 하는 키워드까지 공부하겠다.
- 기능 개발이 완료되면 JUnit으로 단위 테스팅 수행한다. 이후 기능이 정상적으로 수행되는지 검증한 다음, 프로젝트에 적용할 것이다.
- 코드의 가독성을 위해서 위해서 적절한 위치에 주석을 추가하여 개발할 것이다.
개발 환경 및 주요 사용 기술 스택
- 개발 환경 및 주요 사용 기술 스택은 다음과 같다. 상황에 따라서 추후 변경될 수 있다.
- Java를 처음 접하였을 때 부터 전자정부프레임워크를 지나 20.06까지 eclipse를 Java IDE로 사용하였다. 하지만 eclipse의 부족한 안정성, 성능 그리고 편의성으로 인하여 Spring boot 개발에 Visual Studio Code를 사용하기로 결심하였다.
- 현재 IDE로 eclipse를 사용하여 개발하고 이를 기반으로 블로그 게시글을 작성하였지만, 앞으로 eclipse 대신 IntelliJ를 사용할 예정이다. eclipse의 자잘한 버그, 성능 그리고 불편한 편의성에 한계를 느꼈기 때문이다.
개발 환경
- OS: Windwos 10
- Java: Oracle JDK 11.0.8
- DB: 10.1.44 MariaDB
- WAS: 내장 Tomcat
- IDE: IntelliJ 2020.1.4 또는 Spring Tools 4 for Eclipse(sts-4.7.0.RELEASE)
벡엔드
- 백엔드 프레임워크: Spring boot 2.3.2
- ORM: Spring Data JPA
- 동적 쿼리: QueryDSL
- 의존성 관리: Gradle 6.5.1
프론트엔드
- Bootstrap 4.5.1
- jquery 3.5.1
- 템플릿 엔진: Thymeleaf 3.0.11
- WYSIWYG editor: Summerntoe -> CKeditor 5로 변경
Comments powered by Disqus.