백엔드 개발자 인터뷰

개발도 커뮤니케이션이 기반이라고 생각합니다. | 개발자 인터뷰

백엔드 스쿨이 만난 사람들 #1
데이원컴퍼니 CTO 심승건 개발자


<백엔드 스쿨이 만난 사람들> 인터뷰는 현직에 있는 개발자의 이야기를 통해 개발자 취준생에게 인사이트를 주고자 발행된 콘텐츠입니다.
성장하는 개발자, 더 좋은 개발자가 되기 위한 개발자의 이야기를 확인해 보세요. 요약된 콘텐츠는 인스타그램 @zb_back_end 에서 만날 수 있어요!

백엔드 개발자 인터뷰_심승건님

01 교육 회사의 개발자는 어떤 일을 할까? 🤔

안녕하세요 승건님. 간단한 자기소개 부탁드릴게요.


안녕하세요. 저는 인생을 바꾸는 교육 콘텐츠를 제공하는 데이원컴퍼니 개발팀의 CTO 심승건이라고 합니다.

승건님은 어떻게 개발자를 꿈꾸게 되셨나요?


제가 컴공과를 전공할 당시만 해도 개발자, 프로그래머라는 것이 유망 직업은 아니었어요. 오히려 전 게임을 좋아해서 열심히 게임을 했는데 프로게이머가 되기에는 진짜 게임을 잘 하는 사람을 뛰어넘을 수 없을 것 같다는 생각이 들더라고요. 그러다가 스타크래프트 리플레이 파일을 분석하는 것에 흥미를 느껴 코딩에 접근했는데 너무 재밌어서 자연스럽게 멋진 노트북을 들고 출근하는 개발자를 꿈꾸게 되었습니다.

‘교육업’에서 개발을 할 때, 어느 부분에 더 신경을 쓰고 계신지 궁금해요.


교육회사에서 중요한 것은 교육과정의 커리큘럼을 통해서 배우고 얻는 것뿐만 아니라 제공되는 서비스들이 지불한 만큼의 만족감을 주는가라고 생각합니다. 그런데 이 부분은 사실 콘텐츠가 더 중요하다고 생각합니다. 콘텐츠가 훌륭하다면 이 콘텐츠들이 잘 제공되고 조금 더 나은 방식으로 접근이 가능하도록 개발을 해야 한다고 생각합니다. 그래서 사용자들이 교육하는 환경이 안정적으로 서비스될 수 있도록 하는 쪽에 신경을 조금 더 쓰고 있습니다.

개발자는 어떻게 일하는지 궁금한데, 승건님의 책상을 살짝 엿볼 수 있을까요?


백엔드 개발자 인터뷰_심승건님

△ 승건님의 책상 사진

키보드가 매우 특이해요!


저는 기계식 키보드 사용을 하면서 조금 더 작은 미니멀리즘을 추구하고 있어요 😄 어떤 이미지를 추구하는 것을 낙으로 살고 있는데, 기왕 쓰는 거 나만의 키보드로 재미있게 써보자 해서 기계식 키보드를 조립해서 사용하고 있어요.

현재 CTO를 역임하고 계신데, 주로 하고 계신 업무에 대해서 들어볼 수 있을까요?


서비스의 개발 및 유지 보수에 대한 책임은 각 서비스 담당자에게 위임하고 있으며, 인프라와 아키텍처 구성을 살펴보면서 사업부의 지원을 가장 효율적으로 빠르게 지원할 수 있는 방안이 무엇인지 고민하고 있습니다.
CTO라는 막중한 역할을 맡고 있다 보니 다양한 부분에 대해 결정을 내려주는 것이 필요하더라고요. 서비스를 개발할 때 ‘웹사이트에 메뉴를 이렇게 클릭하는 걸로 만들어주세요.’와 같은 부분을 책임지는 건 사실 제가 결정할 부분이 아니고, 실제 작업자가 결정해서 거기서 끝납니다. 저는 거기서 이 기능이 언제쯤 들어가야 될지에 대한 얘기를 서로 조율하고, 그다음에 유지 보수를 하는데 ‘그걸 지금 굳이 배포해야 할까? 내일은 공휴일이니까 배포하지 말자.’ 이런 결정을 내려주면서, 상위 레벨에서 결정을 해야 하거나 이해관계가 얽혀있는 경우 제가 개입해서 해결하고 있습니다.
동시에 저희 인프라나 아키텍처 구성을 계속 살펴보면서 끊임없이 거기에 대한 오류 같은 것들을 살펴보고, 아니면 더 나은 방향에서 개선을 제시하기도 하고 피드백을 받아서 ‘변경해서 이렇게 진행합시다.’ 등 중지를 모으는 작업을 하고 있어요.

최근에 내린 결정 중 가장 기억에 남는 것이 있을까요?


가장 재미있었다고 할 수도 있는데, 요즘 사실 저희가 리액트(React)로 많은 작업을 하게 되는 상황이 되었어요. 근데 리액트를 사용하면서 리액트 프레임워크를 사용한 게 아니라 넥스트(Next.js)라는 프레임워크를 사용했거든요. 근데 넥스트라는 프레임워크는 모든 걸 제공해요. 프론트엔드 프레임워크임에도 불구하고 백엔드 서비스까지 지원할 수 있도록 구성이 되어 있어요.

문제는 여기서 지원하는 기능 중에 서버 사이드 렌더링(SSR)이라는 기술이 있는데 이 기술을 잘 사용하면 정말 좋은 기술인데 잘못 사용했다가는 서버 폭탄비를 맞는 기술이거든요. 그런데 여기에 대해서 깊게 고민하지 않고 접근했던 부분이 있었죠. 그래서 작년부터 이걸 해결하는 데 이슈를 두고 있다가 최근에 많이 정리가 되어서 ‘앞으로 서버 폭탄비를 맞지 맙시다.’ 이야기를 하고, 어떻게 하면 해결할 수 있는지에 대한 방법들을 논의를 하고, 프론트엔드 개발자 팀장들을 많이 만나보면서 나름의 결론을 내려서 '앞으로는 SSR을 하면 안 된다. 하더라도 캐시를 태워서 제대로 할 수 있는 방향을 만들어야 한다.’는 쪽으로 설득하고 얘기를 해서 아이디어를 제공했던 적이 있어요.

그래서 저희가 이 부분을 해결해서 큰 이벤트가 일어났을 때 서버가 다운되지 않는 상황을 만들어낼 수 있게 됐거든요. ‘나름 우리가 공헌한 게 꽤 괜찮구나.’ 돈을 쓰긴 하지만 작년 대비 서버 비용도 꽤 많이 줄였거든요. 이 일들이 최근 기억에 남네요.

02 개발자에게 중요한 것은 대화라고 할 수 있죠.🗣

평소 업무를 하실 때 이해관계자들과 대화를 많이 한다고 하셨는데, 개발에서 대화는 어떤 의미인가요?


저에게 있어 ‘대화’는 인사이트를 얻는 방식인 것 같아요. 저는 주로 출근하면 퇴근할 때까지 사업부나 디자인팀과 같이 이해관계자들과 대화를 쉬지 않고 상황을 정리합니다. 앉아서 코딩하는 것도 재밌어하고, 문서를 보고 요구사항을 분석하고 이런 것도 재밌어하는데 사실 회사 나와서 사람들과 대화하면서 얻는 게 정말 많은 것 같아요. 특히 관리자가 되는 순간에는 더 그런 것 같아요.

왜냐하면 부서 사람들이 원하는 것이 있고, 다른 사업부에서 원하는 것들이 있는데 이런 것들이 문서로 정리하기에는 모호화된 개념이 정말 많거든요. 그래서 같이 얘기하면서 정리한 다음에 제가 분석한 부분을 더해 문서를 공유하게 되면 담당자가 맞으면 맞다, 아니면 아니라고 피드백을 주면서 그걸 정리하는 과정이 재미있어요.

그래서 가능한 대화로 하면 좋으니까 제 업무시간 대부분 회의 시간이긴 합니다. 회의가 아닐 때는 함께 일하는 분들이니까 평소 QA 하시는 분들이랑 CS 담당하시는 분들에게 ‘뭐 새로운 거 없어요?’하며 그 과정에서 인사이트를 얻기도 하고, 그 과정에서 라포를 형성해 동료들과 잘 지내고 커피도 한 잔씩 하면서 업무를 하고 있습니다.

그래서 저는 가능하면 대화를 통해 정보의 습득을 멈추지 않으려고 계속 돌아다니며 애쓰고 있습니다. 그게 온라인이건 오프라인이건 상관없이 재미도 있더라고요.

03 개발자 취업을 위해 어떻게 공부하면 좋을까요? 💻

개발자가 되기 위해 가장 먼저 어떤 것을 공부하면 좋을까요?


저라면 OS, 네트워크, 데이터베이스 그리고 Python과 Java를 공부할 것 같아요.
OS, 네트워크, 데이터베이스는 사실 중요하다고 해도 과언이 아닌 게 보통 CS를 통해서 다 다루는 것이고 학교에서도 가장 중요하게 다루는 부분이에요. 그리고 Python과 Java를 말한 이유는 Python은 굉장히 접근하기 쉬운 언어에요. 한두 시간 만에 언어 학습만 한 다음에 바로 프로그래밍을 할 수 있게 되거든요. 테스팅 하거나 작은 모드를 만들 때 뭔가 시험을 해봐야 할 때 Python을 되게 선호하는 편이에요.

그리고 Java 같은 경우에는 취업 시장이 넓어요. 상업적이기도 하고 빠르게 만들어서 제공할 수 있어요. ‘이제는 Spring을 배워야 하지 않나?’라고도 이야기하는데 그래도 언어적인 측면에서 Java를 배우는 것도 재미있는 일이거든요. 결국 언어를 통해서 다루고자 하는 건 OS나 네트워크, 데이터베이스 등 기본기를 다루려고 하는 거니까 하나를 알게 되면 다른 것을 익혀가는 게 그렇게 어렵지 않습니다.

만약 승건님이 신입 개발자 준비를 시작한다면 어떤 부분에 시간을 더 투자하실 건가요?


제일 먼저 웹 서비스를 이해하는 데 시간을 투자할 것 같아요. 프론트엔드든 백엔드든 신입 개발자라면 기본적으로 개발 시장에 도메인에 대해 알고 있어야 합니다. 앱 시장만 보더라도 이제 네트워크를 사용하지 않는 서비스는 거의 없어요. 네트워크가 연결되지 않는 상황에서의 컴퓨팅은 사실 거의 없는 상태죠. 그렇기 때문에 웹 서비스나 네크워크를 잘 이해하고 있어야만 프로그래밍에 대한 이해도 생기고, 그다음으로 종합적으로 내가 어떤 걸 만들어내고 어떤 환경에서 만들고 이해를 하게 되거든요. 그래서 여기에 시간을 투자하는 게 중요하다고 봐요.
간단한 예를 들자면 ‘내가 웹 개발자로 목표를 할 것’이라고 정했다면 http 프로토콜 관련해서 잘 알고 있어야 하죠.

채용 전형 중 코딩테스트 중요성에 대해서는 어떻게 생각하시나요?


여전히 중요한데 이제는 다른 방법으로 더 중요해진 것 같아요. 계산기가 처음 나왔을 때 중요했던 것은 계산하는 방법이 아니라 식을 세우는 방법이었잖아요. 점차 알고리즘 코딩테스트가 그런 영역으로 가는 것 같아요. 예전에는 복잡한 식을 알고 내가 직접 계산까지 했어야 했다면, 이제는 알고 있는 그 식에 대한 연결성과 관계성을 이해하고 있는지 보기 위해 코딩테스트가 필요한 것 같습니다.
몇 년 전까지만 해도 ‘어떤 문자를 공간 집합도를 이용해서 시간 내에 푸세요.’ 이런 문제가 많았는데, 그런 것을 잘 푼다고 해서 좋은 개발자가 되는 건 아니거든요. 이제는 다른 영역으로 넘어온 것 같아요. 알고리즘을 잘 이해하고 있는지에 더 포커스를 맞추고 있는 상황이죠. 예를 들어 정렬 알고리즘이라는 것이 있다면 바이너리 서치나 퀵 소트 등을 잘 이해해서 어느 영역에 쓸 수 있느냐를 아는 게 더 중요해졌다고 봐요.
특히 ChatGPT가 나오면서 알고리즘 코딩테스트를 복사해서 붙여 넣고 풀면 누가 풀었는지 알 수 없잖아요. 그래서 내가 어느 정도까지 풀 수 있는 것과 더불어 이걸 언제 어디서 어떻게 쓰는지 잘 알아야 된다는 거죠. 제 생각에는 앞으로 코딩테스트들도 ‘A가 깨졌는데 문제가 생겼다. 개선해 보시오.’ 등 이런 쪽으로 가지 않을까 생각이 들어요. 그러려면 또 물론 알고는 있어야겠죠. 알고 있어야 하는 것에서 더해 또 많은 문제를 경험해 봤고 응용할 줄 알아야겠죠.

그렇다면 응용을 잘 하기 위해서 필요한 것은 무엇이라고 생각하시나요?


외워서 하는 것도 중요한데 결과적으로는 응용을 잘 해야 해요. 그런 것들이 저는 생각의 힘에서 나온다고 생각해요. 왜 이렇게 생각하는지 설명을 하거나 말을 하거나 언어적으로 풀어낼 수 있을 때 자기가 그걸 잘 요약해서 얘기를 하고 사람들의 공감을 이끌어낼 수 있도록 하는 게 되게 중요하다고 생각해요.

굉장히 중요한 부분인데 의외로 많이 간과하더라고요. 우리가 대화를 할 때 단답형으로 대화하는 게 아니라 서로 오고 가는 핑퐁게임이 되어야 하잖아요. ‘이런 걸 어떻게 잘 할 수 있을까?’ 하는 것은 결과적으로 많은 훈련이 되어 있어야 한다고 생각해요. 타고난 사람도 있겠지만요. 개발자가 코딩은 많이 집중하면서 이 부분에 대해 간과해요. 코딩테스트를 통과하고 ‘네카라쿠배 갈 수 있겠지?’ 생각했는데 면접 가서 본인 생각을 전달을 못해서 떨어지는 거죠.

그러면 면접을 잘 보려면 어떻게 해야 되냐고요? 또 면접지를 달달 외워요. 그러면 또 티가 나잖아요. 면접관들은 이걸 되게 식상해하고, 똑같은 말을 어디서 외우면 이게 또 금세 드러나요. 자기만의 언어로 자기가 스스로 얘기를 잘 하려면 결과적으로 말을 많이 하고 연습을 하면서 자기 것으로 만들어야 해요. 여기에는 굳이 코딩이 들어갈 필요가 없다고 봐요. 왜냐하면 우리가 면접에서 필요하고 면접에서 뽑으려는 사람은 같이 일하고 싶고, 매력적인 사람이거든요.

코딩테스트를 이미 통과했다고 치면 신입으로서의 실력은 어느 정도 보장이 된다는 거예요. 그럼 ‘얼마나 같이 일하고 싶은가?’는 이 사람이 되게 흥미로운 이야기를 자연스럽게 풀어내면서 나도 몰랐던 부분을 깨닫게 되면 자연스럽게 호감도가 생길 수밖에 없잖아요. 그래서 스펙이 뛰어난 다른 지원자가 있더라도 오히려 이런 사람과 같이 일하고 싶을 것 같아요.

일단 기술의 허들을 넘어섰다고 생각하면 흔히 말하는 ‘기술의 상중하’라는 게 별로 중요하지 않아요. 같이 일하고 다 같이 배우면서 그 사람의 기술을 다시 업그레이드시켜야 되는 건 시니어의 몫이거든요. 근데 이 사람이 말을 잘 하는지, 말을 잘 알아듣는지 이런 것들이 되게 중요하죠. 커뮤니케이션이라고 볼 수도 있는데, 이걸 단순히 커뮤니케이션이라고 얘기를 하고, ‘저는 커뮤니케이션을 잘해요.’가 필요한 게 아니라 '어떠한 개념을 추상화시켜서 말을 잘 전달할 수 있는가?’가 중요한 거죠.

말을 잘 전달하기 위해서 내가 작성한 코드나 최근에 읽었던 책을 흥미롭게 이야기할 수 있도록 친구들과 대화를 많이 할 것 같아요. 눈에 보이지 않거나 생소한 것을 소개할 때 그 맥락을 처음 듣는 사람도 잘 이해할 수 있게 설명할 수 있다면 면접도 잘 볼 수 있을 것이라고 생각합니다.

04 신입 개발자가 되고 싶습니다! 🙋‍♀️

승건님이 속한 곳의 개발 문화는 어떤지 들어볼 수 있을까요?


자유롭게 질문하고 코드 리뷰를 받는 문화를 지향하고 있습니다. 서로 친절하면 더 좋겠죠.

데이원컴퍼니의 개발자가 되기 위해 필요한 팁이 있다면요?


중요하게 보는 것 중에 하나가 앞서 말한 것과 같이 추상성을 표현하는 능력과 이해하는 능력, 무엇이 재밌었고 거기서 뭘 얻었는지 설명하는 생각의 힘이 있다면 더 선호할 것 같아요. 그리고 모든 개발팀이 그렇듯이 사업부, CS, 디자이너분들과 소통해야 하기에 커뮤니케이션 능력을 통해 ‘같이 일하면 잘 맞을까?’라는 것을 봅니다.

신입 개발자가 특히 가지고 있으면 좋은 경험이 있을까요?


코딩테스트를 많이 해보고 동시에 내가 만들고 싶은 프로그램을 만들어 보면 좋습니다. 그게 백엔드가 아니라 App이라도 상관없습니다. 개발의 즐거움을 알 수 있어야 한다고 봅니다.

지금도 열심히 개발 공부를 하고 있을 개발자 취준생에게 한 마디 부탁드려요.


키보드를 좋은 것을 써야 합니다. 타이핑이 즐거워야 코딩도 즐겁습니다.

제로베이스에서는 취업이라는 목표를 달성해 볼 여러분을 기다립니다.
제로베이스에서 시작해 보세요.

취업은 제로베이스


추천 컨텐츠