카테고리 없음

렉시컬 스코프(Lexical scope)와 HTTP 메소드

인재재 2024. 6. 17. 18:45

렉시컬 스코프란(Lexical Scope)란?

직역해석하자면 어휘적 범위라고 하는데 매끄러운 느낌은 아니라 정적 범위, 정적스코프라고 해석하고 , "정의된 특정 구역 내에서 사용하는 스코프" 라고 이해하는 것이 제일 편한 것 같았습니다.

 

렉시컬 스코프란, 함수를 어디서 호출하는지가 아닌 어디에 선언하였는지에 따라 결정되는 것을 말합니다.

즉, 함수를 어디서 선언하였나에 따라 상위 스코프를 결정한다는 것을 뜻합니다.

 

아래 코드를 보며 더욱 자세히 알아봅시다.

var x = 1;

function foo() {
	console.log(x); 
}

function bar(){
	var x = 10;
	foo();
}

bar();  // ?

x는 1로 출력 됩니다.

bar안에서 foo를 호출했으니, x 값을 bar안에서 찾는 것이 아닌가라고 생각할 수 있겟지만, 그렇지 않습니다.

함수를 어디서 호출하는지가 아닌 처음에 어떤 스코프에 선언하였는지에 (var x  = 1) 따라 변수의 실제 값이 결정됩니다.

즉, 스코프란 코드를 실행하면서 바뀌는 것이 아닌 처음 작성한 그 스코프로 결정됩니다.

따라서, foo는 bar에서 호출되든 어떤 함수 안에서 호출되든지 상관없이 무조건 자신의 스코프를 보고 그 이후엔 전역 스코프를 찾습니다.

 

그러면, global이 아닌 bar로 출력되게 하고 싶으면 어떻게 할까?

bar함수 안에서 text 변수를 새로 선언할 것이 아니라,

맨 처음에 전역범위에 선언했던 text변수의 값을 바꾸어 주면 된다.

 

전역으로 선언한 x의 값을 변경시켜주려면새로 선언을 하는 것이 아니라 아래 코드처럼 맨 처음 선언했던 x의 값만 변경시켜주면 됩니다.

var x = 1;

function foo() {
	console.log(x); 
}

function bar(){
	var x = 10;
	foo();
}

bar();  // 10 출력!

 

여담으로, 앞서 설명한 것과 반대되는 개념을 가진 동적 스코프는 함수를 어디서 호출하는지에 따라 결정되는데 렉시컬스코프처럼 일반적이고 다수의 프로그래밍 언어가 사용하지 않고, Bash Scripting이나 Perl 의 일부 모드와 같은 몇몇 언어에서 사용하는 방식이라 합니다. 

 

HTTP 메소드

 

클라이언트, 서버 구조에서 요청과 응답이 이루어지는 방식입니다.

즉, 서버가 수행해야 할 동작을 지정해 요청을 보내는 방법이라고 할 수 있습니다.

 

메서드 이름 설 명
GET 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
POST 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
PUT 특정 리소스를 덮어쓰기 합니다. (해당 리소스가 없으면 생성)
PATCH 특정 리소스를 부분 변경 합니다. (PUT은 전체 변경이지만, PATCH는 일부만 변경)
DELETE 특정 리소스를 삭제합니다.
HEAD GET과 동일하나 메시지 부분(Body)를 제외하고, 상태 줄과 헤더만 반환 합니다.
OPTIONS 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명합니다. (주로 CORS에서 사용)
CONNECT 대상 자원으로 식별되는 서버에 대한 터널을 설정합니다.
TRACE 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행합니다.

 

 

HTTP 메서드 속성??

HTTP 메소드는 속성에는 다음과 같이 3가지 속성이 있으며 해당 속성별로 메서드를 구분할 수 있습니다.

 

Safe Methods(안전한 메서드)

호출해도 리소스를 변경하지 않는다는 특징을 갖습니다.

( GET, HEAD, OPTIONS, TRACE )

 

Idempotent Methods(멱등성)

한 번 호출하든 여러번을 호출하든 결과는 똑같은(멱등성) 특징을 갖습니다.

(GET, PUT, DELETE, POST)

Cacheable Methods(캐싱 가능)

응답 결과를 서버에 캐싱해서 사용해도 되는 메소드를 의미합니다.

(GET, HEAD, POST, PATCH)