본문 바로가기

JavaScript

(7)
Cookie HTTP only 옵션과 XSS 사실상 우리는 쿠키 없이는 아무것도 못하는 수준이 되어버렸다 소셜 로그인부터 시작해서 인강 사이트 로그인까지 쿠키설정 안해놓으면 사실상 인터넷을 못한다고 보면된다. 그런 만큼 쿠키 관련해서는 기초적인 보안부터 신경쓰는것이 당연할 지경이다. 그런데 쿠키는 생각보다 굉장히 쉽게 접근이 가능하다 지금 당장 크롬 개발자도구 콘솔에서 document.cookie 를 입력하고 엔터를 쳐보라 쿠키값이 그대로 나오게 된다 이렇게 자바스크립트 코드로 타인의 웹페이지에서 장난질을 치는 행동을 Cross Site Scripting, XSS라고 부른다. 그럼 이 장난질을 못치게 막는 방법들이 있을 것인데 그 대표주자가 'Http Only' 옵션을 주는 것이다. 즉 나쁜사람들이 저렇게 콘솔 열어서 장난치게 하지 말고 http ..
res.json과 res.send 그리고 Etag 1. 조금이라도 더 효율적인 Express를 위하여! 웹개발 공부를 하면서 느끼는 것은, 사실상 경제학의 뿌리가 아닐까 싶기도 하다 한정된 자원을 어떻게 효율적으로 배분할 것인가? 라는 경제학의 근본 명제가 거의 비슷하게 적용된다. '한정된 리소스를 어떻게 효율적으로 사용할 것인가?' 그런 의미에서 res.send와 res.json을 알아보려 한다. 사실 거의 JSON으로 정보를 주고받기 때문에 거의 무지성 수준으로 res.json을 사용하지만, 왜 res.send 대신 사용하는지는 생각해볼 시간이 없었던것 같다. 다음 코드는 res.send의 소스코드이다 깃헙에 올라온 소스코드인데, switch문으로 불리언,넘버,오브젝트 검사를 하면서 마지막이 this.json으로 빠지는 부분이 있다. res.json..
자바스크립트 클로저(Closure) 알아보기 위키백과에서의 정의는 다음과 같다 컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩 하기 위한 일종의 기술이다 https://ko.wikipedia.org/wiki/%ED%81%B4%EB%A1%9C%EC%A0%80_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 클로저 (컴퓨터 프로그래밍) - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩..
호이스팅과 type of null 버그에 대해 알아보자 1. 호이스팅은 호이스트를 떠올리면 쉽다 저 사진에 있는게 호이스트다(Hoist) 좀 더 쉬운 말로는 크레인이라고 생각하면 되는데, 어쨋건 호이스트는 어떤 물건같은것을 끌어올리는 역할을 하는 기계이다. 자바스크립트의 호이스팅은 자바스크립트 Parser가 하는 일종의 '끌어올리기'를 의미한다 console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력 var num = 6; 자바스크립트의 웃긴 점은 선언을 하지도 않은 변수를 사용해도 에러가 안난다는 것이다. 해당 예제에서는 var num = 6 이란 선언 + 할당 부분을 끌어올린 것이다. 이때 var의 특성이 나오는데, 일단 var는 undefined로 우선 초기화가 되기 때문에 이 출력 결과가 나오는 것이다. 즉 에러를 ..
Javascript - 자바스크립트는 어떻게 실행되는가? (AST 등) 자바스크립트 초보자와 숙련자를 가르는 질문 하나. (라고 한다) Q : 자바스크립트는 인터프리터 언어입니까? 초보자 A : 네 자바스크립트는 대표적인 인터프리터 언어로서 한줄씩 위에서부터 컴퓨터가 읽어나가는 방식으로 되어있고, 컴파일러 언어는 자바 예로 들수 있습니다 두 방식의 차이점은 어쩌고저쩌고.... (부끄럽게도, 이 글 쓰기 전 본인의 의견이다) 숙련자 B : 어... 일반적으로 그렇게 분류가 되기는합니다만, 상황에 따라 그렇지 않을수 있습니다. 인터프리터와 컴파일러가 혼합되었다고 보는게 더 정확한 의견입니다 --------------- 자바스크립트를 접한지 만 1년이 거의 다 되어가지만 정작 어떻게 내가 작성한 코드가 실행되는지는 생각해본적이 없었다. 물론, 자바스크립트 개발자가 로우레벨단을 뜯..
This binding 과 화살표 함수 공시생 시절의 binding이란 이거였다. 아마 요즘도 노량진이나 신림동 인쇄하는곳 가면 스프링 바인딩 해달라고 하면 일반 책들을 저렇게 만들어줄 것이다. 딱 봐도 바인딩은 '뭔가를 연결하는 것' 이라는 느낌이 오지 않는가? 바인딩에 관한 자세한 정보는 아래 블로그를 참조하면 될 것 같다. https://velog.io/@proshy/JS-%EC%83%81%ED%99%A9%EC%97%90-%EB%94%B0%EB%A5%B8-this-%EB%B0%94%EC%9D%B8%EB%94%A9 최근 하고 있는 테스트코드 관련 학습에서 이 this 바인딩과 화살표 함수 관련한 적절한 예가 나와서 올려보고자 한다. tweetRouter 함수이다. (외부에서 tweetController를 받아온다) tweetControll..
반복문 중괄호 생략, 한줄에 코드 두줄(?)넣기 JS뿐만 아니라, 다른 언어에서도 반복문 {} 은 생략가능! 예를들면, for(let i = 0; i < array.length; i++) { console.log('hello world!') } 라는 간단한 for 반복문이 있다고 한다면, 그냥 for(let i = 0; i < array.length; i++) console.log('hello world!') 써버려도 상관 없다는 소리이다. 사실 이게... 논리적으로도 맞는 소리이다. 하지만 주의사항이 있는데, 이걸 누군가는 '오 깔끔하네' 라고 할수도 있고, 아니면 두줄로 나누는 대신 한줄이 길어지니 '그냥 줄을 내려버리자' 고 기존의 방법을 고수할 수도 있다. 현업에서는 이런것도 아마 코딩스타일에 따라 다를텐데, 사수의 스타일에 맞춰주도록 하자. ..