얼마 전부터 토비의 스프링을 공부하기 시작했습니다. 책을 읽으면서 필요한 부분만 따로 구현해 연습해보고 싶었는데, 마침 책에 수록된 예제 코드가 출판사 홈페이지에 공식적으로 올라와 있더라구요. 그런데 공식 예제 코드가 eclipse STS에서 작성한 코드라 IntelliJ에서 실습해보기가 약간 까다로웠던 데다가, 사용한 MySQL 버전도 현재 상용화되어있는 버전과 맞지 않아 실습에 어려움이 많았습니다. 그래서 IntelliJ에서 gradle을 통해 실습해볼 수 있도록 레거시 코드들을 포팅 하고, 도커를 이용해 MySQL을 띄워 실습을 진행해봤습니다. (현재 ch5-fianl 코드만 포팅 완료하였습니다. 순차적으로 계속 진행할 예정이며 어떻게 포팅 하였는지 포스트 작성 중입니다.) 본 포스팅는 토비의 스프링 예제 실습을 위한 환경을 어떻게 구축해야 하는지, 그리고 어떻게 예제를 어떻게 실행시키는지에 대한 포스팅입니다.
예제 코드 저장소 : https://github.com/Deocksoo/Toby-spring-exmaple
실행 환경
토비의 스프링 예제를 gradle 빌드 도구를 사용하도록 porting 하였습니다. 책의 예제를 그대로 따라 해 볼 수 있게 하기 위해 예제 코드들이 사용하는 라이브러리의 버전은 최대한 변경하지 않고 실행 환경만 porting 했습니다. porting 작업과 테스트는 모두 IntellJ IDEA 2019.2.3 Ultimate Edition을 통해 진행하였습니다. 테스트 환경은 아래와 같습니다.
- jdk 1.8
- Spring framework 3.1
- MySQL-connector-java 5.1.48
- MySQL 5.7 (user docker container)
예제 실행 가이드
본 가이드는 토비의 스프링 6장을 실습하기 위한 가이드입니다. 5장에서 완성된 최종 코드를 이용해 진행합니다.
1. 예제 코드 import
1-1) 프로젝트를 시작할 디렉터리에 위의 깃허브 저장소를 클론 합니다.
cd project_directory
git clone https://github.com/Deocksoo/Toby-spring-exmaple
1-2) 클론 한 프로젝트를 아래와 같이 import 합니다.
2. MySQL Server 설치 및 실행
현재 상용화되어있는 MySQL 버전은 8 버전인데, MySQL 8 버전을 그냥 사용하는 경우 프로젝트 예제 코드에서 DB에 접근하기 위해 사용 중인 MySQL-connector-java 5.1.48 버전과 프로토콜이 맞지 않습니다. 물론 MySQL 8과 호환되는 MySQL-connector-java 8 버전을 사용해도 동작하기는 하지만, 예제 코드가 MySQL 5 버전을 기준으로 작성되었으므로 혹시 모를 삽질을 예방하기 위해 MySQL 5를 사용하는 것이 좋겠습니다.
2-1) Docker를 이용한 MySQL server 설치
(혹시 docker를 사용해본 경험이 없으시더라도 프로젝트를 진행하는 데에는 어려움이 없으니 계속 진행해주세요.) 본 예제 실습에서는 docker를 이용해 MySQL을 설치합니다. Docker가 설치되어 있지 않다면 먼저 docker부터 설치해주세요. 굳이 docker를 이용해서 설치하는 이유는 격리된 환경에서 충돌 없이 예제 실습용 MySQL Server를 띄우기 위함입니다. Mac의 경우 이전 버전의 MySQL을 설치하는 것이 상당히 까다롭기도 한 데다가, 사용자 local에 MySQL 8이 이미 설치되어 있는 경우 아얘 5 버전이 설치되지 않는 경우도 있는 것 같습니다. Docker가 이미 설치되어 있으시다면 docker를 실행시키고, 아래 command를 따라가 주시면 됩니다.
cd docker // 프로젝트 디렉터리 안의 docker 디렉터리로 이동
docker-compose up -d // docker-compose-yml 설정에 따라 MySQL server가 설치됩니다.
현재 docker-compose.yml 에서 프로젝트 진행에 필요한 DB 설정을 대부분 자동으로 해주고 있습니다. 위 명령어만 입력하면 MySQL 5 server, 프로젝트 진행에 필요한 DB 계정 정보, MySQL 데이터베이스까지 모두 자동으로 생성해줍니다. 따라서 위의 yml 설정을 사용하는 경우 /sql/create_mysql_database.sql과 /sql/create_mysql_user.sql은 따로 실행하지 않아도 괜찮습니다.
2-2) MySQL 서버가 잘 설치되어서 실행 중인지 아래 command를 통해 확인해봅니다.
docker ps // 현재 실행 중인 container들을 모두 보여줍니다.
3. Database에 각 모듈별로 필요한 table 생성
docker-compose.yml에서 database는 자동으로 만들어주지만, 각 장의 예제에서 사용할 테이블은 직접 sql을 실행시켜서 만들어주셔야 합니다. 모듈별로 sql 디렉터리가 하나씩 존재하는데, 실습하려는 예제 모듈에서 해당 디렉터리를 찾아 아래와 같이 user_create.sql을 실행합니다. sql을 실행할 때, 아래처럼 IDE가 제공하는 기능을 이용하면 보다 편리하게 테이블을 생성할 수 있습니다.
이제 DB 설정까지 모두 완료되었습니다!
4. 테스트 실행
4-1) 학습 예제를 작성하기에 앞서, 마지막으로 모든 설정이 제대로 다 되었는지 확인하기 위해 테스트를 한번 돌려봅시다. 그러려면 IDE 설정에서 확인해야 할 것이 하나 있습니다. settings 또는 preferences로 들어가 주세요.
4-2) 이제 정말로 테스트 실행! ch5-fianl 모듈의 test들을 모두 실행해주세요. 만약 제대로 수행되지 않는다면 본 포스팅의 맨 아래 5번 항목을 참고해주세요.
모든 테스트를 pass 한다면 성공입니다. 이제 토비와 함께 행복 코딩하러 갈 시간이네요.
5. 만약 마지막 단계까지 진행하고도 제대로 테스트가 수행되지 않는다면
5-1) 캐시를 날리고 restart 하는 경우에, gradle이 build 해놓은 것들까지 다 날아가버려서 application context가 제대로 시작되지 못했다는 문구와 함께 예외가 발생하는 경우가 있습니다. 그럴 때에는 아래처럼 gradle로 다시 한번 build 해 주세요.
5-2) CoreMatchers에서 deprecated된 is 메서드 때문에 complie 에러가 발생하는 경우
2019.11.15 현재 CoreMatchers에서 클래스의 인스턴스인지 확인하는 기존의 CoreMatcher.is 메서드가 deprecated 되어있습니다. 따라서 특정 인스턴스의 클래스 타입을 체크하는 테스트를 작성해야 하는 경우 CoreMatcher.instanceOf 메서드를 사용해야 합니다.
ps. 혹시 프로젝트에 문제가 있거나 내용 수정이 필요한 경우 피드백 환영합니다 :)
'Spring' 카테고리의 다른 글
Vue.js + Spring boot 개발 환경 및 빌드 환경 설정 (16) | 2019.11.22 |
---|