PROGRAMMING/Web

09 Routing&API

2022. 8. 17. 21:30
목차
  1. 1 Router
  2. 1) 기본라우팅
  3. 2) CRUD ( create, read, update, delete )
  4. 2 API
  5. 3 실습

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. 1 Router
  2. 1) 기본라우팅
  3. 2) CRUD ( create, read, update, delete )
  4. 2 API
  5. 3 실습
'PROGRAMMING/Web' 카테고리의 다른 글
  • [Chrome Extension] CLI 세팅
  • D3.js를 활용한 정보시각화
  • 08_1 POST & GET 정리
  • 08 데이터 통신
yuujoeng
yuujoeng
IT and Information Security
yuujoeng
알감자는 공부중
yuujoeng
전체
오늘
어제
  • 🎁 (201)
    • SECURITY (80)
      • 관리보안 (27)
      • System (10)
      • System | Wargame (30)
      • Android (9)
      • Reversing (3)
      • AWS (1)
    • BLOCKCHAIN (45)
      • BlockChain (22)
      • Ethereum (23)
    • PROGRAMMING (30)
      • Web (16)
      • Android (6)
      • Spring (8)
    • IT (0)
      • Article (40)
      • RaspberryPi (5)

블로그 메뉴

  • HOME
  • TIKKLE

인기 글

hELLO · Designed By 정상우.
yuujoeng
09 Routing&API
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.