본문 바로가기

카테고리 없음

개발 시작부터 SI 4년차 까지의 회고 - 2

반응형

계속 해서 학원을 다니기 시작했는데

 

여러 사람과 어울려서 이야기 하고 생각도 듣고, 또 코드 짜는것이 너무너무 재밌었다. 

 

논리적인 구현을 하다가 시스템적인 오류가 날때 구글링 통해서 stackoverflow에서 자료를 찾고, 적용하고..

 

지금 와서 생각하면

이 부분이 진짜 중요하고, 실수를 많이 범하는 부분 인듯하다.

물론 개발에 있어서, 논리적인 구멍 없이 잘 동작하게끔 만드는고 마감 기한 내 완성 하는것이 1순위 이지만

왜 그 오류가 났는지, 구글링 해서 나온 답변 혹은 코드가 왜 그 문제를 해결 하는지가 정말 정말 중요하다고 생각한다. 

( 자기가 개발하는 시스템에 대한 이해도를 높일 수 있다고 생각하기에.. 나중에 없어져 버릴 미네랄 지식들이 쌓이는 것을 방지하기 위해 ..)

 

그렇게 학원을 재밌게 다니고 혼자 나와서 앱 포트 폴리오를 만들고,, 

 단순 앱-서버간 CRUD 반복, 대충 사용법만 익혀서 만든 소켓 서버, 

가독성이 부족한 코드.. 

진짜 문제는 뭐가 문제인지 모른다는것인데.. 그걸 몰랐다.. 

부끄럽지만 그러곤 나도 이제 풀 스택 개발자다 라는 생각을 여렴풋이 했던것 같다

혼자 공부하는 것의 위험성이라는게 이런것 같다, 우물안에서 그것밖에 생각 못하는 .. 

 

그렇게 첫 회사에 들어가게 되었고,  웹뷰 기반에서 동작하는 Cordova 라는 프레임 웍을 사용하여 만들어진 프로그램인데,

공공 데이터 API를 연동하고, 바텀 시트에 데이터 뿌려주고.. 이러한 작업을 했다 ..

퍼블리싱이 안되어서 그부분에서 지연이 되어서 정말 많이 혼났던것 같다..

 

그렇게 개발 하다가, Cordova의 웹뷰와 네이티브 코드 간 통신을 위해 플러그인 개발을 해야하다는 한다고 헤매고 있었고 답이 안나와

선임 개발자분 한테 물어봤는데 , 모른다고 관심이 없으셨던게 생각이 난다.

 

어찌 되었건 . 그렇게 결과물이 안나와 , 맨날 혼나다 보니 자신감도 없어지고, 이상한 사람 취급 당하는것 같아. 금방 나오게 되었다.. 

 

이후 5인 정도 되는 소기업에 취업 하게 되었는데. 

 

처음 맡은 일은 안드로이드 앱에서 통신부분 수정 이었다. 

 

네이티브 코드는 익숙한 편에 속했기에 하루만에 고쳐버리고, 서비스 로직을 분리 해보겠다고 몇일간 분리작업을 했다. 

MVC패턴에서 MVVM.. 서비스 컴포넌트에 RunOnUiThreadfh UI 로직을 제어 하는등 모든 기능들이 들어가 있는 탓에. 관심사 분리가 제대로 안되어 있어서 유지보수가 어렵다는 생각에..  

 

그렇게 요청을 하고,, 전 회사에서 혼난 만큼 열심히 하자는 생각에

1-2일 정도 분리 작업을 하다가 ,, 하던 작업을 멈추고 ,

갑자기 사장님이 라즈베리 파이기반으로 돌아가는 C++ 프로그램 버그 수정을 맡겼다.. 

소스 분석을 하고,. 내부 구현 로직을 파악 한 뒤에 수정을 했던것으로 기억을 한다. 

그 뒤에는 아예 프로그램 개발을 맡겼었는데..

 

팀장님이 대표님한테 노발 대발 하셨던걸로 기억한다.. 왜 그렇게 하냐며..

근데 지금보면.. 그럴만한 이유가 있었다고 생각한다. 

 

좋은 소프트웨어가 나오지 않을것 이라고 생각 하셨거나

혹은 대책 없이 프로젝트 수주를 해오는 대표님 에게 화나셨다거나 ..

 

그리고 난 그 팀장님과 함께 프로그램을 만들기 시작했다.

팀장님은 펌웨어 , 나는 라즈베리파이..,,

디자이너 분도 계셨는데., 같이 디자인에 대해서 이야기도 하며 적용도 해보고, ( 디자이너분이 디자인을 만든 부분과 , 실제로 적용해서 표출 되는 부분이 달라서 이야기를 많이 했던것 같다.  )

계속해서 기존에 참고할 만한 소스가 있으니 열심히 구글링 및 새로운 기능을 구현하면서

첫 프로젝트 완성에 나는 너무 만족을 했었다.

 

*c++로 개발을 해보면서.. 

뮤텍스 세마포어를 어디에 쓰는지 , 포인터를 어떻게 쓰고, 바이트 단위 패킷을 어떻게 만들고 어떻게 송수신 하며, 

소켓 통신 시 해제 과정인 4HandShake 라는 과정에서 클라이언트가 먼저 연결 해제 패킷을 보내게 되는데 , 비정상 적인 종료에서

해당 패킷을 보내지 않을 수도 있어서 해당 상황도 고려해서 코드를 짜는

에 대해서 많이 알게 된것 같다. 

 

다만 조금 아쉬운 점이 있다면 , 로지컬적인 부분에만 몰두한 나머지, 깊이에 대한 생각이 별로 없었고,

개발자라면 성능 개선에 관심이 있어야 하며,  개발자간은 코드로 커뮤니 케이션을 하기 때문에 의도가 명확하고 읽기 쉬운 코드를 짜야 한다라고 생각하는데, 그때는 각자 맡은 파트를 개발하다 보니, 그 부분들을 미쳐 신경을 쓰지 못한것 같아 아쉽다..

 

내가 이런말을 해도 되는지 잘 모르겠지만, 처음 개발 하는 사람이 있다면 이런 말을 정말 해주고 싶다. 

" 라이브러리나 , 프로토콜을 썼다면 그것이 어떻게 동작는지 .. 기능 구현도 중요한데,  리팩터링도 해보고 , Assert 같은걸 잘 써서 의도가 명확한 코드를 만들어보고 다른 사람에게 보여주며 코드리뷰를 해보세요 ! , 한줄 한줄 조심 스럽게 왜 이렇게 동작 하는지.. "  라는 말을!

 

* 첫 이슈 리포트

라즈베리파이 화면을 구성 할떄 WxWiget 이라는 크로스 플랫폼 GUI 라이브러리를 사용 했는데. 

일정 주기로 수신된 데이터를 화면에 뿌려 줄때 깜빡거리는(Flicker) 이슈가 있었다. 

 

그때 생각 하기로는

버퍼 용도로 캐시 메모리에  그려줄 UI 요소들을  올려서 해결 해야겠다고 생각했고, 해결 방법을 찾기까지 3-4일 정도의 시간이 걸린것 같다,

 

스택 오버 플로를 뒤적거리다, 결국엔 wxAutoBufferdPainDC 라는 것을 사용해서 해결을 했는데.

해당 두개의 버퍼를 사용하고, 표출될 데이터를 하나의 백 버퍼에 그린 뒤 프런트 버퍼에 적용 하는 방식으로 동작하는걸 자동으로 처리 해주는 기능이다. ( 더블 버퍼링 )

 

처음부터 공식 레퍼런스를  꼼꼼히 읽었더라면 금방 찾았을텐데 라고 후회가 들기도 하고.  기술적인 이해도의 중요성을 다시 한번 깨닳는

다.. 

 

예전을 복기하며 다시 찾아보니 wxAutoBufferdPainDC 관련하여 또 다른 이슈가 올라온것 같다 링크를 올려 둘 테니 필요한 사람은 읽어보는것이 좋을것 같다.   https://github.com/wxWidgets/wxWidgets/issues/23841

 

wxAutoBufferedPaintDC can cause very slow rendering if drawing bitmaps with alpha on MSW · Issue #23841 · wxWidgets/wxWidgets

wxAutoBufferedPaintDC can cause very slow rendering if drawing bitmaps with alpha on MSW. The reason is that the backing store bitmap used by wxAutoBufferedPaintDC is a DDB and not a DIB. If you dr...

github.com

 

ps. 안드로이드 개발자로써 무언가 제대로 된 앱을 만든것 보다. 회사의니즈에 맞춰서 기한내에 이것저것 프로그램을 만든것 밖에 없고 해당 부분에 대해서 기억이 잘 나지 않아서 우울 했는데  이렇게 복기 해보니 마냥 쓸때 없었던건 아닌것 같기도 하고,,