안녕하세요.

IT연구소 서비스개발팀 빌링파트 오명학입니다.

우연한 계기로 제로베이스라는 코딩 부트 캠프에서 취준생들을 위한 질문과 관련하여 인터뷰 제의가 들어와 진행하게 되었습니다.

대단한 내용은 없다 보니, 많이 부끄럽긴 하지만 개발자가 되기 위해 준비중인 취준생 분들께서 보신다면 좋을것같아 인터뷰 전문을 사람인 블로그를 통해 공유해보고자 합니다.


01) 사람인 백엔드 개발자를 만나다

안녕하세요 명학님. 먼저 간단한 자기소개 부탁드립니다!


안녕하세요. 사람인 결제 및 상품 도메인의 백엔드 개발자를 맡고 있는 오명학 이라고 합니다. 저는 첫 대학입학을 문과로 시작하였으나 제가 생각한 방향과는 맞지않아 반수 후에 정보통신학과로 재입학하였습니다. 당시 코딩은 지금처럼 필수 교육과정도 아니었고 문과출신이다 보니 코딩에 대해 처음 접하게 된 것은 대학교에서 배운 컴퓨터 전공 수업이었는데요. 단순히 컴퓨터에 글자들을 입력만 했을 뿐인데, 여러 시스템을 동작시키는 프로그램이 된다는 것이 너무 신기하기도 하고, 우연히 적성에 맞게 되어 개발자의 길을 선택하게 되었습니다.

그렇다면 명학님의 첫 코드, 혹은 첫 개발 프로젝트는 어땠나요?


프로그래밍은 어떻게 학습을 시작하셨는지도 궁금해요! 전공 수업부터 프로그래밍 수업을 시작했지만, 본격적으로 프로그래밍을 배우기 시작한 곳은 국비 지원 학원이었어요. 당시에도 많이 늦었다고 생각하고 평일, 주말 가리지 않고 프로그래밍에만 전념했던 것 같아요. 학원에서는 한번 강사를 해보지 않겠냐는 제의도 들어오긴 했지만, 저 자신이 많이 부족하다는 생각도 있었고, 실무를 배워보고 싶다는 생각에 회사로 취업을 결심했어요. 수료한 뒤에는 개발 회사에 대해 많은 정보를 몰랐던 것도 있겠지만, 학원에서 추천하는 SI 회사에 들어가게 되었네요. 모든 SI 회사가 그렇지는 않겠지만, 아쉽게도 제가 처음으로 입사해서 진행했던 회사의 프로젝트는 서비스의 완성도 보다는, 기간에 맞춰 작업을 하는 걸 우선으로 생각했었어요. 생각했던 개발환경과는 다른 부분과 그에 대한 아쉬움을 직접 체감하다 보니 결국 제 자기 능력을 더 키워야겠다는 다짐을 확고히 하게 된 것 같아요.

아.. 확실히 완성도 보다 기간에 맞춰 작업하면 퀄리티 측면에서 아쉬운 부분이 생길 것 같아요.


네, 아무래도 그렇죠. 또 당시 신입으로 들어가다 보니 사수들이 일단 시키는 일 중점으로 작업을 했었는데 그러다 보니 아쉬운 점도 많긴 했었어요. 이걸 이렇게 고치면 좋지 않나 생각은 했었는데 사수한테 먼저 물어보지 못하게 되면 기간 때문에 또 어쩔 수 없이 지나가는 부분이 되게 많더라고요. 그런게 좀 SI에는 아쉬웠던 게 있었던 것 같아요.

그런데 이제 사람인에서는 서비스를 저희가 직접 운영하면서 사용자분들이 더 쉽게 접근하거나 좋게 사용할 수 있게 하기 위해 계속 고도화를 하다 보니 품질도 좋게 하려고 계속 노력하게 되는게 좋았어요.

02) 사람인 개발자가 일하는 방식

사람인에 대한 이야기가 나온 김에 근무하시는 이야기를 더 들어보고자 하는데요. 먼저 근무하시는 책상, 살짝 공개 가능하실까요?


Untitled

제가 크게 주위 환경을 신경 쓰지 않는 성격이다 보니, 책상의 장식이나 꾸미는 걸 크게 신경 써본 적이 없네요. 그래도 키보드는 전 직장에서 기본으로 지급해주시는 삼성 키보드를 계속 쓰다가 개발자가 무슨 이런 걸 쓰냐고 하시면서 선물로 주신 키보드를 쓰고 있습니다. 그래도 덕분에 장비의 중요성을 조금 알게 된 것 같기도 합니다.

주로 하고 계신 업무에 대해서도 소개 부탁드려요!


제가 근무하고 있는 파트는 빌링 파트로 사람인 서비스에서 진행하는 주문, 결제 프로세스와 채용 관련 상품이 기획되면 새로운 상품에 대한 프로세스를 개발하는 업무를 맡고 있습니다. 현재 상품 페이지와 사람인 서비스가 MSA로 분리되어 있어 상품 관련된 업무는 저희 파트에서 진행하고 있습니다.

MSA에 대한 정확한 정의를 찾지 못했는데, 쉽게 설명해서 상품 관련 업무 개발을 하고 계신다고 이해하면 될까요?


네, 상품하고 결제 쪽으로.. 기업 회원분들이 사람인에 들어와서 체험 광고 상품이나 그걸 또 사용할 수 있도록 개발을 하고요. 또 그 상품을 결제할 수 있도록 결제 관련 프로세스를 지금 개발하고 있거든요. 상품을 결제하고 상품을 만든다고 생각해 주시면 될 것 같아요.

사람인 자랑도 한 번 해주세요~!


먼저 수평적인 문화를 지향하고 있어, 직급이 없습니다. IT 연구소는 직급이 아닌 ‘-님’ 호칭으로 명학님 으로 불리고 있어요. 또한 매년 120만 원의 복지포인트의 혜택과 IT 관련 서적 구매 비용, 인터넷 강의 사이트 비용을 100% 지원해주고 있어서 욕심이 있으신 분은 자기 계발 하기에 정말 좋은 환경입니다. 그리고 시니어 개발자분들이 많이 계시다 보니 업무적이나 기술적으로 많은 배움을 받을 수도 있습니다.

Untitled

명학님은 현재 서버 쪽에서 개발을 하시고 계신데, 이전에는 다른 핀테크 산업군에서도 일을 하셨더라고요..! 혹시 서버 개발과 핀테크에서 산업군의 특징이 있을지 궁금해요.


전 직장에서 PG와 간편결제서비스에 대한 개발을 담당했었는데, 아무래도 돈에 직접적으로 관련된 산업군이다 보니 시스템에 대한 신뢰도나 이슈가 발생했을 때 대한 리스크가 컸어요. 그래서 많은 테스트와 검증을 통해서 개발을 진행하고 이슈 발생할 때 빠른 대응이 필수적으로 들어갔습니다. 또한 금융업에 관련된 산업의 특성상 보수적으로 시스템 전반을 운영하다 보니 새로운 기술에 대한 도입이 조심스러운 면이 있었네요. 사람인에서도 결제 관련된 업무를 담당하다 보니 데이터의 정합성이나 프로그램의 신뢰성을 위해 전 직장의 경험을 살려 검증을 통해 주의 깊게 업무를 진행하려 하고 있습니다. 다만, 처음 이직했을 때는 처음 다뤄본 기술들이 있어서 기술을 실무적인 레벨로 다룰 수 있도록 자기 계발에 중점을 두고 있습니다.

그럼 다른 직군 개발자를 만나서 대화를 할 때도 도메인이나 산업군의 차이가 느껴지시나요?


이직을 하고 나서 전 직장의 PG 용어와 사람인의 PG 용어는 다르던걸 느꼈던 적이 있었네요. 전 직장에서는 PG의 코어를 개발하다 보니 예를 들어 카드 결제 후 카드사에 인증, 승인 절차를 거쳐 결제를 진행하게 하고, 가맹점에 승인 결과 정보를 돌려주는 형식이었다면 사람인에선 가맹점의 역할이다 보니 PG의 연동 이후 돌려받은 승인 결과 정보를 가공하여 주문, 결제 정보를 저장하는 형식이었습니다. DRY 법칙이나 디자인 패턴과 같은 개발론적인 용어는 공통으로 사용되지만, 도메인의 차이로 같은 단어가 다른 의미로 쓰인다는 걸 알게 되었어요.

*PG: 전자지급결제대행 (Payment gateway)

개발을 하면서 자주 발생하는 오류나 에러에 대처하는 방법에 대해서도 여쭤보고 싶은데요. 혹시 자주 발생하는 오류 때문에 일어난 에피소드가 있을까요?


“죽은 프로그램은 거짓말을 하지 않는다”라는 말이 있어요. 있을 수 없는 결과가 나온 것은 무조건 원인이 있습니다. 개발 언어나 프레임워크에선 사용자에게 오류에 대한 빠른 처리를 위해 에러가 발생한 위치 정보와 오류메시지 정보를 로그를 통해 제공합니다. 대부분 오류는 로그 메시지에 적힌 위치와 오류 정보를 통해 해결할 수 있습니다. 작년에 DB의 커넥션 누수로 인해서 주문 서버 중 하나가 갑자기 죽는 사례가 있었습니다. 오류가 나지 않아야 하는 단순한 select API에서도 에러가 발생하여 원인을 찾는 게 쉽지 않았으나. 결국 다시 돌아보면 로그를 통해 근본적인 원인이 발생한 위치를 파악할 수 있었던 것 같아요. 자세한 내용은 저희 파트원분께서 개발 블로그에 자세하게 정리한 내용이 있으니, 참고하시는 것도 좋을 것 같아요.

Untitled 사람인 기술 블로그 (자세히 보러가기)

기술 블로그 이야기가 나와서 말인데, 명학님도 기술 블로그를 꾸준히 작성하고 계신 것 같더라고요. 개발자가 글을 쓰면 좋은 이유나 꾸준히 기술 블로그를 작성하시는 이유에 대해서 조금 들어볼 수 있을까요?


제가 공부를 할 때 이론적인 건 눈으로만 보면 쉽게 이해를 못 하는 성격이다 보니 이해 겸 정리를 위해 내용을 정리하다 내 공부 내용을 공유하는 것도 좋겠다.라는 생각으로 기술 블로그를 시작했어요. 글쓰기도 또 하나의 소통 방법이다 보니 해당 능력을 기르는 데도 좋고. 기술 블로그에 올린 글은 나만 보기 위해 정리한 내용과는 다르게 외부 사람들도 같이 내용을 보게 되다 보니, 잘못된 정보에 대한 유무를 검토하기 위해 모르는 부분이나 미심쩍은 부분은 좀 더 심화해 공부하여, 개인적인 공부를 하는데 더 많은 도움이 된 것 같아요.

Untitled 명학님의 기술 블로그 (자세히 보러가기)

03) 사람인 개발자에게 물어본 개발자 취업

명학님이 보시기에 현재 개발자 취업 시장은 어떤 것 같나요?


코로나 때 정말 갑작스레 높아진 개발자의 채용 시장에 비해 요즘 들어서는 채용 시장에 겨울이 왔다는 표현이 맞는 것 같아요. HR 업계에 있다 보니 전체적으로 채용공고가 줄어들었다는 이 말이 더욱 체감되는 것 같아요.

이런 상황 속에서 신입 백엔드 개발자가 되기 위해 필요한 역량이나 경험이 무엇일지도 여쭤보고 싶어요.


CS와 같은 기초를 탄탄히 하는 것을 더욱 중요시하고, 일반 개발학원에서 배우는 Java + Spring과 같은 전형적인 패턴에서 벗어나, 인프라 같은 영역도 확대해서 공부하여 다른 신입분들과의 차별성을 주는 것이 좋을 것 같아요. 인프라에 대한 지식을 너무 어렵게 생각하지 않고, 실제로 설계부터 서비스를 배포해보는 걸 해본다면 어느 정도 감이 올 거라고 생각이 드네요.

인프라같은 영역이라면, 어떤 부분을 말씀하시는 걸까요?


개발도 업무나 직무가 되게 다양해요. 대표적으로 사람들이 사용하는 사용자 화면을 만드는 프론트엔드와 그 뒤에 비즈니스 로직이 돌아가게 하는 백엔드가 있는데요. 이거 외에도 서버의 환경 설정과 같은 것들을 담당하는 데브옵스 등의 직무들이 있어요. 보통 데브옵스 같은 경우는 이제 인프라라고 해서 서버 환경 설정이나 아니면 흔히 말하는 AWS, IDC 이런 서버 설정들을 하시는 분들이 있거든요. 결국 백엔드도 서버이고 웹을 통해서 돌아가는 것이다 보니까 그런 인프라적인 것을 함께 알아두면 개발 성능을 테스트하거나 에러가 나는 경우 등을 쉽게 파악할 수 있게 되는 것 같아요. 그런 기초들을 갖고 있으면 좋은 것 같긴 하더라고요. (잔지식을 알고 있으면 많이 도움이 된다!)

그렇다면 명학님이 지금 다시 개발자 취업을 준비한다면 어느 부분에 더 시간을 투자하실 것 같나요?


CS와 같은 기초를 보다 깊이 있게 공부할 것 같습니다. 기본기가 있다면 확실히 응용하는데 적은 시간이 소요되는 것 같더라고요. 또한 팀원들을 모아 토이 프로젝트를 진행해 볼 것 같은데요. 단순히 프로젝트를 완성하는 것에 끝나는 것이 아니라. 설계에서 운영 배포 전반에 걸쳐 프로젝트를 진행하면서 왜 이 언어를 채용했고 프레임워크를 사용했는지, 왜 이런 설계 방식으로 설계했는지에 대한 근거부터 발생한 이슈의 해결 방법이나, 아쉬운 점에 대해 모든 내용을 정리하여 취업 준비에 사용할 것 같습니다.

CS 기초에 대해서 많이 언급을 해주시네요! 명학님은 어떻게 CS를 공부하셨는지 조금 더 자세히 들어볼 수 있을까요?


개발자는 새로운 기술과 패러다임에 빠른 적응을 하며, 공부하는 직업이라고 합니다. 흐름을 따라가기 위해서는 CS와 같은 기초가 중요하다고 생각해서 거듭 강조를 한 것 같아요.ㅎㅎ 하나의 개발 언어를 깊게 공부하면 다른 개발 언어를 공부할 때 처음하는 것보다 쉽게 적응할 수 있다는 말도 여기서 나온다고 생각해요.

음, 저 같은 경우에 CS는 전공에서 보통 많이 배웠어서 그렇게 시작을 했고요. 부족한 부분은 솔직하게 말씀 드리면 그 면접 전용으로 CS에 나온 책들이 있어요. 그건 핵심적인 부분을 되게 많이 간략하게 정리되어 있거든요. 그래서 그 책을 봐도 좋을 것 같습니다. 그리고 CS 공부를 하다 보면 모르는 단어나 이런 것들이 나오잖아요. 그럼 그걸 검색해 보면서 깊게 파고 들어가는 방식으로 공부했던 것도 많이 도움이 되었던 것 같습니다.

동종업계로 이직 또는 취업하기 위해서 어떤 점에 관심이 있으면 좋을까요?


저는 이직 준비를 할 때 먼저 지원하고 싶은 회사의 채용공고들을 본 뒤에 자격요건과 우대사항을 먼저 확인했어요. 회사마다 따라 속도에 차이가 있겠지만 빠르게 변하는 기술 트렌드를 맞춰가려고 하는 회사들을 알 수 있고, 이직 또는 취업을 하기 위해 알고 있어야 하거나 알고 있으면 좋은 개념들을 공부하면서 자신의 부족한 부분을 채워나가면 도움이 많이 될 거예요.

또 전 직장에서 진행했던 프로젝트나, 취업을 준비하면서 만든 개인프로젝트에서 막히는 부분이 있었거나, 이슈가 발생했을 경우는 모두 원인부터 시작해서 해결까지 내용을 개인 블로그나 문서에 정리해두었어요. 개발자로서 많은 기술 스택을 알고 있는 것도 중요하지만 결국 가장 필요한 능력은 문제 해결 능력이라고 생각해요. 개발자는 서비스를 운영하거나 고객으로부터 새로운 이슈가 발생할 때 자신이 가진 지식과 기술로 이슈들을 해결해 서비스에 적용하는 직업이기 때문이죠. 따라서 내가 프로젝트를 진행하면서 이슈가 발생했을 때 내가 어떤 고민을 했고, 어떻게 해결해왔는지를 정리하고 부족했던 부분은 추후에 기술 서적이나 강의를 통해 채우고자 한다면 문제 해결 능력을 기르는 데 많은 도움이 되지 않을까 싶네요.

명학님이 속해있는 곳의 개발 문화는 어떤지도 들어볼 수 있을까요?


제가 다니고 있는 사람인에는 개발자가 직접 현행 이슈를 발의하고 기술 부채를 제거하기 위해 길드라는 것을 운영하고 있어요.

엇, 잠깐만요. 기술 부채를 제거한다는 게 어떤 의미인가요?


기술 부채라는 건 개발 기술들이 빠르게 변화하는 특징이 가지다 보니 개발에 사용했던 기술들이 뒤떨어지거나 보완된 좋은 기술이 나올수가 있습니다. 또는 일정이 촉박하여 일정 중심의 프로젝트를 진행했을 경우 기존의 적용한 기술들이 기술 부채로 남게 됩니다. 정리하자면 부채로 남은 기존의 기술들을 서비스 품질의 향상을 위해 계속 고도화 하거나 개선해 나가는 작업을 기술 부채를 해소한다고 합니다.

다시 이어서 개발 문화에 대해 말씀드리면, 개발부서와 팀 상관없이 문제를 해결하기 위해 길드를 구성하고 서비스 성능 개선 및 보안 이슈들을 해결하고 동료에게 공유하는 시간을 가져 서비스 품질 향상에 큰 노력을 하고 있어요. 또한 서비스의 코드 품질의 향상과 개개인의 업무 능력 향상을 위해 부서 간 코드리뷰를 진행하고 IT 관련 서적 구입비용과 인프런과 같은 강의 비용을 지원해줘서 개개인의 성장에도 많은 도움을 주고 있습니다.

실제로 코드 리뷰가 업무 능력 향상에 어떻게 도움이 되는지 알고 싶어요.


다른 시니어 개발자 분들한테 제가 받은 코드 품질에 대해서 이게 저는 이제 딱 제가 아는 선에서만 작업을 하잖아요. 근데 시니어 개발자 분들은 더 많은 견물이나 이런 경험을 가지고 계시다 보니까 그냥 제 코드를 보고서 그냥 이 부분은 어떻게 고치면 좋을 것 같다. 아니면은 이런 게 이렇게 좀 바꿔주시는 게 있거든요. 또 업무를 진행하다 보면 그 업무를 제가 정확히 파악을 한다고 하면서도 놓치는 부분이 몇 개 있어요. 그런 부분에서 이제 이 부분은 이게 필요하다. 이런 프로세스가 필요하다 그러면서 잡아주시는 역할을 하는 것 같아요. 한번 검토라고 할 수 있죠.

Untitled

마치며,

백엔드 개발자로서, 백엔드 개발자를 한 마디로 표현하자면?


백엔드 개발자는 표면적으로는 드러나지 않지만, 사용자들이 서비스를 이용할 때 ‘이런 게 되네?’ ‘이게 어떻게 가능하지?’와 같은 의문점을 실제로 구현해내는 직무라고 생각합니다. 티 나지 않지만, 불가능을 가능으로 만듦으로써 사용자에게 편리함을 주는 것이 백엔드 개발자라고 생각해요.

지금도 열심히 개발 공부를 하고 있을 개발자 취준생 분들에게 한 마디 해주세요!


저는 운칠기삼이라는 말을 좋아합니다. 여러 기회가 오는 것은 운에 따르지만 결국 그 기회를 잡는 것은 그만큼 준비가 된 사람만이 기회를 취할 수 있다고 생각해요. 저도 취업 준비와 이직 준비를 하면서 많은 탈락으로 인해 자존감이 낮아졌던 시기가 있었습니다. 그때 저를 돌아보면서 저 자신에 대한 준비가 덜 되었구나 라는 걸 깨닫고 기초부터 다시 쌓아 올리는 걸 시작했습니다. 그래서 다음 기회가 주어졌을 때 놓치지 않고 붙잡을 수 있었던 것 같아요. 결국 모든 기초가 중요한 것 같아요.

또 개발자는 “왜?”와 “어떻게?”가 중요한 것 같습니다. 개발 언어나 프레임워크를 사용하면서 당연한 듯 동작하는 프로세스에 대해 “왜?”라는 의문을 품으며 동작 원리와 개념을 알아가는 것과 그에 대한 지식을 얻고 나서 “어떻게?” 응용할 수 있을지 고민하는 것이 중요하다고 생각해요.

쓸데없는 고민 같지만 이렇게 스스로 고민하는 단계를 거치고 나면 되돌아볼 때 이전과는 달라진 모습을 많이 보실 수 있을 것 같아요. 또한 고민했던 내용을 정리하여 다시 볼 때 상기시킬 수 있도록 한다면 면접이나 같은 문제를 직면할 때 많은 도움이 될 겁니다.

인터뷰 원문 보러가기