2011년 2월 8일(화)의 일기
정말 나는 깔끔한 사람이다. 이렇게 깨끗한 기숙사라니...!
회사 기숙사에서 살기 때문에 회사까지 출퇴근 시간은 매우 짧다. 일어나서 대충 씻고, 옷 입고 출근을 한다. 출퇴근거리가 가까워(그렇다고 합리화중이다) 외모는 별로 꾸미지 않는다. 아… 이래서 개발자 같다는 소리를 많이 듣는 건가…;; 뭐 그래도 괜찮다. 난 개발자니까… (슬픈데? ㅠㅠ)
회사다...내가 다니는 회사
'이스트소프트'에 오기 전에 다른 회사에서 1년 넘게 개발자로 일하다가 여기 와서 2년 정도가 되어가고 있으니 난 소위말해 3년차 개발자다. 완전한 신입도 아니고, 그렇다고 팀장급도 아닌... 아직도 배울것은 많고 해야할게 많은 사람이다. 여튼 회사가 마음에 드는 점은 사장님도 개발자 출신이고 임원진들도 다 개발자 출신 분들이라 개발자들에 대한 배려가 좋다는 것이다. 컴퓨터 사양도 쿼드코어 CPU를 사용할 정도로 매우 좋은 편이다.
14인치 모니터일때는 정말 몰랐다. 모니터를 3대쓰는 사람도 있는데... 난 그냥 듀얼로...
모니터는 역시 22인치!! 거기에 복장도 프리 …개발자들이 업무를 하는 환경은 이전 회사와 비교했을 때 훨씬 괜찮은 것 같다.
11시까지 출근이지만 조금 일찍 나왔다. 카페테리아에서 가져온 빵 조각을 입에 물고 커피를 든 채로 내 자리로 간다. 어제 야식으로 먹다가 남겼던 마지막 피자 한 조각이 눈앞에 아른거린다... 그냥 다 먹을걸!
내 친구..소희...는 아니고 비주얼스튜디오...;;
어제 밤새 돌려놓은 테스트 PC에서 결과를 받아본다. 다행히 잘 통과했다. 그리고는 나의 친구이자, 동반자인 ‘비주얼 스튜디오’를 실행시킨다. 지금까지도 그랬고 이후에도 내 인생에서 앞으로 생길(꼭 생길거다…) 여자친구보다 더 오랜 시간 함께할 녀석… 이젠 좀 지겹기도 하지만
1) 그래도 반갑다 친구야…
2) 가끔 버전업이 될 때마다 나름 신선한 재미가 있다.
3) 그래서 요즘은 이클립스에서 Python도 해보고 있다.
소심하게 찍어봤다
내가 속해있는 팀은 ‘알약커널개발팀’이다. 다양한 개발 분야가 있지만 그 중에서 운영체제의 커널 레벨 프로그래밍을 담당하는 곳이다. 조금 더 내가 하는 일을 말해보자면, 알약의 실시간 감시와 방화벽 개발을 한다고 할 수 있다.
물론 직업병인지 모르겠으나... 가끔 McCafe를 McAfee로 착각하는 경우도 있긴 하다
오전에는 어제 작업 메모를 보면서 무엇을 어디까지 했는지, 그리고 오늘 해야 할 일은 무엇인지를 정리해둔다. 개발이라는것이 딱딱 떨어지는 그런 것이 없기 때문에 업무량과 하루하루의 목표치를 정하고 달성하는 것이 참 중요한 것 같다. 예전에는 개발은 ‘건축’을 하는 것으로 생각했었는데, 요즘에는 건축이 아니라 하나의 ‘생물’을 키우는 것 같은 느낌이랄까?
대략 오늘의 업무 목표를 생각하고, 참고할 수 있거나 즉시 사용이 가능한 소스 코드가 있는지를 확인해본다. 우리 회사는 하나의 제품을 완성해서 패키지화 하기 때문에 장기간에 걸쳐 손질된 많은 라이브러리들이 있는데, 이럴 때 도움이 많이 된다.
물론 이런 점심은 아니다. 이건 지난 종무식때 사진...;;;
점심시간..게임존에서 쉬는 사람들도 있고, 게임하는 사람도 있고, 탁구치는 사람들도 있고... 다양하다
오후 일과는 그야말로 코딩의 연속!
이라고는 했지만, 실제로는 설계 혹은 디자인 측면에서 고민하는 시간도 만만치 않다. 현대의 소프트웨어 개발은 복잡도와의 싸움이라는 말이 있다. 작업이 계속될수록 코드 베이스가 커진다. 코드는 점점 이해하기 어려워지고 비대해져 간다. 이럴수록 지속적으로 추상화 레벨을 높여 전체 로직을 이해하는 데 필요 없는 정보는 숨기고, 리팩토링을 통해 조금씩 커져가는 클래스와 메소드를 분리하여 이해하기 쉽고 변경에 유연한 코드로 만들어야 한다. 이게 개발자의 일이고 현재까지 내 경험상 뼈저리게 느끼고 있는 점이다.
소문에는 회의 중에 뭘 적더니 바로 코딩해서 나왔다는 그런 전설의 개발자들도 있다고 하는데, 그런 사람 있으면 정말 한번 만나보고 싶다. 어떻게 그렇게 할 수 있는지를…(부러우면...지는거다...)
암튼 지금하는 업무를 좀 써보자면... (써달라고 해서 쓰는데, 개발자분들이 아니시면 패스하셔도 됩니다)
지금 하고 있는 업무는 기존에 작성된 모듈을 개량하는 것이다. 기존 코드는 오래 전에 작성된 것이라 현재 버전에 맞게 수정될 필요가 있었다. 특정 목적에 맞게 작성되었는데 다른 곳에서 사용을 할 수 없다는 문제가 있다. 또 기존에 사용하고 있던 API 대신 우리가 작성한 라이브러리를 호출하도록 변경할 필요가 있다.
코드를 들여다 본 결과 여러 가지 문제가 있었다. 가장 큰 문제는 가독성이었다. 매직 넘버와 중복된 코드가 섞여 있어서 코드의 흐름을 따라가는데 어려움이 있었다. 두 번째 문제는 앞의 문제 때문에 발생된 것으로, 코드의 의도 파악이 힘들다는 점이었다. 세 번째 문제는 가용성이었다. 이 코드를 사용하기 위해서는 내부 구조에 대한 지식이 있어야만 했다. 그 외에도 LSP(Liskov Substitution Principle) 위반, 예외 처리의 문제 등이 보였다. 이렇게 보면 문제가 많은 코드를 만든 것 같지만, 실제로 작성하는 사람에게는 다 눈물없이는 들을 수 없는 사연들이 있는 법이다.
이 문제를 한번에 해결하려고 했다간 야근야근 열매를 섭취할수도 있기 때문에, 먼저 매직 넘버를 상수 변수로 치환하고 중복된 코드를 조금씩 제거하기 시작했다. 어느 정도 코드의 흐름이 보이기 시작했다. 그 다음은 의도 파악이다. 코드가 무슨 일을 하는지는 그냥 보면 알 수 있지만, 그 의도를 알 수 없으면 코드를 이해할 수 없다. 작성자에게 코드를 작성한 배경과 의도를 물어보아 메모해두었다.
다음으로 LSP 위반을 처리했다. 자식 클래스가 부모 클래스의 멤버 변수와 메소드에 접근하기 위해 상속을 한 것으로 보였다. 두 클래스를 뜯어내다 보니 어떻게 바꿔야 할지 난감했다. 결론적으로 Has-A 관계인 것으로 보였다. 나중에 다시 조립하기로 하고 일단 분리 작업을 완료했다.
작업을 진행하면서 중간 중간에 보이는 API들은 미리 작성된 라이브러리로 치환하거나 Indirection으로 호출되도록 수정했다. 이렇게 하면 API와의 종속성이 끊어져서 자동화된 테스트가 가능해진다. 말은 쉽지만 리팩토링에서 가장 어려운 것이 바로 종속성 끊기가 아닌가 싶다. 중간중간 가독성을 증가시키기 위해 이름 변경을 자잘히 했다.
마지막으로 가독성과 가용성을 증가시키기 위해서 몇 가지 메타포를 생각해냈다. 로우 레벨의 구현을 모두 감추고 추상화된 클래스들을 만들고, 객체들이 서로에게 메시지를 전달하는 형태로 바꾸었다.
오후 5시가 되면 모든 이스트소프트 사람들이 즐겨찾는 간식타임이다. ('모든'은 아니겠구나...다이어트 하는 사람도 있고, 저녁에 약속있는 사람도 있다고 하니...) 이 시간에는 주로 소시지와 김밥을 하나씩 들고 옹기종기 모여서 팀미팅이나 짧은 스터디등을 진행하기도 한다. 아...그렇다고 뭐 그렇게 형식적이거나 아카데미컬한건 아니고, 그냥 간식을 먹으면서 이런저런 이야기들을 많이 나눈다.
신입사원의 경우에는 팀원들과 좀 더 친하게 될 수 있는 기회이기도 하고, 막히는 부분에 있어서도 이것저것 물어보기도 하고... 팀시피릿!을 강화한다고 해야할까?
해가지면...어서 나가고 싶다...
- written by JC
알약2.0 간담회 현장스케치 (22) | 2011.03.10 |
---|---|
[이스트소프트 인터뷰] 보안전문가가 되는 방법? 알약분석팀 분석가 P에게 물어보자 (9) | 2011.03.08 |
설연휴... 알툴즈제품 모니터링 순서를 정하기 위한 모임 (0) | 2011.01.28 |
알툴즈 캐릭터 실사판 만들기 과정 from Japan (3) | 2011.01.27 |
댓글 영역