본문 바로가기

프로그래밍/기타

wget 을 이용한 Spring 관련 레퍼런스 & API 문서 다운로드

사람마다 다른 부분일수는 있겠으나 나는 개인적으로 Spring 관련 프로젝트들의 reference 및 API 문서를 다운로드 받아서 보관하는 편이다. SI 프로젝트를 참여하다보면 내가 일하는 환경이 외부 인터넷을 사용할 수 없는 경우가 종종 있다. 그렇다고 스마트폰으로 접속해서 보기에는 화면이 너무 작아 보기 불편한 점도 있다. 그래서 개인적으로 내가 가지고 있던 기존 문서가 minor 버전이 바뀐게 있으면 새로 받아서 이를 업데이트 하는 편이다(minor 버전 정도 바뀌면 프레임워크나 라이브러리 내부적으로 바뀌는 부분이 존재하기 때문이다. 조금 더 부연설명하다면 Spring의 경우 5.1.2 이런식의 구조인데 가운데 숫자인 1에 해당되는 부분이 minor 버전이다) 이러다 보니 자주 이용하게 되는 것이 linux의 wget을 이용하게 된다. 개인적으로 개발환경을 vagrant linux 가상머신의 docker를 사용하다보니 wget을 이용하는데 있어서 불편한 환경은 아니다. 그러나 문제는 wget에서 사용되는 파라미터가 너무 다양하고 복잡한지라 제대로 된 이해를 하지 않고 사용하면 오히려 자기가 원하는 방향과는 전혀 다르게 동작할 수도 있다. 그래서 개인적으로 나 자신의 기록 보관 차원및 다른 이들에게도 조금이나마 도움이 되길 바라는 마음에서 이 글을 남겨둔다.

 

제목에서 Spring을 얘기했으니 Spring 기준으로 얘길 해보겠다. 브라우저로 https://spring.io/projects 에 들어가면 Spring Framework 를 포함한 각종 Spring 기반의 프로젝트들(ex: Spring Boot, Spring Batch, Spring Data JPA, Spring Security 등)을 볼 수 있다. 여기서 본인이 원하는 프로젝트를 클릭해 들어가면 해당 프로젝트에 대한 상세화면이 나온다. 지금부터는 이해하기 쉽게 하기 위해 Spring Data JPA 관련 문서를 받는다고 가정하고 설명하겠다. Spring Data JPA의 경우는 Spring Data의 하위 프로젝트 이기 때문에 Spring Data를 클릭해서 들어갈 수 있다. 아래의 화면은 Spring Data를 클릭한뒤 왼쪽 메뉴에서 Spring Data JPA를 클릭하여 나온 화면이다.

 

왼쪽 메뉴에서 Spring Data JPA를 클릭하여 나온 화면

 

그림을 보면 LEARN 메뉴에 빨간색 박스를 그려놨는데 이 LEARN 메뉴를 클릭하면 다음의 화면이 나타난다.

 

LEARN 메뉴를 클릭하여 나온 화면

 

화면을 보면 버전이 나와있고 해당 버전의 Reference 문서를 볼 수 이는 Reference Doc. 링크와 Javadoc API 문서를 볼 수 있는 API Doc. 링크를 확인할 수 있다. 이제 2.2.6 버전의 Reference 문서를 보기 위해 2.2.6 버전의 Reference Doc. 링크를 클릭해보자. 그러면 다음과 같이 나타날 것이다.

 

Reference 문서 화면

 

이 Reference 문서의 브라우저 주소창에 빨간 박스로 표시해놓은 주소를 보자. 현재 이 문서의 주소는 https://docs.spring.io/spring-data/jpa/docs/2.2.6.RELEASE/reference/html/#reference 이다. 여기서 우리는 2.2.6 버전과 관련된 모든 문서를 보기 위해 브라우저로 https://docs.spring.io/spring-data/jpa/docs/2.2.6.RELEASE/ 를 접근해보자. 그러면 다음과 같이 나타난다.

 

어디서 많이 본 익숙한 형태의 화면이지 않나? 흔히 FTP 서버를 웹브라우저로 접근할때 나오는 형태의 화면이다. 여기서 Parent Directory를 클릭하면 상위 디렉토리로 이동할 수 있다. 그리고 api 디렉토리는 Javadoc API 문서 관련 html이 들어있는 디렉토리이고 reference 디렉토리의 경우는 Reference 문서 관련 html 이 들어있는 디렉토리이다. 즉 현재 보는 위치에서부터 다운로드를 받으면 관련된 프로젝트의 해당 버전에 대한 Reference 문서및 Javadoc 문서를 받을 수 있게 된다.

 

약간 번외적인 얘기이지만 Spring Data 관련 프로젝트들은 Spring Data Commons 라고 하는 공통된 프로젝트를 사용하고 있다. 그래서 이것도 같이 받아두면 좋다. 그러나 현재 이 위치는 Spring Data JPA 이기 때문에 Spring Data Commons를 갈려면 Parent Directory 링크를 클릭해서 Spring Data Commons에 이동해야 한다. 현재 주소에서 Parerent Directory 링크를 3번 눌러주게 되면 https://docs.spring.io/spring-data/ 로 이동하게 된다(현재 주소인 

https://docs.spring.io/spring-data/jpa/docs/2.2.6.RELEASE/ 에서 jpa/docs/2.2.6.RELEASE/ 를 지우고 바로 주소 이동을 해도 된다) 아래의 화면은 해당 화면으로 이동한 화면이다.

 

 

여기에 나와있는 디렉토리 이름만 봐도 대강 Spring Data 프로젝트의 어떤 하위 프로젝트 관련 문서인지를 알 수 있다. 여기서 commons 나 data-commons를 가면 Spring Data Commons 프로젝트와 관련된 문서를 받을수 있다.

 

이렇게 내가 받아야 할 문서들의 URL을 알게 되면 이제는 구체적으로 wget을 사용해서 문서를 다운로드 받으면 된다. 다음과 같이 명령어를 사용해서 받으면 된다

 

wget -m -np -nH --cut-dirs=3 -e robots=off https://docs.spring.io/spring-data/data-jpa/docs/2.2.6.RELEASE/

 

사용된 옵션들에 대해 설명하면 다음과 같다

 

-m 미러링을 하겠다는 의미(사이트 복제)
-np 상위 디렉토리로 이동하지 않겠다는 의미. 미러링 즉 사이트 복제이기 때문에 wget은 문서 안에 있는 링크를 분석해서 해당 링크로 걸려있는 문서도 같이 받게 되는데 이 과정에서 현재 받고자 하는 디렉토리의 상위 디렉토리로 이동할 수 있는 상황이 발생할 수 있다. 그러나 reference 문서나 api 문서는 버전 디렉토리(여기서는 2.2.6.RELEASE)의 상위 디렉토리와 얽혀있는 부분이 없기 때문에 상위 디렉토리로 이동하지 않는 옵션을 준다
-nh host directory를 만들지 않겠다는 의미. 미러링을 하게 되면 호스트명과 같은 이름의 디렉토리(여기서는 docs.spring.io 가 된다)를 만들고 그 밑에 하위 디렉토리를 만들어가며 사이트를 복제하게 되는데 이렇게 하지 않겠다는뜻이다.
--cut-dirs=3 경로에서 상위 3개의 디렉토리는 미러링에서 제외하겠다는 의미이다. 현재 위의 경로를 보면 4개의 디렉토리(spring-data, data-jpa, docs, 2.2.6.RELEASE)가 있는데 미러링이기 때문에 spring-data, data-jpa, docs 디렉토리도 다운로드를 받을려고 하게 된다. 이것을 제외시키고 2.2.6.RELEASE 만 받고 나머지 3개의 디렉토리는 다운로드 대상에서 제외하도록 하기 위해 cut-dirs=3 을 주어서 spring-data, data-jpa, docs 디렉토리는 복제 대상에서 제외시키고 2.2.6.RELEASE 디렉토리만 복제 대상으로 삼는것이다. 
-e robots=off -e 옵션은 환경변수를 주는 옵션이다. 흔히 운영되는 웹사이트들은 검색엔진과 관련하여 robots.txt 파일을 만들어서 특정 파일은 검색엔진이 수집하지 못하게끔 하는 운영을 하고 있다. 이 robots.txt 파일 때문에 미러링에 지장을 줄 수 있기 때문에 robots=off 옵션을 주어서 미러링을 원활하게 할 수 있도록 해준다

 

다운로드를 받는 사이트의 경로에 따라서 --cut-dirs 옵션에 들어가는 수치만 그때그때 달라질뿐 나머지 옵션은 고정이다. 이렇게 옵션을 주어서 wget을 실행하면 해당 경로에 있는 디렉토리 및 하위 디렉토리와 각 디렉토리에 속해있는 파일들을 받을 수 있다. 이러한 방법으로 Spring 에서 제공하는 각종 문서들을 다운로드 받을 수 있다. 예시로는 Spring 프로젝트를 사용했지만 Spring 프로젝트가 아니어도 기타 다른 사이트들의 문서들을 받고자 할때도 응용해서 사용할 수 있다.