파이썬 책을 보다가 예전부터 가지고 있던 질문 중에 하나인 "파이썬 프로젝트에 적합한 디렉토리 구조"가 무엇인지 궁금해져서 조사를 시작했다.

간단한 프로젝트인 경우에는 디렉토리 구조가 큰 문제가 안되겠지만 몇 달씩 작업을 하는 프로젝트의 경우에는 디렉토리 구조을 잘 잡는 것도 중요한 문제 중에 하나다. Java 쪽에서는 이미 maven을 이용해서 디렉토리 구조를 생성하는 것이 사실상 표준이 됐는데, 파이썬이나 다른 언어에서는 이런 도구들은 없는지, 사람들은 보통 어떤 구조를 선호하는지, 혹시 어느 정도 표준안이 있는데 내가 모르고 있는 것은 아닌가 싶어 조사를 시작했다.

일단 구글링부터 시작했는데 나만 이런 생각을 하고 있었던 것은 아니었는지 이와 관련된 질문([2],[3])이나 글([1],[4],[5])들을 쉽게 찾을 수 있었다. 알고 보니 파이썬 쪽에서는 이게 패키징 문제와 엮여서 꽤나 중요한 문제였나보다. 파이썬의 패키징 프로그램(distutil, setuptools)의 문제로 인해 프로젝트 디렉토리 구조를 어떻게 잡느냐에 따라 패키징하고 배포 과정에서 버그가 많이 발생했기 때문이다. [5]를 보면 배포를 위해 파이썬 프로그램을 패키징하는데 정말 많은 신경을 써야 하는구나 싶다. 

그래서 어떤 글들을 보면 아래와 같이 프로젝트 디렉토리(여기서는 "funniest") 밑에 동일한 이름의 메인 패키지 디렉토리가 나온다. 패키킹 도구가 디렉토리 구조를 그대로 사용하기 때문에 메인 패키지 이름을 바꿀 수 없는 것 같다. 대부분의 경우 프로젝트 이름과 그 프로젝트에서 개발한 패키지 이름 (또는 프로그램 이름)이 동일하기 때문에 이런 일은 자주 발생한다.
1
2
3
4
funniest/
    funniest/
        __init__.py
    setup.py
cs

그런데 [1]을 보면 이것은 이미 옛날 이야기이고 아래와 같이 "src" 디렉토리를 사용할 것을 권하고 있다.  
├─ src
│  └─ packagename
│     ├─ __init__.py
│     └─ ...
├─ tests
│  └─ ...
└─ setup.py

당분간은 내가 작성하는 코드들이 패키징되서 배포될 일도 없고, 개인적으로 동일한 이름의 디렉토리가 있는 것보다 이게 더 보기 좋기 때문에 앞으로 내가 담당하는 프로젝트에서는 "src" 디렉토리를 만드는 안을 선택하려고 한다.

"src" 디렉토리 사용 여부 말고도 이슈가 하나 더 있는데 바로 단위 테스트용 코드를 어디에 놓을 건인가 하는 문제다. 프로젝트 최상위 디렉토리 밑에, 즉 src와 동일한 곳에 "tests" 디렉토리를 만드는 것은 상당히 보편화된 것 같다. 그런데 여기에다만 테스트 코드를 놓을 것인지, 아니면 src/pck1 밑에 tests 디렉토리를 만들고 실제 테스트 코드는 여기에 놓을 것인지에 대해서는 사람마다 다르다. 개인적으로는 $PROJECT_ROOT/tests에 넣는 것이 실행 코드와 테스트 코드를 더욱 명확하게 분리할 수 있기 때문에 더 좋다고 생각한다.

여기에 사전이나 메타 데이터를 저장하는 rsc/, 문서를 저장할 docs/, 유틸성 스크립트를 저장할 scripts/, 마지막으로 README.rst까지 포함하면 아래와 같은 구성이 된다. 

$PROJECT_ROOT
 ├─ README.rst
 ├─ docs
 ├─ rsc
 ├─ src
 │  ├─ packagae
 │     ├─ __init__.py
 │     └─ ...
 │  └─ main.py ....
 ├─ tests
 │  ├─ package
 │     └─ ...
 |  └─ test_main.py
 └─ setup.py

꼭 필요한 것들만 넣어서 간단하게 만들려고 해도 꽤 복잡해졌다. 게으름을 추구하는 똑똑한 프로그래머분들이 이런 귀찮은 작업을 매번 반복하지 말라고 cookiecutter([6], [7])라는 것을 만들었다. 그런데 이건 단위 테스트는 물론이고 CI, code coverage 도구 연동, 다중 python 버전 지원 등등 기능이 워낙 많아져서 회사 프로젝트처럼 사용할 수 있는 도구도 한정되고, 외부로 코드 공개를 할 수도 없는 경우에는 배보다 배꼽이 더 클 것 같다.

프로젝트 디렉토리 구조는 프로젝트를 새로 시작할 때마다 신경쓰였던 문제였는데, 마침 급한 일도 끝난 시점에 이렇게 조사, 정리를 하게 되서 나름 뿌듯하다. 이 주제가 생각만큼 단순하지 않고 그동안 많은 이슈들이 있었다는 점에서 한편으로는 놀랍기도 했고, 다른 한편으로는 새로운 사실들을 많이 알게되서 재밌기도 했다.


참고자료



WRITTEN BY
trowind
자연어처리, 프로그래밍, 여행, 음식, 삶의 기록

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이제 일본에 온지도 벌써 3주 째가 되었다. 한국에 있을 때도 그랬지만, 일본에 와서도 1~2 주 동안은 적응하느라 이래저래 바빠서 포스팅을 못했는데 이제부터라도 꾸준히 해보려고 한다.


일본에서의 첫 번째 포스팅 주제는 우리 부부가 다니는 "동경중앙교회"이다. "다니는"이라고 하니까 뭔가 오래동안 다닌 곳처럼 들리는데 우리 부부은 일본에 온지 고작 3주 째이고, 그래서 당연히 이 교회에 다닌 지도 3주 밖에 안되었다. 


처음에 일본에 올 때 우리 부부와 주변 분들이 걱정했던 것 중에 하나가 바로 올바른 교회를 찾는 것이었다. 일본이 원래 다신교 문화가 강한 곳이라 기독교가 많이 퍼지지 않았다는 것은 어느 정도 알고 있었다. 이런 것은 다른 나라에서도 볼 수 있는 일종에 문화적 특성이라 크게 걱정할 부분은 아니라고 생각했었다. 그런데 아내가 유학원에서 상담을 받을 때 그곳에서 오리엔테이션 한 내용 중에 하나가 바로 "이상한 교회"가 굉장히 많으니 조심하라는 것이었다. 그 유학원은 기독교와 전혀 상관없는 기관인데도 이런 교육을 하는 것을 보고 문제가 상당히 심각하다는 것을 느꼈다. 한국에서 우리가 일본에서 다닐 교회를 미리 찾아보는 과정에서도 이런 문제들을 조심하라는 글을 심심치 않게 볼 수 있었다.  그래서 더욱 주의하면서 우리가 다닐 교회를 물색하였고, 그러던 와중에 이곳 동경중앙교회를 알게 되었다.


[교회 건물 모습. 2007년에 건축한 건물이라고 한다. 2층에 예배당이, 지하 1층에 식당이 있다.]




[타카다노바바쪽에서 본 건물. 계단에 처진 찰창(?) 덕분에 건물 찾기는 쉬운 편이다]







우리가 다니는 동경중앙교회는 타카다노바바역 근처에 있고, 위치로 보면 와세다 대학 공대 캠퍼스의 북쪽에 위치하고 있다. 한인 타운이 있는 신오쿠보 근처, 즉 와세다 대학 공대 캠퍼스 남쪽에도 동일한 이름의 교회가 있어서 처음에는 인터넷 상에서 정보를 찾을 때 꽤 혼란스러웠다. 신오쿠보에 있는 동경중앙교회도 꽤 큰 (아마 우리가 다니는 교회보다 교인이 많은 것 같다) 교회이다. 





우리 교회는 주일 예배가 많지 않다. 오전에 1부 (9시 30분), 2부(11시) 예배가 있고 오후에는 청년부를 위주로 하는 찬양 예배가 있다. 교회 홈페이지는 따로 없고 다음 카페에 페이지를 개설해서 사용하고 있는 듯 하다. 교회에 대한 자세한 정보와 위치는  이곳에서 확인할 수 있다.


2부 예배가 끝난 후에는 교인들과 지하 1층에서 식사를 한다. 식사 메뉴는 단촐하지만 식탁마다 김치가 푸짐하게 놓여 있는 것이 인상적이다. 여담이지만 이제는 교회 식당을 보면 "나중에 여기서 설거지 봉사할때 어떻게 해야 하지, 동선은 어떻게 되지" 등등을 먼저 생각하게 된다^^.


당연하 이야기지만 처음 이 교회에 정착하기로 한 것에는 목사님의 설교가 결정적이었다. 그 전에 한국에서 다녔던 주님 기쁨의 교회와는 교단이 다르기 때문인지 말씀을 해석하는 부분에서는 약간의 차이가 있다. 하지만 큰 맥락에서는 성경의 말씀을 있는 그대로 해석하려고 하고 뭔가 잘못된 주장을 하지 않는다고 느껴졌다. 또한 임태호 담임 목사님이 매우 열성적으로 설교하는 모습이나 청년부 사람들의, 비록 수가 많지는 않았지만, 밝고 자유로운 모습에서 '이 교회는 괜찮겠다'라는 생각이 들었다.


일본에서 한인 교회를 찾는 분들에게 한가지 당부하고 싶은 것은 가능하면 "재일대한기독교회"에 소속된 교회에 가라는 것이다. 그나마 이렇게 하는 것이 이상한 교회를 선택하지 않을 가능성이 높다. 한가지 안타까운 것은 저곳 홈페이지를 들어가도 정작 내가 가려고 하는 교회가 재일대한기독교회 소속인지를 알 방법이 마땅히 않다는 점이다. 그래서 저곳에서 검색을 해서 가고자 하는 교회에 대한 소식이 나오는지를 보거나, 아니면 반대로 가려는 교회가 재일대한기독교회 소속이라고 정확히 밝히는지 확인해야 한다.


비록 예배당도 작고 교인도 많지 않은 교회이지만 건강한 교회를 만나서 참 다행이라고 생각한다. 앞으로 일본에서 생활하는 동안 신앙을 읾지 않고 잘 생활할 수 있을 것 같다.


마지막으로 한가지. 교회는 골목 안쪽에 위치하고 있어 조용하지만, 5분 정도만 걸어나오면 바로 타카다노바바 번화가여서 근처에 맛집들도 많고 카페도 많다. 당연 스타벅스나 도토루도 있는데, 공부를 할 목적이라면 R.O.STAR라는 샌드위치 카페를 추천한다. 이곳은 매장도 넓고 1인용 테이블도 많이 배치되어 있고 사람들도 대부분 노트북이나 책을 펴놓고 공부하고 있어서 오히려 스타벅스보다 공부하기에는 적합하다. 다만 사람이 많아서인지 wi-fi가 제대로 동작하지 않는 단점이 있다. 이곳에 대해서는 다음 기회에 포스팅해볼 생각이다.




WRITTEN BY
trowind
자연어처리, 프로그래밍, 여행, 음식, 삶의 기록

트랙백  0 , 댓글  1개가 달렸습니다.
  1. 비밀댓글입니다
secret



  • 별점: 1/5
  • 평가: 제목과는 다르게 Spark에 대한 내용보다는 다른 내용들이 주를 이루고 있는 느낌. Python에서 데이터 분석을 위해 자주 사용되는 여러 패키지를 소개하다보니 정작 Spark에 대해서는 깊이있게 다루지 않고 있다. 나라면 다른 사람에게 추천하지 않겠다.




WRITTEN BY
trowind
자연어처리, 프로그래밍, 여행, 음식, 삶의 기록

트랙백  0 , 댓글  1개가 달렸습니다.
  1. 좋은글 감사
secret