// named exports 사용// calculator.jsexportconstsum=(x, y)=> x + y;exportconstmultiply=(x, y)=> x * y;
named exports : 이름을 지정하여 내보내기
named exports는 명명된 이름으로만 모듈을 불러올 수 있음
여러 개의 함수, 변수, 또는 클래스 등을 동일한 모듈에서 내보내기 가능
import{ sum, multiply }from"./calculator";import{ sum as sum_func }from"./calculator.js";// 다른 별칭으로 수정
console.log(sum(2,4));// 출력: 6
console.log(sum_func(2,4));// 출력: 6
사용할 때 중괄호({})를 사용하여 각각의 항목을 명시적으로 가져와야 함
as를 사용해 명명된 이름을 다른 별칭으로 수정할 수 있음
<default exports (기본 내보내기) 사용>
```javascript
// default exports 사용
// module.js
export default (x, y) => x + y;
// ----------------------------------------------------
// module.js
const subtract = (a, b) => a - b;
export default subtract;
```
default exports : 별도의 이름을 저장하지 않고 내보냄
모듈 당 하나의 기본 내보내기만 할 수 있음
// index.jsimport sub from"./module";
사용할 때 중괄호({}) 없이 가져와야 함
이름이 없는 export이므로, import할 때 내가 지정한 이름을 사용 가능
<혼합 사용>
```javascript
// module.js
const subtract = (a, b) => a - b;
export { subtract as default, add, multiply };
```
```javascript
// index.js
import subtract, { add, multiply } from "./module";
```
기본적으로 subtract가 기본 내보내기로 사용
add와 multiply는 이름이 있는 내보내기로 사용
이러한 모듈 시스템은 코드를 모듈화하고 재사용성을 높이는 데 도움이 됨
- ESM 특징
top-level await을 지원하므로 module loader가 비동기 환경에서 실행됨
스크립트를 바로 실행하는 CJS와 달리, import / export 구문을 찾아 스크립트를 파싱함
파싱단계에서 import / export 에러를 감지 할 수 있음
모듈을 병렬(비동기)로 다운로드하지만 실행은 순차적(동기)으로 함
import / export를 지원하지 않는 브라우저가 있기에 ESM 사용을 위해 번들러가 필요
1-4. HTTP 서버 구축
- HTTP 모듈 이용하기
HTTP 모듈은 Node.js의 built-in 모듈 (코어 모듈)로서 해당 모듈을 사용하여 서버를 구현할 수 있음
3000번 포트 이용하여 로컬 호스트에 브라우저 접근 시, “hello, world” 문구 출력하기
// HTTP 모듈로 서버 만들기 예시// 모듈 가져오기const http =require('http');// 3000번 포트 이용const port =3000;// http 서버 만들기 - createServer() 메서드// req : 요청 세부 정보 제공하며 이를 통해 요청 헤더 및 데이터에 액세스 가능 (http.IncomingMessage 객체)// res : 클라이언트에 반환할 데이터를 채우는데 사용 (httpServerResponse 객체)const server = http.createServer((req, res)=>{
res.statusCode =200;// 성공적 응답을 위해 상태코드를 200으로 설정
res.setHeader('Content-Type','text/html');// res.setHeader('콘텐츠 유형', '텍스트/html')
res.end('<h1>hello, world</h1>');// end() 로 내용 추가 및 응답 종료});// 서버는 지정된 포트 3000번 에서 수신 대기// 서버가 준비되면 수신 콜백함수 호출
server.listen(port,()=>{
console.log(`Server running at port ${port}`);});
1-5. 모듈 생성하기
- 예시) HTTPS 모듈 생성하기
HTTP와 HTTPS의 차이 : HTTPS는 데이터를 암호화하여 요청을 보내고 서버에서 암호화되어 온 결과 데이터를 복호화함
실제 기능을 구현하는 것이 아닌 모듈 구조를 학습하기
필요한 것
https.js : request.js + response.js
request.js : 요청에 필요한 함수 포함
response.js : 데이터 결과를 가져오는데 필요한 함수 등을 포함
https.js 파일
// https.jsfunctionmakeRequest(url, data){// 요청 보내기// 데이터 return 하기}
request.js 파일
// request.js// 예시로 암호화 함수 encrypt 생성// 해당 함수는 data를 받음functionencrypt(data){return"encrypted data";}// send 함수는 url과 data를 받아 data를 암호화하고 콘솔에 메세지 출력functionsend(url, data){const encryptedData =encrypt(data);
console.log(`${encryptedData} is being sent to ${url}`);}
// https.jsconst request =require('./request');// request에 send 담김const response =require('./response');// response에 read 담김functionmakeRequest(url, data){// 요청 보내기
request.send(url, data);// 데이터 return 하기return response.read();}const responseData =makeRequest('https://naver.com','any data');
console.log(responseData);// 출력// encrypt data is being sent to https://naver.com// decrypted data