그리고 AJAX라는 비동기 통신의 규칙을 일관되게 정하게 되는 REST API가 정리되었다.
이거 말고도 네트워크에 대해서 더욱 이해하기 위해 OSI 7계층을 보고 통신이 어떤 식으로 이루어지는지에 대해서도 공부하게 되었다. 사실 이 7계층은 시간이 지나면 맨날 까먹는다...😓 벌써 3번째 공부하는 중. 크게 4계층 전송계층과 7계층의 응용계층만 잘 알고 있다면 대략적인 개발을 이해하는데 큰 어려움이 없는거 같다.
REST API에서 REST는 “Representational State Transfer”의 약자로 로이필딩이 웹에서 데이터를 서버와 주고 받기 위한 요청과 응답의 HTTP 프로토콜을 잘 활용할 수 있도록 고안해낸 규칙과도 같은거다.
이 다섯 가지만 알면 HTTP 통신하는데 어려움이 없다. 이 중에 OPTIONS라는 특이한 메소드가 보이는데. 이 메소드는 Pre Flight Request라고도 불린다. 뭐 하는 메소드일까??
이걸 알려면 현재 브라우저가 유저를 보호하기 위해 고안된 보안체계 CORS에 대해서 알고 있어야 한다.
CORS란 Cross-Origin Resource Sharing의 약자로, 교차 출처 리소스 공유라고도 한다.
CORS는 헤더를 통해 도메인을 기록하게 되는데 이 도메인A가 도메인B에 서버에 어떠한 요청을 하게 되면 동일하지 않다고 판단하고 브라우저가 이 통신을 막는다. 여기서 특이한 건 클라이언트나 서버가 막는 게 아니라 브라우저가 판단하고 막는 거라는 데에 특징이 있다. 브라우저가 왜 막는 거지라고 생각하면 간단하다. 그 이유는 악의적인 해킹으로부터 사용자를 보호하기 위해 브라우저가 자발적으로 막는 거다.
그러므로 개발을 할 때 서버와 클라이언트의 도메인이 다르다고 한다면 서버 쪽에서 클라이언트 도메인을 허용해주기만 하면 된다.
TCP 통신을 할 때 3-way-handshake 라는 안전한 통신을 하기 위한 프로세스가 존재하는데,
OPTIONS도 비슷하다고 보면 된다. 먼저 OPTIONS 요청을 통해 내 도메인이 서버에게 접근 가능한지에 관해서 물어보고 서버가 접근할 수 있다고 판단이 된다면 OK 사인과 함께 다시 실질적인 CORS 통신이 이루어진다. 말 그대로 메소드의 이름이 왜 OPTIONS인지 알 수 있는 대목이다.
이 부분은 잘 몰랐던 건데 이번 기회에 알 수 있게 되어서 상당히 득이 되었다. 항상 잘 알지도 못하고 Node.js 로 통신하고 있었는데 요청 헤더에 OPTIONS라는 메소드가 뭐지 하면서도 그냥 작동되니까 넘어가게 되었던 부분이었기 때문이다.
리액트의 Hooks 하나인 Effect와 관해 공부했던 날이다. 항상 Side Effect 라는 말은 비전공에 입장에서 생소한 단어였는데, 간략하게 에러라고만 알고 있었다. 개발에서 에러를 지칭하는 말들이 여러 가지가 있는데 Side Effect, bug, Exception 등이 있다.
Side Effect란, 사전적 의미로 원래의 목적과 다르게 다른 효과 또는 부작용이라고 한다. 개발에서는 함수 내부의 구현이 함수 외부에 영향을 줄 때를 말한다. 즉 개발 단계에서 의도치 않은 에러를 일으킬 수 있는 부분이다. 이걸 Bug라고도 표현한다.
왜 Side Effect가 발생하는 걸까?? 이유는 결국 코드를 짜는 주체는 사람이기 때문이다. side Effect가 발생하는 건 눈의 보이지 않는 일련의 동작을 사람이 논리적으로 구현을 하다 보니 발생하게 된다. 당연한 말이긴 하지만 자잘한 에러를 만날 때에도 항상 떠오르는 말이 있는데,
"컴퓨터는 잘못이 없다. 내가 잘못한거다"
Side Effect를 극복하는 방법은 뭐가 있을까?? 대체로 정적인 타이핑의 언어와 디자인 패턴 혹은 프로그래밍 패러다임을 통해 개선해 나아갈 수 있다. 대표적으로 함수형 프로그래밍이라는 패러다임이 있는데. 함수형 프로그래밍이란 오직 함수만이 결괏값에 영향을 주는 함수들을 사용해 개발하는 방법인데. 함수의 동작이 외부에 어떠한 값도 변경하지 않고 일관된 결괏값을 반환하는 하기 때문에 Side Effect를 줄일 수 있는 것이다. 이러한 함수를 순수 함수(Fure Function)이라고도 한다.
Exception 이란, 사전적 의미로 예외라고 말한다. 개발하면서 예외란 개발자가 로직을 구현하면서 예상할 수 있는 예외를 제외한 예상 할 수 없는 예외를 Exception이라고 말한다.
예를 들어 설명하자면, 로그인 구현기능에는 프론트엔드에서 예외 처리를 해야 하는 경우가 대부분인데 이메일의 형식이 다르다든지, 회원가입을 할 때 2차 비밀번호가 1차 비밀번호와 다르다던지의 예외 처리는 프론트엔드 쪽에서 처리를 해줘야 서버의 부담을 줄일 수 있다. 하지만 이런 걸 제외하고 예상할 수 없는 예외들이 있는데 그런 것 들을 Exception이라고 말한다. 막상 써놓고 보니 예상할 수 없는 예외라고 말을 했기 때문에 예를 들기 쉽지 않다.
UseEffect는 리액트에서 어떠한 상태가 변경됬을 때 함수를 실행하게끔 로직을 만들 수 있는 리액트 함수이다.
확실히 섹션2가 나의 성장에 굉장한 도움이 되었다는 사실에 기쁘다. 또 코드스테이츠를 통해서가 아닌 개인적으로 공부할 때 난감했던 부분들이 있었는데, 엑기스처럼 뽑아서 핵심 원리만 알려주는 코드스테이츠의 커리큘럼이 새삼 대단하다고 느꼈다.👍