대회 주제
2022 공개 SW 개발자 대회가 열렸고, 이에 참가하고자 주제를 찾아보다가,
우연히 행정안전부에서 제공하는 전자정부 웹사이트 품질관리 가이드라는 것을 발견했습니다.
가이드를 보니 검사자가 하나하나 수기로 확인해야 하는 작업이었고, 웹 접근성, 호환성, 편의성 등 종류도 많은 것을 볼 수 있었습니다.
그리고 문득, 이걸 자동화할 수 있는 서비스가 있다면 엄청 편리하겠다는 생각이 들었습니다.
따라서, 이를 주제로 전자정부 웹사이트 품질 진단 자동화, Quality Control Automation 프로젝트를 시작하게 되었습니다.
프로젝트 흐름
프로젝트는 크게 다음과 같은 시나리오로 흘러갈 것으로 계획했습니다.
- 사용자로부터 진단을 원하는 웹사이트 주소를 받는다.
- 해당 웹사이트에 대한 진단을 수행하고, 진단 결과를 대시보드를 통해 제공한다.
- 진단에 대한 피드백 또한 제공해 향후 개선에 사용할 수 있도록 한다.
품질 진단을 일일이 구현하는 것은 현실적으로 불가능해보였습니다.
품질 진단 항목과 항목별 진단 절차가 구체화되어야 하고, 웹사이트의 소스 코드를 필요로 하기 때문입니다.
따라서 품질 진단에 대한 자료 조사 중, Google에서 제공하는 Lighthouse라는 API를 알게 되었습니다.
Lighthouse
이는 웹사이트 품질을 진단하기 위한 자동화된 오픈 소스로, 웹사이트의 성능, 접근성, 검색 엔진 최적화, PWA 여부등을 측정합니다.
각 항목별 진단과, 결과에 대한 피드백을 제공하고 있어 현재 개발하려는 서비스와 매우 유사한 기능을 제공하고 있다고 판단했습니다.
따라서 이를 사용하고자, https://github.com/GoogleChrome/lighthouse을 참고하니, node 환경에서의 사용법만 명시되어 있었습니다.
서버 개발은 스프링 프레임워크를 사용할 계획이었으므로, 다음과 같은 방법으로 이를 해결하려 했습니다.
- AWS EC2 인스턴스에 스프링 애플리케이션을 올릴 계획이므로, EC2 인스턴스에 node 환경을 세팅합니다.
- node 환경에 lighthouse 패키지를 받습니다.
- 사용자로부터 입력받은 웹사이트 주소를 인자로 받아 lighthouse를 실행시킬 shell script를 미리 작성해두고, 스프링 애플리케이션에서는 이를 실행시키도록 합니다.
- lighthouse에는 진단 결과를 json으로 저장해주는 옵션이 있기에, 이 결과를 파싱함으로써 진단 결과를 사용할 수 있게 됩니다.
스프링 세팅
이제 프로젝트의 가닥이 잡혔기 때문에 https://start.spring.io/를 사용해 스프링부트 프로젝트를 다음과 같이 생성했습니다.
- 자주 사용하기도 했고, 라이브러리 추가가 비교적 편한 Gradle (빌드 속도도 Maven보다 빠르다는 장점이 있죠)
- 언어는 Java! (아직 Kotlin은 공부하지 않았기 때문에 ..)
- Spring Boot 버전은 2.7.2
- Packaging은 Jar을 사용합니다. (스프링부트를 사용한다면 기본적으로 Jar을 사용하기도 하고, JSP로 화면을 구성할 필요도 없기 때문에..)
- Java 버전은 11을 사용했습니다.
그리고 사용할 라이브러리와 이유는 다음과 같습니다.
- 개발자들의 편의를 제공하는 Lombok
- RESTful 서비스 개발을 위한 Spring Web
- JPA 사용의 편의를 위해 Spring Data JPA
- mysql을 DB로 사용하기 위해 MySQL Driver
- 구현 코드에 대한 신뢰성 보장과 테스트 코드 강제화를 위한 Spring REST Docs (사실 이전까지는 Swagger UI를 사용했었는데, 이번엔 테스트 코드의 강제화라는 이점(?)을 위해 사용해보았습니다.)
이와 같이 프로젝트를 시작하게 되었고, 스프링 서버를 구현하면서 발생하는 이슈들을 다뤄볼 예정입니다.