취업을 위해서

유요한·2023년 11월 7일
1

프로젝트

목록 보기
1/5
post-thumbnail

현재 취업을 위해서 슬슬 구체적으로 정할 때가 와서 확실히 준비하고자 합니다. 여태 백엔드 취업을 위해 공부를 하면서 많은 착오를 겪었습니다. 아무런 정보없이 개발자로 취업을 위해 학원을 다니고 어떤 것을 공부를 해야하는지 잘 모르다보니 막무가내로 공부를 했습니다.

여태 공부를 처음에는 학자형으로 진행했지만 하다보니 느끼점은 저는 야생형에 맞다고 생각했습니다. 지식적인 부분보다는 프로젝트를 진행하면서 부족한 지식을 채우고 문제를 해결하는 과정과 그 문제를 해결하고 부족한 부분이 채워졌을 때 퍼즐의 빈칸을 채운것처럼 재미를 느끼고 기쁨을 느꼈기 때문입니다.

이 카테고리에서 정리할 것들은 취업을 위해서 더욱 공부한 것이고 다른 카테고리는 개발자로서 공부할 것들을 정리해놓은 것입니다.

취업 준비

  1. 백엔드 개발자로서 최소한 이정도는 알아야 한다고 생각해서 책을 읽고 공부를 했습니다. 다만 아쉬웠던 점은 몇가지는 직접 프로젝트를 진행하면서 사용해봤지만 몇가지는 이론으로만 알아서 아쉬운 것입니다.
  • Java
  • Kotlin
  • Spring Boot
  • Gradle
  • JPA
  • MySQL
  • Spring Security
  • OAuth2
  • JWT
  • Docker
  • Kubernetes
  • Kafka
  • Linux
  • Nginx
  • Git Action
  • Jenkins
  1. 2개의 프로젝트

  2. 기술면접 준비

  3. 코딩 테스트 준비


1차 프로젝트

1차 프로젝트 보기
1차 프로젝트 Git

사용 기술

  • MyBatis
  • Spring Boot
  • Gradle
  • MySQL
  • AWS EC2
  • RDS(MySQL)

2차 프로젝트

2차 프로젝트 보기
2차 프로젝트 Git

사용 기술

  • Spring Boot
  • Gradle
  • JPA
  • MySQL
  • Spring Security
  • Spring OAuth2
  • JWT
  • AWS EC2
  • RDS(MySQL)
  • Git Action
  • Actuator
  • S3

다른 기술들 & 기술면접

MongoDB, JavaScript, JQuery, MSA, Docker, Jenkins, Kubernetes, Kafka, Linux, Nginx 이 기술들은 별도의 책과 인강으로 공부했습니다.

인강은 인프런과 유튜브에서 공부를 하였고 개발 공부하면서 읽은 책은 다음과 같습니다.

  • 자바의 정석
  • 모던 자바스크립트
  • 코드로 배우는 스프링 웹 프로젝트 개정판
  • 스프링 부트 퀵 스타트
  • React와 Spring Boot 웹애플리케이션을 연동하는 방법
  • 스프링 부트 핵심 가이드
  • 스프링 부트 쇼핑몰 프로젝트 with JPA
  • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
  • (React, 스프링 부트, AWS) 웹 개발 101 2/e
  • 면접을 위한 CS 전공지식 노트
  • Do it! 알고리즘 코딩 테스트
  • JAVA 언어로 배우는 디자인 패턴 입문
  • 대규모 서비스를 지탱하는 기술
  • 스프링 부트3 백엔드 개발자되기
  • 초보를 위한 젠킨스2 활용 가이드 2/e
  • 따라하며 배우는 AWS 네트워크 입문
  • 쿠버네티스 입문
  • 쿠버네티스/도커
  • MongoDB
  • 15단계로 배우는 도커
  • 도메인 주도 설계 철저 입문
  • 도메인 주도 개발 시작하기
  • 데브옵스
  • (스프링으로 시작하는) 리액티브 프로그래밍 : Spring WebFlux를 이용한 Non-Blocking
  • 스프링 부트로 개발하는 MSA 컴포넌트 = Spring booy for MSA
  • (Do it!) 깡샘의 안드로이드 앱 프로그래밍 with 코틀린 : 친절한 문법 설명과 18개 실습으로 배우는 모바일 앱 개발
  • (Do it!) 코틀린 프로그래밍 : 기초 문법부터 안드로이드 활용까지
  • 카프카, 데이터 플랫폼의 최강자 : 실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지
  • 실전 카프카 개발부터 운영까지 : 데이터플랫폼의 중추 아파치 카프카의 내부동작과 개발,운영,보안의 모든것
  • NGINX 쿡북 : 115가지 레시피로 배우는 고성능 부하분산, 보안, 서버 배포와 관리

책을 여러권 본 이유는 비록 프로젝트에는 적용하지 못했지만 백엔드로서 취업을 하려면 기본적인 지식을 있어야 한다고 생각합니다. 그래야 회사에서 적응을 빨리 할 수 있고 저에게 교육을 해주거나 선임의 기술들을 사용하는 것을 빠르게 배울 수 있기 때문에 공부를 해야하기도 했지만 새로운 것들을 공부하는데 재미가 있었습니다. 이 책들을 읽으면서 제가 회사에서 이 기술들을 사용할 때를 그리며 공부할 의지가 생겼고 목적이 생겨서 공부가 힘들지 않았습니다. 그리고 공부한 것들을 정리해서 기술면접을 대비했습니다.

코딩 테스트

문제를 보고 시간 복잡도를 계산해서 어떤 자료구조를 사용할지 판단을 할 수 있어야 한다.

꼭 해야할 것은 브루트 포스, 시뮬레이션, 그리디, DFS, BFS, 백트래킹이거는 무조건 해야한다!

기초랑 중급은 해보자!

어떻게 공부해야 할까?

지나치게 올인해서는 안되고 지나치게 대충해서도 X

자기 소개

저는 궁금한 것을 못참는 성격이라 공부를 하다가 막힌 부분이 있으면 그것을 찾아보고 기록하는 스타일입니다.

저는 저의 현재까지의 인생 중 성공했던 사례는 어릴 때 외국에 살았던 것입니다. 저는 어릴 때 부터 외국에서 혼자서 생활했던 경험이 있어서 도전을 하는데 두려움이 없어서 교수가 되려고 대학원 코스를 진행중 저의 진로에 대해 생각해 보게 되었습니다. 그 결과 교수가 저의 길이 아니란 것을 깨닫고 저의 진로 즉, 내가 하고 싶은 것과 나에게 맞는 것이 무엇일까를 찾는 도전을 하게 되었습니다. 하기 싫어서 포기한 것이 아니라 인생에서 제가 도전할만한 제가 하고 싶은 일을 찾고 싶었던 것입니다. 시간이 아까워서 나 자신을 찾는 도전을 하지 않으면 후회할 것 같기 때문입니다. 처음에는 회계 쪽으로 갔고 자격증도 다량 취득하는 중 개발자란 직종을 알게 되었고 알아본 결과 해보고 싶다는 생각을 하게 되었습니다. 그리고 도전을 하게 되었는데 공부를 하면서 느낀 것은 저에게 맞고 잘해보고 싶다는 생각을 가지게 되었습니다. 그렇게 생각했던 이유는 평소에 사이트들을 사용하면서 이 사이트에 이런 기능이 있으면 좋겠는데 왜 없지라는 생각과 이 사이트에는 이런 기능이 필요할까라는 생각을 해왔기 때문에 백엔드 개발자에 대해 알게 되면서 그런 기능들을 제가 직접 구현할 수 있다는 것에 매력을 느끼게 되었습니다. 그리고 본격적으로 개발 공부를 하고 팀원과 프로젝트를 하다보니 인터넷에서 상위 개발자들이 지키는 7가지 습관이란 것을 보게 되었는데 제가 추구하는 것들이 맞다고 생각이 되었습니다. 그렇게 생각하는 이유는 다음과 같습니다.

  • 코드에 대한 애착이 없음
    개발 공부를 하면서 느낀점은 하나의 코드에 애착을 가질 필요가 없다는 점입니다. 버전이 업그레이드 되거나 제가 알지 못했던 코드 방식, 개발을 위해 라이브러리나 프레임워크를 사용할 경우 코드는 변화가 되는데 그 코드를 애착하고 유지할 필요는 없다고 생각합니다. 그리고 회사에 들어가게 된다면 회사가 원하는 사업의 방향에 따라 작성한 코드는 언제든지 바뀔 수 있기 때문에 새로운 코드를 사용하는 점에서 새로운 코드 스타일을 익힐 수 있는 점이 좋기 때문에 코드를 전부 수정해도 스트레스가 되지 않기 때문입니다.
  • 인간을 위한 코드 작성
  • 간단한 코드 작성
    기능을 구현할 때 결국 목적은 배포 후 운영할 때 고객들이 편하게 사용할 수 있어야 합니다. 아무리 코드를 잘만들어도 사용할 고객이 사용하기 불편하다면 그것은 의미가 없는 코드라고 생각합니다. 스마트폰의 발달로 저도 많은 어플들을 사용하고 사이트들을 사용하지만 가끔 기능에 목적을 두고 그 기능을 찾기 힘들거나 구현한 기능들이 불편하게 느껴질 때가 있었습니다. 그런 생각으로 인해 저는 개발의 목적은 자기만족이 아니라 고객의 편의성필요성이라고 생각합니다. 그리고 개발을 할 때 복잡하게 코드를 작성해도 컴퓨터는 그 코드를 해석해서 기능을 구현할 수 있을 것입니다. 하지만 개발은 혼자하는 것이 아니라 여러명의 팀원과 같은 팀으로 프로젝트를 진행하고 코드를 작성할 것입니다. 시간의 낭비를 하기 싫다면 팀원들이 내 코드를 한번에 이해하기 쉽게 코드를 이해하기 쉽게 짜고 가독성이 좋은 코드를 작성하는 것이 좋다고 생각합니다. 어쩔 수 없이 코드를 복잡하게 짜야한다면 주석으로 내 코드가 무슨 기능을 하고 있는지 설명해주는 것이 좋다고 생각합니다. 저의 모토는 Simple is Best입니다. 단순한 것이 읽기 쉽고 이해하기 쉽기 때문입니다. 그러다보니 저는 항상 블로그도 정리하고 끝내는 것이 아니라 리팩토링을 해서 정리한 것을 다시 정리를 하고 여러 페이지로 나누는 것이 아니라 하나의 카테고리로 정리했습니다.
  • 일관된 표준 사용
    이것도 평소에 중요하다고 생각했습니다. 매번 코드의 스타일이 다르다면 같이 협업하는 사람도 힘들고 나중에 본다면 저도 이해하기 쉽지 않을 것입니다. 변수명과 코드의 스타일은 유지해서 다른 사람이 봤을 때 예상이 갈 수 있게 하는 코드가 좋다고 생각합니다.
  • 예측 가능한 코드 작성
    코드가 예기치 않은 결과를 만들지 않고 여러번 실행되도 결과는 같다. 적절한 테스트로 변경하기 쉽게 만든다. 이부분은 현재 부족하지만 중요하다고 생각합니다. 코드가 상황에 따라 결과가 예측되지 않는다면 배포하고 운영이 불가능할 것입니다. 그러면 제가 위에서 중요하다고 생각한 고객의 편의성필요성에 불적합합니다. 사용하려고 할 때 될지 안될지 모르는 사이트는 편의성도 떨어지고 요즘 시대에는 대체품이 많다보니 필요성도 떨어질 것입니다.
  • 자주 소통하기
    저는 제가 부족한 것을 압니다. 저는 저를 객관적으로 파악하고 있기 때문에 저의 코드가 제가 원하는 목표치에 한번에 다다를 수 없다는 것을 알고 있습니다. 그렇기 때문에 저는 자주 소통하는 것이 중요하다고 생각합니다. 일단, 제가 작성한 코드를 제대로 작성이 되었는지 체크를 받고 더욱 업그레이드를 시키고 더욱 가독성이 좋게 만들려면 코드 리뷰를 받고 제 코드를 업그레이드 시키기 위해서는 다른 사람의 코드 스타일도 보고 공부할 점이 있습니다. 뛰어난 실력자의 코드는 더욱 그렇다고 생각합니다. 그렇기 때문에 자주 소통해서 피드백을 받고 피드백을 수용하는 절차는 많이 필요하다고 생각합니다.
  • 빠르게 그리고 느리게 코딩

포트폴리오

  • 첫 문장이 중요하다.

한 줄로 자신을 표현하라
한 줄로 자신이 어떠한 개발자인지 나타내야 합니다. 도전적인 개발자, 오픈 소스에 관심이 많은 개발자 등 자신의 아이덴티티를 고찰해서 한 줄로 나타내야 합니다.

장점 세 가지
그 다음은 장점 세 가지를 부연 설명으로 나타내는 것이 좋습니다. 만약 내세울 것이 없는 포트폴리오라면 높은 학점, 높은 열정, 높은 자료구조 이해력 등을 내세우면 됩니다.

  • 숫자로 말하라

자신을 설명하는 About부분은 필수입니다. 자신이 어떤 사람인지 수학적, 논리적으로 표현해야 합니다. 내가 어떠한 경험을 가지고 있는지에 대해 숫자로 이야기하는 것이 중요합니다. 예를 들어 TDD를 했다면 테스트 커버리지를 몇 퍼센트로 했는지 알고리즘을 몇 문제 풀었는지 숫자로 이야기하는 것이 좋습니다.

  • 기술의 숙련도를 나눠서 표기하라

자신이 다루는 기술을 어느 정도 다루는지 구분하여 나타내야 합니다.
자신이 다루는 기술의 리스트를 나열할 때는 자신이 제일 잘하는 것, 그리고 내가 조금은 하지만 잘하지는 못하는 것 이렇게 나열하는 것이 좋습니다.

  • 리드미를 잘 작성해라

포트폴리오에는 자신의 프로젝트가 들어갑니다. 프로젝트의 아키텍처나 ERD를 잘 표현해주는 것이 중요합니다. 이걸 리드미에서 한눈에 봐도 잘 알 수 있도록 하는 것이 중요하다.

  • 오픈 소스 컨트리뷰터가 되자

오픈 소스 컨트리뷰터는 내가 사용하고 있는 프레임워크나 라이브러리 개발자를 말합니다.

  • 강점 3가지

  • 프로젝트 사용 기술

  • 참고해야하는 점

  • 특색있게 만들기

  • 가독성 있게 만들기

  • 프로젝트의 완성도가 높아야 한다.

  • 코드 정리가 잘되어야 한다.

  • 변수명 신경쓰기

  • 주석 신경쓰기

    코드 맨 위에 작성

    • 작성자
    • 해당 클래스의 역할
    • 날짜 or 업데이트 날짜

    중요한 기능에 주석으로 설명(한눈에 알아보기 쉽게)

  • 리드미 제대로 작성

    • 구현 기능
    • 왜 만들었는지
    • 어떤 목적을 가지고 역할을 했는지 무엇을 배웠는지
    • 기술에 대한 상세한 내용
  • 개선사항

    이 프로젝트에 대해서 고민하는 모습 어필

  • 어떤 목적을 가지고 역할을 했는지 무엇을 배웠는지

  • 어떤식으로 협업했는지 스토리 작성

  • 발전 가능성을 보여주기


이력서

자기소개

  • 이걸 통해서 뭘 배웠는지 그리고 뭘 했는지 작성
  • 내 목표가 무엇인지 처음에 나와야 한다.

    큰 목표는 무엇이었고 그 목표를 위해서 어떠한 노력을 했는지 어떤 역할을 했는지

  • 자신이 개발이 좋아하는지 보여주기
  • 면접 때 말하고 싶은 키워드


    → 질문 유도

profile
발전하기 위한 공부

0개의 댓글