본문 바로가기

1인개발일기/개발계획, 넋두리.

1인개발 - 근데 저 개발 처음입니다만? (2/2)

전편에 적었든 계획은 이랬지.


1. 언어도 익힐겸 딱 봐도 뻔한 필수 모듈 2개만 만들어 보자. 솔직히 모듈을 어떻게 분리하고(파일?함수?) 어떻게 불러와서 쓰는지도 모르지만.


2. DB라는걸 만들고 서버에 그걸 올려보자. 근데 서버는 사야하나?


3. 서버에 올린 DB에 접근해보자.


4. 슬슬 다음에 무슨 모듈을 만들고 어떻게 상호작용시킬지 막막해질거다. 이제 딱 봐도 뻔한 모듈같은건 없다.


5. 다 엎어버리고 아키텍쳐를 짜보자. 아키텍쳐링은 괜찮은 툴과 사용법을 구글링한다.


6. 요구사항 문서같은게 선행되야 하면 간단히 작성해보자. 엑셀같은데다가. 나중에 아키텍쳐랑 연결되게끔 하면 더 좋으려나.


>>추가. 형상관리, 예외처리, 자원(메모리,트래픽 등)관리에 대한 로드맵도 만들자.



1번, 언어학습과 모듈 만들기.


Python은 워낙 초보친화적이라고 소문도 났고, 요즈음 쿨한(근데 10년도 넘었단다) 개발자 정신으로 똘똘 뭉쳐있는 진영이라 그런지 한글,영어 자료가 구글에 차고 넘쳤다. 크롬 북마크에 너댓개 페이지를 추가해가며 열심히 오픈소스 라이브러리를 긁어와서 필요한 기능을 구현하는건 쉬운편.


파이썬의 결정적 단점 : 파이썬 2.x와 3.x가 파이썬 내장 라이브러리도 많이 바뀌었고, 외부 라이브러리도 버전별로 호환이 안되는 경우가 있다. 근데 소스코드나 도큐먼트(README)만 봐서는 호환 여부를 확인하기가 어려웠다. 2to3라는 툴을 받아서 돌리면 내장 라이브러리는 쉽게 3.x버전으로 변경적용을 해주지만, 외부 라이브러리는 답이 없다. 그래도 막힐때마다 "라이브러리이름 + python3"으로 구글링하면 호환여부를 울면서 묻는 외국형들과 그에 달리는 친절한 답변때문에 확인이 가능하다!


궁금증 : 디버깅을 돌리다 breakpoint에 멈췄을때 내부변수값을 확인할 방법이 있나? 아직 모르겠다. 모듈이 몇개 안돼서 그냥 python console에 원하는 만큼만 코드를 입력하고 변수를 보고있는데, 본격 개발전에 디버깅 도중 내부변수 확인하는 방법을 알아내야지. (알아내면 이 글을 수정한다!)


쓰는 툴 : PyCharm이라는 에디터 겸 이것저것 도와주는 놈을 쓴다. 문법, 오류검사 등등 에디터 기능도 만족하고 가상환경과 프로젝트, 파일관리도 마음에 든다. git을 설치하면 add, commit, pull & push정도는 지원하는것 처럼 보이고(툴바에 버튼들이 있다) 뭔가 쿨하다. 단 git는 몇시간 안써봤지만 그래도 익숙한 GUI기반의 소프트웨어의 도움을 받고자 한다. 이 역시 본격 개발때 적용할 예정.


모듈은 함수로 선언한놈을 import X나 from X import Y로 불러와서 쓰면 된다. from X 는 X전부가 아닌 X.py안에 있는 Y함수만 불러오는 자원친화적인 기능인데, 잘은 몰라도 왠지 파이썬이 나름대로 최대한 자원을 아껴주는 프로그래밍언어같은 느낌이 든다.




2번, 3번. DB어쩌구.


어... 1번 하면서 예제좀 따라하다 보니까 얼떨결에 서버도 만들고 돌리고 접근까지 했다. 마법의 세계네 완전.

python manage.py makemigration

python manage.py migrate

이 두개의 콘솔명령어 사용 타이밍만 두어번 더 읽었더니 별로 무서울게 없다. 서버 어쩌구를 도와준 라이브러리는 Django라는 이름인데, 구글링하면 양질의 예제와 설명이 후두둑 떨어진다. 개중 추천하는건 [Django걸스의 비디오 페이지 만들기] 비슷한 문서(gitbook)다.

 2번, 3번이 얼떨결에 빨리 끝나버리는 바람에



4번, 막막해지기 가 바로 찾아왔다.


그래서 다음으로 넘어갔다.




5번, 아키텍쳐링.


회사의 주먹구구식 코딩전쟁터 속에서 꼭 제대로 해보고싶었던건 문서작성보다도 아키텍쳐였다. 그런데 또 찾아보니 아키텍쳐라는게 계층(?)이 엄청 다양해서 대충 읽어보면서 알탭알탭하면서 뭘 만들어나갈 스케일이 아니다.


일단 상업용 무료툴을 받고, 그와 관련된 도움말이나 예제를 찾아보기 위해 또다시 구글링. 솔직히 구글이 월정액 $10씩 받아도 나는 그냥 내면서 쓰고싶다 구글 진짜 짱이야...


구글뽕에 취해서 찾아낸 아키텍쳐툴(UML툴이라고 부르는게 왠지 더 맞는거 같다.)이 두어개 있었는데 StarUml 5.0을 선택했다. 버전빌드업을 어떻게 했는진 모르겠는데 StarUml2,3 보다 5.0이 더 구버전인듯 했고, 그게 마지막 무료인듯 했다. PlantUml이라는 녀석도 해외에서 많은 추천을 받고있었는데 그냥 링크가 있길래 StarUml5.0을 다운로드.


좀 더 뒤적이다 보니 아래의 이미지를 얻었다. 이걸 조금 추리면 이 포스팅의 핵심이 나온다.



첫째로, 저기 있는걸 다 할 필요는 전혀 없다. 사실 저기 있는 활동을 다 한다면 이미 프로젝트의 볼륨이 말이 안되게 큰거다. 1인 개발 주제에. 단, 뭔가 한다면 위에서부터 아래로 그리고 화살표에 역행하지 않는 수준으로 해보리라 마음먹었다. (일단 그림의 등장인물은 5명+개발자 1그룹이다. 지금도 어떤 회사의 어떤 프로젝트에서는 혼자 1인 3역 4역 해내고 있는 공밀레쇳물들이 있겠지. 화이팅)


그냥 각각의 키워드를 검색을 해보던지 유추를 해보던지 하면서 내가 필요한 활동만 추려보기로 했다. 다행이 앞의 1~4단계 뻘짓을 거치면서 그정도 선구안은 길러진 것 같다. 나에게 필요한, 그러니까 뭘 해야할지에 대한 막막함도 없애주고 나중에 작업 번복하는걸 방지해 줘야할 활동들이다.

 Use-case model을 통해 '어떤 모듈 및 기능(module and feature)'이 필요할지 분리하는데 하루. 예비 고객님들과 함께 빠진게 뭐가 있을지 도출하는데 하루.

 그걸 바탕으로 유저부분 내용은 요약하고 서비스의 기능적인 부분을 상세화 해서 System model작성.

 99%이상이 서버에서 돌아갈 서비스기 때문에 아~~주 간략하게 User interface를 짜고, Abstract Class Model은 대충 System model이랑 비벼서 퉁쳐보기로 했다.

 Deployment model도 뭔가 엄청 필요해보이는데 일단 뭔지 모르기도 하고 이미 할것도 많으니 알아보는것조차도 잠시 미뤄둔다.


 직접 해보니, 다른건 몰라도 use-case model은 필수필수다. 이걸 모델링하는데 들이지 '못한' 시간의 10배를 나중에 개발에 쏟아부어야 할 것 같은 확신이 든다. 당신이 1인 개발자인데 이런 방법론적인게 너무 싫고 하나도 모르겠으면 use-case model 저거 딱 하나만 배워서 해보시길.



 6번, 설계문서는 거의 생략하기로 했다. 그냥 UML툴의 계층중 하나에 얼추 녹여버리면 그만일 것 같다.

아닐까?




 추가된 7번 중 내가 제일 체화하고 싶은 형상관리 사용. 미리 고민해놨던 브랜치와 퍼블리싱 구조를 머리속에서 이 프로젝트랑 연결해 봤는데 나름 문제없이 잘 돌아갈 것 같다. 1인개발인 만큼 협업보다는 나 자신과의 (기억력)싸움에서 이기기 위한 툴이다. 무자비한 주석질과 형상관리질로 망각과 싸워나갈 예정.

 예외처리는 현업자에게 팁을 물어봤는데, 대충 하는얘기가, 뭔 플러그인인지 라이브러리인지로 거의 다 잡고 있단다. 예외처리가 안되서 생기는 오류들을. 그런데 왠지 코드에 미리 예외처리를 염두해 둔 라인을 넣어놓는게 기본처럼 느껴진다. 그래서 플러그인등은 잠시 잊고 예외처리에 좋은 프로그래밍 습관같은걸 좀 익숙해지려고 한다.




어쩌다보니 일에 병목현상같은게 생겨서 잠시 쉴 짬이 났다. 30시간동안 안자고 프로젝트를 진행했다. 졸려 죽겠는데 재밌는데 너무 졸려서 자야겠다. 일어나면 빨리 use-case 완성하고, UML툴에서 지원하는 변환어쩌구 기능이 대체 UML에서 어디까지 도출해내주는지 알아봐야겠다. 모듈구조도 만들고 파일껍데기도 생성해 주면 얼마나 좋을까? 그런 개꿈이나 꾸면서 자자.


+) 슬슬 분야별로 세부적이고 유용한 내용들이 생길텐데, 생기길 바라는데, 그런건 각각의 카테고리에 쓰자. 이 넋두리 카테고리는 천상천하무용지물의 넋두리로 남겨두고 싶다.