🤩 Review

원티드 프리온보딩 챌린지 2월 회고

category
🤩 Review
 
친구의 추천으로 원티드 프리온보딩 챌린지를 2.6일 ~ 2.19일까지, 총 2주동안 참여했다. 이 블로그를 통해 챌린지에서 얻었던 것들을 정리하고자 한다.

Week 1-1. TypeScript란?

책이나 블로그에선 TypeScript를 아마 자바스크립트의 슈퍼셋 언어라고 소개할 것이다. 나도 이렇게 배웠다. 틀린말은 아니지만 좋은 표현은 아니다. 이제 타입스크립트를 소개하라면 아래와 같이 설명할 것이다.
TypeScript is JavaScript with syntax for types. 👉 타입 구문이 있는 JavaScript
공식문서를 보면 대문짝만하게 타입스크립트를 한줄로 소개하고 있다. 타입스크립트의 기능은 다음과 같이 3가지로 소개한다.
JavaScript and More
 

타입스크립트 효과

  • JavaScript 런타임 시점 오류 검출
  • 데이터를 코드로 설명할 수 있게 됨
  • 객체와 함수의 생김새를 정의

d.ts

d → declare (선언하다)
TypeScript 파일에서 타입 선언부만 있는 파일.
구현부가 없는 파일.

JavaScript와 TypeScript가 문법이 다른 이유

JavaScript private 필드를 선언하려면 #변수명
TypeScript private 필드를 선언하려면 private 변수명
이렇게 문법이 다른 이유는 무엇일까?
단순하게 생각하면 된다. TypeScript에서 먼저 문법이 적용된 후에 JavaScript에 문법이 추가되었기 때문이다.
 
첫번째 강의에서는 TypeScript에 대해 설명하셨다. 내가 여태까지 TypeScript에 대해 아는 것이 많다고 자부할 수 있었는데 이 하루만에 생각이 바꼈다. 알아야 할 게 너무 많았고 아직 배울 단계였다.
런타임 vs 컴파일
객체지향이란?
인터페이스 vs 타입
TypeScript를 사용하는 이유 한번 생각해보기
크로스 브라우징이란?
웹 표준이란?
 

Week 1-2. Type Alias vs Interface

Interface란 객체의 타입을 정의하고 생김새를 가지도록 하는 타입이다.

Interface

  • extendsinterface간 확장 가능
  • 할당 표기법 X
interface example { }
  • interfaceType alias를 확장할 수 있다.
  • 중복 선언 가능(자동으로 선언 확장).

Type Alias

  • & 연산자로 type 확장 → 컴파일 간에서 비용이 들 수 있다.
  • 할당 표기법 O
type example = {}
  • 중복 선언 불가능.
각자 다른 개념이지만 비슷한 점도 많고 다른 점도 있어 꼭 알아야 한다. 둘다 많이 사용되면서 또 비슷한 역할을 대체하는 경우도 있다.
 

Week 2-1. 타입 가드

/** * typeof * * JavaScript에서 이미 존재하는 타입 검사 연산자 * typeof 연산자는 피연산자의 자료형을 문자열로 반환 */ function print(value: number | string): string { if (typeof value === 'number') { return String(value) } if (typeof value === 'string') { return value } return value }
/** * in 연산자 * * JavaScript에서 객체가 특정 속성을 가지고 있는지 검사를 불리언으로 반환한다 */ interface Dog { name: string bark(): '멍멍' } interface Cat { name: string meow(): '냐옹' } function sayAnimal(animal: Dog | Cat) { if ('bark' in animal) { animal.bark() animal.name } if ('meow' in animal) { animal.meow() } }
/** * instanceof * * JavaScript에서 이미 존재 * * instanceof 연산자는 생성자의 prototype 속성이 * 객체의 프로토타입 체인 어딘가 존재하는지 판별 */ function getDate(date: Date | string): Date { if (date instanceof Date) { return date } return new Date(date) }
/** * 사용자 정의 타입 가드 * * 매개변수 is 타입 */ function isDate(date: Date | string): date is Date { return date instanceof Date } function getDate(date: Date | string): Date { if (isDate(date)) { return date } return new Date(date) } interface Dog { name: string bark(): '멍멍' } interface Cat { name: string meow(): '냐옹' } function isDog(animal: Dog | Cat): animal is Dog { return 'bark' in animal } function isCat(animal: Dog | Cat): animal is Cat { return 'meow' in animal } function sayAnimal(animal: Dog | Cat) { if (isDog(animal)) { animal.bark() } if (isCat(animal)) { animal.meow() } }

정적 타입 vs 동적 타입

정적 타입
  • 개발자가 타입을 명시적으로 타이핑해야한다.
    • Java, C#, C++
  • 타입 체커와 타입 추론을 통해 일부 타이핑을 생략할 수 있다.
    • TypeScript, Scala, Haskell
  • 보다 빠르게 오류를 잡아낼 수 있다.
  • 자동 완성을 통해 데이터 타입 혹은 속성에 대한 확신을 가질 수 있다.
동적 타입
  • 동적 타입 시스템은 런타임 상황에도 타입이 동등한지 확인한다.
    • JavaScript, Python, Ruby, Perl, PHP
  • JavaScript는 느슨한 타입의 동적 타입 언어
    • 변수는 어떤 타입과도 연결되지 않는다.
    • 프로그램이 실행 모든 타입의 값으로 할당하거나 재할당 할 수 있으며 타입을 변경하거나 객체에 새로운 속성이나 메서드를 추가할 수 있다.
이날 가장 개념이 어려웠던 것 같다. 사전 지식이 많이 필요했었는데 아예 사전 지식도 없었으니 배워야 할 게 많다고 느꼈다.
Non-null assertion operator
타입 단언
in 연산자
typeof 연산자
instanceof 연산자
 

Week 2-2. TypeScript hierarchy

타입스크립트에는 계층이 있다. unknown이 최상위 타입이고 never가 최하위 타입이다. 아래 사진을 보고 타입 캐스트를 이해할 수 있다.
notion image
  • 모든 타입은 집합일 뿐이지만 타입 간에도 계층이 존재한다.
  • 타입 간의 관계는 특정 관계로 선언되었는지 여부가 아닌 포함된 속성에 의해 결정
  • 최상위 타입은 시스템에서 허용하는 모든 가능한 값을 설명하는 타입
  • 서브 타입은 슈퍼 타입에 할당할 수 있다.
    • 그 반대는 불가능하다.

타입 캐스트

  • 타입 변수를 다른 타입의 변수에 할당하며 생기는 타입 오류로 그 계층을 확인할 수 있음
  • extends 이용
다운 캐스트
type true = '하위 타입' extends '상위 타입' ? true : false type false = '상위 타입' extends '하위 타입' ? true : false
 

구조적 타입과 명목적 타입

구조적 타입 (Structural Type)
Duck Typing, 타입의 상하 관계
  • 사실 타입스크립트의 타입은 집합의 일부일 수 있다. (즉 언어가 집합의 관계를 따집니다)
  • 객체가 어떤 속성들을 가지는지 즉 구조를 기준으로 타입을 따진다.
  • 기본적으로 자바스크립트는 구조적 타입의 언어이다
  • 사람을 클론한다…
    • 내 기억을 가진 사람을 그대로 복사해서 만든다.
      • 그럼 그 사람은 과연 나일까…?
      •  

덕 타이핑

  • 타입의 생김새가 오리와 같다면 바로 오리의 타입임을 뜻한다.
    • 오리처럼 보이고, 오리처럼 수영하고, 오리처럼 꽥꽥거리면 그것은 오리일 것이다.
  • 거위가 오리와 같은 속성을 가지고 있다면 그것조차도 오리 타입
  • 일반적으로 동적 타입 시스템을 설명하는 데 덕 타이핑이 사용된다.
👉 playground
 
타입에도 계층이 있다는 사실을 알게되었다. 내가 개념 공부를 할 때 무작정 구현부터 해서 기초 개념 공부가 부족하다는 점을 깨달았다.
타입 계층 블로그 번역하며 읽기
구조적 타입 명목적 타입 더 자세히 공부하기
타입 캐스트 코드 이해하기
 

타입스크립트 공부방법

  1. 비교표 수시로 찾아서 확인해보자
  1. 항상 최신 자료를 확인해야한다
  1. 공식문서의 breaking changes는 꾸준히 봐야한다.
  1. 공식문서는 어렵기 때문에 책으로 공부하고 싶다면 아래 3가지 책을 추천한다.
  1. 타입스크립트 프로그래밍
notion image
  1. 러닝 타입스크립트
notion image
  1. 이펙티브 타입스크립트 (1, 2번 중 읽은 후 다음으로 읽는 걸 추천)
notion image
  1. 코드를 치면서 공부하고 싶다면 구현 부터 하면서 공부하지 말고 차근차근 선언하는 방법부터 배우자.
  1. 타입스크립트 런타임 오류 해결 공부 TypeScript exercise (9번까지는 풀어야 이력서 Skill란에 TypeScript 작성 가능)
  1. 타입스크립트 런타임 오류 해결 심화 공부 Type Challenge (위에 있는 TypeScript exercise를 풀고 하기 TypeScript Playground에서 @Type Challenges/plugin 설정 키기)
 

아하! 모먼트

타입스크립트 강의만 한게 아니라 1시간동안은 취업 이야기를 하였다. 많은 질문들이 있었는데 그 중 기억에 남은 질문만 정리했다.
프론트엔드 신입 기대치
  • 회사마다 다르다
  • 채용 공고 기준으로 지원자격(필수사항)
    • 이 정도가 기대치이다
    • 레벨이 2개다
      • 서류 합격할 자격
      • 회사에 들어와서 일할 자격
  • 기대치는 매년 올라간다.
실력좋은 프론트엔드 개발자란
  • 나보다 잘하는 사람
    • YAGNI, 클린코드
      • 성급한 최적화하지말자… 비현실적인 리팩터링이나 클린코드에 몰두하지말자
    • 나는 간신히 일정을 지키는데..
      • 나보다 더 잘하는 사람들은 일정도 지키고 웹 표준, 웹 접근, 최적화, 클린한 코드 작성 다 챙긴다.
  • 나보다 늦게 시작했는데 더 잘하는 사람
    • 백엔드 혹은 다른 영역에 있던 분들이 내가 오랜 시간해온 것을 금방 추월할때
개발자 자유형식 자소서
  • 자유는 없는 것 같다.
  • 겨울에 롱패딩 입듯이.. 요즘 어차피 다 똑같다.
  • 프론트엔드 개발자 이력서, 좋은 개발자 이력서
    • 검색하셔서 많은 레퍼런스 참고하시고 내 입 맛에 맞게 바꿔가면서 고치시는 것을 추천합니다.
  • 나라는 개발자를 표현할 수 있는 것이면 충분하다.
이력서 자기소개 부분
  • 트렌드는 없고 지겨운 것은 있다.
  • 겹치는 내용이 워낙 많다..
  • 나는 어떤 개발자입니다.
  • 나는 어떤 것을 선호하는 개발자입니다.
  • 나는 어떤 것을 잘하는 개발자입니다.
  • 나는 어떤 것을 경험해 본 개발자입니다.
포트폴리오 프로젝트 소개
  • 다 거기서 거기인 수준으로 다들 잘하는 시기이기 때문에..
  • 왜 만들었는지? 어떻게 만들었는지?
    • Discussion ⇒ Issue ⇒ PR ⇒ Code Review ⇒ Merge ⇒ SEMVer ⇒ Release
      • 요 흐름 다 지키면서 개발하는 것을 추천
면접준비 방법
  • 당연한거 아닐까요?
    • 달달 외운 티가 나면.. 당연히 탈락
    • 내재화해서 사례를 잘 엮어서 이해해서 내것으로 나만의 표현 방법으로 대답하자
  • 면접관이 물어보는 것
    • 프론트엔드 개발자니까 물어본다.
    • 이력서에 적어와서 물어본다.
    • 우리 회사에서 물어보는 내용
    • 내가 몰라서
    • 내가 궁금해서
vanila JS 공부
notion image
  • 요즘 과제는 어차피 리액트 위주로 나오니까 큰 걱정할 필요는 없다.
  • 리액트는 JS로 만들어진 라이브러리이다.
    • 즉. 내가 만든 앱을 너무 귀찮고 피곤하고 쓰레기 같은 코드가 스파게티로 나올 수 있겠지만 JS만으로도 만들 수 있는 역량이나 스스로의 확신은 있어야한다.
자바스크립트 수준 & 공부방법
  • JS 공부는 동작원리와 깊은 이해도를 가지기 위해 노력하시면 됩니다
  • JS 3개 이상의 책을 보는 것을 추천합니다
    • 목차를 직접 만들고
    • 원하는 목차를 쏙쏙 찾아서 보는게 좋습니다.
      • 첫날: This 내용만 3권
      • 둘째날: 함수 내용만 3권
    • Poiema
    • 모던 JavaScript 튜토리얼
  • 자바스크립트를 말하다
    • 장현석이라는 사람이 가장 좋아하는 책
성장하기 힘든 회사 구분하는 방법
  • 면접때 최대한 좋은 면접으로 이끌고 물어보시는게 좋습니다.
    • 회사 사내 스터디 하는지
    • 기술 고민 무엇을 하는지
    • 기술 블로그 쓰는지
    • 개발 문화를 위한 지원이 무엇이 있는지
면접관: 왜 React 쓰셨어요?
  • 요구 사항에 맞는 기술을 선택했다라는 대답이 가장 좋다.
    • PoC를 철저하게 하는게 가장 중요하다.
  • TPO (개발 용어 아님.. 주의 요망)
    • Time(시간), Project(프로젝트 요구 사항), Occasion(상황)
코테 공부 방법
  • 어느 회사의 코딩테스트를 준비하는지 대놓고 그 회사에 맞춰서 준비합시다.
  • 회사는 생각보다 바쁘고 면접관들과 문제를 준비하는 분들은 생각보다 더 바쁘다..
    • 꽤나 3년간은 문제가 크게 벗어나지 않습니다.
  • 블라인드.. 잡플래닛.. 구글링 ⇒ 어떤 문제 어떻게 나오는지 검색
이력서(포트폴리오)에 이런 키워드는 적지 않았으면 좋겠다는 단어
  • 허세 느낌나는거…
    • 우주 최고 개발자
    • 풀 스택 개발자
    • 스타트업에 미친 개발자
  • 경력이 낮은데 성장.. 공부 중.. 진행 중.. 수정 중.. 앞으로 발전 중입니다.
    • 신입이라고 자랑하지말고 신입인걸 숨기고 작성합시다
    • 속이자는 이야기는 아니지만 대문장에 저 신입이니다 라고 자랑하지 말자.
  • 스킬 트리
    • 별점…
  • 배운 점.. 학습한 점.. 회고 한점…
    • 차라리 성과로 바꿔적으세요
    • 이건 방어기제입니다.
공부 중요도 순서
  • 먹고 싶을 때 먹자..
  • 먹고 싶을 때 먹어야 더 맛있다.
  • 기술도 필요할때 공부하면 괜찮습니다.
    • 필요할때 공부하는게 가장 좋은 공부법이다.
  • 계획보다는 실행이다
    • Head First
      • 대가리부터 들이밀자!!
번아웃 극복 방법
  • 저는 솔직히.. 한번도 탈출하지 못했습니다..
  • 번아웃이 와서 내 자신이 하락했다.
    • 그리고 그 자신이 내 평균 수준이 되었다…
      • 이건 큰일이다..
  • 번아웃 오기전 나의 학습 노력이 100점이라면
    • 번아웃이 왔을때 10점으로 내려가는건 상관없습니다. (회복탄력성)
      • 근데 문제는 번아웃이 온 상황의 내가… 그냥 앞으로의 내 자신일때가 문제이다.
    • 때문에 번아웃으로 인하여 내 학습 노려기 10점으로 내려가면 극복하기 어렵다.
  • 번아웃이 오면 번아웃 오기전 내 상태를 최대한 측정하고
    • 현 상황에서 그 측정 상태로 돌아가기 위해 노력하는 것이 중요하다.
포트폴리오 프로젝트 부분 작성 방법
  • 노션 글이 아니라 깃헙 하나로 설명 가능한 부분
  • 유명 부트캠프 저장소 모두 참고해보세요!!
    • 어차피 모두 Public
    • 우아한테크코스, 우아한테크캠프, 네이버 부스트캠프
2주 뒤에 입사준비, 해야할 것
  • 개발자가 되면 인생이 바뀝니다..
    • 그냥 주무시고 여행다녀오세요
    • 그거 조금 먼저본다고 얼마나 더 잘할까요?
신입기준 포트폴리오 수준, 창의적인 포트폴리오
  • 나는 창의적이라고 생각해도 면접관은 이미 어제본것이다.
  • 좋은 서비스 혹은 좋은 프로덕트를 만든다고 생각하자
    • 만약 정말 창의적이면 그걸로 회사를 차리자! 투자도 받을 수 있지 않을까?
  • 신입이라면 Realworld 만들기 추천!!
    • 무료 API+CSS까지 준다
    • CRUD, 게시판, 페이지네이션, 댓글, 대댓글
    • 이상한 외국 개발자들이 자꾸 API에 스크립팅하는 못된.. 사례도 있어서 할만하다.
개발자 첫 커리어 도메인/업계
  • 당연히 업계와 업종은 큰 상관이 있습니다.
    • 다만 실력이 좋다면
      • 도메인 혹은 업계를 더욱 더 이용할 것입니다
      • 도메인과 업계를 아주 쉽게 바꾸실겁니다.
    • 다만 실력이 좋지않다면
      • 도메인이 너무 훌륭해서 도메인빨로 실력에 비해 커리어를 잘 탈수도 있다.
      • 도메인이 마음에 들지 않는데.. 어쩔 수 없이 욕하면서 그 계열 계속 다닌다
코테/과제전형 없이 면접만으로 채용전형 진행하는 회사
  • 면접이 빡세면 빡셀수록 들어가서 배울게 많다
  • 면접이 쉬우면 쉬울수록.. 걱정해야한다.
    • 내부에 잘하는 사람이 없을수도있다
제가 최근에 회사 몇군데를 지원했는데 모두 서류 전형에서 탈락하였습니다… 이력서가 문제일까 싶어 계속 수정을 해보는데도 잘 감이 안잡힙니다. 이력서 작성 팁이 있을까요?
  • 시장의 잘못이다.
    • 아무리 노력해도 채용공고가 별로 없는 시기입니다.
  • 이력서보다는 실력을 채워야할때일 수 있다.
회사에서 근무하다보면 새로운 라이브러리를 사용해야하는 경우가 많은데 아직 연차가 부족해서 그런지 신기술을 점목하는데 오래 걸립니다. 멘토님은 새 라이브러리를 사용해야한다고 했을 때 어떻게 그 라이브러리를 알아가시나요? 개인 공부가 아니라 회사 프로젝트를 한다고 했을 때 속도가 생명이잖아요
  • A to Z, 범위 위주 공부에서 벗어나자
  • 범위 위주 학습에 강박을 벗자
  • 지금 당장의 문제 해결에 대한 속도가 중요합니다.
  • 프로젝트 속도를 중요시하다보면 오류나 버그가 더 많이 나온다.
    • 기술 습득에는 속도를
    • 회사 코드에는 정확도를 더하는게 좋습니다.
  • 문제 해결 범위를 줄여서 학습하는 시간도 줄입시다.
    • 의식적 무지
      • 즉 내가 어떤 새로운 라이브러리를 공부할때 뭘 모르는지 먼저 포착하자
      • 포착한 부분만 공부하자
      • 공부해서 회사에 적용하자
이번에 취준을 처음해보고 있습니다. 일단 뽑히는 데로 가려고 보이는대로 지원중인데 20개 중에 2개에서 서류 통과하고 코테 보라고 연락이 왔습니다.. 근데 해볼만 하겠다 싶었던 곳은 다 칼탈락하고 되겠나 싶은 곳에서 연락이 온거라서요.. 원래 취업시장은 이렇게 불확실성이 충만한 곳인가요…?
  • 취업시장은 굉장히 불 확실합니다.
  • 실력이 부족한데 운과 타이밍이 과하게 좋아도 합격할 수도 있다
    • 면접에서 내가 아는 것만 물어본다.. 헐…
    • 면접에서 내가 어제 공부한 것만 물어본다..
  • 똑같은 회사 똑같은 면접관 같은 환경에 지원 시기만 다를 뿐인데 합불이 다를 수도 있다.
  • 취업 = 운 + 타이밍 + 실력
요즘같이 취업시장이 좋지 않은 상황에서는 제가 세운 기준에 부합하지 않는 회사라도 입사하여 경력을 쌓는게 현명한 선택일까요? 얼마 전 첫 합격을 하고 제가 생각한 최소 기준에 맞지 않아서 입사 거절을 했는데, 취업시장이 얼어있는 상황에 괜히 거절한건가하는 후회와 불안감이 듭니다. 개인 선택에 달린 문제겠지만, 멘토님의 의견이 궁금합니다.
  • 어쩔 수 없다..
  • 고민 방법
    • 똥차가고 벤츠올수도 있다.
      • 미친듯이 공부하면서 시장이 열리는 것을 기다린다.
    • 벤츠가고 똥차올수도 있다.
      • 생존 취업
        • 하나 합격하고 내 인생.. 지금 더 좋은 회사 못가면 지금 이 회사를 가야한다라고 생각하고 미친듯이 지원하고 공부해야한다.
        • 다른 회사 합격하고 입사일미루고 다른 회사 합격하고 입사일 미루고 재귀 반복
    • 내가 만약 네이버를 가고 싶다…
      • 네이버 주식이 상한가를 치면 칠수록 내가 들어갈 TO가 늘어난다.
      • 네이버 주식이 하한가를 치면 칠수록 내가 들어갈 TO가 없어진다…
 

느낀점

2주동안 온보딩 챌린지를 하면서 새로운 언어를 공부해야할 때 어떻게 공부해야하는지, 어떤 식으로 실력을 키워야 하는지 알게 되었다. 무작정 구현하는 것보단, 차근차근 기초 개념을 보고 흐름을 이해하면서 배워야겠다고 느꼈다.
날이 지나면 지나갈 수록 높아져 있던 내 콧대는 서서히 꺾이고 있었다.. 모르는게 너무 많아 초반에는 너무 좌절감이 들었지만, 계속 들으면 들을수록 내가 더 배울게 많고 그만큼 얻어가는 것도 많을 것이라고 긍정적이게 생각하였다. 그리고 이 챌린지 덕분에 회사 지원을 하면서 취업에 대한 두려움이 사라졌던 것 같다. 결과는 모두 서류 탈락이었지만 더더욱 도전하려는 의지가 생겼다.
2월 챌린지에서 얻어갔던 것들이 많아 3월 챌린지에도 참여하려고 한다. 3월 주제는 로그인 기능 구현과 인프라 였다. 내가 모르는 것들이 많을 것 같아 더 재밌을 것 같다 !!!