15. handler / .find() / 비교연산자(==)/ map과 undefined

JSLEE·2024년 5월 1일

handler란?

공부를 하다보면, handler 에 대한 용어를 자주 접할 수 있다.
핸들러란 쉽게 말해 특정 이벤트가 발생했을때 실행할 수 있는 함수이다.
예를 들어 우리가 express에서 많이 사용했던,

app.get('/', function )

callback 함수 또한, URL을 요청받는 이벤트가 발생할 때 작동하는 함수이므로, 핸들러라고 할 수 있다.


JSON array와 .find 메소드

우리가 공부한 json 형식은 다음과 같았다.

	myData = {
    "name" : "kim",
      "age" : 25
    }

한 번에 많은 json 값을 가진 데이터는 어떻게 보관할까?
json 객체들을 배열에 담으면 된다.
예를 들면, 다음과 같이 작성할 수 있다.

const data_arr = [
  {"name":"kim" , "age" : 25} , 
  {"name":"lee" , "age" : 32} , 
  {"name":"choi" , "age" : 18} 
]

위와 같은 데이터를 우리가 서버에서 가지고 있다고 해보자.
클라이언트가 request를 보냈는데, name이 kim인 사람의 객체를 respond해달라고 한다.
어떻게 해야할까?

이 때 사용할 수 있는 것 중 하나가 .find(조건) 메소드이다.
이 메소드는, 배열 내를 돌면서 조건에 맞는 값을 뱉어낸다.
사용 예시는 다음과 같다.

const result = data_arr.find(element => element.name === "kim") 
console.log(result) // {"name":"kim" , "age" : 25}

element는 data_arr 의 객체 하나하나를 의미한다.
element.name은 객체.name을 의미한다.
이를 이용해서 res.json(result) 를 통하여 원하는 객체를 찾은 후, respond 해줄 수 있을것이다.

여기서 궁금증이 생겼다.
만약 data_arr에 객체가 3개가 있는것이 아니라, 10만개가 있다면,
이걸 다 하나하나씩 꺼내서 비교하고, 확인하는 데에는 엄청난 시간이 소요될 것이다.
따라서, 데이터베이스에서 인덱싱과 같은 데이터 관리 시스템을 이용한다고 하는데,
이 부분에서는 좀 더 조사해보고 공부해볼 계획이다.


비교연산자 (== , ===)

Javascript에서는 두 연산자의 결과값이 다르게 출력될 때가 존재한다.
두 연산자의 이름도 다르다.
== : Equal Operator
=== : Strict Equal Operator

이름에서 알 수 있듯이, ===는 비교하는 데에 있어서 엄격한 기준으로 비교한다.

예를 들면 다음과 같다.

console.log(1 == "1") // true

console.log(1 === "1") // false
console.log(1 === 1) // true

위 코드에서 알 수 있듯이, ===는 완벽하게 일치하는 값만 true 라고 반환한다.
따라서, equal 비교연산자를 쓸 땐 원하는 목적의 결과값을 얻으려면 주의해서 사용해야한다.


map자료형과 undefined

이전 포스트에서 db를 map자료형으로 만들어서 사용했었다.
map자료형을 사용할 때 주의점은, db에 들어있는 객체나 값이 없어도 undefined인 상태가 아니라는 것이다.

let db = new Map()
console.log(db) // {} 출력
console.log(db ? '참' :  '거짓' ) // '참' 출력

이는 우리가 express에서 GET 메소드를 사용해서 조회를 할 때,
map 자료형인 db가 데이터를 가지고 있지 않더라도 respond가 정상적으로 될 수도 있다는 뜻이다.

이런 형태로 작성하면 안된다 라는 뜻이다.

app.get('/', (req,res) => {
  if (db) { // 이 부분에서 db가 비어있는 상태여도 참이기 때문에 원하는 결과가 아님.
  	res.status(200).send("전체 조회입니다.")
  } else {
  	res.status(404).send("조회할 항목이 없습니다.")
  }
})

즉, map 을 조건식에서 사용하게 되면 항상 참이 나오기 때문에 주의해야한다.


HTTP status code

위 코드에서 갑자기 res.status()라는 메소드를 사용했다.
이것은 http 프로토콜의 상태 코드(HTTP status code)라고 한다.
구글에 검색해보면 쉽게 찾을 수 있다.
HTTP status code

즉, 데이터에 대한 처리가 성공적으로 수행되었다면 2xx을 사용하고,
오류가 발생했는데 클라이언트 측의 문제가 원인이라면 4xx를 사용하고,
오류가 발생했는데 서버측의 문제가 원인이라면 5xx를 사용한다.

보통 GET 메소드는 200을,
POST 메소드는 201의 status code를 가진다는 것을 기억하면 되겠다.

우리가 흔히 보는 404 error 메시지도, 클라이언트가 요청한 리소스를 서버에서 찾을 수 없기 때문에, 클라이언트는 해당 request를 올바르게 수정해야한다는 의미를 가진다.

profile
공부한 내용들을 정리하기 위해 사용하는 블로그입니다.

0개의 댓글