1. 인사

안녕하세요. 서비스인프라개발팀 메세징모바일개발파트에서 일하고 있는 장경석입니다.
2020년 공채 1기로 사람인 개발자가 된 제가 인턴기간동안 했던 생각들, 고민들을 공유하고 싶습니다. 제가 인턴에 들어오기 전 궁금했던 점들 위주로 글을 썼으니 끝까지 봐주세요!


2. 입사지원

대학교 4학년 2학기 취업계를 내고 개발관련 오프라인 강의를 듣고나니 5월이었습니다. 원래 목표는 강의가 끝나기 전에 꼭 마음에 드는곳에 취업하리라 생각했었습니다. 교육과정이 끝나고 처음으로 지원한 사람인 공고에 서류지원을 하고 합격통지를 받았습니다.

저는 취업준비를 하면서 프로그래머스나 백준에 올라오는 문제를 하루에 한개씩은 꼭 풀었습니다. 그게 도움이 된건지 사람인 코딩테스트날 큰 어려움 없이 코딩테스트를 풀었던 것으로 기억합니다. 아마도 코딩테스트를 보셨던 분들이라면 공감하시겠지만 코딩테스트를 풀면서 ‘이거 합격인 것 같다’는 느낌이 왔었습니다.

코딩테스트까지 합격하고 면접날이 되었습니다. 기술면접, 인성면접 2개로 진행을 했습니다. 기술면접은 각 파트장님들이 참석하셨었는데 오랜만의 면접이었기에 긴장한 상태로 면접을 봤었습니다. 코딩테스트에 대한, 오프라인 강의, cs지식에 대한 질문을 하셨었고 100% 만족스러운 답변은 하지 못했었습니다.

인성면접은 각 팀의 팀장님들이 면접관으로 참석하셨습니다. 면접을 많이 본 것은 아닙니다만 다른 면접과는 다르게 굉장히 편한 분위기였다고 생각합니다 제가 공부해왔던 내용들에 대해 질문하셨고 알면 아는대로 모르면 모른다고 술술 대답했었습니다.

사실 모든 면접을 마치고 좋은 기운을 주지 못한 것 같아 불합격의 느낌을 받았지만 예상했던 것과는 다르게 합격 통지를 받았습니다. 합격 통지를 받고나서 기분좋게 친구들에게 전화해서 자랑했었습니다. 서류, 코딩테스트, 면접까지 마치고 인턴생활을 시작하게 되었습니다.


3. 인턴기간

인턴 2인 1조로 멘토를 배정받고 인턴생활을 시작했습니다.
인턴기간은 대체로 자율적인 분위기였습니다.
사람인의 환경에 적응하면서 일과시간을 지냈고 입사자 교육이 있는 날에는 교육을 들었습니다. 교육기간에는 사람인의 개발환경, 부서와 팀 구성, 업무 프로세스 등에 대한 설명을 들었습니다. 처음으로 서비스로 운영되는 소스코드를 분석하고 첫 개발환경을 설정하는 데 멘토님이 많이 도와주셨습니다.

인턴기간동안 2번의 인턴과제를 했습니다.
선택할 수 있는 과제와 자율주제로 과제를 진행할 수 있었는데 저는 주어진 주제로 과제를 했습니다. 과제의 요구사항에 맞춰 개발을 해보면서 이렇게 일을 하겠구나 하는 감을 잡았던 것 같습니다. 또 어느정도 php와 laravel프레임워크에 익숙해졌습니다.

2번의 인턴과제를 마치고 코드리뷰 겸 발표가 있었습니다.
마지막 발표인만큼 긴장한 상태로 발표를 했었습니다. 개발한 결과물에 대한 리뷰를 현직자에게 받을 수 있다는 게 참 좋은 기회였습니다. 부족한 부분들을 짚어주고 개선방안을 제시해주시니 인턴십에 합격하지 않더라도 도움되는 경험일거라 생각했습니다.

과제 발표를 마지막으로 인턴십을 모두 마치고 수료식도 하고 최종면접까지 봤습니다. 연락은 언제오려나 기다리고 있었는데 다음날 바로 합격했다는 연락을 받았습니다. 첫 출근날까지 얼마 남지 않아서 열심히 놀았던 기억이 납니다.


4. 인턴 과제

인턴십 과제 중 2번째로 진행했던 주제는 아이엠그라운드 API 명세 입니다.
보통 API 명세라고 하면 프로젝트 설계 단계에서 작성한 후에 명세를 구현해나가는 게 일반적입니다. 제가 담당한 과제는 이미 만들어진 아이엠그라운드 프로젝트의 API 명세를 작성하는 일이었습니다. 다만 그저 작성된 문서가 아닌 엔드포인트의 테스트도 가능해야한다는 것입니다.

  • 주제선정에 대한 생각

제 생각에 이 주제를 선정하신 이유는 이렇습니다.
명세를 작성하면서 각 엔드포인트에서 필요한 파라미터, 예상되는 반환값 등에 대해 작성해야합니다. 인증이 필요한 구간에 대해서는 oauth2 인증이 필요합니다. 때문에 먼저 아이엠그라운드 프로젝트의 분석이 선행되어야 합니다. 저는 이 과제를 진행하면서 oauth, API 명세 툴, laravel 프레임워크 기능 등에 대해 공부하며 진행했습니다. 아무래도 결과물보다는 과제 진행과정에서 운영되는 소스를 상세히 분석하고 부족한 지식을 보강하는 데 초점을 두신게 아닐까 싶습니다.

intern_jks_research.png

  • 과정

API 명세를 작성한 툴로는 3개를 리서치 했습니다.
POSTMAN, Insomnia, swagger 이고 최종적으로 swagger를 사용하는 것으로 채택했습니다. 이유는 프로젝트 내에 API 명세 보여주는 페이지를 구현하고 싶어서 입니다. POSTMAN과 Insomnia는 툴 형태로 제공되고 swagger는 의존성 형태로 제공됩니다. 그렇게 되면 해당 프로젝트 내 관리자용 페이지 권한을 그대로 부여하여 사용할 수 있기 때문입니다.

swagger 소스 작성법은

  • [https://github.com/DarkaOnLine/L5-Swagger]
  • [https://github.com/zircote/swagger-php/tree/master/Examples/petstore.swagger.io/controllers]
  • [https://petstore.swagger.io/#/pet/updatePetWithForm]

를 참고하여 작성했습니다.
사용법을 간단히 말씀드리면 swagger문법으로 작성된 소스를 읽어 swagger에서 제공하는 형태(custom가능)로 변환해줍니다. 각 엔드포인트의 기능, 요구 파라미터, 응답 반환값은 소스를 참고해 작성하고 직접 호출해본 후 확인했습니다.

swagger로 구현한 API 명세는 이렇습니다.

intern_jks_admin.jpg

관리자 권한이 필요한 URL로 생성하여 다음과 같이 관리자 계정으로 로그인해야 접근할 수 있습니다.

intern_jks_document.jpg

관리자계정 로그인 후 API 명세 페이지로 접근하면 다음과 같이 엔드포인트들이 정렬되어 있습니다.

intern_jks_api_test.jpg

각 엔드포인트에 대한 테스트를 다음과같이 원하는 값을 입력하여 실행할 수 있습니다.

실제 운영되는 소스를 파악해보고 API명세, 테스트 기능을 추가해 보면서 결과물보다도 과정이 만족스러운 과제였다는 생각이 들었습니다. 후에 업무를 하면서 어떻게 기능을 파악해야 하는지를 익힐 수 있는 과제였습니다.


5. 인턴기간 나의 고민

PHP 개발자 사실 PHP개발자에 대한 고민이 가장 컸습니다.
인턴기간동안 매일같이 ‘PHP개발자의 미래’, ‘PHP개발자란?’ 이런 내용들을 검색했던 기억이 납니다. 사람인의 채용공고를 보거나, 인턴십을 하게 될 분들은 저와 비슷한 고민을 분명히 할거라고 생각합니다. 대부분의 회사에서 Java를 선호하고 공부할 때에도 Java로 공부하셨을테니까요.

글을 작성하는 현재는 개발언어에 대한 고민이 참 부질없었다는 생각이 듭니다. 개발언어만 다를 뿐 개발에 필요한 요소들을 파악하고, DB 구조, 서비스 아키텍처에 대해 알아가면서 이런게 중요한거구나 싶었습니다. 그리고 개발적인 요소 뿐만 아니라 협업하는 방식과 회사에서 일하는 방법(개인 프로젝트 하는것과는 다른점들)을 배워나가면서 효율적으로 일하는 방법을 익혀나가고 있습니다.

또 팀마다 다르겠지만 PHP로 되어있기 때문에 Java로 마이그레이션 해볼 수 있는 기회도 있습니다. (장점이 될 수 있는 경험이라 생각합니다.)

개발언어가 다르다고해서 개발하며 알게되고 얻어가는 것까지 다른것은 아닙니다.
때문에 저와 같은 고민을 하신다면 걱정은 넣어두셔도 좋습니다.


6. 사람인에서 일하는 방식

6-1. JIRA, Confluence

intern_jks_jira.jpg

사람인에서는 ITS(Issue Tracking System)인 Atlassian JIRA를 통해 업무일정을 관리합니다. (사용방법, https://www.atlassian.com/ko/software/jira/guides) 제가 속한 팀의 경우 팀장님에게 업무 관련 티켓이 발행되고 이를 각 개인 업무일정을 고려해 배정하는 방식입니다.

사전 분석을 통해 업무 티켓의 내용을 파악하고 일정을 산정합니다. 일정 산정 후 WBS를 작성합니다.

매주 주간회의를 통해 자신의 업무 일정과 진행상황을 파트원들과 공유합니다. (공유하는 과정에서 업무 처리 방법을 짚어주시기도 합니다.)

입사한지 얼마 안된 현재 업무멘토님이 있고 제가 작업한 코드를 리뷰해주십니다.

리뷰 내용까지 반영하면 gitlab에 개인브랜치를 merge request하여 배포합니다. 배포할 내용은 정기배포에 의해 주기적으로 한번에 반영됩니다.

ITS에 대한 내용, 알게 된 내용, 자기계발 등등 사람인 Confluence에 정리합니다. 이는 추후에 나와 유사한 업무를 맡은 동료, 나 자신이 참고자료로 활용할 수 있습니다. 저는 담당한 모든 ITS에 대해 업무내용을 정리하고, 개인공부한 내용을 공유하고 있습니다.

6-2. Github

intern_jks_gitlab.jpg

사람인에서는 gitlab을 사용합니다.
작년 인턴십때까지만 해도 SVN이라는 형상관리툴을 사용했었습니다. 간단히 프로젝트 소스코드를 다운로드 받는 데만 해도 꽤 오랜시간이 걸렸던 것으로 기억납니다. 인턴기간동안 github로 전환한다는 얘기가 들려왔었는데 인턴십이 끝나고 나니 전환이 완료된 상태였습니다.

SVN을 사용하던 시절에는 CI/CD가 제대로 갖춰지지 않아 익숙하지 않은 개발자들은 개발환경 설정에 어려움이 있었습니다. 소스코드를 개발서버, 가상 데스크톱에 받아 ftp설정 후 nginx설정, env파일 설정 등 해야할 일이 많았습니다.

github로 전환 된 현재 개발환경 설정이 더 쉬워졌습니다. 현재는 개인 브랜치를 생성하면 CI/CD에 의해 개발서버, 스테이징서버 등 필요한 환경에 소스를 다운받고 nginx설정이 자동으로 생성됩니다. 개인 브랜치에 commit, push할 때에도 변경점을 자동으로 반영해줍니다.

환경설정에 애먹지 않고 개발에만 집중할 수 있게 되었습니다. 또 워낙 대중적인 형상관리툴이기 때문에 새롭게 개발자가 되신 분들도 쉽게 적응할 수 있습니다!

6-3. 협업

우선 업무를 할당받게 되면 기획 리뷰를 받게 됩니다. (간단한 업무의 경우 생략하기도 합니다.) 기획 리뷰를 받으며 궁금한 부분들을 정리하고 구현 가능여부를 파악하는 것이 업무 파악이라고 생각합니다. 파악한 내용으로 개발을 진행하고 내용들 중 협조가 필요한 부분들이 있습니다.

경험한 예를 들어 설명하겠습니다.

  • 사람인LAB에서 API를 제공받아 사용해야하는 경우

물론 이 내용도 기획서에 포함되어 있고 기획자님이 저에게 업무 요청하듯 LAB에도 요청해 주십니다. 다만 제공받은 API에 추가로 필요한 내용이 있거나, 수정해야할 내용이 있다면 저의 경우는 LAB담당자 분에게 직접 요청하고 기획자분에게 공유드립니다. 보통 기획자분이 업무를 조율해주시기 때문에 저는 공유드리는 편입니다.

  • DB 테이블 구조를 변경하고 싶은 경우

intern_jks_approval.jpg

이 경우 사람인에서는 전자결재를 통해 진행하도록 되어있습니다.
‘DA분들과 협조해서 수정하면 되는 것 아닌가?’ 생각하실 수 있지만 제 생각에는 이러한 이유는 이렇습니다.

내용과 책임을 공유하게 됩니다.
업무 담당자가 사이드 이펙트에 대해 충분히 조사를 하고 결재 진행합니다. 전자결재를 통해 직책자분들도 2중 3중으로 체크하게 되어 문제 발생을 줄일 수 있습니다. 만약 문제가 발생하더라도 내용을 공유하고 승인을 받기 때문에 책임을 공유하게 됩니다.

민감한 일은 전자결재를 통해 진행하는 것이 오히려 개인의 부담감을 덜어주는 효과가 있다고 생각합니다. 또 전자결재 이력이 남기 때문에 대응하기도 수월합니다.

이와 별개로 업무에 모르는 부분이 너무 많을 수 있습니다.
간단하게 해당 영역 담당자분에게 메신저를 보내보시면 됩니다. (사내 메신저에 담당영역을 프로필에 적어놓습니다.) 저는 가능하면 메신저보다는 직접 자리로 가서 물어보는 것을 선호합니다. 신입사원 입장에서 불편하지는 않을까? 싶지만 물어본 내용은 굉장히 친절히 알려주십니다. 아직까지 부담을 느껴본적은 없습니다.

intern_jks_confluence.jpg

사내 Confluence를 검색해보셔도 좋습니다.
대부분의 연구원님들이 담당한 업무를 Confluence에 자세히 정리해 두셨습니다. Confluence를 통해 도움을 받았다면 자신이 진행한 업무도 열심히 정리하는 것이 다른 연구원님들에게 도움이 됩니다.

6-4. 자기계발

intern_jks_inflearn.png

사람인에서 생활하면서 자기계발을 적극적으로 권장한다는 느낌을 받았습니다. 자신의 업무에 직접적으로 와닿아 있는 내용이 아니더라도 개발자로 성장할 수 있는 공부라면 자유롭게 하셔도 됩니다. (운영업무나 개발업무보다 우선시 되어서는 안된다 생각하긴 합니다.)

저는 담당업무가 여유로운 기간이 되면 업무시간에도 자기계발을 하곤 합니다. 추후에 담당하게 될 프론트엔드 작업을 위한 javascript, ES6에 대한 내용, PHP 소스를 Java로 migration하기위한 Spring Boot, JPA등에 관한 내용 등 강의 위주로 수강하면서 자기계발합니다. 최근에는 회사에서 인프런 강의를 무료로 들을 수 있게 계정도 마련해주었습니다!

저는 풀스택 개발자를 목표로 자기계발을 하고 있습니다. 자기계발 하면서 다른 연구원님들처럼 개발지식을 공유도하고 기술블로그에 내용도 업로드할 수 있도록 노력중입니다.

6-5. 의견 반영

각 팀마다, 파트마다 매년 워크샵을 진행하고 개선사항, 수정사항을 공유합니다.
자유로운 주제로 의견을 제시할 수 있고 제시한 의견 중 개발할 가치가 있는 내용들은 실제로 채택됩니다. 채택된 내용들은 다음해 개선 목표로 잡히게 됩니다. 작년에는 업무 효율화, 서비스 개선 등의 주제로 의견이 나왔습니다.

의견을 낼 수 있다는 것은 각 개인이 원하는 언어, 기술 등을 사용해 개발할 수 있는 기회이기도 합니다. 또한 나의 의견이 기획이 되고, 개발을 거쳐 운영까지 반영되는 과정을 경험할 수 있기도 합니다.

2020년 신입 개발자가 된 저에게는 특별한 경험이 되지 않을까 생각합니다. (다만 의견을 낼 때에는 검토와 상세한 사전조사가 필수입니다.)

참고로 워크샵은 딱딱한 분위기가 아니라 편안한 분위기에서 생각을 주고받는 느낌이었습니다.


7. 자랑

사람인 개발자로 일하며 느낀 자랑하고 싶은 점들

  • 수평적인 문화

사람인의 개발자들은 전부 연구원이라는 호칭을 갖게 됩니다.
제가 취업준비를 하면서 들었던 무서운 직장분위기, 부조리함은 아직까지 경험한적도, 들어본적도 없습니다. 요즘은 익숙해졌지만 저보다 경력이 많은 연구원님들, 심지어는 팀장님도 저를 ‘경석 연구원님’하고 부르십니다. 이런 문화 때문인지 다른 연구원님들과 농담도 주고받고 좀 더 쉽게 친해질 수 있습니다. 그리고 무언가를 물어볼 때, 요청할 때 좀 더 편한 느낌이라고 생각합니다.

  • 자기계발

앞서 말씀드린대로 최근에는 인프런 강의도 제공해주는 등 자기계발 여건이 좋습니다.
자기계발하면서 실력도 키우고 다른분들과 공유하는 기회도 가질 수 있습니다. 현재는 코로나로 인해 운영되지 않지만 자기계발 동아리도 운영된다고 합니다.

  • 휴가

휴가를 부담없이 사용할 수 있습니다.
당연히 업무에 지장을 주지 않는 선에서 원하는날에 연차를 사용할 수 있습니다. 연차가 시간단위로 지급되기 때문에 볼일이 있거나, 피곤한 날에 일찍 퇴근하는 것도 가능합니다.

  • 인턴 process

인턴십 기간동안 사람인의 모든것을 상세하게 알려줍니다.
사람인의 구성원, 개발환경 구성요소, 개발방식, 기업정신, 멘토링 등의 내용을 따로 시간을 내어 알려줍니다. 회사생활에 적응하는데 큰 도움이 됩니다.

  • 워라밸

자신이 담당한 업무일정을 정상적으로 소화할 수 있다면 마음 편히 퇴근 할 수 있습니다.
인턴기간 퇴근시간에 눈치를 보고 있었는데 다른 연구원님들이 눈치보지말고 얼른 퇴근하라고 하셨던 기억이 납니다. 다만 맡은 업무는 책임감있게 마무리하는 것도 중요하다고 생각합니다.

생각하는 자랑거리는 더 많지만
앞으로 입사하게 될 지원자분들이 직접 느껴보셨으면 좋겠습니다.


8. 글을 마치며..

올해 공개채용을 진행한다는 소식을 들었습니다.
제 글이 공채 2기가 되고싶은 지원자분들의 고민과 궁금한점을 조금이나마 덜어드렸으면 좋겠습니다.

앞서 쓴 글들이 너무 좋은 내용들만 담겨있다고 느끼실 수도 있지만 회사에 매우 만족하고 다니는 저이기 때문에 딱히 단점이라 생각되는 점은 없었습니다. 저 또한 단점이 없는 일자리는 없다고 생각하지만 사람인은 단점보다 장점이 많은 회사라고 자신있게 말씀드립니다. 때문에 개발자를 희망하신다면 사람인이 탁월한 선택이 될 거라고 생각합니다.

저는 입사한지 아직 1년도 되지않은 파릇파릇한 신입개발자이기 때문에 자기계발에 욕심이 많습니다. 새로 들어오실 공채2기 분들과 개발 초고수를 목표로 같이할 수 있다면 좋을 것 같습니다.

감사합니다~