티스토리 뷰

반응형

요즘 개발자로 취업준비하려는 분들이 주변에 참 많이 보입니다. 심지어는 본인이 하고 있는 일을 그만두고 개발자로 전향하시는 분도 계시는데, 카페나 SNS 글을 보면 많이 고민하고 어려워하시는 것 같습니다. 물론 최근 개발자의 수요가 증가함에 따라 국비교육이나 온라인 강의 등의 내용도 상당히 많이 보이지만 정작 개발자가 되기 위해서는 어떻게 준비를 시작해야 하고 어떻게 준비를 하면 좋은지에 대한 정보는 부족해 보였습니다. 그래서 이번에는 신입 개발자로 취업하는데 도움이 될만한 내용들을 적어보고자 합니다.

신입 개발자로 취업하기 위해서는 크게 다음의 3가지 과정을 거쳐야 합니다.

  1. 자기소개서
  2. 코딩 테스트(알고리즘)
  3. 기술 면접

물론 임원 면접이나 컬쳐 면접 또는 인적성 등 회사마다 갖는 또 다른 전형들도 있습니다. 하지마 이번에는 거의 공통적인 위의 3가지 과정들을 준비하는데 도움이 될만한 내용들을 적어보도록 하겠습니다.

 

 

 

1. 자기소개서


자기소개서 단계에서 전형적인 내용들(회사의 가치관이나 목표를 파악하고 이를 바탕으로 작성 등)은 가볍게 넘어가도록 하겠습니다. 그 부분들은 저보다 여러분들이 더 잘 알고 잘 작성하실 것이기 때문입니다. 그 대신 몇 가지 도움이 될만한 내용들을 적어보도록 하겠습니다.

 

 

[ 진행했던 프로젝트 항목 준비하기 ]

자기소개서에서 가장 중요한 항목은 단연코 본인이 진행했던 프로젝트에 대한 소개 부분이라고 생각합니다. 이 부분이 가장 중요한 이유는 본인의 실력이나 경험 또는 개발자가 되기 위한 노력들을 1차적으로 어필할 수 있는 부분이고, 작성한 내용이 면접까지 이어지는 경우가 많기 때문입니다. 그렇기 때문에 우리는 자기소개서에 작성할 프로젝트를 반드시 미리 진행해두어야 합니다. 학교 프로젝트를 통해서든 외부 공모전이나 대외활동 등을 통해서든 최소 3가지 이상의 자기소개서에 적을 프로젝트를 미리 진행해두면 무조건 좋습니다.

그리고 추가적으로 얘기하고 싶은 부분은 진행했던 프로젝트 내용에 스토리가 있으면 좋다는 것입니다.

저의 경험을 빌려 얘기하면 저는 처음부터 Spring 기반의 백엔드 개발자로 준비를 하였는데, 이 부분과 관련된 기술스택을 점점 확장시켜 나갔음을 어필하였습니다. 초기에는 Spring MVC를 사용했다가 이에 대한 불편함을 느껴 SpringBoot를 사용하기 시작하였으며, 그 다음에는 인증/인가를 효율적으로 처리 SpringSecurity를 도입했다는 식으로 말입니다.

이런 식으로 자기 만의 스토리를 만들어 준비를 하면 내가 이 분야에 취업하기 위해 많은 노력들을 했고, 발전하고자 노력했다는 모습들을 어필할 수 있을 것입니다.

 

 

[ 깃허브/포트폴리오 등 준비하기 ]

요즘에는 많은 기업들이 깃허브나 포트폴리오 등을 제출할 수 있는 칸을 제공하고 있습니다. 그래서 평소에도 깃허브나 포트폴리오 등을 잘 관리하는 것도 꽤나 중요합니다. 그러므로 평소에 프로젝트를 진행할 때 깃허브를 통해 잘 관리하고 진행하는 것을 권장드리며, 무엇보다 포트폴리오는 필히 작성해둘 것을 말씀드리고 싶습니다.

우리가 적을 자기소개서는 모두 텍스트로 되어있기 때문에 표현하기에 제약이 많습니다. 하지만 포트폴리오를 작성해둔다면 시각적으로 한눈에 들어오게 내가 진행했던 프로젝트들을 구성하여 소개할 수 있고, 설계 내용이나 화면 등을 보여주면서 매력적으로 다가올 수 있습니다.

저의 경우에는 PPT 형식으로 본인 소개(신상 및 이력), 보유 기술, 프로젝트 설명, 기타 4가지 목차를 갖는 포트폴리오를 준비했습니다. 포트폴리오의 구성은 여러분 나름대로 다듬으면 될 것이지만 프로젝트 설명 부분만 간단히 얘기하고 넘어가도록 하겠습니다.

저는 프로젝트 설명의 구성을 크게 다음과 같은 3가지 단계로 잡았습니다.

  1. 프로젝트 소개
  2. 프로젝트 진행
  3. 프로젝트 결과

 

1. 프로젝트 소개

프로젝트의 소개에서는 크게 프로젝트 개요와 사용했던 기술 스택 그리고 구현했던 화면들을 보여주었습니다. 

개요에는 프로젝트의 목적과 기간 그리고 이 프로젝트를 진행하면서 달성하고자 했던 목표들을 설명하였습니다. 그리고 기술 스택에서는 사용했던 언어와 프레임워크, 라이브러리, 오픈 API 등을 설명하였습니다.

추가적으로 남는 여백에는 시작적인 효과로 직관적으로 다가가기 위해 구현했던 화면(이미지)을 채워 넣었습니다.

 

 

 

 

2. 프로젝트 진행

프로제그 진행 단계에서는 프로젝트에 따라 설계 관련 내용이나 아키텍처 또는 구현 결과들을 이미지로 보여주었습니다.

이미지로 보여준 이유는 관련된 내용들을 텍스트로 적는 것 보다는 이미지로 보여주는게 훨씬 효과적이라고 생각했기 때문이고, 설계 문서들을 넣음으로써 개발 뿐만 아니라 설계와 관련해서도 능력이 있음을 보여주고자 함이였습니다.

 

 

 

3. 프로젝트 결과

프로젝트 결과 단계에서는 프로젝트를 진행하면서 마주했던 문제점들과 이를 해결한 방안 그리고 이를 바탕으로 깨달은 점을 작성하였습니다. 그리고 화면 하단에 한 줄 요약으로 정리하면서 정리하고자 하였습니다.

 

 

 

 

포트폴리오를 작성하고 부가 자료로 제출함으로써 자기소개서에서 적지 못했던 부분을 자유롭게 적을 수 있었고, 이미지를 활용해서 시각적으로 어필할 수 있었습니다. 그렇기 때문에 포트폴리오를 준비하는 것은 상당히 중요하다고 생각하며 저는 깃허브나 포트폴리오 등을 기입하는 부분이 없다면 자기소개서의 내용 하위에 링크를 추가하곤 했습니다.

물론 위에서 설명한 내용들은 제가 이렇게 작성했다이지 이것이 정답은 아닙니다. 보시다싶이 디자인 감각도 떨어지고 적은 내용들도 그렇게 깔끔하지 못한 것 같습니다. 여러분들은 분명 저보다 디자인 감각도 뛰어나고 적을 좋은 내용들도 많을 것이기에, 위의 내용들을 참고하여 자기만의 포트폴리오를 구성할 것을 추천드립니다.

 

 

 

2. 코딩 테스트(알고리즘)

 


요즘 거의 모든 기업에서 코딩 테스트 전형을 진행하고 있는데, 이번에는 코딩 테스트와 관련된 부분에 대해 이야기해보도록 하겠습니다.

 

 

[ 빈출 유형 파악 ]

수능에도 자주 출제되는 영역이 있듯이 코딩 테스트도 당연히 자주 출제되는 유형이 있습니다. 그렇기 때문에 전략적으로 빈출 유형을 집중적으로 준비하는 것이 도움이 됩니다. 알고리즘 코딩 테스트에서 자주 출제되는 유형은 크게 다음의 4가지가 있습니다.

  1. 구현/시뮬레이션: 문제의 요구사항을 주고 이를 구현하거나 시뮬레이션하도록 함
  2. 그래프 이론: DFS/BFS와 관련된 알고리즘으로 문제 해결
  3. 자료구조: 다양한 자료구조를 사용하여 문제 해결
  4. 완전탐색(부르트 포스): 모든 경우를 탐색하여 해결

그 외에도 동적 계획법(Dynamic Programming, 다이나믹 프로그래밍)이나 이진트리, 다른 그래프 알고리즘 등 다른 부분도 충분히 나올 수 있고, 실제로 나오기도 합니다. 하지만 결국 가장 자주 나오고, 많이 준비해야 하는 영역은 위의 4가지 입니다. 우선 위의 4가지 유형은 반드시 준비하고, 회사의 기출에 따라 나왔던 영역을 준비하는 것이 코딩 테스트 전형을 준비하는 가장 효과적인 방법이라고 생각합니다.

 

 

[ 준비 방법 ]

저의 경우에는 처음에 기본적인 문제들을 풀면서 알고리즘이라는 전형에 적응을 하기 시작했고, 적응이 끝난 이후에는 빈출되는 유형들 중에서 좋은 문제들을 선별하면서 문제를 풀어나갔습니다. (혹시 이와 관련된 정보들 필요하시면 댓글 남겨주세요!)

위의 4가지 알고리즘 유형들 중에서는 구현/시뮬레이션을 먼저 준비할 것을 권장드립니다. 구현/시뮬레이션은 특별한 알고리즘적인 개념이 필요하지 않기 때문에 알고리즘이라는 영역에 적응하기에 쉬우며, 이 부분을 잘 준비해두면 다른 영역을 준비해도 수월합니다.

그리고 해결한 문제들은 깃허브에 올리면서 코드를 관리하였는데, 깃허브 주소를 보고 싶으시면 여기를 클릭하시면 됩니다.

 

 

[ 알고리즘을 위한 언어 선택 ]

많은 분들이 알고리즘을 풀 때 어떠한 언어로 풀어야 하는지 고민하는 것 같습니다.

우선 Java와 같은 언어는 JVM 위에서 동작하기 때문에 아무래도 C/C++보다는 실행 시간이 더 오래 걸립니다. 그래서 알고리즘은 무조건 c++로 해야한다고 주장을 하는 사람들이 많이 있습니다.

하지만 실제로 취업준비를 해보면 아시겠지만 이러한 차이는 알고리즘 대회를 나가지 않는 이상 무의미하고, 취업 과정에서 어떠한 불이익도 없기 때문에 개인적으로는 본인이 취업하고자 하는 기술 스택의 연장선인 프로그래밍 언어로 준비를 하는 것이 좋다고 생각합니다.

이러한 이유는 그래야 한정적인 시간 내에 알고리즘의 공부와 그 외의 취업 준비(주로 기술 면접일 것 같습니다)를 동시에 얻어갈 수도 있고, 주 언어에 더욱 익숙해질 수 있기 때문입니다.

저의 경험을 빌려 설명하면 네이버의 기술면접을 보았을 때 Java8과 관련된 문법들 중에서 함수형 인터페이스나 람다식 등과 같은 부분들을 질문받았던 적이 있습니다. 면접에서는 자기소개서에 적힌 기술 스택들을 위주로 질문을 할텐데, 알고리즘도 주 언어로 맞춘다면 알고리즘을 하면서 주 언어와 관련해 공부했던 내용들도 분명 언젠가는 도움이 될 것입니다.

 

 

[ 개발을 많이 해볼 것 ]

물론 알고리즘과 실제 프로그래밍이 완전한 수평선상에 있다고 표현하기는 어렵지만, 알고리즘도 결국 주어진 문제를 해결하기 위한 해법을 개발하는 것입니다. 그렇기 때문에 기본적인 개발 실력이 갖춰져 있다면 준비하기가 훨씬 수월할 것입니다.

그러므로 개발자가 되기 위해 준비를 하신다면 다양한 프로그래밍 경험을 쌓고 최대한 개발을 많이 해보실 것을 권장드립니다.

 

 

[ Java 알고리즘 최적화 팁 ]

이 내용은 Java로 알고리즘을 준비하시는 분들을 위한 내용이므로 다른 언어를 사용하시는 분들은 건너뛰셔도 됩니다.

일부 회사에서는 알고리즘의 통과 여부에 더해 성능까지 측정하기도 하는데, 물론 기본적으로는 구현을 잘 해야겠지만 공통적으로 다음을 적용하면 조금이나마 성능을 높일 수 있습니다.

  1. 입력을 받기 위해서는 Scanner보다 BufferedReader를 사용하는 것이 좋다.
  2. 한 줄 입력이 여러번 들어오는 경우에는 split보다 StringTokenizer를 사용하여 파싱하는 것이 좋다.
  3. 여러 번 출력해야 하는 경우에는 StringBuilder를 사용해 한번에 출력하는 것이 것이 좋다.
  4. Array를 사용하는 것보다 ArrayList를 사용하는 것이 좋다.
  5. ArrayList를 정렬하기 위해서는 Collections.sort()를 사용한다.
  6. 배열을 초기화하기 위해서는 java.util.Arrays의 Arrays.fill(배열, 초기화값)을 사용한다.
  7. 연속으로 있는 숫자를 입력받기 위해서는 1번 대신에 2번을 사용하자 ex) 10111010101
    1. String[] inputs = br.readLine().split(""); 
    2. br.read() - '0';

 

Java로 알고리즘 문제를 풀면 일반적으로 다음과 같이 입력을 받고 이후의 로직을 작성하게 된다.

public class Quiz1062 {

    // 입력으로 받는 값들을 저장하기 위한 변수
    private static int N, M;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());


        // 단어 목록을 입력으로 받아서 리스트에 추가한다.
        while(N-->0){
            ... 입력을 받음
        }
        
    }

}

 

 

 

 

3. 기술 면접


자기소개서를 합격하고 코딩 테스트를 통과했다면 이제 기술 면접 전형을 진행하게 됩니다. 기술 면접에서는 크게 2종류의 질문이 들어오는데 하나는 자기소개서에 적었던 내용들을 상세히 물어보는 것과 그 다음으로는 면접자의 기술적 깊이를 파악하기 위한 단순 기술 질문들입니다.

 

 

[ 단순 기술 면접 ]

우선 기술적 깊이를 파악하기 위한 단순 기술 면접 질문들은 역시 빈출 유형들이 있기 때문에 이와 관련된 내용들은 꼼꼼히 준비를 하시면 됩니다. 이와 관련된 내용은 여기에 카테고리 별로 정리되어 있습니다.

그 외에도 유용한 많은 사이트들이 있으니 참고하면서 진행하시면 되고, 시간을 많이 들이고 노력하면 충분히 커버할 수 있습니다. 물론 아무리 준비를 해도 100% 완벽하게 모든 질문에 대답을 하는 것은 불가능할 것입니다. 그러므로 모르는 내용이 나왔다면 과감하게 이를 인정하고 면접 후에 찾아보겠다는 식으로 당당하게 얘기하면 됩니다.

 

 

[ 자기소개서 기반의 기술 면접 ]

문제가 되는 부분은 자기소개서를 기반으로 들어오는 기술 면접입니다. 자기소개서를 기반으로 물어보는 내용은 당연히 사람마다 다른 질문을 받을 것이기 때문에 빈출 등으로 커버하기 어렵습니다.

그러므로 본인의 자기소개서를 분석하여 예상 질문들을 파악하고, 이를 준비하는 것이 중요합니다.

자기소개서 기반의 기술 면접에서는 본인이 적은 프로젝트나 기술적 부분들을 상세하고 깊게 파고들기 때문에 반드시 꼼꼼히 숙지하고 있어야 합니다. 만약 본인이 맡은 부분이 아니라서 정확하게 설명을 할 수 없다면 솔직하게 다른 팀원이 맡은 부분이라고 설명을 하고, 간략하게 이와 관련해서 참여했던 부분들을 설명하고 넘어가는 것이 좋습니다.

 

 

 

 

 

평소와 다르게 글을 정리하면서 작성하지 않아서 부족한 부분도 많이 있고 틀린 내용도 있을 수 있습니다. 피드백 주시면 관련된 내용들 반영할테니, 많은 피드백 부탁드리면서 많은 분들이 개발자로 취업하는데 도움이 되기를 바라겠습니다ㅎㅎ

또한 많은 분들께서 개발자가 되기 위해 취업이나 진로 등을 고민하고 어려움을 겪고 있는 것으로 알고 있습니다. 저도 아직 부족함이 많고 시간적 제약도 있기에 완벽한 도움을 드릴수는 없겠지만, 조금이나마 조언이나 도움 또는 고민상담 등이 필요하시다면 댓글 남겨주세요! 최대한 도움이 되는 얘기들을 해드리도록 하겠습니다:)

감사합니다!

반응형
댓글
댓글쓰기 폼
반응형
공지사항
Total
1,585,305
Today
1,782
Yesterday
5,473
TAG more
«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
글 보관함