새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


일일일(잡담)

3 분 소요

지난 한달간 정말 미친듯이 일에 달려들었다..

어느정도 정리가 되면 포스팅을 한땀한땀 하려 했지만 양이 많아져버려서 간만에 블로그엔진도 업그레이드하고 잠깐 브레이크타임 겸 남겨본다..

정말 문서하나 없이 git에 의존하며 달렸다.. 정말 내가 git인지 git이 나인지 모를 정도의 코드량

물론 난 취미도 일이지만 준비하고 있던 vue.js는 당연히 손도 못댄 웹이기 때문에 일인 것이다.

프로그래밍 강박이 좀 심한 편인데…

  • 뭔가 개선된 코드나 공통점을 찾으면 꼭 모듈화를 시키고..

  • 아주 먼 미래의 일까지 계획된 코드를 짜며… 최소 100년은 굴러갈 코드

  • 어떤 변수든 디비든 데이터는 왠만하면 가변이며… MAX_LEN 이런거 잘 안 넣음..

  • 사이드이펙트가 생기지 않도록 방어코드는 꼭 필요한 곳에만 사용한다..

  • 코드를 작성하다 네이밍이 맘에 드는 것이 생기면 전체 파일을 다 뒤져서 맘에드는 것으로 변경한다..

대부분 겉으로 괜찮다 싶으면 어느정도에서 프론트는 마무리를 하는데..

위와같은 강박으로 인해 안의 내용은 정제하고 정제하고 모듈로 만들어서 코드량이 1/3으로 오히려 시간이 지났는데 줄었다..

예를 들어 시간 차를 구하기 위해 펑션을 손수 만들어서 5줄에 걸쳐 만들었다면..

맘에드는 라이브러리를 만나서 moment().duration(t2-t1).asSeconds() 이런식으로 줄여지니 코드량이 더 적어지는 것이다.

mongo에서도 단순한 find query에서 aggregate를 맛보고는 기존 find는 레거시로 치부하고 대부분 바꿔버렸다..

한달간 4.3에서 4.5로 2개의 minor ver을 올렸다

한페이지 커스터마이즈

한페이지로 다양한 유저와 다양한 데이터를 다 수용해야되는 죽음의 미션

다들 따로 만드는 게 더 간편하고 쉽고 직관적이지 않나?가 일반적인 반응인데

그렇게 하면 당연히 코드 한줄 수정하려면 최소 6곳을 변경해야한다..

결국 디비에 사용자 언어와 회사별 표시되는 내용 디바이스별 수용하게 만들었다..

설계

처음엔 noSQL의 가변필드가 마냥 멋지고 신나기만 했지만..

내 필요에 의하거나 요청에 의해 변경되고 추가되는 것에서 지옥을 만났다..

어떤 장치는 RPM이 없고 어떤 회사는 그룹이름을 노선으로 바꿔야하고.. 그러려면 undefined 조건으로 뭔 가 안보이게 하든 지우든..

예를들어 RF Card의 id를 담는 컬렉션을 만든다면 장치와 운전자와 회사와 그날 서머리와 조인해야했다..

한달간 만든 컬렉션(테이블)만 8개에 로우 개수는 5만개…

친절한 플랜을 준 사람도 없으며 그저 내 머리로 만들어놓고 아니다 싶음 바꾸고를 각 테이블마다 몇십번은 한 것 같다

수신부

대략 6가지 종류의 각양각색의 소켓 데이터와 왠 깨진 데이터에 http 인젝션 공격까지 예외 처리를 해야했다.

프로토콜도 내가 작성하고 배포 관리까지 하고 있는데다가 괜한 필 받아서 펌웨어 관리나 수신로그 페이지 같은 것도 만들어버렸다..

장애가 왔을 때의 긴장감은 이루 말할 것이 없다..

정말 무서운 것은 서버는 단 한코드의 실수가 리셋을 일으키기때문에 벡엔드 수신부 코드는 정말 한줄 한줄의 의미가 강하다..

운영

문제는 개발도 하면서 오퍼레이터 노릇도 해야하는 것이다..

촉박한 시간에 매뉴얼을 만들 시간을 낼 수도 없으니 할 줄 아는 개발한 사람이 계정 추가니, 차량번호 변경등 권한등 직접 추가/수정을 해야한다..

일종의 Q/A까지 하는 셈…

서버

많은 일을 해봤다..

펌웨어, 윈도우, 모바일, 서버, 디비 등등..

비슷한 규모의 프로젝트 시 난이도 별로 정리하면..

모바일 < 펌웨어 < 윈도우프로그램 < 서버 가 된다..

모바일이야 리스크도 적고 레퍼런스와 둥지(OS)가 훌륭한 지원을 해줘서 책보고 짜면 된다..(물론 난 안보지만..)

펌웨어는 작은 OS를 만드는 격이며 각종 드라이버 잡는 것이 어렵다..

그 후 어플리케이션 쪽은 누가 짜느냐가 중요하고 그래서 유지보수가 오히려 더 중요하다.

윈도우프로그램은 모바일과 비슷해보이지만 레퍼런스가 중구 난방이고 C#이 아니면 역시 누가 짜느냐에 따라 달라진다…

테스트용 윈도우프로그램 제작이야 일도 아니지만 엔드유저가 일반사용자에 배포까지 고려한다면 그 자질구레함은 정말 헬이다..

하지만 왠만한 수준의 윈도우 프로그램이야 한달안에 왠만하면 못 짤 것 없을정도로 아직도 몇몇클래스가 키보드에 자동 입력될 정도이다.

문제는 서버인데.. 정말 해도해도 왜 끝이 안나는 것일까..

이유는 별거없다. 그저 너무 스콥이 커서 그렇다..

지원

고작 둘이서 디비설계부터 프론트 백엔드를 다하고 있다..

한달 2억개의 로데이터를 인덱스 몇개에 의지하고 있는데 점점 느려졌을 때는 매일 밤이 두려울 지경..

mongoDB정도는 상용서비스를 받고 싶지만.. 돈도 없고…

모든 이슈는 알아서 풀어야한다.. 이슈가 너무 많고 머리 아플 때는 급 우울해진다..

왜 내가 이런 고생을 할까.. 적당한 수준에서 별 판단 없이 누가 일 주면 야금야금 하고 싶을 때도 많아진다..

평가

대부분의 사람들은 서버는 그냥 모바일 앱, 윈도우 프로그램 같은 것이다..

일화로 어떤 분은 자기 피씨에 깔아달라고 한 적도 있다.. 마치 인스톨쉴드 넣어서 exe 설치하는 듯..(바탕화면에 바로가기 아이콘 넣어주면 되긴 하지만..)

서버 수신부의 모듈을 만들기 위해 수백번의 정제를 거쳐 멀티서버에서 수신되게끔 고안했고 로깅과 다양한 디버그를 하는 중심에 서있지만…

잘되면 오히려 이슈가 없기 때문에 그냥 없는 일이 되어버린다..

사실 설명해봐야 입만 아프고 괴리감만 선사하기 때문에 설명은 풀-패스

결론

일에 대한 성과도 평가도 없기 때문에 일 자체에 대한 감흥은 없다..

그저 묵묵히 미래지향적인 my world 제작만 하고 있을 뿐

태그: ,

카테고리:

업데이트:

댓글남기기