0. 참고 자료
[Cucumber 가이드라인]
나중에 협업할 때 유용하게 사용할 것 같아 첨부한다.
🥒 Cucumber 이해하고 잘 쓰는 방법 (tistory.com)
[연결할 때 참고하기]
맛집 지도 만들기(1) - Spring Boot + Vue.js 설치 및 연동하기 (tistory.com)
1. 개발 환경
[OS]
Windows 10
[IDE]
IntelliJ IDEA
[Versions]
Java 8
Spring Boot 2.7.17
Vue.js 2.5.2
Maven 4.0.0
Cucumber 4.3.0
MySQL (JPA)
2. Spring Boot + Maven + Cucumber 사용 이유
1. 인턴 회사 사수분께서 Cucumber를 사용한 테스트 자동화 개발을 과제로 부여
2. 내가 속한 팀이 Spring Boot + Maven 빌드 툴 사용
따라서, 팀에 조금이라도 기여할 수 있을만한 서비스 + 테스트 자동화를 구현해보고 싶었기에 이와 같이 결정했다.
+) 팀에 사용하는 버전을 최대한 맞추고 싶어 Java 8 을 사용했다.
Spring Boot 3.0 부터는 Java 17 이상이 요구되기 때문에 Spring Boot 버전도 2.7.x 로 맞췄다.
3. Cucumber 이란?
행동 주도 개발 (BDD) 을 지원하는 툴이다. BDD는 소프트웨어 개발에서 비즈니스와 테크니컬한 부분 사이의 문제를 줄이기 위해 시작되었다.
보통은 Gherkin (절킨) 이라는 문법을 사용하고, Step Definition 시스템으로 '사람이 읽을 수 있는' 방식으로 적는다.
참고로 Step Definition은 Given/When/Then, 혹은 이전 스텝을 따라가는 And로 시작되어야 하며 한글로도 작성이 가능하다.
나는 영어가 좀 더 직관적이라고 생각해서 영어 시나리오로 작성했다.
Step의 경우 시나리오 별로 파일을 구분하고 싶었는데,
그렇게 해버리면 "Could not Autowire. No Bean of" 에러가 뜬다.
시간이 없어서 해결 못하고 그냥 한 파일에 때려박아 끝냈는데..
이거에 대해서는 다시 테스트해보면서 해결해봐야겠다.
https://thalals.tistory.com/450
4. 데이터베이스 구조
테스트 코드 구현이 우선이기 때문에 DB는 간단하게 Employee 테이블과 Survey 테이블만 구현했다.
5. 주요 프로젝트 구조
최상위 폴더 ㄴ frontend ㄴ build ㄴ config ㄴ dist ㄴ src ㄴcomponent ㄴrouter ㄴstore ㄴsrc ㄴmain ㄴjava ㄴcom.example.project ㄴcontroller ㄴmodel ㄴrepository ㄴservice ㄴresources ㄴtest ㄴjava ㄴcom.example.project ㄴsteps ㄴutils ㄴresources ㄴfeatures |
일단 vue frontend 폴더는 최상위 폴더 안에 두고 개발을 진행했다.
backend 폴더를 따로 만들어서 아예 분리를 할까 했지만,
백-프 왔다갔다 폴더 여닫기가 번거로워서 그냥 백은 그대로 뒀다.
추가로 controller, model, repository, service를 분리해서
나 스스로도 빠르게 파일을 찾을 수 있도록 했고,
Service에 Interface 사용은 하지 않았다.
개인적인 견해이므로 나도 따라야할까 고민을 해봤지만..
직접 개발해보니 인터페이스를 굳이..? 라는 생각이 많이 들었다.
특히, 작은 단위의 프로젝트였기 때문에 더더욱 그 필요성을 느끼지 못했다.
6. 배운 점
일단 처음으로 풀스택 개발을 해봤다는 점,
프-백의 연동 방법을 깨달았다는 점에서 이미 크게 배웠다.
추가로, 이전 어흥올림픽에서 느꼈던 프론트 지식의 부재가 어느정도 해소가 되었다.
이걸 계기로 공모전에 풀스택으로 참가해서 flutter를 도전해 볼 기회도 생기고,
협업에 있어서 좀 더 넓은 시야를 갖게 되었다.
그리고, 기술적으로는 다음과 같은 지식을 얻었다.
- axios 통신
- vuex store (이거 특히 각 페이지에서 입력된 결과를 마지막 페이지에서 한번에 보낼 때 굉장히 유용했다!!)
- spring bean & 의존성 주입 (잘 모르고 하나의 컨테이너에 2개 이상의 bean을 등록했다가 matching bean을 찾지 못하는 오류 발생.. 이거에 대해서는 나중에 자세히 다뤄보겠다.)
- cucumber 테스트 적용법 등..
간단한 프로젝트임에도 처음인 부분이 많아서 많이 배웠고,
각각에 대해서는 하나하나 자세하게 다뤄 볼 예정이다.
이제는 인턴을 끝내고 프로젝트에 집중하게 될 시기가 왔는데,
Spring Boot를 또 사용하게 될 예정이니 같이 병행하면서 정리해봐도 좋을 것 같다!