파리에서 42과정을 하다가 “인턴쉽”을 하러 국내로 들어온 친구입니다.
인턴쉽을 구해서 일을 하고 있는데요.
그동안 많은 성장이 있었나 봅니다.
42Seoul 카뎃들과 경험을 나누고 싶다고 메일을 보내왔네요.
문장을 다듬어 공유해 봅니다.
참고로 프랑스에선 공통과정이 끝나면 인턴쉽을 하도록 권장하는데요.
3가지 선택이 있습니다.
- 6개월 이상의 풀타임 인턴쉽
- 파트타임 인턴쉽
- 1~2년의 수습직원
실리콘밸리에선 이렇게 권장합니다.
- 과정 1/3이 끝나면 4~6개월짜리 인턴쉽
- 과정 2/3가 끝나면 파트타임 인턴쉽
- 과정이 모두 끝나면 6개월 인턴쉽
인턴쉽은 나라마다 다르게 운용되는데요.
재단에선 어떻게 운영하면 좋을지
기업모집과 함께 협업 프로그램을 기획하고 있습니다.
조금만 기둘려 주세요.
제목 : “42 인턴 과제에 대한 경험 공유”

학장님께.
안녕하세요.
저는 ecole 42 Paris에 재학중인 “배정모”입니다.
작년 여름 소프트웨어 교육에 관심을 가지고 이곳을 방문해 주신 여러분들과
학장님의 노력으로 한국에도 이노베이션 아카데미가 설립되어 정말 기쁩니다.
아카데미에서 열심히 일하고 있는 42 친구들로부터
학교에 대한 소식을 조금씩 들으며
항상 아카데미의 행보를 응원하고 있습니다.
저는 올해 1월 한국에 귀국했습니다.
42 커리큘럼 중 하나로 First internship 을 수행하고 있습니다.
인턴 기간의 중반이 넘어가는 지금,
저와 같이 구직하는 분들께,
제 경험을 공유해보면 좋지 않을까 해서
학장님께 메일을 띄웁니다.
인턴 구직을 위한 자료 조사와 경험은
모두 “한국기업”, “외국계 한국기업”으로 한정했습니다.
1. 이력서 준비
지난 1월 이력서를 준비하면서
42에서 수행한 과제를 몇개 추려서 간단한 README.md 로 만들었습니다.
Holy graph의 초반과제인 libft, get_next_line보다
fractal, RT(ray tracing) 등 Tier가 높은 과제에 집중했습니다.
작성하고 보니 실제 일반대학의 컴공과 학생들은
어떤 과제로 포트폴리오를 구성하는지 궁금했습니다.
대학에선 졸업 논문, 작품이 있고
임베디드, 웹/모바일 앱,
딥러닝을 이용한 데이터 분석 등
완벽하게 동작하는 서비스를 주제로
포트폴리오를 만들거나,
학사논문을 쓸 것 같았습니다.
그런 구성이라면,
임베디드, 웹/모바일 앱 또는 연구인턴을 구하는 기업들에겐
안정감을 줄 수 있을 거라고 생각했습니다.
그에 반해 42에서의 과제들(첫번째 인턴 이전에 익혀야 하는 것들)은
학부 2학년 수준의 포트폴리오이지 않을까 짐작됩니다.
이노베이션 아카데미에서 공부하고 있는 학생들 중
이미 개발경력을 보유한 학생들도 있을겁니다.
저 역시 1년 반동안 벤처기업의 창립자로서 개발을 했습니다.
경력 없는 학생들이라면 공감하지 못할 수도 있겠지만,
1년 반동안 선임 없이 혼자 개발했기 때문에
제 이야기가 전혀 영양가 없는 건 아닐 것이라고 생각합니다.
42에서 과제를 업로드한 github 링크와
벤처기업의 경력을 더한 다음
인턴 채용 기업에 지원서를 넣었습니다.
42에서는 최소 4개월의 인턴 근무기간을 요구했기에
지원 메일에 4 ~ 6개월의 근무기간을 명시했습니다.
2달간 지원한 9곳 중 6곳만
추가면접을 위한 연락을 주었고,
2곳은 정규직 전환 케이스만 고려한다는 답변,
1곳은 아예 연락을 주지 않았습니다.
2. 코딩 테스트, 전화 인터뷰
2.1. 첫번째 기업
가장 먼저 연락을 받은 기업과는
첫번째 전형으로 전화 인터뷰를 진행했습니다.
지원직무는 백엔드 개발이었고,
인터뷰 준비를 위해 nodejs 와 관계형 데이터베이스를
공부했습니다.
질문은 다음과 같았습니다.
“데이터베이스”
- 트랜잭션이란 무엇인가?
- 인덱스란 무엇인가?
- 인덱스 생성시 key 를 저장한다고 했는데 정확하게 어떻게 데이터베이스에
저장되는가? - 멀티컬럼 인덱스란 무엇인가?
- 데이터베이스에서 NULL 은 무엇을 의미하는가?
- 1 + N 문제를 알고 있는가?
- 마이그레이션이란 무엇인가?
- ORM이란 무엇인가?
“웹”
- CORS 를 알고 있는가? CORS 문제를 어떻게 해결할 수 있는가?
- XSS 를 알고 있는가?
- CSRF 를 알고 있는가? CSRF 문제를 어떻게 해결할 수 있는가?
- http 와 https 의 차이는 무엇인가? SSL 인증은 어떻게 이루어 지는가?
- 현재 회사 백엔드는 nodejs 를 사용하는데 무리는 없다고 생각하는가?
(저는 지난 회사에서 python으로 개발했습니다.)
거의 대부분 한두마디 대답만 하고는 더 깊은 질문에는 답변하지 못했습니다.
“인터뷰 이후”
데이터베이스 또는 웹에 어떤 이슈들이 있는지 이해하고 개발하는 것과
그냥 그렇게 하는게 성능상 더 좋아서 개발하는 것,
두 개의 차이는 극명하게 다르다는 걸 알 수 있었습니다.
실패를 교훈삼아 구직 기간동안
웹과 데이터베이스를
단순히 코드나 SQL 을 작성하는 수준이 아닌,
어디에 왜 사용해야하는지,
왜 이런 문제가 발생하는지를 꾸준히 공부했습니다.
2.2. 두번째 기업

두번째 기업에서는 코딩테스트를 진행했습니다.
테스트는 면접관과 전화를 하면서 피드백을 주고 받는 방식으로 진행되었습니다.
문제는 정렬된 배열에서 원하는 값을 찾는 유형이었습니다.
단순히 하나하나 값을 비교하는 생각으로 접근했고
이진탐색으로 풀 수 있다는 걸 알지 못했습니다.
면접관분은 이진탐색으로 풀 수 있도록 친절히 유도해 주셨지만,
끝내 완성된 코드를 작성하진 못했습니다.
면접이 끝나고 난 뒤 코딩 테스트 연습을 위해
“프로그래머스”와 leetcode 서비스에 접속했습니다.
이진탐색이 알고리즘의 기본중의 기본인 것을 알게 된 후
나는 8개월 동안 42에서 뭘한걸까?
자괴감에 빠졌습니다.
Holy graph 의 첫 인턴 이전 과제인 RT 에 도달하기까지
그래픽스 프로젝트에만 전념했던 탓인지,
전산의 기초가 되는 알고리즘과 자료구조를 공부할 기회가 없었던 건지,
기회가 있었음에도 붙잡지 못한 것인지를 고민했습니다.
과제를 수행함에 있어 문제를 해결하는 여러 방법을
고민해보지 않고 단순하게만 접근한 본인 탓,
아무리 peer to peer learning 이더라도
기초를 배울 수 있도록 유도하지 않은 42의 커리큘럼 탓 등등.
흔한 실패자의 레퍼토리가 되어버렸습니다.
2.3. 세번째 기업
세번째 기업에서는 코딩테스트 전까지
여러 유형의 코딩 테스트를 풀어보았습니다.
여기에선 한가지 문제를 주고
여러가지 방법으로 문제를 풀어보라고 했습니다.
문제를 푸는데는 성공했으나,
이어지는 면접관의 질문에 사뭇 당황했습니다.
“정렬을 하게 되면 얼마나 시간복잡도를 갖게 되는가?”
“메모리 공간을 더 활용할 수 있다고 할 때
정렬하지 않고 풀 수 있는 방법은 무엇인가?”
“이 때의 시간복잡도는 어떻게 되는가?”
이전까지 알고리즘을 공부할 때,
복잡도가 주는 의미가 무엇인지 생각해본 적이 없었습니다.
단순하게 이렇게 풀면 반복횟수가 줄 수 있겠거니,
변수를 덜 쓰고 함수를 작성할 수 있겠거니
이렇게 생각한게 전부였습니다.
테스트가 끝난 후 감사하게도 면접관으로부터
점근표기법에 관한 간략한 설명을 들을 수 있었습니다.
코딩테스트와 전화 인터뷰는
컴퓨터공학 비전공자에서 전공자가 되고자 할 때,
특히 교수가 없이 peer to peer learning 으로 진행되는 42에서
어떻게 공부 계획을 세워야 하는지,
얼마만큼의 공부가 필요한지
경각심을 일깨워주는 좋은 기회였습니다.
입사지원 탈락이라는 기회비용으로
무엇을 공부해야 하는지를 깨달을 수 있었던 좋은 투자였습니다.
하지만 만일 인턴이 아닌 정규직이었고,
지원기업이 내가 오래전부터 근무하길 희망했던 곳이라면
알 수 없는 나의 부족함에 큰 좌절을 느꼈을 것입니다.
3. 최종 면접
여러 회사 중 오직 한곳에서 최종 CEO 인터뷰를 제안받게 되었습니다.
전 직장에서의 경험, 창업 경험, 개발자로서의 목표, 이후 학업 계획, 희망 급여 등을
얘기하는 자리였습니다.
고해성사하듯 일방적인 질문과 답변이 오가지는 않았고
회사의 문화, 계획중인 프로젝트, 도입하려고 하는 기술 등을 묻고
의견을 나눴습니다.
하지만, 2달간의 구직 경험으로 느낀바가 있어
입사제안을 거절하고
한달간의 포트폴리오 준비기간을 가졌습니다.
지금 저는 작은 스타트업에서 프론트엔드 개발을 하고 있습니다.
그 중 2D 그래픽스를 맡아 인턴 근무 중입니다.
짧지 않는 구직기간 동안
42에서의 8개월만큼 값진 경험을 얻었습니다.
4. 교훈과 새로운 고민
갑자기 비슷한 경험을 하게 될 이노베이션 아카데미 학생들이 생각났습니다.
그리고 이런 궁금증이 생겼습니다.
고민 1. 인턴을 언제 하는게 좋을까?
이노베이션 아카데미의 학생들 중 대다수가
한국에서 인턴쉽 과제를 수행하게 될텐데
현재 Holy graph 의 인턴쉽 위치가 올바를까?
올바르다면 학생과 기업에게
얼마만큼의 유의미한 시너지 효과가 날 수 있을까?
올바르지 않다면 어느 레벨 다음에 인턴을 해야할까?
고민 2. 과연 한국 시장에 맞을까?
42 커리큘럼의 Branch (개정된 커리큘럼 이전 기준) 중
쉘, 커널, 파일 시스템, 네트워크 프로그래밍 과제를 포함하는
시스템 프로그래밍 영역은
다른 브랜치에 비해 과제 양이 많고,
수행 완료시 전공자만큼의 능력을 함양할 수 있으리라 짐작됩니다.
하지만 여러 채용사이트를 돌아보면서
한국 IT 기업 중 Low Level 까지 다룰 수 있는 개발자를 구하는 경우는
“임베디드”와 “클라우드 시스템을 직접 구축”,
“SI 를 제외한 일부 금융 트레이드 시스템”,
“로그 분석 솔루션”이었고,
다른 분야에 비해 기업체 수도 적다는 것을 알게 되었습니다.
42 학생들은 다른 영역에서 과연 두드러진 강점을 가질 수 있을까?
(참고 : https://programmers.co.kr/pages/dev-survey-2019 )
이런 고민이 되었습니다.
고민 3. Java Spring
중소기업과 크게 성장한 스타트업의 백엔드 스택은
대부분이 java spring 프레임웍이었습니다.
스타트업의 경우
초기 애플리케이션 개발 생산성을 위해
node.js, ruby on rails, python 을 채택하고
사업의 규모가 커지면 java로 수렴하는 듯 보였습니다.
python 을 백엔드의 주 언어로 사용하고 있는 한 기업의 경우,
속도 문제로 일부 코드를 C 로 작성한 뒤
cython 으로 C 함수를 호출해 사용하고 있고,
일부 서비스들을 조금씩 java 로 옮겨가고 있다고
사내 세미나에서 발표했습니다. (뱅크샐러드)
개발자 중 백엔드 비율이 상당히 높고 인력 수요도 많은데
java는 메인 스택 또는 메인 스택은 아닐지라도
여전히 다룰 줄은 알아야 하지 않을까?
이런 고민도 되었습니다.
고민 4. 기본소양은 언제 익혀야 할까?
소프트웨어 교육의 자율적 “프로젝트 기반 학습”은
현업 개발자와 충분히 협업할 수 있을만큼
자료 구조, 알고리즘, 운영체제
이런 것에 대한 기본 소양을 갖출 수 있도록 커버하고 있을까?
충분히 동기부여된 학생들에게 위 과목을 배울 수 있게 하려면
단기간 (첫 인턴 이전 기간)에 집중적으로 배우는 것과
커리큘럼 전반에 걸쳐 조금씩 배우는 것 중 어느 쪽이 효율적일까?
고민 5. 실무는 따로 공부해야 하는걸까?
신입 개발자에겐 위 과목의 공부 깊이보다
실무 경험을 더 강조하는 몇몇 영역이 존재합니다.
예를 들어 웹 프론트엔드 개발은
HTML/CSS, 브라우저의 동작 이해,
크로스 브라우징 이슈 해결, 서버 사이드 렌더링,
javascript, 라이브러리 사용 경험 등.
이런 것이 채용 공고에 나옵니다.
최소한의 자격 요건을 갖추려면
학생들 스스로 스터디 하는 것과
커리큘럼에 과제를 추가하는 것,
둘 중 어느 쪽이 좋을지 잘 모르겠습니다.
5. 회고
위와 같은 물음을 가진 지 4개월 후,
어느덧 인턴도 중반을 넘어가고 있습니다.
웹 프론트엔드 중 2D 그래픽스 업무를 맡고 있는 제게
ecole 42 의 공부(특히 그래픽스)는 좋은 양분이 되고 있습니다.
최근엔 문제를 해결하는데
교과서가 아닌 SIGGRAPH 에서 발표된 논문 등을 읽고
구현까지 완성하면서 보람도 느끼고
왜 이 영역이 “대학 석사과정”에 올라와 있는지 깨닫게 되었습니다.
한 가지 아쉬운 것은 인턴으로서,
좀 더 일반적인 “프론트엔드 개발” 이슈를 접하고
해결하는 시간이 더 많았으면 하는 바람이 있습니다.
이는 개발자의 업무수행 능력이
스페셜리스트과 제너럴리스트,
둘중 어느 쪽으로 더 발휘되야 하는지
이에 관한 고민과도 상통합니다.
더불어 아카데미의 멘토분들께서
인턴을 앞둔 학생들과 이 점에 대한 공감대를 형성하는게 좋지 않을까
그런 생각도 해보았습니다.
6. 정리
그 외에 아래와 같이 느낀 바를 정리해 보았습니다.
- 되도록이면 출근 시간 1시간 안쪽의 기업에 지원하자.
출퇴근 시간 합쳐 3시간인 지금,
퇴근 후 밥해 먹고 잠깐 쉬면 어느덧 10시다.
나는 아직 학생이고 자기 계발 시간 확보는 필수적이다.
강남, 판교의 기업들도 좋지만 가까운 회사에 다니면서
코딩에 쓰는 절대적 시간을 늘리는 것도 고려하자.
- 영어 공부는 꾸준히 하자.
선임 개발자가 있더라도 문제를 해결하는 것은 본인이다.
다행히 42의 학생들은 일방적인 지식 습득에서 벗어나
스스로 문제를 해결하는데 익숙하므로
영어 독해 능력만 잘 갖춘다면
기술 블로그, 논문을 읽으면서 대부분의 인턴 수준 업무를 수행할 수 있다.
- 42의 학생들이 작성하는
깨끗하고 가독성 있는 코드는
학교에만 존재할 수 있다.
대부분의 업무는 기존 프로젝트의 버그 픽스, 기능 추가이므로
읽기 힘든 코드라도 인내심을 가지고 독해하자.
프로세스가 얼추 파악되면
차츰 깨끗한 코드로 나도 모르게 리팩토링하고 있게 된다.
지난해 여름 ecole 42 를 방문하신 이후
생각보다 빠르게 이노베이션 아카데미가 설립되고
학생 중심의 학습과 문화를 발전시키는 것 같아 무척 기쁩니다.
앞으로도 소셜 네트워크를 통해 아카데미의 소식을 들으며 응원하겠습니다.
저의 인턴 경험담이 인턴을 앞두고 있는 학생들에게
조금이나마 도움이 되길 바라며 이만 마치겠습니다.
끝.