180219~0225-TIL

Reading time ~4 minutes

19일 한일

- 초보 개발자 모임의 뉴스레터에 2017년에 작성한 TIL이 소개 됨

- 자바스크립트를 깨우치다 읽는 중

19일 느낀점

  • 명절 때 창천향로님의 “스프링부트로 웹 서비스 출시하기” 시리즈에 7번째인 Nginx부분을 내가 작업하던 프로젝트에 적용하는 과정을 포스팅을 하고 해당 부분에 대한 문의를 했었는데 그러다 내 작년 회고를 보셨는지 페이스북 페이지와 메일링 내용에 포함이 되었다. 아무래도 내가 쓴 글이 널리 퍼지니까 신기하기도 하고 아직은 부끄럽기도 하다. 사실 해당 글이 내 스스로에 대한 회고도 있지만 어떻게 노력을 해 나갔는지 상세하게 적어나가면서 다른 분들한테도 자극이 되는 글이 되길 바랬다. 많은 분들이 봐 주신 것 같은데 그런 분들이 조금이라도 있고 열심히 노력하셔서 잘 되신다면 좋을 것 같다. 근데 아무래도 설득력이 있으려면 나부터 잘 돼야 할 것 같은데 흐음… 계속 힘내보자.

  • 자바스크립트는 철저히 사용자 입장으로 간단한 DOM 조작, AJAX 처리만 가능 한 정도로 학습을 했지 제대로 공부했다고는 할 수 없는 상태다.(15퍼즐 정도까지만 겨우 만드는 실력) 정확히는 this, 클로저, 호이스팅(맞나?) 이런 개념들이 있고 많이들 헷갈려 한다는 것만 주워들은 상태다. 아무리 백엔드 분야를 공부하기로 생각했어도 프론트적인 부분, 특히 자바스크립트는 일정 부분 공부해야겠다는 생각은 했지만 해야 할 것들이 한두 개가 아니니 우선순위를 높게 두진 않고 미뤄둔 부분이었는데 오늘부터 조금씩 학습해 나가고 있다. 그래도 너무 큰 욕심은 안 내고 있고 중요한 개념들만 무엇인지 익히는 정도가 목표다. 백과 프론트 당연히 완벽한 건 불가능하고 일정 수준까지라도 두 마리의 토끼를 다 잡기엔 현재의 내 능력도 그렇지만 결정적으로 시간이 부족하다. 선택과 집중이 필요한 부분이다.

  • 명절 때부터 살짝 느끼고는 있었는데 약간의 몸살기가 있는 것 같다. 책을 읽을 때 집중이 안 된다.(좋은 핑계 꺼리기 생긴듯??) 옛날 같았으면 절대 병원은커녕 약국도 안 갔을 것 같은데 컨디셜 조절을 해야 하는 상황이라 내일도 이러면 후딱 병원을 가봐야겠다.


20일 한일

- 자바스크립트를 깨우치다 읽는 중

20일 느낀점

  • 밤코 도중 너무 피곤해서 한 시간 조금 안되게 잔듯 하다 주말부터 몸 컨디션이 안 좋았는데 잠깐이긴 해도 오랜만에 낮잠(?)을 잔 덕분인지 컨디션이 좋아졌다.

21일 한일

- 자바스크립트를 깨우치다 읽는 중

  • this

    this 키워든느 함수를 포함하고 있는 객체에 대한 참조이다. 객체의 속성으로 포함된 함수(즉, 메소드)에서는 this를 사용해 “부모” 객체를 참조할 수 있다. 함수를 전역 스코프에서 정의했으면 this의 값응ㄴ 전역 스코프 객체(웹 브라우저의 window)가 된다.

    <!DOCTYPE html><html><meta charset="UTF-8"><body><script>
    
    var myObject1 = {
      name: 'myObject1',
      myMethod: function(){console.log(this);}
    };
    
    myObject1.myMethod();   //'myObject1'이 기록된다.
    var myObject2 = function(){console.log(this);};
    myObject2();    // Window가 기록된다.
    
    </script></body></html>
    
  • 함수 호이스팅

    함수는 실제로 함수가 정의되기 전에도 호출할 수 있다. 조금 이상하게 들리겠지만 이러한 특성을 익혀두어서 잘 활용하거나 최소한 이런 동작을 만났을 때 이유 정도는 알고 있어야 한다.

    <!DOCTYPE html><html><meta charset="UTF-8"><body><script>
    
    //예제 1
    var speak = function() {
      sayYo();    // sayYo()는 아직 정의되지 않았지만 호출할 수 있다. 'yo'가 기록된다.
      function sayYo() { console.log('Yo');}
    }();    // 함수 호출
    
    //예제 2
    console.log(sum(2, 2));   // 아직 정의되지 않은 sum()을 호출한다. 여기서도 호출이 가능하다.
    function sum(x, y) { return x + y;}
    
    </script></body></html>
    

    자바스크립트는 코드를 실행하기 전에 함수 선언문을 먼저 해석하고 먼저 실행 스택/컨텍스트에 추가한다. 그래서 어디서 코드를 실행하든 항상 함수가 정의된 듯 동작한다. 그러나 “함수 표현식”으로 정의된 함수는 호이스트(hoist)되지 않는다. “함수 선언문”만 호이스트된다.

21일 느낀점

  • 최근 자바스크립트에 대해 공부하면서 궁금했던 용어인 호이스팅에 대해 알게 됐다. 아주 간단히는 예전 해당 용어를 들었을 때 잠깐 보긴 했지만 지금 읽는 책의 구성을 따라 순차적으로 배워 나가다 보니까 좀 더 잘 이해가 되는 것 같다. 그러긴 해도 지금은 어디까지나 개념적인 부분만 글로 무엇이 있는지에 대해서 학습하는지라 자바스크립트를 잘 아냐고 하면 그건 별개의 문제일 것 같다. 단지 나중에 자바스크립트를 본격적으로 공부해야 할 경우나 기초적인 지식이 필요한 부분이 있을 때를 위한 대비의 의미가 크다.

22일 한일

- 자바스크립트를 깨우치다 읽는 중

22일 느낀점

  • 사실 얇은 책인데 잘 안 읽히고 있다. 뭔가 전부터 동물 책은 잘 안 읽히는 경향이 있긴 하지만 이번엔 어려워서라기보다는 취업 준비 관련해서 이런저런 생각을 정리하느라 집중이 덜 된 것 같다. 아무래도 집중이 덜 될 수 있는 시기이긴 하지만 공부하는 버릇이 흐트러지지 않게 조심하자. 공부가 잘 될 때도 있고 안될 때도 있는 건데 지금이 후자의 시기인 거뿐이니까.

23일 한일

- 네이버 오픈소스 세미나 참석

23일 느낀점

  • 오픈소스에 기여해 보고 싶다는 생각은 하고 있지만 스스로 허들을 만들고 어려운 일이라고 치부했던 것 같다. 그러다 오늘 세미나를 통해 그 허들을 낮추게 된 거 같다. 사실 겁먹은 이유 중에 컨트리뷰션이 거절당하면 어쩌지도 있었는데 아웃사이더님의 첫 컨트리뷰션 내용을 들으며 용기가 생겼다. 내 컨트리뷰션에 대한 응답이 없을 수도 거절당할 수도 있는 건 당연하다. 당연한 사실을 받아들이니까 확실히 편해진 것 같다.

    게다가 오픈소스가 너무 거대해서 구조를 이해하기 힘들 경우 취할 수 있는 조언으로 초기 버전을 본다던지 이해가 안 되는 코드 부분이 그렇게 짜인 순간 혹은 이슈를 확인하면 좋다는 것도 좋은 조언이 된 것 같다.

  • 네이버에 가기 전에 서현역에서 잠시 서점에 들렀다가 마틴 파울러의 리팩토링 책을 사버렸다… 봐야지 생각하고 사두고 아직 다 못 본 책이 많아서 더 안 사려고 했는데 충동구매…. 이놈의 책 욕심을 좀 버려야 하는데. 나중에 취업을 하고서 업무적으로 필요한 부분을 공부하느라 사는 책들 말고는 이미 충분히 좋은 책들을 많이 사뒀으니 사둔 책들부터 다 읽어보도록 해야겠다.


24일 한일

- 자바스크립트를 깨우치다 읽는 중

  • 스코프와 클로저

    자바스크립트에서는 var 키워드 없이 변수를 선언하면(설령 함수 스코프에서 선언했다 하더라도) 지역 스코프가 아닌 전역 스코프에 변수가 추가된다.

24일 느낀점

  • 스코프와 클로저에 대해서 봤는데 책에서도 언급했다시피 클로저는 단순화시켜서 간단히만 소개했다고 했는데, 일단은 저자가 원한 것처럼 간단한 개념 부분은 무엇인지 본 것 같은데 스코프도 그렇고 클로저도 실제 내가 자바스크립트로 코딩을 한다던지 다른 사람을 코드를 분석할 때 상당히 헷갈릴 것 같다.

25일 한일

- 경기창조혁신 센터에서 학습…까진 아니고 간단히 인터넷 자료들을 보면서 휴식

  • equals 관련
    String isNull = null;
    
    System.out.println("up");
    
    if ("문자열".equals(isNull)) {
    }
    
    System.out.println("middle");
    
    if (isNull.equals("문자열")) {
    }
    System.out.println("down");
    

    출력

    up
    middle
    Exception in thread "main" java.lang.NullPointerException
    	at mak.StringEquals.main(StringEquals.java:14)
    

    이전부터 "문자열".equals(isNull)isNull.equals("문자열") 중 어느 것이 나을까 고민하면서 전자의 형태를 따르고 있었다. 그러다 오늘 본 글 중 하나에서 나온 얘기가 후자 같은 경우는 예외가 발생해 버리기 때문에 전자가 좀 더 안전하다는 것이다. 생각해보니 맞는 것 같다. 차후 좀 더 생각해 볼 여지는 있겠지만 일단은 이와 같은 이유로 전자의 형태로 작성 할 것 같다.

25일 느낀점

  • 오늘처럼 간단한 내용은 TIL에다가 올린 경우들이 있었는데 좀 더 정리해서 포스팅했으면 어땠을까 싶다. 그건 그렇고 오늘은 좀 쉬는 느낌으로 경기창조혁신 센터를 갔는데 저녁쯤부터 사람들이 없다 싶었더니 집 가서 보니 올림픽 폐막식… 스포츠를 많이 보는 편은 아닌데 이번 올림픽에선 컬링은 재밌게 본 것 같다.