본문 바로가기

Study/용어익히기

헷갈리는 IT 용어 이해하기__4. API/JSON

#API

소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계입니다.

쉽게 말해, 요청을 구분할 수있도록 하는 '체계',

API는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계이다.

 

API는 서버개발자가 개발하고, 클라이언트는 그API를 사용합니다.

 

#클라이언트 관점에서 생각

클라이언트는 API에 요청한다.

클라이언트는 보통 CURD에 입각해서 요청한다.

 

#CRUD

클라이언트에서 데이터를 다룰 때 기준이 되는 요청이다.

 

ex) 클라에서 수행해야하는 요청이 타임라인에 사진을 올리는 요청이고, 이것을 CRUD에 입각해서 풀어낸다면..

Creat : 타임라인에 사진을 '올리는'요청

Read : 타임라인에 사진을  '불러오는'요청

Update : '바꾸는'요청

Delete : '지우는' 요청

 

이렇게 풀어낼 쉬 있다. 데이터를 다룰 때 큰틀에서 보면 대부분의 요청이 이 4가지 요청에 속한다.

이때 CRUD요청은 각각의 주소를 가진다.

ex) Creat : '서버컴퓨터의 주소'/timelinecreate'

Read :  '서버컴퓨터의 주소'/timelineread'

Update :  '서버컴퓨터의 주소'/timelineupdate'

Delete :  '서버컴퓨터의 주소'/timelinedelet'

이런식으로 CURD 각각의 주소를 가진다. 하지만 이렇게 주소를 구성하면 문제가있다. 주소가 너무 많아지고 관리하기가 힘들어진다. 이런 주소들이 10000개가 있으면 몇몇 주소들은 기능이 겹칠수도 있고, 체계적으로 나뉘지 않을수도있다.

 

사람들은 좀 더 체계적인 API를 관리하고 싶었고. 체계적인 API라는 사회운동이 만들어짐.

이것이 REST(Representational State Transfer)한 API, 즉 RESTful API라고 부른다.

 

##RESTful API

CRUD를 하나의 주소로 관리한다.

그리고 요청을 보낼 때 다은과 같이 어떤 요청을 보냈는지 파악할수 있는 스티커(메소드)를 붙여서 함께 전송한다.

Creat : POST

Read :  GET

Update :  PUT(전체) / PATCH(일부)

Delete :  DELETE

 

 

#서버의 관점에서 생각

클라이언트에서 요청을 보내면 서버는 다음과 같이 생각한다.

'요청을 보낸 사용자가 가입된 사용자인가?'

'비밀번호 틀렸다! 확인하라고 말해줘야겠네'

'친구중 A를 찾아달라고? A는 없는데 말해줘야겠네'.... 등등..

 

서버는 요청에 이러한 요청에 대해 대답을 해준다.

잘됐어/잘 안됐어 대신, 숫자로 표현해줍니다.

 

'잘됐어' : 200번대 코드(201, 202... 등등)

'잘 안됐어' : 400번대, 500번대

1) 클라이언트의 요청 때문에 잘 안된 경우가 있고 - 400번대 (401,404 ... 등)

2) 서버 내부적으로 잘 안된경우 - 500번대 (500,501 ... 등)

 

더불어 응답에는 데이터가 필요할 수 있다. 예를들어, 내 정보를 수정할때는 먼저 내 정보를 불러와야한다.

그럼 '내 정보 불러와줘'라는 요청을 보내고, 응답으로 정보를 받아야 하죠.

 

요청과 마찬가지로 응답에도 데이터를 담을 수 있다. 이렇게 요청과 응답에 데이터를 주고받음으로써 API는 완성된다.

 

* 함께보기) HTTP 상태코드

 

 

 

#SDK (Software Development Kit)

이는 서버와 클라인트 두개의 시스템에서만 해당하는것이 아니다. 다른 경우가 있다. 한 컴퓨터에 여러 소프트웨어가 함께 있는 경우!

 

- SDK란 API를 제공해 주는 다른 소프트웨어를 SDK라고 한다.

 

ex ) 구글지도 

- 구글에서 만든 소프트웨어. 다른 회사들도 구글에서 제공하는 지도 SDK를 설치하면 자신의 소프트웨어에 구글지도 기능을 넣을 수 있다. 이 SDK에서 제공해주는 API들을 통해 구글지도에 요청을 보낼 수 있다.

 

 

 

 

 

#JSON

클라이언트가 서버로 보내는 요청(Request) 응답(Response)

요청과 응답을 할 떼는 데이터가 담길 수있기에 데이터를 넣을수있는 '기능'을 같이 개발해야한다. 

데이터를 넣을 수있는 '기능'에는 여러가지 형식이있다.

 

클라이언트 서버로 '아이디,요청일자, 다른정보'를 보낸다고 가정해보자. 다음과 같이 그 정보들을 다양한 형식으로 보낼수있다.

 

형식1) [아이디, 요청일자, 다른정보////abc123, 20211121, 안녕하세요]

형식2) {아이디 : abc123 , 요청일자 : 20211121, 다른정보 : 안녕하세요}

형식3) [(아이디, abc123), (요청일자, 20211121), (다른정보, 안녕하세요)]

 

즉, 이렇게 무한개의 형식을 만들어 낼 수 있다는 것이 문제다. 요청하는 형식ㅣ 모두 다르면 그 모든 형식에 대응하는 코드를 적어 줘야한다는 아주 복잡한 문제에 부딪힌다.

 

그래서 개발자들은 유명한 형식을 다같이 쓰기로 약속한다. 그게바로 JSON이다.

과거에는 XML이라는 형식이 널리 쓰엿고, 지금도 종종 쓰이긴 하지만 지금 제일 유명한 형식은 JSON 이다.

 

 

#JSON 은 어떤 모습인데?

{

키1(Key): 값1(Value),

키2(Key): 값2(Value),

키3(Key): [값3, 값4, 값5]

 

위와 같은 모습이다. 개발자들은 여기에 주머니처럼 키와 데이터를 넣어 요청하고 응답한다.

 

 

 

# 그래서 오늘 이해한게 뭔데?

"클라와 서버는 요청과 응답을 주고 받고, 그때 필요한 데이터들을 JSON형태로 주고 받는다."

 

 

 

참고 : 최원영, 비전공자를 위한 이해할 수 있는 IT 지식, 티더블유아이지, 2020