(React들어가기전)크로스 브라우징,웹 통신,Node.js,Package-lock.json
React를 공부하기 전 기초 지식을 먼저 알아보자. 크로스 브라우징,JS_웹 통신,Node.js, Package-lock.json 등을 알아 보겠다.
크로스 브라우징
브라우저의 엔진이 다름을 고려하여 모든 브라우저에서 동일하게 동작할 수 있도록 작성하는 기법
- 브라우저마다 엔진이 달라 HTML5, CSS, JS가 제대로 작동하지 않을 수 있음.
- 특정 브라우저에서 JS 코드 에러, CSS 깨짐 등이 발생 가능함.
- 예: IE 등 구형 브라우저는 W3C 웹 규격을 완벽히 따르지 않아서 이런 문제가 생김.
- Babel 같은 크로스 브라우징 도구가 이런 문제를 해결해줌.
- 이와 유사하게 응용 프로그램에서는 크로스 플랫폼이 있음.
웹 통신
HTTP 통신의 구조
HTTP는 요청과 응답으로 구성된 데이터 교환 규칙
- 클라이언트가 HTTP Request를 서버로 보내면, 서버는 HTTP Response를 돌려주는 구조.
- HTTP는 stateless(상태 저장 안 함)이기 때문에 데이터가 필요하면 매번 요청/응답을 해야 함.
- HTTP는 StartLine, Headers, Body 세 부분으로 나뉨.
- StartLine: 시작라인 (Request Line, Status Line 등).
HTTP 요청 메소드
GET, POST, PUT, PATCH, DELETE, OPTIONS 등의 메소드가 있음
또 Headers, Body를 통해 추가적인 데이터와 상태 등 첨부하여 보낼 수 있음
- 요청 메소드는 요청의 역할을 정의함.
-
GET 요청: 서버에서 데이터를 가져올 때 사용.
- 브라우저의 주소창에 입력하는 행위가 GET 요청임.
-
POST 요청: 데이터 생성/수정/삭제 작업에 사용.
- 회원가입, 로그인 등 중요한 데이터 작업에 쓰임.
HTTP 응답 구조
응답 상태 코드, Headers, Body로 구성됨
- 응답 상태 코드: 서버의 응답 상태를 나타냄 (200~500대).
- 200대: 정상
- Headers에는 서버가 저장하는 값 (쿠키, 세션 등)이 포함될 수 있음.
- GET 요청의 경우 Body에는 HTML, CSS, JS가 포함되는 경우가 일반적.
- 요청/응답 데이터는 반드시 HTML일 필요는 없음.
브라우저에서 요청(행동 예시)
www.google.co.kr 접속
- 브라우저가 DNS에서 www.google.co.kr의 IP 주소를 받아옴.
- 해당 IP 주소로 HTTP/GET 요청을 보냄.
- 서버는 HTML, CSS, JS 파일을 200 상태 코드와 함께 응답.
- 브라우저가 HTML, CSS, JS를 해석해 렌더링.
- 구글 홈페이지를 사용자에게 보여줌.
비동기 통신
요청 후 응답을 기다리지 않는 통신 방식.
- 예전 방식: 요청 후 응답이 올 때까지 대기, 새로고침 필요.
-
현재 방식: 비동기 통신 덕분에 새로고침 없이 데이터 요청 가능.
- 예: 인스타그램에서 페이지 이동 없이 좋아요 클릭 가능.
- 단점: 요청/응답 순서가 보장되지 않음.
JavaScript 런타임 환경 - Node.js
런타임 환경 = 실행 환경(모든 언어에서 통일된 말)
Node.js는 자바스크립트를 브라우저가 아닌 환경에서 실행할 수 있게 해주는 런타임 환경
- 프레임워크라 알려져 있으나 C언어의 VS(gcc) 또는 Java의 Eclipse(JVM, JRE)와 같은 역할
- 또한 서버 언어로 알려져 있으나, 이 또한 Node.js의 기능 중 하나
- Express.js, Next.js 프레임워크가 서버 개발로 유명
- 참고로 브라우저처럼 ECMAScript사양 따르나, 브라우저와는 환경이 다르므로 차이 있음
- 예로 브라우저에서만 사용하는 alert메소드라든지 등..
Node.js의 특징
- 비동기 이벤트 기반.
- 싱글 쓰레드로 작동하지만 내부적으로 멀티 쓰레드로 구현되어 있음.
- 오류 처리: 예외를 처리하지 않으면 앱이 종료될 수 있음.
- 빠른 개발에 유리하지만, 대규모 프로젝트에는 적합하지 않을 수 있음.
Node.js와 브라우저
- import와 require를 통해 모듈 불러오는 차이점 기억
Package-lock.json과 Package.json차이
version range
- “express”: “~3.5.1”처럼 특정 버전 이하를 나타내는 방식.
- package.json: version range를 사용.
- package-lock.json: 정확한 버전 정보를 사용.
문제점
- 서로 다른 버전을 사용할 경우 버전 충돌로 코드가 실행되지 않을 수 있음.
- 정확한 버전 사용이 필요함.
해결 방법
- package-lock.json은 정확한 버전을 기록해 설치 문제를 방지함.
- package-lock.json이 있다면 npm install로 모듈을 설치할 때 package.json이 아닌 package-lock.json을 이용해 자동 설치
문제 있어도 version range를 왜 써?
만약 package.json에 버전명을 정확히 입력한다면 아주 작은 버그 수정이 이루어질 때마다 매번 버전 업그레이드를 package.json에서도 수정해야 하기 때문. 이를 version range를 사용해 수고를 덜고 있었던 것이다.
댓글남기기