코드스테이츠/코드스테이츠 @ 개발 일지

[코드 스테이츠] 44일차, 트러블 슈팅 백만 번

Je-chan 2021. 8. 31. 23:52

저거 저거 빨갛게 async 되어 있는 것 봐라?!

  오늘 배운 개념은 비동기다. 페어 프로그래밍으로 한 과제는 비동기로 함수를 구현하는 것이었다. 그런데 코드를 작성하는 내 입장에서는 함수를 구현한다기보다 오류를 수정하는 게 과제의 주 업무라 느꼈다. 분명, 함수는 구현한 것 같은데 테스트에 통과되지 않아서 통과되지 않은 오류를 해석하고 수정 작업하는데만 모든 시간을 쏟은 것 같다. 오류가 뜨면 뭐가 문제일까 구글링을 엄청 하고, 구글링을 해도 답이 나오지 않으니까 Test를 담당하는 test.js 파일을 열어서 뭘 원하는 건지 분석까지 해냈다. 덕분에 오류를 해결하는 스킬을 많이 기르긴 했는데 이걸 개념처럼 뭔가 설명하기가 애매하다. 테스트에서 틀린 것을 보고 트러블 슈팅하는 스킬이 늘었지, 무언가를 더 배웠다는 느낌이 들지 않아서 그런 것 같다.

 

  여하튼, 그 어두컴컴한 터미널에서 빨간색으로 오류 났다고 보기만 하다가 Pass 될 때의 그 통쾌함은 이루 말할 수 없다. 처음 코드 스테이츠에 들어왔을 때도 코플릿 풀다가 에러나면 이게 뭐지 하면서 머리 쥐어 싸매다 결국 풀었을 때의 그 쾌감이 좋았는데, 아직까진 그 쾌감을 즐길 수 있는 것 같다. 이렇게 공부하니까 그래도 내가 진짜 공부를 허투루 하고 있지 않다고 느껴 뿌듯함까지 느꼈다. 하지만, 그럼에도 아직은 갈 길이 멀다는 걸 느낀다. 이제 고작 비동기 개념을 배웠을 뿐, 실제 내가 이 비동기를 어떻게 써먹어야할 지 감이 잡히지 않기 때문이다. 요즘은 어려운 것들을 배워서 그런가 뿌듯해지는 시간이 많기는 한데 그만큼 나 스스로 그것에 만족하며 더 발전하려고 노력하지 않을까 경계심도 함께 강해지고 있다. 지금은 그 뿌듯함과 통쾌함을 만끽하되 나태하지 않도록 주의해야할 것 같다.


[ 오늘의 TODO ]

  1. 코드 스테이츠) 비동기 개념
  2. 코드 스테이츠) 비동기 런타임 환경인 Node.js 모듈 사용하는 방법
    // fs
  3. 코드 스테이츠) Pair-Programming
    // Part 1 
    // Part 2 
    // 이번 주 주말에 어떻게 개념 정리해야 하나 고민중
  4. 패스트 캠퍼스) 인강 3개 이상 듣기 // optional
    // 간신히 비동기 관련 인강 2개 들었다..
  5. 스터디 그룹) 프로그래머스 문제 풀기
    // 입국 심사
    // weekly 5주차
    // 얼른 블로깅 다 작성하고 다시 풀러 갑니다
  6. 생활) 물 1L 이상 마시기
  7. 개선) 페어 프로그래밍할 때도 혼자 있을 때처럼 침착하게 오류 대처하기
    // 오늘은 진짜 오류 잘 대처했다. 이 부분에서만큼은 스스로 칭찬해도 괜찮은 하루다.

[ 오늘의 해결 ]

1. Promise.all 앞에는 new 가 붙지 않는다

  MDN 문서만 제대로 파악하고 개념을 익혔더라면 절대 시간을 잡아 먹지 않았을 텐데 처음 본 개념이다 보니 개념을 익히는 시간이 굉장히 오래 걸렸던 것 같다. 개념을 정확하게 생각해보자. new 는 원래 존재하는 Class 를 갖고 Instance 를 만들 때 사용하는 생성자 키워드다. 그러나 Promise.all 은 어떻게 보면 어떤 메소드를 사용하는 것 뿐이지 그것 자체로 Class 가 아니며 Instance 를 생성하는 건 더더욱 아니다. 그런데 내가 Promise.all 에다 계속 new 를 붙이다 보니 많은 시간을 잡아 먹었다. Promise.all 은 iterable 한 객체들을 인자로 받는데, 솔직히 iterable 한 객체라면 배열이라고 딱 집어 말해도 괜찮을 것 같다. 그런데 왜 iterable 해야 하는가? 그건 Promise.all 이 배열을 반환하는데 그 iterable 한 내용 안에 있는 인덱스의 순서대로 값을 가져오기 때문이다. 아직 개념이 확실하게 잡히지는 않은 것 같지만, 주말에 복습할 때 이걸 보고 있는 너. 그래 너 말야 너. 다시 한 번 똑바로 개념을 잡아라. 이걸로 또 시간 더 낭비하면 진짜... 어후

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

 

Promise.all() - JavaScript | MDN

The Promise.all() method takes an iterable of promises as an input, and returns a single Promise that resolves to an array of the results of the input promises. This returned promise will resolve when all of the input's promises have resolved, or if the in

developer.mozilla.org

 

2.  트러블 슈팅의 스킬은 자세하게 꼼꼼히 보는 것, 구글링에 망설임이 없는 것

  이건 개념이라기 보다 트러블 슈팅을 하도 오래 하다보니까 생긴 습관같은 건데, 오류가 났으면 일단 오류 메세지를 읽는다. 오류 메시지만 읽고 해결되는 문제가 반 이상이다. 그런데, 그 오류 내용만 보고는 해결하기 어렵다면 그 오류가 났다고 하는 자리를 전후로 한 번 살펴 본다. 그럼에도 모르겠다 하면 오류의 원인을 하나씩 파헤쳐 본다. 

 

  꼼꼼히 살펴보는 습관이 좋다고 하는 이유는 꼼꼼히 볼수록 구글링을 할 내용들이 더 많아지기 때문이다. 구글링할 내용이 많아진다는 건 그만큼 해결할 수 있는 방법에 더 근접해진다는 이유다. 뭐가 터졌다 싶으면 일단 내 코드를 확인해보고 그럼에도 모르겠다 싶으면 망설이지 말고 구글링을 해보자. 구글링을 하니까 진짜 안 될 건 없더라. 특히 MDN 문서를 보고, 이해가 잘 안 되면 한국인들의 기술 블로그들과 모던 JS 튜토리얼을 살펴 보고, 그럼에도 모르겠다 싶으면 해외에 계신 분들의 잘 만들어진 코드들을 보면서 내 코드를 수정해나갔다. 그러니까 진짜로 오류가 해결 되더라. 

 

  그런데 뭐니뭐니 해도 트러블 슈팅의 가장 근본적인 스킬은 아무래도 오류 앞에 침착해지는 것이다. 침착하다고만 해서 오류 해결이 이뤄지는 것은 아니지만 침착한 태도로 오류를 바라보니까 길이 보이는 느낌이 들었다. 이제는 트러블 슈팅에 자신이 생겼다.(그래도 오류는 싫음. 진짜 싫음)


[ 오늘의 교훈 ]

1. 음 오늘 얘기하고 싶은 거 이미 앞에서 다 말해버렸네?

  그럼 이제 다시 프로그래머스 문제 풀러 갑니다.