지금 다니는 회사의 주변에는 몇 개의 대학교가 있습니다. 3/4학년 대학생들을 대상으로 인턴십 프로그램을 학교에서 주도적으로 수행하고 학점을 수여합니다. 그러다 보니 매년 인턴십 요청이 있고 우리 회사도 인턴십에 참여하여 다양한 학생들과의 인턴십 기회를 가집니다. 인턴십은 종류에 따라 다르지만 6~8주 정도 수행합니다. 3개월 내의 짧은 기간이지만 회사에서 업무를 할당 받고 다른 직원과 동일하게 출퇴근하며 업무를 수행합니다. 짧은 기간이기 때문에 인턴십을 통해서 이루려하는 목적을 결정하는 것은 ‘회사’측, 담당 사수의 역량에 많은 의존성이 있습니다.

저도 처음 인턴십 프로그램을 요청 받았을 때, 무엇을 알려주어야 하는지, 어떤 일을 해야하는지 너무나 모호했습니다. 그렇게 몇 번 어영부영 몇 번의 인턴십이 지나가고 이렇게 인턴십을 무의미하게 보내면 안되겠다는 생각을 하였습니다.

영화 인턴십 장면

출처: 네이버 - 영화 인턴십 [참고1]

2013년에 개봉한 인턴십 (The Internship, 2013)이란 영화는 구글의 체계적인 인턴십 프로그램을 보여줍니다. 영화 내용은 판타지라고 생각할 수 있지만 구글이 가지고 있는 체계적인 인턴십 프로그램은 매우 인상적이었고 저와 함께 하는 인턴십 친구들에게도 인턴십 프로그램을 통해서 좋은 기회를 가지게 하고 싶었습니다. 사실 이런 생각은 다른 회사의 인턴십 프로그램 담당자 분들에게도 공유되어 좋은 인턴십 프로그램을 공유할 수 있길 바랍니다.

지금까지 인턴십 프로그램을 수행하며 느낀 ‘프로그래머’로서 의미있는 인턴십 경험을 후배들에게 전달하고 싶었습니다.

인턴십 프로그램의 목적

회사의 입장

회사에서는 인턴십을 하는 목적이 매우 명확합니다. 좋은 인재 발견 및 홍보 효과입니다. 학교에서 인턴십 프로그램을 찾으면서 많은 학생들이 회사에 대해서 알게되고 먼저 인턴십을 수행한 학생들의 입소문도 좋은 홍보 효과를 나타냅니다. 실제로 인턴십을 통해 회사 생활을 경험하고 졸업 후 다시 지원하여 회사에 입사하는 친구들이 요근래 매우 많아졌습니다. 회사의 입장에서도 인턴십을 통해서 해당 지원자의 장/단점을 면밀히 파악하였기 때문에 명확하게 입사가 결정됩니다.

  • 인재 발견
  • 홍보 효과

하지만 흔치 않지만 단순 반복 작업을 수행하기 위해서 인턴십을 악용하는 경우도 있습니다. 수천개의 문서를 업데이트 한다거나 단순 반복 작업시키기도 합니다. 올 해 초 인턴십 소개 차원에서 학교 방문한 적이 있습니다. 많은 학생들이 인턴십이 낮은 단가로 반복 작업(노가다)을 시키는 것이라고 생각하였고 특히 어릴수록, 프로그래밍에 관심이 많을 수록 이런 생각을 가진 친구들이 많이 있었습니다. 인턴에게 어떤 업무를 주는지는 회사의 결정이지만 단순 반복 작업을 시키는 것은 인턴십을 악용하는 사례라고 생각합니다.

그래서 인턴십 프로그램을 찾을 때 학생들은 반드시 자신이 수행할 직무를 확인하여 자신이 원하는 형태의 인턴십을 수료할 수 있길 바랍니다. 또 회사의 입장에서도 학생들에게 다양한 경험을 주는 인턴십 프로그램 환경을 제공하길 바랍니다.

학생들의 입장

지금까지 인턴십에 참여한 학생들을 만나보았을 때 기본적으로 인턴십을 참여하는 큰 이유는 다음과 같습니다.

  1. 학점 이수
  2. 알바 (돈)
  3. 회사 생활 경험 (프로그래밍에 대한 실무 경험)

현재까지 총 8명의 인턴십 프로그램 친구들을 만나보았고 인터뷰를 통해 정리한 순위입니다. 사실 학생들의 입장에서는 학점과 알바라는 두 가지 토끼를 잡는 좋은 기회입니다. 하지만 개인적으로 3번 회사 생활 경험과 회사에서 하는 프로그래밍에 대한 실무 경험이라는 측면도 좀 더 신경을 쓰고 인턴십 프로그램을 찾을 때도 기준을 삼길 바랍니다.

사실 회사 생활 경험 (프로그래밍에 대한 실무 경험)에 비하면 학점과 알바는 부수적이라고 생각합니다. 인턴십을 지원하는 학생들도 이왕이면 단순하게 ‘몇 주 출퇴근하다가 학점이나 받아야지’라는 관점이 아니라 ‘이왕하는 인턴십에서 프로그래머로서 무엇인가를 배워가야겠다’라는 생각으로 인턴십을 참여하면 좋겠습니다.

나의 생각

개인적인 생각으로는 회사는 인턴십의 목적이 인재 채용으로 확고합니다. 오히려 이러한 목적을 위해 더 좋은 인턴십 프로그램이 필요합니다. 저도 인턴십을 하면서 고민을 하고 있지만 인턴십 프로그램이 아직 명확하게 정리되지 못했네요. 좋은 아이디어가 생긴다면 공유하겠습니다.

하지만 학생의 입장에서는 인턴십을 좀 더 고민하여 지원 및 수행하면 좋겠다는 생각입니다. 단순한 ‘학점 이수’ 혹은 ‘알바’라고 생각하지 말고 앞으로 프로그래머로서의 진로를 결정하기 위한 경험이라고 생각하면 좋겠습니다. 이러한 경험들은 다양한 것들이 존재하지만 그 중에서도 다음 3가지를 추천합니다.

  • 프로그래머의 직군 경험 (지원할 회사에 대한 구체화)
  • 소프트웨어 개발 프로세스 경험
  • 선배 프로그래머의 경험 공유

인턴십을 통해서 얻을 수 있는 것

1. 프로그래머의 직군 경험 (지원할 회사에 대한 구체화)

전 세계적으로 스타트업, 대기업, 중소기업들이 매우 많이 있습니다. 그런 다양한 회사에 취업을 해보고 프로그래머로서의 직무나 분위기를 파악할 수도 있지만 인턴십만큼 그 회사의 분위기를 파악하기 좋은 기회는 없다고 생각합니다. 특히 IT 업무를 수행하는 프로그래머는 회사 별로 매우 다른 스타일을 가지는 경우가 많았습니다. 유명한 회사의 경우 이러한 스타일을 공개적으로 홍보하는 경우도 있지만 대부분의 경우는 알 수가 없습니다.

그래서 자신이 원하는 기업(혹은 유사한 곳)에 인턴십이 있다면 지원하여 먼저 확인하는 것이 매주 좋은 방법이라고 생각합니다. 취업을 한 뒤 본다는 것은 매우 힘듭니다. 일단 취업하기가 힘들죠?

인턴십을 수행하는 동안 중요하게 보아야 할 것은 ‘선배들이 어떻게 일을 하고 있느냐?’ 입니다. 인턴십을 진행하다 보면 시간이 빌 때도 있고 여유 간격이 발생하는 경우가 있습니다. 이 때는 혼자 공부하는 것도 좋은 방법이지만 선배들이 어떻게, 무엇을, 왜 하고 있나를 살펴보는 것을 추천합니다.

  • 염탐

선배들이 고민하고 있는 분야, 기술, 관심사를 살펴보세요. 인턴십을 한다면 3/4학년 혹은 곧 취업을 앞 둔 사람일텐데 바로 취업 후에 부딪히는 문제일 수 있습니다. 미리 해답을 찾아가세요.

2. 소프트웨어 개발 프로세스 경험

학생 때 과제를 수행하는 것과 회사에서 프로젝트를 수행하는 것의 가장 큰 차이점은 회사에서는 요구명세(Requirement)가 명확히 존재하고 이를 수행하는 소프트웨어 개발 프로세스 (Process)가 정리되어 있다는 사실입니다.

  • 소프트웨어 개발 프로세스 (Process)

회사는 업무를 효율적/체계적 혹은 관리를 위해서 프로세스를 정의합니다. “요구사항 파악 > 구현(코딩) > 리뷰 > 배포”라는 전체 단계일 수도 있고 단순하게 “단위 작업(Task)로 구분하여 정의한 뒤 PL(Project Leader)의 지시에 따라 분할하여 수행”이라는 규칙일 수도 있습니다. 프로세스는 회사마다 자신들의 색깔을 가지고 정의되어 있기 때문에 무엇이 좋다/나쁘다고 할 수 없습니다.

그렇더라도 ‘나의 성향엔 이 방법이 맞는 것 같애’ 혹은 ‘이 회사에서 일하는 스타일은 나랑 맞군’ 정도는 느낄 수 있습니다. 이런 느낌은 결국 원하는 회사 혹은 진로 선택에 영향을 줄 수 있습니다. 또는 회사를 찾을 때 가장 중요한 결정 요인 일 수 있습니다.

하지만 대부분의 회사에서는 사내 프로세스로 인턴십을 수행하지 않고 인턴십은 별도의 작업을 시키는 경우가 많습니다. 그런 경우에는 인턴십을 수행할 때 실제 회사에서 일하는 것처럼 한 번 해보고 싶은데 가능한지 물어보고 유사한 프로세스로 수행할 수도 있고, 혹은 질의응답을 통해서 프로세스 내용에 대한 설명을 들수도 있습니다. 직접 프로세스를 경험할 수 없다면 질의응답을 통한 간접적인 경험이라도 인턴십이라는 기회를 적극적으로 활용해서 얻어가길 바랍니다.

이러한 다양한 프로세스 경험은 회사에 따라 조금 이상할 수도 있습니다. 그럴 땐 왜 여기선 이렇게 했을까? 혹은 이럴 수 밖에 없었나 고민도 해보고 선배와 이야기를 해보는 것도 궁금증을 해결하고 생각을 넓힐 수 있는 기회라고 생각합니다. 대부분 이상한 프로세스를 가진 회사의 선배들은 왜 자신이 불만인지를 명확하게 아주 상세히 설명해주는 경우가 많습니다.


사실 사내 개발 프로세스라는 측면을 중심적으로 체험할 수 있도록 인턴십 환경을 구성한 적이 있습니다. 현재 제가 다니는 회사에서는 아틀란시아의 Jira, Confluence, BitBucket 제품을 활용하여 업무를 수행하고 있고 Jenkins, Sonarqube를 구축하여 간단한 CI와 코드 품질을 측정하고 있습니다. 보안 내용이 많기 때문에 완전 분리된 네트워크에서 동일한 경험을 할 수 있도록 구성하여 인턴십을 수행하였습니다.

이렇게 수행을 하니 사수로서의 역할을 매우 많아졌습니다. 가장 기초적인 프로그램 설정에서 사용법부터 가르쳐줘야 하는 상황이 발생하였습니다. ‘Git 이란 무엇인가? Commit 하는 방법’까지 그냥 단순히 업무만 전달하여 수행하는 것과는 다르게 많은 시간을 투자해야 합니다. 그리고 인턴십인(3개월 후 그만두는) 친구에게 그렇게 잘 설명해주어야 할까? 라는 생각도 듭니다.

사실 이 문제는 아직도 고민입니다. 좋은 점은 나 스스로 누군가에게 무엇을 알려준다는 것은 매우 좋은 학습법이고 인턴이 이 회사 참 좋더라라는 ‘입소문’을 자연스럽게 만들어준다는 점입니다. 당연히 이렇게 좋은(?) 인턴십 프로그램이 있다고 하면 더 많은 인턴 혹은 신입 인재들이 찾아오겠죠. 실제로 이렇게 수행한 뒤, 같은 동아리의 친구가 우리 회사에 지원하여 인턴십을 수행한 사례도 있습니다. 이런 장점은 회사의 입장에서 매우 좋은 것이나 사수의 입장에서 만만치 않은 부담이 됩니다. 회사 업무를 어느 정도 조율할 수 있겠지만 업무와 인턴십 프로그램의 동시 진행은 매우 부담이 될 수 밖에 없습니다. 이 기회를 통해서 좋은 부사수가 들어오면 조금 더 마음은 편하겠네요. 결국 회사 측에서도 충분한 지원이 되지 않는다면 세상에서 가장 어렵지만 적절히 수행하는 능력이 필요합니다.

그래서 개인적으로 정의한 “사수의 규칙”은 다음과 같습니다.

  • 인턴과 매주 시작할 때 업무, 개인사, 앞으로의 계획 등에 대해 이야기하는 기회를 일주일에 2시간만 가지자!
  • 최대한 도구를 활용하자.
    • Slack 을 이용한 커뮤니케이션 하기: 빠른 Q&A 답변, 내가 회의 중이라도 언제든지!
    • 코딩 컨벤션은 IDE의 기능(체크스타일에 대한 정의 파일 제공)을 활용해서 인턴 스스로 검사
  • 요구사항 만족은 테스트 코드로 확인하기
  • 인턴의 업무는 주 단위로만 관리하기

3. 선배 프로그래머의 경험 공유

인턴십이라고 해서 반드시 회사에서 주어진 업무에 관련된 것만 질문할 수 있는 것은 아닙니다. 사수가 되는 프로그래머에게 자유롭게 질문해주세요. 회사 업무에 관련 없더라도 여기 저기에 관심 많은 사람들이 ‘프로그래머’라고 생각합니다.

  • 선배 프로그래머의 관록

아마 무엇이든 물어보면 ‘정확한 답’을 못 줄 순 있어도 ‘내 생각은 이렇다’ 라고 말을 해줄 것입니다.

실제로 인턴과의 대화 중 모르는 라이브러리/프레임워크에 대해서 질문을 받게되면, 정확한 답은 몰라도 이런 경우와 유사하다 라고 설명해줄 수 있었습니다. 그리고 저도 몰랐던 부분에 대해서 잠시나마 관심을 가지고 배울 수 있어서 매우 좋았습니다.

그리고 고민 상담

인턴으로 오는 친구들은 대부분 대학생 혹은 고등학생으로 취업에 대해 관심이 많습니다. 실제로 질의응답 시간에 대부분 취업에 관련된 질문을 받습니다. (개인적으로는 기술적인 논의나 이야기를 하고 싶지만… :() 질문을 한다는 것은 매우 훌륭한 행동입니다. 질문을 했다는 용기, 모른다는 것을 아는 지식, 모든 것을 갖추었을 때 할 수 있지만 몰라도 질문해보세요. 사수들은 착합니다!

다음 질문들은 실제로 저와 인턴십을 한 친구들의 질의응답을 정리한 내용입니다.

  • 어떤 회사가 좋은 회사인가요? (자기가 좋다고 생각하는게 좋은 회사라고 생각합니다.)
  • 이력서는 어떻게 쓰나요? (전 GitHub 및 자신의 기술을 블로그에 적으라고 했습니다)
  • 같이 스터디하는 동아리 회장이 스터디를 안해요! (동아리 부원이 안하는 것은 많이 봤지만 회장이 안 하다니 :()
  • 노트북은 얼마나 투자해서 사시나요? (제가 가용한 돈 100%를 씁니다. 저의 밥벌이라~)
  • 펌이랑 염색 해도 되나요? (제가 어제 펌을 했었습니다. 염색해도 됩니다. 요즘엔 그런 거 신경 안 쓰지 않나요? 저는 마음대로 하고 다닙니다.)

인턴십 이렇게 해보세요

인턴십이라는 프로그램은 철저히 회사에 입장에서 유리한 프로그램입니다. 의도에 따라 정규직 채용/혹은 충분한 지불을 하지 않고 인력을 사용할 수 있는 제도입니다. 하지만 대부분의 회사들은 인턴십의 원 목적에 따라 좋은 인재를 뽑기 위한 기회라고 생각합니다. 그리고 학생의 입장에서도 자신이 생각하는 직군회사를 가름하기 가장 좋은 기회라고 생각합니다.

저의 인턴십 추천 방법은 다음과 같습니다.

  • 자신이 가고 싶은 회사(혹은 유사 업무)에 지원하세요.
  • 인턴십이 없을 때는 한 번 물어보세요. (살면서 몇 번 없는 기회라고 생각하고 도전하세요)
  • 인턴십 중 개발 프로세스 혹은 업무 처리를 하는 프로세스를 유심히 살펴보세요. 학생 때는 보기도 힘들도 경험하기도 힘든 내용입니다.
  • 선배들에게 많이 물어보세요. 인턴십을 하는 동안은 여러 분이 궁금한 모든 것(프로그래밍부터 진로 고민까지)을 물어볼 수 있는 좋은 사람들입니다.
  • 선배들과의 네트워크를 만들어보세요. 나이가 많아지면 부끄러움이 많아집니다. 먼저 말을 걸어주면 좋아할꺼에요.
  • 인턴십 종료 시에는 자신의 단점을 물어보세요. 물론 선배의 단점을 말해줘도 좋지만 (저는 많이 들었습니다. ㅠㅠ 게으르데요) 자신의 안 좋은 버릇이나 고치면 더 좋을 것들을 물어보면 누구보다도 잘 말해줄 수 있습니다. 같이 일을 했기 때문에 더 객관적으로 의견을 줄 수 있습니다.

아마 올 해 겨울에 다시 한 번 인턴십을 할 기회가 있을 듯 합니다. 이번에는 그 동안 시도 및 정리했던 방법들을 실제로 반영하여 프로그램을 만들어서 수행하려 합니다. 실제로 약 3개월 동안 수행할 수 있는 ‘인턴십 프로그램’을 미리 정의해서 인턴십을 지원하는 학생들도 자신이 어떤 일정으로 업무를 수행하게 되는지 사전에 알 수 있도록 준비할 예정입니다.

SW 개발 - 인턴십 프로그램

  • 사수는 매주 2시간 정도 질의응답/코드리뷰 또는 잡담을 가질 예정
  • 1주 ~ 2주
    • 개발시스템 사용법 설명 및 실습
    • 요구사항 분석 및 간단한 설계 (설계 내용은 함께 논의하여 방향 결정)
  • 3주 ~ N-2주
    • 설계 분석 & 구현
    • 단위테스트 코드 작성 (매주 월요일 코드 리뷰 1H)
  • N-1주
    • 요구사항 만족 시험
  • N주
    • 버그 수정 및 기능 개선
    • 구현한 작업에 대한 문서화 (추후 자신의 포트폴리오 첨부할 내용)

위의 일정은 너무나 평범한 SW 개발 방법 과정입니다. 하지만 인턴으로 오는 친구에게는 ‘요구사항이란 것을 받고 설계하여 구현하는 과정’이 처음일 수 밖에 없다고 생각됩니다. 수업 과제와는 또 다른 과정을 느낄 수 있다고 생각됩니다. 혹시라도 본 글을 읽는 분들 중 저와 인턴십 프로그램을 함께 하게 된다면 꼭 자신의 생각을 많이 말해주세요.

이런 인턴십 프로그램이라는 프로세스를 믿고 따라 줘도 좋지만 프로세스라는 것은 일반화를 위해 필요한 것이지 사람은 모두 다릅니다. 절대로적 좋은 프로세스는 없기 때문에 개인의 특성을 이해한 프로세스의 개인화가 필요합니다. 프로세스가 개인에 맞춰 변형이 되어야 좋은 프로세스라고 생각합니다. 이런 개인화를 위해서는 그 사람의 ‘의견’이 가장 중요하기 때문에 좋은 의견이 있다면 적극적으로 제시해주세요. 다른 의견이 많을 수록 프로세스는 좋아진다고 생각합니다.


  1. 참고[1] 영화 인턴십(The Internship) | https://movie.naver.com/movie/bi/mi/basic.nhn?code=98435 [return]