중급에서 고급으로 넘어가는 프리랜서 개발자의 이런저런 이야기
안녕하세요, 다들 잘 지내셨나요. 정말 오랜만에 글 남기는 것 같습니다.
오늘 퇴근직전에 스마트폰으로 kenu님이 올리신 [나는 그저 그런 개발자입니다.] 글을 보고 코가 시큰하기도 하고, 몇년간 눈팅조차도 거의 못한 오키가 갑작스레 향수병 걸린것처럼 그리워서 들렸습니다. 대표님들 얼굴 뵌지도 한참 된것 같네요.
현재 프로젝트가 거의 끝나가는 단계라 이력서를 갱신해서 올리고 몇몇 업체로부터 연락을 받게되었습니다. 그리고 이제 제가 SI/SM 프리랜서로 움직일때 '고급' 개발자가 되었음을 알게되었습니다. 실력은 하나도 늘지 않은거 같은데, 연차만으로 책정되는 등급제에 마지막 천장에 닿으니 기분이 참 이상하네요. (특급은 제외하려구요 :) ) 아마도 실력과 별개로 연차만으로 가장 많은 이득을 누리는 개발자가 저인것 같습니다.
초급에서 중급으로 중급에서 고급으로 프리랜서 개발자 생활을 하는 동안 참 여러가지 생각을 많이 했었습니다. 가끔 제가 오키에 썼던 지난 글들을 보면서 귀까지 빨개질정도로 부끄러워한 적도 많았던것 같아요. 물론 감사한 댓글덕에 힘을 받은적도 많습니다.
그 중 오키에 들르지 않던 동안 늘 생각해왔던 몇가지를 글로 적어볼까 합니다. 늘 그렇듯 이 이야기들은 지극히 좁은 제 경험만을 기반으로하고 있어서, 그다지 와닿지 않으실지도 모르겠습니다. 불편하시지 않았으면 좋겠어요. 어쩌면 저와 비슷한 생각을 하시는 분들이 계시고 조금이라도 도움이 된다면 참 기쁠것 같습니다.
우선 저는 최근 몇년동안 SI/SM 업계에 대해 어떤 염증, 회의감같은걸 계속 강하게 느끼고 있습니다. 내가 다른 사람들에게 프로그래머라고 이야기해도 되는 사람일까. 규모가 큰 프로젝트에서 업무를 진행할때마다 내가 할 수 있는 일이 너무나 제한되고 작은영역이라는 느낌이 가시지 않았습니다. (IT업계가 아닌 분들은 우와 거기에서 일해 대단하다 하지만... 사실... 아시잖아요 ㅎ)
사용할 프레임워크나 인프라, 테스트, 배포 등의 환경은 다 정해져있고, 특정 업무의 기능 구현은 도입된 솔루션의 API만을 사용하는 일이 반복되었습니다. 최근엔 그나마 '롱런'할 수 있고, '밥벌이'가 괜찮다는 금융권 프로젝트로 참여하고 있지만 금융권 특유의 폐쇄적인 환경속에서 정말 큰 시스템의 아주 작은 부품으로서만 개발하고 있다는 생각이 많이 들었습니다.
많은 경력과 나이가 고객사에선 문제가 되겠구나라는 느낌이 강하게 들기 시작했습니다. 하는일의 전문성이 사실 잘 느껴지지 않았습니다. 대리와 차장의 격차가 없는 느낌이 많이 들었습니다. (차부장님 급들은... 사실... 잘 웃으시죠... 버텨내오신거 정말 존경스럽습니다.) 어쩌면 제가 그런일들만 골라 해와서 그런걸지도 모르겠네요. 적당한 센스만 있다면 그리고 그 프로젝트에서 정해진 툴들에 조금만 익숙하다면, 초급/고급의 차이는 거의 없다고 느껴졌습니다. 물론, 업무적인 지식이 들어간다면 얘기가 조금 다를수도 있겠지만, 기술적 난이도는 그렇게 느껴졌습니다.
과연 내가 아무것도 없는 백지 상태에서, 여러가지를 결정하고 선택해서 어떤 프로그램을 만들 수 있는 사람인가에 대한 질문은 정말 부끄럽지만 이 글을 쓰고 있는 지금까지도 '노' 입니다.
괜찮아, 나는 어쨌든 IT업계에 남아서 일하고 있고, 한권 뿐이지만 프로그래밍 입문서 책도 낸것이 있고, 다른 기술책들도 작업을 하고 있고, 주말에 입문자들을 위한 프로그래밍 강의도 하고 있으니까. 어떻게든 될꺼야 라고 늘 자기위로를 해왔습니다.
하지만 프로그래밍 그 자체로서만 본다면, 처음 패기있게 프리랜서로 전환을 했을때와 거의 달라진것이 없는것 같습니다. 좀 더 긴 SELECT문을 만들고, 어떻게 사용하는지 정확히 몰라도 비슷한 코드를 복사 붙여넣기 하고 나름대로 수정해서 잘 돌아가면 안심하고, 돌아가지 않으면 좀 더 코드를 살펴보는 정도인것 같습니다. 그 환경에 적응하고, 완성된 코드를 배껴내는 속도가 아주 약간 빨라진것 뿐인것 같아요.
업무적으로 본다면 어떤어떤 회사에서 이런이런 업무를 해보았으니, 이거 할 수 있겠다 정도 수준에 그치고 있습니다. 아마 인력회사에서 프로젝트에 이력서 우겨넣기에는 괜찮은 개발자일수도 있을것 같네요. 하지만 그 와중에, 조금씩 지쳐가고, 더 이상 프로그래밍에 호기심이 없고, 쏟아져 나오는 새로운 기술을 등한시하고, 학습할 의지조차 없는데다, 내 일이 아니기때문에 일을 쳐내는 자신을 발견하게 되었습니다.
모든 SI/SM에 종사하시는 분들을 저같지는 않으실거에요. 분명 SI/SM에서도 기술력을 가진분들이 많이 계시고, 끊임없이 자기계발에 매진하는 분들도 많이 보니까요. 그리고 kenu님이 링크해주신 글처럼 모두가 슈퍼 개발자가 될수 없다는 것도 알고 있습니다. 돈을 벌고 먹고 살고 삶을 유지하는 것이 가장 중요하니까요. 그냥 제가 느끼기에 이상하다 싶은 방향으로 제가 자꾸 흘러가는 듯 합니다. 아마도 게으른 저 자신의 문제가 크다고 생각해요.
어느새부턴가 점점 제 일을 늘리고 싶지 않아졌습니다. 모르면 모르는데로, 알아도 모른척, 그리고 되도록 느리게 남들이 완성해놓은 것을 가져다쓸수 있는 시기를 기다리는 것이, 부끄럽지만 이 업계에서 제가 개인시간을 보장받기 위해 선택한 방법이었습니다. 계속계속 책도 쓰고 싶고, 강의도 놓치지 않고 싶고, 그러면서도 업계에 계속 남아있고 싶다는 욕심이 많았습니다. 그러다보니 늘 야근/주말출근 요구와 싸우고 있고, 어느샌가 저는 '싸가지 없는 프리랜서'가 되어있습니다. 처음 사이좋게 지내던 분들도 업무가 엮이면 점점 사이가 멀어지는 것이 느껴집니다. 내가 하고 싶은 일을 해야하니 당연한거다 라고 느끼면서도, 외로움이 들때가 생깁니다. 이런때 곁에 사랑하는 사람이라도 있으면 좋겠지만 여의치않네요.
주변에 함께 프로그래밍에 발을 들인 친구들도 비슷한 이야기를 많이 합니다. 깜짝 놀랄 정도로 경력대비 낮은 연봉, 끝없는 야근과 주말출근, 고객과의 트러블, 고무줄처럼 왔다갔다하는 일정.
함께 이직을 이야기하지만, 이직해도 결국 똑같다. 똑같은 업계라면 더 큰 회사를 가도 결국 이 삶 자체가 바뀌진 않을 것이다. 기술적으로 좀 더 좋은 회사로 이동을 하고 싶지만, 과연 내가 개발을 하는 사람으로서 움직일수 있을지, 그냥 특정 업무를 오래해서 그 업무적인 이해만을 가지고 있는지 등의 여러가지 고민을 하게 됩니다.
SI/SM 에서 일하다보면 '업무전문가' 라는 이야기를 많이 듣게 됩니다. 금융권에 있었던 사람들은 금융권 프로젝트로만 움직입니다. 공공은 공공으로만, 쇼핑몰은 쇼핑몰로만 움직이죠. 그나마 금융권도 은행에 있었던 분들은 상표만 다른 은행을 옮겨다니고, 보험, 카드, 증권 역시 마찬가지인 경우가 많습니다.
여/수신을 해보았나, 계정계를 해보았나, 대내/외계 혹은 채널업무를 해보았나 식으로 투입여부가 결정되고, 투입한 이후에 하는 일들은 사원일때와 명목상의 과장을 단 지금과 전혀 차이가 없는것 같습니다. 받는 돈이 늘어나는 것은 정말 기쁜일입니다. 저는 통장에 박히는 돈을 정말 좋아해서 그걸 부정할 수는 없는것 같아요.
그리고 이런 알수없는 여러 갈증과 회의감이 SI/SM이 아닌 괜찮은 소프트웨어 개발 회사를 가고 싶다라는 마음으로 바뀌고 시도를 해보고 있는 중입니다.
이름만 들으면 누구나 알만한 기술력 있는 회사, 신흥세력으로 우뚝 자리를 잡아가고있는 좋은 개발 회사들을 지원해보고 수없이 떨어지고 있습니다. 그러면서 가장 많이 느끼는 것은 역시 '기술력의 부재'입니다. '공부를 게을리했구나'입니다. 모든 SI/SM이 그렇지 않다는 것을 알고 있지만, 어쩌면 이 난관을 극복하는 것은 SI/SM을 탈피하는 것으로 시작해야하지 않을까 라는 생각을 많이 하게 됩니다. 그리고 저와 같이 이런 생각을 가지시는 분들께 제가 생각하기에 몇가지 필요하겠다 싶은 것을 정리해볼까 해요.
- 코딩테스트를 위한 알고리즘, 자료구조
요즘 정말 많은 회사들이 코딩테스트를 도입하고 있습니다. 코딜리티와 같은 온라인 테스트 사이트를 적극 활용하고 있죠. 점점 더 많아질것이라 생각합니다. 이런 여러가지 코딩테스트들이 개발자를 걸러내는 방법은 알고리즘과 자료구조에 대한 이해입니다. 그리고 문제 및 정답 유출, 테스트가 정말 좋은 개발자를 골라낼수 있느냐에 대한 의문등의 여러 부작용을 포함하더라도 꽤나 쓸모가 있다고 보입니다. 천천히 꾸준히 공부해나가면서 기회를 보아야 할 것 같아요. 요즘은 코딩테스를 준비하기 위한 서적들도 꽤 많이 나오고 있습니다. 백준과 같은 싸이트도 많고. 분명 도움이 되실겁니다. 주변에 이런 코딩 테스트에 익숙한 '능력자' 친구들 말로는, '조금만' 공부해두면 어느정도 유형이 정해져있기 때문에 '충분히' 덤벼볼만하다고 합니다.
- 주력언어 외의 언어
스타트업이나 많은 기술력있는 회사들이 개발자를 채용할때, 단 하나의 프로그래밍 언어에만 익숙한 개발자를 더이상 선호하지 않는 시대가 온것 같습니다. 저는 사실 Java 하나로 일도 하고, 책도 쓰고, 강의도 하고, 정말 더이상 우려먹을수는 없겠다 싶을정도로 Java만을 사용하고 있는데요. '좋은 프로그래머는 언어에 종속되지 않는다'라는 말을 실감하게 됩니다. 꼭 전문적이지 않아도 상관없는것 같습니다. 어느정도 예열뒤에 실무에 사용하는 코드를 사용할 수 있는 수준으로 준비만 되어도 괜찮을것 같아요. JVM위에서 동작하는 여러 언어들, Javascript에서 파생된 여러 기술들, 혹은 Python같이 대세를 탄 언어도 좋을것 같습니다. 그런 언어들로 작은 프로젝트를 웹 혹은 모바일로 제작해둔다면 그것보다 좋은 포트폴리오는 없을것 같아요.
- DevOps
프로그래머가 코드를 제작하는 것만으로는 설 자리가 줄어드는 추세인것 같아요. 대표적으로 AWS를 간단하게 사용할 수 있기만 해도, 그리고 그 위에 작은 애플리케이션을 하나 올리는 것 만으로도 포트폴리오로서의 가치가 있는 것 같습니다. 그외에 빌드, 배포 자동화 등도 알아두면 좋을것 같습니다. 표준격으로 AWS가 자리를 잡아나간다고 하니, 가벼운 요금제로 한번 시도해보시는 것도 좋을것 같아요.
- 블로그, GitHub, 그 외에 가시적으로 확인가능한 프로그래밍과 관련된 커뮤니티의 활동 혹은 오픈소스 기여
구글에 프로그래머로 들어가고 싶다면, 구글에 친구 프로그래머가 있으면 된다라는 농담이 있는데요. 인맥은 전 세계적으로 통하는데가 있는것 같습니다. 만약 저처럼 '점프'에 딱히 도움될만한 인맥이 없다면 스스로를 어필할 수 있는 온라인상의 활동이 도움이 많이 되는것 같습니다. 가장 간단하게 시작할 수 있는건 블로그가 있구요. 여러가지 오픈소스 혹은 자기만의 개인프로젝트를 깃허브를 통해 관리하는 것도 큰 장점이 될 수 있습니다. 여러 세미나와 모임에 꼭 알아듣는 내용을 다루지 않더라도 틈틈히 참여하여 견문을 넓히고 아는 사람을 만들어나가는 거도 중요한것 같아요. 주력외 언어, DevOps와도 연관 있지만, 채용하는 입장에서 지원자가 지금까지 업무로서 다루는 일 외에 프로그래밍적으로 '뭔가 다른'것을 시도하고 있다는 것만으로도 지원자에 대한 호기심을 무척 높이는 효과가 있다고 합니다.
- 트렌디한 기술들에 대한 관심, 그리고 어렵지만 꼭 필요한 기존 기술들의 이해와 손코딩
쓰레드, 분산처리, 네트워크, 객체지향, DI, AOP, 디자인패턴, 자료구조, 알고리즘 등등 get/set으로 도배되어 있는 소프트웨어에서 그다지 알 필요없는 많은 시스템의 기반이 되는 기술에 대한 이해가 있으면, 도움이 많이 되는것 같습니다. 결국 소프트웨어 공학적인 내용이 필요해지더라구요. 그리고 그 내용을 IDE의 자동완성 기능이 아닌 머리에서 손으로 옮겨적을 수 있는 능력도 필요합니다. time complexity도 그렇구요. 코딩테스트를 합격하더라도, 백보드에 자신의 알고리즘과 문법을 적어나가지 못한다면 채용은 멀어지는 경우를 종종 겪습니다.
블록체인, 딥러닝, 머신러닝, 빅데이터 같은 트렌디한 기술들은 혼자 집에서 작게작게 몇줄이라도 코딩해보는게 제일 좋겠지만, 여건이 안된다면 코딩은 거의 다루지 않는 기술의 이론과 배경등을 알려주는 얇은 입문서를 읽어보는 것도 도움이 되는 것 같습니다. 참 어려운것 같아요. 하루종일 쉬는시간까지 컴퓨터 앞에서 코드를 보고 만드는건. 전 그래서 호기심, 재미를 가지고 접근하시는 분들이 너무 부럽습니다. 저는 사실 코앞에 돈벌이 밖에 못보고 있는 상태라서요. (아마 이런 위기감이 없었다면 전 절대 지금같은 생각을 하지 못했을겁니다.)
그리고 Java 진영쪽이라면 역시 Spring, ORM은 필수인것 같습니다. 전 아직도 이 부분들 잘 사용을 못해서 부끄럽네요. (사실 쓰는 프로젝트를 못간것도 변명이긴 합니다만)
- 애자일, 스크럼, 여러가지 툴들에 대한 이해
사실 주변이야기들을 들어보면 국내에서 애자일, 스크럼이 성공적으로 도입되고 사용하고 있는 곳은 손에 꼽는다고 합니다. 오히려 개발자들만 더 귀찮아졌다는 이야기도 많죠. 하지만 애자일, 스크럼등의 방식의 이해는 가지고 있는 것이 편합니다. 많은 회사들이 일단 따라하고 있어서 지원자가 이 방식을 이해하는지를 궁금해합니다. 그리고 JIRA, RedMine 등 협업 도구들도 알아두면 도움이 됩니다. 꼭 쓸줄 몰라도, 어떤 이유로 쓰는 것인지 정도만 이해하면 될것 같아요. 사실 개발 그 자체와는 약간 거리가 있는 내용이니까요.
부끄럽지만, 이렇게 정리를 하면서도 '나도 못하고 있는걸 적고 있군'이라는 생각도 듭니다. 조금씩 준비해나가야죠. IT가 확 떠오르는 시기지만, 엔지니어들에게는 무척 어려운 시기인것 같아요. 한번 들어본적도 없는 기술들이 매일 쏟아지고, 뭘 공부해야할지 감도 안 잡히고, Java도 아직 제대로 못쓰는것 같은데 언어 하나로는 안되는 분위기고, 다른 개발자들 분들의 성공기를 보면 자꾸 작아지는것 같고, 프레임워크들이나 기술들 버전은 왜 그렇게 빨리 올라가는건지.
아마 저도 이 글을 또 읽으면서, 맞아 이거 준비해야하지 라고 또 되새기지 않을까 싶습니다. 그리고 혼자 힘으로 회사를 일일이 알아보고, 이직준비가 버겁다면 써치펌, 헤드헌팅쪽에 눈을 돌려보는 것도 도움이 될것 같습니다. (그 있잖아요... 오키쪽 써치펌... 저도 컨택하고 있어요ㅎ)
누구나 다하는 Spring도 잘 못하고, ORM도 안쓰고 주구창창 SQL문 직접 만들어 쓰고, jQuery도 잘 못하고, 그렇다고 Java 기본 프로그래밍도 잘 못하고, 다른 언어나 기술은 손도 못대본 채로 '고급' 등급이 되버린 부끄러운 개발자의 넋두리였습니다. 긴글 봐주셔서 감사합니다. 저도 좀 더 적극적으로 움직여봐야겠어요. :) 힘내 보죠. 조그마한 도움과 공감이 있으셨다면 기쁠것 같아요.
모두 건강히 행복하세요. :)
p.s
9월에 새 책을 하나 출간할 예정이에요. 책 나오면 또 슬쩍 광고같은 자랑을 하게 될 날을 염원하고 있습니다. 탈고 정말 힘드네요. (그거 말고, IT업계 미생같은 단편 소설도 준비중이에요. 이건 정말 성공할 수 있을지 모르겠네요. 나중에 부끄러워서 이 부분만 지워버릴지도...)
본의 아니게 SI/SM 업계에 대한 흉이 느껴지셨을지도 모르겠습니다. 사실 근본적인건 다 제 문젠데요. 기분 나쁘신분 있으셨다면 사과드립니다.