Request
● 클라이언트가 서버에게 전달하려는 정보나 메세지를 담는 객체
- URL, HTTP method, 헤더(header), 쿼리 파라미터(query parameter), 바디 데이터(body data)
Response
● 서버에서 클라이언트로 응답 메시지를 전송시켜주는 객체
- 상태 코드(status code), 응답 데이터(response data), 응답 헤더(response header)
Express.js 흐름
예시 코드로 설명해보면 아래의 코드는 'app.js'라는 메인 node에 작성
주제 : 뉴스 목록 불러오기
● Express.js 흐름 분석
1. 서버 시작 - Express.js는 지정된 포트 번호(Port)를 사용하여 서버를 시작
// 1. Express.js의 서버를 엽니다.
app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
2. 라우터 등록 : 연결하려는 모든 라우터들을 /api 주소에 연결
import goodsRouter from './routes/goods.js';
import newsRouter from './routes/news.js';
// 2. 라우터를 등록 합니다.
app.use('/api', [goodsRouter, newsRouter]);
3. API 정의 : 등록된 각 아루터를 순서대로 검토하여, HTTP Method와 URL이 일치하는
API를 찾아 해당 API를 수행
** 뉴스 목록 조회 API **/
// 3. HTTP Method와 URL을 지정한 API를 정의
// 만약, localhost:3000/api/news 라는 URL로 GET 요청이 들어온다면 해당 코드를 실행
router.get('/news', (req, res) => {
...
});
4. 결과 반환 : API에서 모든 비즈니스 로직 처리가 완료된 후, 클라이언트에게 결과를 전달
router.get('/news', (req, res) => {
// 4. 사용자의 요청에 맞는 데이터를 반환
return res // Express.js의 res 객체를 반환
.status(200) // API의 상태 코드를 200번으로 전달
.send('뉴스 목록 조회 API 입니다.'); // API의 결과값을 '뉴스 목록 조회 API 입니다.'로 전달
});
API 분석 - 세부 조회
- 예시 API : 뉴스 세부 조회 API는 클라이언트가 GET /api/new/:newsId 에 요청할 때 실행하는 것
/** 뉴스 세부 조회 API **/
// 3. HTTP Method와 URL을 지정한 API를 정의
// 만약, localhost:3000/api/news/:newsId 라는 URL로 GET 요청이 들어온다면 해당 코드를 실행
router.get('/news/:newsId', (req, res) => {
// 클라이언트가 전달한 Path Params 데이터를 받음
const params = req.params;
// Path Params 데이터 중 newsId를 추출
const newsId = params.newsId;
// 서버 콘솔에 클라이언트가 전달한 newsId를 출력
console.log('클라이언트로 부터 전달받은 뉴스 ID:', newsId);
// 4. 사용자의 요청에 맞는 데이터를 json 형태로 반환
return res.status(200).json({
data: '뉴스 세부 조회 API 입니다.',
});
});
- :newsId에 해당하는 경로 변수(Path.Params)가 중요 → const newsId = params.newsId
더 자세한 Express.js의 req, res 객체
● 주요 req 객체
- req.body : - Request를 호출할 때 body로 전달된 정보가 담긴 객체
- express.json() Middleware를 사용해야 해당 객체 사용 가능
- req.params : 라우터 매개 변수(Path Params)에 대한 저옵가 담긴 객체
- req query : Request 호출할 때 쿼리 스트링으로 전달된 정보가 담긴 객체
- req.get(Header) : 헤더에 저장된 값을 가져오고 싶을 때 사용
● 주요 res 객체
- res.app : res 객체를 통해 Express.js의 app 객체에 접근 가능
- res.status(코드) : Response에 HTTP 상태 코드를 지정
- res.json(JSON) : JSON 형식으로 Response 전달
Response에 대해 더 자세하게
1. res.status(상태 코드)
app.post('/', (req, res) => { return res.status(201).json({key: 'Value'}); }); |
- 서버가 클라이언트에게 응답(Response)을 보냈을 때 상태 코드 전달할 때 사용
- Http 상태 코드는 HTTP 요청이 어떠한 상태로 처리 되었고, 완료되었는지 체크
ex) 200에 대한 요청은 성공, 404s는 요청 리소스가 서버에 존재하지 않을 때
- Express에서는 상태 코드를 명시하지 않으면, default = 200
2. res.json(JSON), res.send(데이터)
app.post('/', (req, res) => { return res.status(201).json({key: 'Value'}); }); |
- res.json() 메서드는 JSON 형식의 데이터만 가능
- res.send() 메서드는 다양한 유형의 데이터를 보내기 가능
Request에 대해 더 자세하게
1. req.body:(Body)
app.post('/', (req, res) => { // Request에서 body 데이터를 ReqBody 변수에 할당한다. const ReqBody = req.body; return res.status(201).json({}); }); |
- 클라이언트가 요청(Request) 보냈을 때, Body에 데이터를 삽입
- req.body를 사용하려면 express.json() 미들웨어를 사용해야 함
- key-value의 데이터 형식을 가지고 있으며, JSON 형태를 띄고 있음
- Body는 Query String, Path Variable(params)과 다르게 URL만 가지고 어떤 데이터를 전달하였는지
확인할 수 없는 특징이 있음
- 데이터를 생성하거나 수정이 필요한 데이터의 전달을 위해 사용
ex) 사용자의 ID, 사용자의 PW, 게시글 제목 등
- POST, PUT과 같은 Http method에서 사용 됨
2. req.query:(Query String)
app.get('/', (req, res) => { // Request에서 Query String 데이터를 ReqQuery 변수에 할당한다. const ReqQuery = req.query; return res.status(200).json({}); }); |
- 클라이언트가 요청(Request) 보냈을 때, URL에 원하는 key-value를 삽입하여 데이터 전달
- URL 마지막에 ? 기호를 사용하여 Query String을 사용할 수 있음
ex) https://domain.com?name=김철수&age=30
- 특정 콘텐츠의 위치를 표시하거나 웹 페이지에 특정한 옵션을 설정할 때 사용
ex) 게시글 정렬, 특정 날짜의 게시글만 출력하는 옵션 설정 등
- 주로 서버의 리소스를 필터링 하거나 정렬하는데 사용
ex) https://domain.com/posts?sort=desc&page=3&limit=20
# limit = 20 : 1 페이지당 20개의 게시글 조회
# page = 3 : 3 페이지 조회
# sort = desc : 게시글 내림차순 정렬
- GET 같은 Http method에서 사용
3. req.params(Path Variable)
app.get('/:name', (req, res) => { // Request에서 Path Params 데이터의 name Key를 가진 Value를 name 변수에 할당한다. const { name } = req.params; return res.status(200).json({}); }); |
- 클라이언트가 요청(Request) 보냈을 때, URL에 원하는 데이터를 삽입하여 전달
- URL 특정 경로를 매개 변수로써 사용
- 특정 게시글을 선택하거나 명확한 리소스 지정할 때 사용
ex) 게시글 상세 정보 조회, 사용자 상세 정보 조회
'IT > Server' 카테고리의 다른 글
[Server] HTTP Status Code (1) | 2024.11.29 |
---|---|
[Server] 서버, 클라이언트 / 웹 어플리케이션 서버, 게임 서버 (0) | 2024.11.25 |
[Nods.js] 4. Middleware (0) | 2024.11.21 |
[Node.js] 2. Express.js, API, REST API (1) | 2024.11.19 |
[Node.js] 1. Node.js (1) | 2024.11.18 |