morgan
Node.js 웹 애플리케이션에서 * HTTP 요청 로깅을 위한 로깅 미들웨어 패키지입니다. 이 패키지는 HTTP 요청의 상태 코드, 응답 시간, 요청 메소드, 요청 URL, 요청 바디 등을 기록할 수 있습니다. 즉, 클라이언트 측과 서버 측 사이에서 HTTP 요청과 응답 사이에 발생하는 정보들을 기록해주는 미들웨어 입니다.
Morgan 패키지는 사용하기 쉽고 유연합니다. 기본적으로 콘솔에 로그를 출력하지만, 파일에 로그를 저장하거나 로그를 다른 곳으로 전송하는 등 로깅을 다양한 방식으로 구성할 수 있습니다. 또한 로그 포맷을 구성할 수 있어서, 개발자가 원하는 대로 로그를 출력할 수 있습니다.
Morgan 패키지는 Node.js의 Express 프레임워크와 함께 많이 사용됩니다. Express 애플리케이션에서 Morgan 미들웨어를 사용하면, 애플리케이션의 HTTP 요청 및 응답에 대한 로그를 쉽게 기록할 수 있습니다.
* HTTP 요청 로깅
HTTP 요청 로깅은 HTTP 클라이언트와 HTTP 서버 간의 통신에서 발생하는 HTTP 요청 및 응답에 대한 정보를 기록하는 것입니다. 이러한 정보는 웹 개발자가 애플리케이션의 성능 문제나 보안 문제를 파악하는 데 도움이 됩니다. HTTP 요청 로깅은 다양한 정보를 포함할 수 있습니다. 예를 들어, HTTP 메소드(GET, POST, PUT 등), 요청 URL, 요청 IP 주소, 응답 상태 코드, 응답 크기, 요청 및 응답 시간, 사용자 에이전트 정보, Referrer 정보 등을 로깅할 수 있습니다. HTTP 요청 로깅은 일반적으로 로그 파일에 기록됩니다. 이러한 로그 파일은 애플리케이션의 동작을 추적하고 디버깅하는 데 사용됩니다. 또한 로그 파일을 분석하여 애플리케이션의 성능을 개선하는 데도 사용될 수 있습니다. |
morgan 사용 예시 코드
const express = require('express');
const morgan = require('morgan');
const app = express();
// Morgan 미들웨어를 사용하여 로깅을 구성합니다.
app.use(morgan('combined'));
// GET 요청에 대한 핸들러를 등록합니다.
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 애플리케이션을 3000번 포트에서 실행합니다.
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
::1 - - [16/Mar/2023:11:50:51 +0000] "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
morgan 의 옵션
Morgan 패키지는 로그 출력 형식을 다양하게 지원합니다. 일부 일반적인 로그 형식을 살펴보면 다음과 같습니다.
* Apache Common Log Format
Apache Common Log Format은 웹 서버 로그를 기록하기 위해 아파치 웹 서버에서 사용되는 표준 로그 형식입니다. 이 로그 형식은 다양한 웹 서버에서 사용되며, 일반적으로 텍스트 파일로 저장됩니다.
Apache Common Log Format은 다음과 같은 정보를 기록합니다:
- 클라이언트 IP 주소
- 요청이 수신된 시간
- 클라이언트와 서버 간 통신에 사용된 HTTP 메소드
- 요청한 파일의 경로
- HTTP 응답 코드
- 요청에 대한 HTTP 응답의 바이트 수
이 로그 형식은 웹 서버 관리자가 웹 사이트의 트래픽 패턴을 이해하고 웹 사이트의 성능 문제를 해결하는 데 도움이 됩니다. 또한, 웹 애플리케이션의 보안 문제나 사이트 침해 여부를 파악하는 데도 사용될 수 있습니다.
보통 다음과 같은 형식으로 작성됩니다.
127.0.0.1 - - [16/Mar/2023:09:32:22 -0700] "GET /index.html HTTP/1.1" 200 2048 |
morgan('common')
* Apache Common Log Format과 비슷한 형식으로 로그를 출력합니다.
:method :url :status :res[content-length] - :response-time ms |
와 같은 형식을 따릅니다.
morgan('combined')
Apache Combined Log Format과 비슷한 형식으로 로그를 출력합니다.
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" |
와 같은 형식을 따릅니다.
morgan('dev')
개발용 로그 형식으로,
:method :url :status :response-time ms - :res[content-length] |
와 같은 형식으로 출력합니다.
morgan('short')
간단한 형식으로,
:remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms |
와 같은 형식을 따릅니다.
이외에도 Morgan 패키지는 사용자 정의 로그 형식을 지원합니다. 사용자 정의 로그 형식을 사용하려면, 문자열 대신 함수
를 전달해야 합니다. 예를 들어, 다음과 같이 사용자 정의 로그 형식을 지정할 수 있습니다.
app.use(morgan((tokens, req, res) => {
return [
tokens.method(req, res),
tokens.url(req, res),
tokens.status(req, res),
tokens['response-time'](req, res), 'ms'
].join(' ');
}));
위 예제에서는 tokens 객체를 사용하여 로그 형식을 구성하고 있습니다. tokens 객체는 Morgan에서 제공하는 로그 토큰으로, HTTP 요청 및 응답에서 추출된 정보를 가지고 있습니다. 이러한 로그 토큰은 Morgan의 API 문서에서 확인할 수 있습니다.
'백엔드 > 노드' 카테고리의 다른 글
[nodejs] 엑셀 파일을 json 데이터로 변환 해보기 (0) | 2023.07.09 |
---|---|
[node.js] express.json() 간략 정리 (0) | 2023.03.18 |
[node.js] node.js 에서 express서버를 구축할 때 포트 지정 시 process.env.PORT 를 사용하는 이유 (0) | 2023.03.15 |
[node.js] express.urlencoded 에 대한 이해 (0) | 2023.03.14 |
[node.js] static 파일과 static 미들웨어 (0) | 2023.03.14 |