1 Router
- OSI 7계층에서 네트워크 계층에 포함되는 기기
- 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치
- 논리적으로 분리된 망, 망 사이를 지나가야 하는 패킷들에게 경로를 뽑아 최상의 경로를 찾아낸 뒤 다른 망으로 패킷을 보내주는 역할
- 라우팅의 종류
- 정적 라우팅: 관리자가 네트워크에 대한 경로 정보를 직접 지정하여 라우팅, 관리자에 의한 정보만을 참조하므로 라우터 자체의 부담이 줄어 빠르며 안정적임. 네트워크 수가 많을 경우 경로 설정을 변경하기 어려움
- 동적 라우팅: 대규모 네트워크에 사용하며 라우터 간의 변경된 네트워크에 대한 정보를 자동으로 교환하여 라우팅. 관리자의 초기 설정만 필요로 하며 메모리를 많이 차지함
1) 기본라우팅
- URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)
- 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것
2) CRUD ( create, read, update, delete )
- GET: 서버로 부터 데이터를 취득
- POST: 서버에 데이터를 추가, 작성 등
- PUT: 서버의 데이터를 갱신, 작성 등
- DELETE: 서버의 데이터를 삭제
2 API
- Application Programming Interface
- 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘
- 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공
- 개발 인력과 시간, 비용 등을 절약할 수 있어 많은 소프트웨어 기업에서는 필수적으로 사용
- 장점: 자동화 용이, 범위의 확장성, 적용력
3 실습
const express = require('express')
const app = express()
const port = 3000 // 한 번에 여러개의 포트를 열 수 있음
const users = [
{
id: 1, // id는 우리만 알고 있는 것이기 때문에 별도로 부여해 줘야 함
name: "james",
username: "joker",
email: "james101@gmail.com",
phonenumber: "123-456-7979",
},
{
id: 2,
name: "christine",
username: "crystal",
email: "christine101@gmail.com",
phonenumber: "453-326-1299",
},
{
id: 3,
name: "jammie",
username: "jam",
email: "jammie101@gmail.com",
phonenumber: "963-332-3719",
},
];
app.get("/", (req, res) => {
res.send("Welcome !!!");
});
app.get("/users", (req, res) => {
res.json(users);
});
app.get("/users/:userId", (req, res) => {
// console.log(req.params.userId);
const user = users.find((user) => user.id === parseInt(req.params.userId));
if (!user) {
res.status(404).send('요청한 UserId를 찾을 수 없습니다.')
}
res.status(200).json(user);
// status는 상태코드로 200은 성공을 의미함
});
app.post("/users", (req,res) => {
const newUser = req.body;
if (Object.keys(newUser).length === 0) { // 빈 객체인 경우 오류 400
res.status(400).send('User에 관한 정보를 입력해주세요.');
} else if (Object.keys(newUser).length < 4) { // 4개 정보가 모두 나오지 않을 경우 오류 400
res.status(400).send('User를 추가하기 위해 필요한 정보를 모두 입력해주세요')
} else {
users.push({
id: users[users.length - 1].id + 1,
// 중복을 방지하기 위해 마지막 유저의 아이디에 1을 더함
...newUser,
});
}
res.json(users);
})
app.put("/users/:userId", (req, res) => {
const id = users.findIndex(user => user.id === parseInt(req.params.userId));
if (id === -1) {
return res.status(404).send('요청한 id를 찾을 수 없습니다.');
}
users[id] = {
...users[id],
...req.body
}
res.status(200).json(users);
})
app.delete("/users/:userId", (req, res) => {
const id = users.findIndex(
(user) => user.id === parseInt(req.params.userId)
);
if (id === -1) {
return res.status(404).send("요청한 id를 찾을 수 없습니다.");
}
users.splice(id, 1);
res.status(200).json(users);
})
app.listen(port,() => {
console.log('서버 실행중...')
})
1 Router
- OSI 7계층에서 네트워크 계층에 포함되는 기기
- 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치
- 논리적으로 분리된 망, 망 사이를 지나가야 하는 패킷들에게 경로를 뽑아 최상의 경로를 찾아낸 뒤 다른 망으로 패킷을 보내주는 역할
- 라우팅의 종류
- 정적 라우팅: 관리자가 네트워크에 대한 경로 정보를 직접 지정하여 라우팅, 관리자에 의한 정보만을 참조하므로 라우터 자체의 부담이 줄어 빠르며 안정적임. 네트워크 수가 많을 경우 경로 설정을 변경하기 어려움
- 동적 라우팅: 대규모 네트워크에 사용하며 라우터 간의 변경된 네트워크에 대한 정보를 자동으로 교환하여 라우팅. 관리자의 초기 설정만 필요로 하며 메모리를 많이 차지함
1) 기본라우팅
- URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)
- 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것
2) CRUD ( create, read, update, delete )
- GET: 서버로 부터 데이터를 취득
- POST: 서버에 데이터를 추가, 작성 등
- PUT: 서버의 데이터를 갱신, 작성 등
- DELETE: 서버의 데이터를 삭제
2 API
- Application Programming Interface
- 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘
- 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
- 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공
- 개발 인력과 시간, 비용 등을 절약할 수 있어 많은 소프트웨어 기업에서는 필수적으로 사용
- 장점: 자동화 용이, 범위의 확장성, 적용력
3 실습
const express = require('express')
const app = express()
const port = 3000 // 한 번에 여러개의 포트를 열 수 있음
const users = [
{
id: 1, // id는 우리만 알고 있는 것이기 때문에 별도로 부여해 줘야 함
name: "james",
username: "joker",
email: "james101@gmail.com",
phonenumber: "123-456-7979",
},
{
id: 2,
name: "christine",
username: "crystal",
email: "christine101@gmail.com",
phonenumber: "453-326-1299",
},
{
id: 3,
name: "jammie",
username: "jam",
email: "jammie101@gmail.com",
phonenumber: "963-332-3719",
},
];
app.get("/", (req, res) => {
res.send("Welcome !!!");
});
app.get("/users", (req, res) => {
res.json(users);
});
app.get("/users/:userId", (req, res) => {
// console.log(req.params.userId);
const user = users.find((user) => user.id === parseInt(req.params.userId));
if (!user) {
res.status(404).send('요청한 UserId를 찾을 수 없습니다.')
}
res.status(200).json(user);
// status는 상태코드로 200은 성공을 의미함
});
app.post("/users", (req,res) => {
const newUser = req.body;
if (Object.keys(newUser).length === 0) { // 빈 객체인 경우 오류 400
res.status(400).send('User에 관한 정보를 입력해주세요.');
} else if (Object.keys(newUser).length < 4) { // 4개 정보가 모두 나오지 않을 경우 오류 400
res.status(400).send('User를 추가하기 위해 필요한 정보를 모두 입력해주세요')
} else {
users.push({
id: users[users.length - 1].id + 1,
// 중복을 방지하기 위해 마지막 유저의 아이디에 1을 더함
...newUser,
});
}
res.json(users);
})
app.put("/users/:userId", (req, res) => {
const id = users.findIndex(user => user.id === parseInt(req.params.userId));
if (id === -1) {
return res.status(404).send('요청한 id를 찾을 수 없습니다.');
}
users[id] = {
...users[id],
...req.body
}
res.status(200).json(users);
})
app.delete("/users/:userId", (req, res) => {
const id = users.findIndex(
(user) => user.id === parseInt(req.params.userId)
);
if (id === -1) {
return res.status(404).send("요청한 id를 찾을 수 없습니다.");
}
users.splice(id, 1);
res.status(200).json(users);
})
app.listen(port,() => {
console.log('서버 실행중...')
})