사전 자원
개념

자원

gabury1고친 사람 github-actions[bot]

자원은 게시글 한 편이나 사용자 한 명처럼 시스템이 따로 이름을 붙여 가리키는 대상 하나를 뜻합니다. 서버 자원처럼 컴퓨터가 나눠 쓰는 처리 능력이나 저장 공간을 가리킬 때도 이 말을 쓰지만, 인터페이스를 설계하거나 데이터를 다룰 때는 뜻이 다릅니다. 이 문서는 뒤쪽 뜻을 다룹니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 서버나 저장소가 다루는 대상 하나하나에 붙이는 이름표입니다. /users/42 라는 주소가 가리키는 사용자 한 명이 자원 하나입니다.

왜 이렇게 하나 — 대상마다 이름이 없으면 요청이 무엇을 겨냥하는지, 설명이 무엇을 두고 하는 말인지 정할 방법이 없습니다. 이름을 먼저 정해야 그 위에 조회·수정·기술 같은 일을 얹을 수 있습니다.

어떻게 도나

  1. 시스템 안의 대상 하나를 자원으로 정합니다
  2. 그 자원에 주소를 붙입니다
  3. 요청이나 설명은 이 주소를 통해 자원을 겨냥합니다

대가 — 무엇을 자원으로 잡을지는 관점에 따라 갈립니다. 게시글 하나를 자원으로 볼 수도 있고, 게시글의 댓글 목록을 별도 자원으로 뗄 수도 있습니다. 이 경계를 잘못 그으면 인터페이스가 쓰기 불편해집니다.

상세

이 절은 API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스) 설계와 데이터 기술에서 쓰는 자원, 곧 이름을 붙여 가리키는 대상을 다룹니다. 서버가 CPU(Central Processing Unit, 중앙 처리 장치)나 메모리를 나눠 쓰는 그 자원은 다른 이야기라 여기서 다루지 않습니다.

자원은 시스템이 이름을 붙여 따로 가리킬 수 있는 대상입니다. 게시글 한 편, 사용자 한 명, 주문 한 건, 데이터베이스의 표 하나가 각각 자원이 될 수 있습니다. 무엇을 하나의 자원으로 묶을지는 정해진 답이 없고, 설계하는 쪽이 정합니다.

자원과 그 값은 다른 것입니다

자원 자체는 눈에 보이지 않습니다. 사용자 한 명이라는 자원은 이름도 이메일도 그 자체로는 아무 형태가 없는 개념일 뿐입니다. 이 자원을 주고받으려면 바이트로 된 형태로 바꿔야 합니다.

JSON(JavaScript Object Notation, 자바스크립트 객체 표기법)으로 바꿀 수 있습니다. HTML(HyperText Markup Language, 하이퍼텍스트 마크업 언어)로 바꿀 수도 있습니다. 이렇게 한 시점에 자원이 담고 있는 값을 바이트로 나타낸 것을 표현이라 부릅니다.

같은 자원도 표현은 여러 개일 수 있습니다. 사용자 한 명을 JSON 으로도, HTML 화면으로도 내려줄 수 있습니다. 어느 쪽을 받을지는 요청하는 쪽이 고를 수 있어서, 자원 하나가 표현 여러 개를 갖는 구조가 됩니다.

flowchart TD
    A["자원 · 사용자 42번"] --> B["표현 · JSON"]
    A --> C["표현 · HTML"]

주소를 붙여야 가리킬 수 있습니다

자원을 정했다고 바로 다룰 수 있는 것은 아닙니다. 그 자원을 콕 집어 부를 방법이 있어야 합니다. 웹에서는 이 주소를 URI(Uniform Resource Identifier, 통합 자원 식별자)라 부릅니다. /users/42 처럼 경로 하나가 자원 하나를 가리킵니다.

주소가 자원을 가리키기만 하고, 그 자원에 무슨 일을 할지는 따로 정합니다. 같은 주소 /users/42 를 두고도 읽으라는 요청과 지우라는 요청이 서로 다른 결과를 냅니다. 무엇을 할지를 정하는 쪽은 요청 메서드입니다.

이름을 얼마나 잘게 쪼갤지는 설계의 몫입니다

자원의 경계는 저장하는 쪽의 구조를 그대로 베끼지 않아도 됩니다. 사용자 한 명이 이름·주소· 주문 목록을 갖고 있어도, 주문 목록을 별도 자원 /users/42/orders 로 뗄 수도 있고 사용자 자원 안에 그대로 둘 수도 있습니다.

이 경계를 어떻게 긋느냐가 API 를 쓰기 편하게도, 불편하게도 만듭니다. 너무 잘게 쪼개면 화면 하나를 채우려고 요청을 여러 번 보내야 하고, 너무 뭉치면 필요 없는 값까지 매번 함께 내려옵니다.

관련 항목

자원을 가리키는 방법

URI · 요청 대상 · URI 템플릿 · URN

자원의 값을 담아 주고받는 형태

표현 · 미디어 타입 · 콘텐츠 협상 · JSON

자원을 조작하는 요청 메서드

요청 메서드 · GET · POST · PUT · DELETE

자원을 중심으로 API 를 짜는 방식

REST · API 설계 · 자원 지향 설계

자원을 설명하는 부가 정보

메타데이터

자원이라는 이름을 쓰는 클라우드 서비스

AWS

다른 이름: resource