Input
개발자는 '만드는' 사람이 아니라 '문제를 해결하는' 사람 어떤 문제를 어떻게 해결할 수 있는지에 대한 센스를 갖추고 있어야 뛰어난 개발자 국내에서 찾기 쉽지 않은 인력, 해외에는 넘쳐나는만큼 노동 시장 접근 전략에 근본적인 고민 해 봐야
뛰어난 개발자의 기준은 뭘까?
그간 개발자 채용에서 수 많은 실패를 겪었는데, 이제 더 이상 한국에서 개발자를 뽑지 말자고 마음의 결정을 내린 시점이 되니 아이러니컬하게도 뛰어난 개발자를 판단할 수 있는 시야가 생긴 것 같다. 어쩌면 뛰어난 개발자를 볼 수 있는 눈이 생겼는데, 내 눈에 뛰어난 분들이 안 보이니까 결국 안 뽑게 된 것이 아니냐는 가까운 지인의 평가가 맞을지도 모르겠다.
내 눈에 뛰어난 개발자의 가장 핵심적인 요건은 '센스'다. 어떤 문제가 있다고 말이 나오면 그걸 어떻게 해결해야하는지, 그것도 가장 빠르고 효과적으로 해결할 수 있는 방법을 전체 시스템 관점에서 뽑아낼 수 있는 사람이 가장 뛰어난 개발자라고 생각한다. 그간 겪은 분들은 보통 그 문제가 무슨 문제인지 인지하는데도 시간이 걸렸고, 적절한 해법을 찾는 자료 검색 및 자료 이해에도 많은 시간을 써야 했고, 실제로 회사 서비스에 적용하는데는 굉장히 오랜 시간이 걸렸다. 이런 분들은 아무리 경력이 길게 쌓여도 좋은 개발자가 아닌 것이다.

개발자 역량의 기준은 '센스'다?
여러 웹서비스를 하나로 통합하면서 웹 사이트가 계속 무거워진다는 느낌을 받았다. 실제로 관리자 페이지가 열리는 속도가 매일 조금씩 느려지다가, 어느 시점에는 10초, 20초씩 기다리는 상황이 발생하니까, 직원들더러 관리자 페이지를 쓰라고 하기가 미안해지는 수준이었다. 예전에 개발자들이 만들어 놓고 간 시스템과 별반 달라지는 것이 없는 상황이 됐는데, 몇 달 동안 고생해서 시스템 만들었다고 하더니 뭐했냐는 말이 나올 것 같아서 답답했다.
결국은 DB를 읽어오는데 많은 시간이 걸리기 때문인데, 구글 검색을 해보면 DB에서 자료를 읽어오는데 걸리는 시간을 측정할 수 있는 'DB 쿼리 모니터(Query Monitor)'를 설치해서 문제의 원인을 파악해라는 설명들을 볼 수 있다. 써 보면 알겠지만, 어지간한 서비스들은 DB를 읽어오는 시간 자체는 별로 걸리질 않는다. 여러분이 접속 중인 파비리서치도 글을 쓰는 시점에 글을 모아놓은 테이블이 100MB가 조금 넘는 크기인데, 테이블의 크기가 크기는 하지만 읽어오는 속도는 0.1초 정도 밖에 걸리지 않는다. 그럼 도대체 뭐가 원인일까?
웹 서버 시스템을 잘 모르던 예전에는 그냥 워드프레스에서 추천해주는 속도 개선용 '캐시(Cache)' 프로그램들 몇 개를 깔았다 지웠다를 해 보면서 속도 테스트를 해봤었는데, 시스템에 대한 이해가 좀 더 쌓이니까 구조적인 생각을 하게 됐다. 관리자 페이지를 보는데는 DB에서 자료를 읽어오는 것과 더불어, 모든 정보를 html로 바꾸는 작업도 포함되고, 글을 모아놓은 테이블 정보와 연결된 다른 정보들을 읽어오는 작업도 포함된다. 그럼 html로 바꾸는 작업도 캐시에 추가하고, 글 테이블 이외에 연결되는 다른 테이블들도 바뀌는 내용이 없으면 캐시에 추가해놓으면 되지 않을까?
그런데 도대체 어떤 자료들을 추가로 더 읽어오길래 그렇게 오랜 시간이 걸리는걸까?
카테고리 정보, 태그 정보, 그 외에 내가 쓰고 있는 여러 서비스들과 연결된 정보들을 다 읽어오느라 상당한 시간이 걸리는 것을 알게 됐다. 그런데, 우리 회사가 더 이상 안 쓰는 카테고리와 태그가 많이 있는 것들이 문제의 원인 중 하나라는 것을 알게 됐고, 안 쓰는 태그들을 대규모로 삭제했다. 태그를 모아놓은 테이블의 크기가 줄어드니 태그와 글을 연결하는 작업도 훨씬 더 빨라지더라. SQL 구조상 Join이라고 불리는 함수를 이해하고 있으니 좀 더 쉽게 처리가 된 작업이기는 했는데, Join을 많이 해야되면 될 수록 문제가 생긴다는 것을 깨닫고, 우리 회사에서 쓰는 각종 플러그인들 중에 Join을 하도록 만드는 모든 서비스들을 제거해버리거나, 플러그인 코드를 수정해 버렸다. 20초씩 기다려야 했던 관리자 페이지가 7~8초로 줄어들었다.
문제의 원인 뒤에 숨은 또 다른 원인을 찾을 수 있어야
그리고는 DB를 캐시해주는 Redis Object Cache를 썼는데, 이것도 예전 같았으면 그냥 설치만 하고 돌아가기만 하면 알아서 잘 될 것이라고만 생각했을텐데, 이제는 경험치가 쌓이니 작업 방식이 달라졌다. 우선 DB를 캐시해주는 각종 서비스들을 Object Cache라고 부른다는 것, Redis라는 프로그램과 경쟁하는 여러 서비스들이 있다는 것, Redis는 DB에서 불러오는 정보를 압축하는 방식을 따로 갖고 있다는 것 등을 일단 알아냈다.
먼저 Object Cache의 여러 서비스들이 무슨 작업을 하는지, 우리 회사 사정에 맞는지를 가늠해보고, 내 목표대로 DB에서 불러온 값을 잘 저장할 수 있는지, 다른 서비스들과 충돌이 일어나는 일은 없는지를 따져봤다. 온갖 문제가 다 생기는 바람에 거의 1주일을 허비하고 심지어는 백업해놓은 DB를 복원해야하는 일까지 발생했는데, DB 정보들을 PHP 파일로 변경해서 갖고 있는 방식, PHP와 SQL을 잇는 SQLite3을 이용해는 방식, 캐시 파일 접근 속도를 높이기 위해 램 디스크를 이용하는 방식 등등을 모두 확인하고 점검한 후에 결국 현재의 셋팅으로 확정하게 됐다.
지금은 Redis Object Cache에서 파일 압축 방식을 Relay라는 걸 쓰면서 Redis 버전을 낮춰 호환성을 맞췄다. 시간을 너무 많이 쓰게 됐는데, 캐싱 방식이 DB 전체를 어떻게 읽어와서 저장하는지를 몰랐던 탓에 많은 시간을 썼고, 괜히 무리해서 강제로 파일 여러개를 만드는 방식의 개조보다, Relay로 압축하는 편이 더 파일 크기를 줄일 수 있다는 것을 뒤늦게 알게 됐다. 지금은 관리자 페이지가 뜨는데 평균 4초 정도 걸린다. 새로 만든 워드프레스의 관리자 페이지가 2~3초 정도 걸리는 것을 생각해보면, 굉장히 효율화가 이뤄진 셈인데, 문제의 원인을 제대로 파악하고 프로그램의 특성을 이해했었다면 훨씬 더 빠르게 작업이 이뤄질 수 있었을 것이다.
어디에서 무슨 문제가 발생했기 때문에 내 눈 앞에 이렇게 나타나는지 알아낼 수 있어야
하루는 관리자들이 봤던 페이지가 일반 유저에게 보이는 상황이 발생했다. 캐시된 정보가 그대로 남아있는데, 사용자 권한에 따라 분리되질 않았기 때문에 발생했던 문제다. 캐싱 서비스에 문제가 있는 것이 아닐까는 생각을 잠깐 했지만, 사용자 권한과 캐싱이 연동이 잘못된 탓이라는 생각에 권한 제한 프로그램의 설정 값을 변경하면서 문제를 해결했다.
이런 문제들을 프로그램 개발 팀에 질문해보면 훨씬 더 효율적으로 답변을 내놓는다. 이미 여러 사용자들의 문제를 해결해줬기 때문이기도 하겠지만, 그 이전에 사용자들의 문제가 뭐였을지를 짐작해보고 자기들 프로그램의 문제인지, 연관된 다른 프로그램의 문제인지를 직관적인 추론만으로 찾아내는 경우들을 종종 본다. 이런 분들에게는 질문을 하면 바로 답변을 받을 수 있을 것이라는 기대가 경험치로 누적되어 있고, 그 서비스는 당장 기능이 지원되지 않더라도 기대를 갖고 기다리게 된다.
반면, 우리 회사 서버에 직접 접근 권한을 달라고 하면서도 정작 아무런 해결책을 못 내놓는 경우도 자주 겪는데, 그런 경우에는 기다리다 지쳐서 결국 환불을 해 달라고 하거나, 그 전에 나 스스로 다른 대안들을 찾아다닌다. 적절한 대안이 없으면 시스템을 뜯어고치는 수준을 넘어서 서비스 구성을 변경하게 되는 순간도 온다. 원인은 그 분들이 문제 해결을 못 했기 때문인데, 덕분에 나는 만들던 서비스의 코드 몇 줄을 수정하는 것이 아니라, 아예 서비스 구성 자체를 완전히 뜯어고치고, 심지어는 회사 비즈니스 모델도 바꾸는 방식으로 대응해야 하기도 한다.
센스 없는 개발자의 능력 부족 때문에 회사의 비즈니스 모델이 바뀐다고 생각하면 얼마나 개발자의 센스가 중요한지를 공감할 수 있을 것이다.
어떻게 개발자들의 센스를 확인할 수 있을까?
마지막 개발자를 내 보내던 무렵, 이미지가 안 나오는 문제를 해결하는데 1주일이나 썼던 사건을 겪은 적이 있다. 심지어 그 1주일 중에 내가 1시간을 같이 뒤져서 문제의 원인을 파악해 줬는데도 그런 사소한 문제를 해결하는데 1주일이나 걸리는 것을 보고, 앞으로 개발자는 무조건 센스를 확인해서 뽑아야겠다는 생각을 하게 됐다.
위의 이미지 안 나오는 문제처럼, 뭔가 불편을 야기하는 사소한 문제를 하나 만들어놓고, 그 문제를 얼마나 빠르게 효과적으로 해결하는지, 그 때 어떤 해결책을 썼는지 설명하는 능력은 어떻게 되는지를 기준으로 개발자를 뽑아야겠다는 생각을 하게 됐다. 센스와 더불어 학습 속도, 문제 해결력, 논리적 추론 능력 등등을 모두 점검해 볼 수 있을 것이다.
어차피 나 같은 작은 회사 대표가 이런 빡빡한 절차로 개발자를 뽑겠다고 하면 아마 한국 땅에서 1명도 못 뽑을 것이다. 이걸 알고 있기 때문에 더 이상 한국에서 채용하겠다는 생각을 비웠고, 반대로 그런 센스가 넘치는 인력들을 영어권 워드프레스 게시판에서 흔히 볼 수 있는 만큼, 눈을 해외로 돌리겠다고 마음을 먹었다.
지난 몇 달간 해외 인력들과 다양한 교류를 하면서, 좀 더 일찍 눈을 돌렸었더라면 더 좋았을 것 같다는 후회가 가득하다. 이렇게 훌륭한 인재 풀이 있는 시장에 쉽게 접근할 수 있도록 모든 장벽이 내려가 있는 시대인데, 심지어 언어적인 제약도 없는데 왜 나는 그렇게 한국 시장에서 눈을 돌리지 못했을까?
- [공지] 12월 1일부터 구글SEO 최적화된 웹페이지 기반 유료 서비스가 시작됩니다 - 파비리서치 (pabii.com)
- [개안뽑] ①개발자만 안 뽑았더라면
- [개안뽑] ②해킹을 ‘또’ 당하다
- [개안뽑] ③대충 만든 서버 쓰니까 그 모양이지
- [개안뽑] ④죄송합니다, 오늘은 출근 안 해도 됩니다. 제가 서버를 망쳐놨습니다
- [개안뽑] ⑤워드프레스로 (거의) 다 되는데 왜 개발자 뽑아요?
- [개안뽑] ⑥한국인 개발자를 뽑는 것이 시간 낭비, 돈 낭비, 에너지 낭비인 이유
- [개안뽑] ⑦워드프레스는 테마 잘 고르면 반, 플러그인 잘 고르면 나머지 반이다
- [개안뽑] ⑧빠른 속도의 비결이 html? 워드프레스는 html 안 만들지 않냐?
- [개안뽑] ⑨워드프레스가 쓸만해진 것이지 '만능' 솔루션이 된 것은 아니다
- [개안뽑] ⑩가볍게, 더 가볍게, 다 분리해야 가벼워진다
- [개안뽑] ⑪모르는 걸 시킨 나는 악덕 기업주였다
- [개안뽑] ⑫못하는 걸 시킨 나는 악덕 기업주였다
- [개안뽑] ⑬개발은 회사 업무 효율화를 돕는 도구에 불과하다
- [개안뽑] ⑭건설 현장은 외국인 잡부 쓰는데, 왜 개발자는 능력없이 몸 값만 비싼 한국인 쓰는걸까?
- [개안뽑] ⑮번역 서비스 붙여서 해외 유저 불러오기
- [개안뽑] ⑯CDN으로 트래픽 분산, 웹사이트 성능 개선하기
- [개안뽑] ⑰왜 서로 대화 안 해요? 왜 서로 업무 공유 안 해요?
- [개안뽑] ⑱프로젝트 참여자 모두가 책임을 지는 서비스 vs 대표만 책임을 지는 서비스
- [개안뽑] ⑲개발자 고용 vs. 워드프레스 플러그인
- [개안뽑] ⑳결제 모듈 하나 제대로 못 연결시키는 경력직 개발자들
- [개안뽑] ㉑결제 모듈을 분리해야 보안, 속도 문제를 개선할 수 있다
- [개안뽑] ㉒국내 정기 결제 서비스의 필수 요건에 맞춰 뜯어고친 시스템
- [개안뽑] ㉓정기 결제 시스템 붙이다보니 생긴 각종 디버깅, 호환성 문제와 개발자들의 해결자세
- [개안뽑] ㉔개발 라이브러리 없으면 개발 못하는 개발자, 플러그인 없으면 기능 추가 못하는 워드프레스
- [개안뽑] ㉕'개발 잘한다'와 '코딩 잘한다'는 개발자 사이의 간격
- [개안뽑] ㉖'개밥 테스트'와 사용자 경험(UX)과 실제 사용자
- [개안뽑] ㉗ElasticSearch 쓰는 방식으로 본 한국 개발자 vs 해외 개발자
- [개안뽑] ㉘한국(의 많은) 개발자들이 40대가 되면 치킨을 튀기게 되는 이유
- [개안뽑] ㉙무능하면 취직하고, 개발 잘하면 외주 업체 돌리고, 똑똑하면 사업한다
- [개안뽑] ㉚무능하면 코딩 테스트 준비, 똘똘하면 고급 포트폴리오 만든다
- [개안뽑] ㉛무능하면 한국 개발자 채용, 똘똘하면 해외 개발자 채용
- [개안뽑] ㉜실력으로 개발자 서열 만드는 CTO가 필요한 이유
- [개안뽑] ㉝제프 베조스를 부자로 만든 것은 (줏대없는) 개발자들이었다
- [개안뽑] ㉞클라우드 서비스는 과연 혁신이었나? 단순히 개발자 시장 진입 장벽을 낮춰준 도구에 불과했나?
- [개안뽑] ㉟'클라우드1.0'=Serverless, '클라우드2.0'=개발자less
- [개안뽑] ㊱Nvidia 주가는 개발자들이 올리고 Data Scientist들이 내린다
- [개안뽑] ㊲개발 의존도가 낮은 회사와 개발자 의존도가 낮은 회사의 차이
- [개안뽑] ㊳개발자 없다고 불평말고, 개발자 필요없는 시스템을 만들자
- [개안뽑] ㊴정부 프로젝트만 하던 개발자가 당신 회사에 필요할까?
- [개안뽑] ㊵개발자 채용 기준은 코딩 테스트가 아니라, 논리학 시험이어야 한다
- [개안뽑] ㊶개발자 채용 기준은 프로젝트 경험이 아니라, 학습 속도여야 한다
- [개안뽑] ㊷공사판 인부에게 끌려다닌 건물은 부실공사, 개발자에게 끌려다닌 IT시스템은?
- [개안뽑] ㊸완벽한 IT시스템은 구글 개발자도 못 만든다. 타협해라
- [개안뽑] ㊹개발자 역량 기준은 지능, 집중력이 아니라 센스다
Comment