javascript 강의 실습 마지막 단계 서버 환경을 구축해보며 마무리하려 한다.
지금까지 작업하면서 vscode의 Live Server를 사용해서 실행했는데 아래처럼 오류 화면이 뜨는게 문제였다.
이 화면이 뜨는 이유는 모든 상황에서 index.html
파일을 반환하지 않기 때문에 에러가 발생한 것이다.
이를 해결하기 위해서는 서버 환경을 구축해야하고 간단하게 node.js
와 express.js
를 사용해보았다.
express.js
node.js
는 써봤는데 express.js
는 처음 들어봐서 검색해보았다.
express.js
홈페이지에서 핑크색 박스의 middleware
를 클릭해보면 express
에서 제공하는 다양한 내장 미들웨어 함수들이 나오는데, 그 중에서 우리는 index.html
파일을 정적으로 불러오도록 해주는 server-static
부분을 사용해준 것 같다.
// 새로운 Node.js 프로젝트 실행하기 위해 초기화 진행
// -y 를 작성하는 이유: 모든 질문에 대해 기본값으로 자동 응답을 해주는 옵션
npm init -y
// express를 설치
npm install express
const express = require('express'); //node.js 에서 특정 모듈 가져오기
const path = require('path'); // 경로를 다루기 위한 path 모듈
const app = express(); // express() 함수 호출해서 app 상수에 할당하기
const PORT = 3000; // 3000번 포트번호 설정하기
express
함수 호출해서 애플리케이션 객체를 생성우리는 어떠한 요청을 받는지간에 늘 index.html
파일을 반환해주는 함수가 필요하다.
이 파일이 반환되어야 → index.js 파일이 실행되고 → 그 안의 app.js 메인 로직 파일이 실행되기 때문이다.
따라서 app
객체에 use
메서드로 미들웨어를 생성해주어야한다.
app.use(express.static(__dirname + '/..'));
// console.log(__dirname + '\\..'); // Windows 경로 구분자
// console.log(__dirname + '/..'); // POSIX 경로 구분자 (Unix 계열)
__dirname
을 사용하면 현재 파일의 경로를 보다 쉽게 작성할 수 있다.
아래 주석처럼 “ / “
같은 경로 구분자는 환경마다 다 다르기 때문에 안전한 방식으로 불러올 수 있도록 작성해주는게 필요하다.
// app.use(express.static(__dirname + '/..'));
app.use(express.static(path.join(__dirname, '..')));
path
모듈이 가지고 있는 join
메서드를 사용해서 join('src', ‘components’, ‘Content.js’);
와 같이 작성하면, ‘src/components/Content.js’ 를 보다 쉽게 나타낼 수 있다.
HTTP 메서드에는 GET
, POST
, PUT
, DELETE
등이 있는데 여기서 우리는 GET
메서드를 사용할 것이다. get
메서드의 첫 번째 인자로는 처리할 특정 경로를, 그리고 두 번째 인자로는 처리할 로직인 콜백 함수를 작성한다.
app.get('/*', (requset, response) => { // /*는 와일드카드 패턴으로 모든 경로에 매칭
response.sendFile(path.join(__dirname, '..', 'index.html'));
});
클라이언트에서 요청이 들어오면 응답으로 index.html
파일을 돌려줘야하기 때문에 sendFile
메서드로 파일 경로를 작성해준다.
response
응답 객체 파일을 응답으로 보내는 메서드app.listen(PORT, () => {
console.log(`start server!`);
});
마지막으로 우리가 지정한 3000번 포트에서 요청을 듣고 보여줄 수 있도록 설정하면 끝이다.
역시 app
객체를 사용하고 listen
메서드로 포트번호를 넘겨준 후, 두 번째 인자로 성공 시 console.log
를 반환하도록 해주었다.
node Javascript/OnebiteProject/server/server.js
node 명령어를 작성하고 실행시킬 서버의 경로를 위 코드처럼 입력하면 PORT 설정부분에 적어주었던 “start server!” 가 뜨면서 실행되는 걸 볼 수 있다.
이제 메뉴버튼을 클릭해서 새로고침이 되어도 오류 없이 잘 이동하는 걸 볼 수 있다. 👏
참고자료