[프론트엔드 데브코스 TIL] 2023.12.08 Day59 React 5일차

SoJuSo·2023년 12월 8일
0

2023.09 ~ 2024.01 TIL

목록 보기
66/105
post-thumbnail

📚금일 학습 내용 KPT

어째 제목에 리액트 써두고.. 막상 리액트 기간도 맞는데ㅋㅋㅋㅋㅋㅋ 나는 리액트를 안했네..?(물론 듣기는 했다 정리를 안했지..) 허허허; 그래도 발표를 잘 마무리 했다.

📌Keep

  • 즐겁게 코딩하기
  • 열심히 살기

❗️Problem

  • 불면증 생겼는데 잘 자기..

📍Try

  • 이제 다시 해야할 것들을 매일매일 잘 해 나가기

💡API란 무엇인가

API란 프로그램 간의 상호작용 혹은 통신을 도와주는 인터페이스(표준화된 규칙 또는 방법)를 말한다.

API란 무엇일까? 우리는 개발을 하면서, 심지어 주변의 비개발자들도 API라는 단어를 한 번 쯤 접해봤을 것이다. 하지만 막상 우리는 API가 정확히 어떤 것을 의미하는 지 정의하지 못한다.

이번 발표는 그렇게 시작되었다. API는 무엇을 정의하는 가? 에 대한 궁금증이 있었고 해당 내용을 조사해봤다.

API는 생각보다 오래된 개념이였다. 컴퓨터 과학 초창기부터 내부 로직을 몰라도 일관화된 인터페이스를 통해서 하드웨어를 사용 가능하게 해주는 설명서가 출시되었다. 영국 케임브리지 대학에서 사용되었던, 어찌 보면 현대 컴퓨터의 가장 시초적인 컴퓨터라고 할 수 있는 EDSAC의 소프트웨어 라이브러리였다. 누군가는 이 책을 보며 API 명세서의 시초라고 말하기도 하고 라이브러리라고 말하기도 하는데, 많은 학자들이 이 책을 API의 시초라고 한다.
이처럼 API의 개념은 컴퓨터 과학의 태동과 함께 시작되었다고 표현할 수 있다.

1960년대부터 본격적으로 API라는 용어가 컴퓨터과학계에 등장하기 시작한다. 처음에 등장했던 분야는 데이터베이스와 그래픽 분야였다. 당시 배경을 조금 설명해보자면 다음과 같다.

A,B,C,D라는 서로 다른 컴퓨터가 있다고 했을 때, 화면에 코드를 출력하기 위한 print() 함수를 정의하려면 각각의 컴퓨터에서 코드를 하드웨어에 적합하게 작성해줘야했다. 이때 당시에는 코드가 직접 하드웨어와 연결되어 실행되는 구조였기 때문이다. 그래서 정말 심각한 경우는 같은 기능을 하는 코드여도 코드를 따로 작성해줘야했다.

하드웨어에 관심이 없다면, 하드웨어가 얼마나 섬세하고 디테일한 지 모를 수 있다. 하지만 하드웨어는 정말 섬세하고 디테일하다. 세부적인 내용이 바뀔 때도 많고 겉으로 보기에는 동일 기능을 하는 하드웨어처럼 보여도 그 내부는 정말 각각이 다르다. 마치 사람의 개성이 다 다르듯이.

어쨌거나 이렇게 컴퓨터를 교체하거나 하드웨어를 업데이트 할 때마다 코드를 새로 작성해줘야하는 점은 매우 큰 비효율성과 리소스 낭비로 다가왔다. 이때 당시 과학자들은 HAL(Hardware Abstraction Layer)이라는 하드웨어 추상화 계층을 통해서 이 문제를 해결했다. HAL이 있다면 어떤 일이 벌어질까?

이런 일이 발생한다. 바로 하드웨어가 바뀌어도 코드와는 무관해진다는 것이다. HAL이 도대체 어떤 역할을 하기에 그런걸까? HAL을 쉽게 비유하자면 구글 번역기와 같다.

당신이 지구상에 있는 랜덤한 사람과 대화를 해야 한다고 가정해보자. 그때마다 통역사를 고용할 수도 없는 노릇이고, 그때마다 해당 언어를 공부할수도 없다. 하지만 이 때 구글번역기가 당신의 눈 앞에 있다면 특별한 노력 없이 내가 주로 사용하는 언어를 얘기하면 구글 번역기가 알아서 대화의 가교 역할을 해줄 것이다. 이때 심지어 당신은 당신과 대화하는 사람의 국적이나 언어를 몰라도 된다. 왜냐하면 구글 번역기가 자동으로 감지해서 알아서 대화를 진행시켜 줄테니까 말이다.

HAL은 이런 개념이다. 코드의 입장에서는 하드웨어가 바뀌어도 그냥 코드만 HAL 인터페이스에 전달하면 하드웨어와의 소통은 HAL이 담당한다. 그리고 이 HAL은 규격화된 코드로 우리가 사용하는 대부분의 운영 체제에 탑재되어있다.(리눅스에서도 원래 HAL의 개념이 따로 존재했지만 udev에 합쳐졌다가 지금은 systemd에 코드가 merge되었다고 한다)

이처럼 최초의 API의 형태는 코드와 하드웨어 혹은 하드웨어와 하드웨어 간의 가교 역할을 하는 인터페이스였다.

작성자 Tip1
프로그램 : 컴파일된 결과물뿐만 아니라, 프로그래머가 작성한 소스 코드까지도 포함한다.
소프트웨어 : 프로그램뿐만 아니라 CD, 설명서, 제품 포장 등 패키지 전체를 뜻하기도 한다.

하지만 우리가 현재 생각하는 API의 개념과는 조금 다르지 않은가? 우리는 주로 소프트웨어간의 소통에서 API의 개념을 사용했다. 하지만 갑자기 하드웨어라니? 이해가 안간다. 그리고 안갈 수 있다.

지금부터 API의 개념이 프로그램간의 통신 규칙을 지칭하게 된 과정들을 살펴보자.

하드웨어가 2010년대 이후로 발전이 이전보다 더디다는 사실은 정말 아쉽기도하고 슬픈 이야기이지만 하드웨어도 1900년대에는 정말 빛의 속도로 발전했다. 하지만 개인 컴퓨터의 보급과 OS 시스템의 등장 그리고 ARPANET의 인터넷이 대중에 공개되는 일 등 다양한 원인으로 소프트웨어 역시 엄청난 속도로 발전하기 시작했다.

여기서 잠시 뜬금 없는 얘기를 해보자. 개발자들은 개발을 할 때 한 파일의 크기가 커지면 그 파일을 기능별로 나누어서 따로 저장해서 파일을 사용한다. 그러한 방식이 유지보수를 용이하게 하고 코드의 가독성을 높여주기 때문이다.

이제 이 뜬금없는 이야기를 소프트웨어의 발전과 접목시켜보자. 소프트웨어는 엄청난 속도로 발전해갔고 거대해져갔다. 그리고 거대해진 소프트웨어는 역시나 유지보수와 관리의 불편함을 초래했고 이 소프트웨어들을 잘게 쪼개야하는 이유가 되었다.

그래서 쪼갰다.

그런데 이렇게 쪼개고 나니 발생한 문제는 다음과 같았다. 이제 우리끼리 어떻게 소통하지?였다. 그때 적용했던 개념이 API의 개념이였다. 내가 상대방의 프로그램을 알던 모르던, 외부의 사용자가 나를 사용할 때 내부 코드를 몰라도, 미리 정해둔 표준화된 인터페이스를 통해서 사용할 수 있도록 프로그램 간의 통신을 API의 개념을 도입하여 사용했다.

작성자 Tip2
REST의 개념과 원칙을 따라서 설계된 API를 RESTFUL API라고 한다.

그래서 API가 우리한테 익숙하다. 특히 소프트웨어의 개념이라고 인식되는 이유가 그렇다. 우리는 Web API, DOM API, REST API 등등 주로 소프트웨어에서의 통신을 API라고 봐왔고 사용해왔기 때문이다.

API 역사는 이러했다. 적어도 내가 조사한 내용에 근거하면 그렇다.

위 내용을 종합해서 결론을 내보자면 API는 하드웨어에서 호환성과 효율성을 위해서 시작된 개념이다 시작은 그랬지만, 세월이 지나고 소프트웨어 분야에서 API의 개념이 더 많이 사용되고 지금은 지금은 조금 더 나아가서 응용 프로그램 간의 상호작용 혹은 통신 방식을 정의할 때 주로 더 많이 사용되고 있다.

결론을 내보자면 저렇고, 내가 하고 싶은 얘기도 있다. 이제 이 글을 읽었다면 API가 단순히 서버에 데이터를 요청하기 위한 기능만은 아니다. 라는 사실을 알게 된다면 좋을 것 같다. API의 개념은 여전히 수 많은 컴퓨터 과학에서 사용되는 중요한 개념이다. 만약 이 글을 읽고 내가 하고 싶은 얘기에 공감한다면 나의 이번 글 목적은 충족되었다고 생각한다.

그리고 나는 면접때 API가 뭐에요? 에 대답을 못해서 이렇게 준비했는데 한 번 쯤 생각해보면 좋을 것 같다.

📖소회

발표 끝나고 닫기 전에 확인 한 크롬 탭 200개 실화...?ㅋㅋㅋㅋㅋ 내가 고생한게 아니라 데탑이 고생했다..

발표는 이상하게... 정말 이상하게 안 떨렸다..? 2차 팀원분들의 응원을 받아서 그런지 생각보다 떨지 않고 한 것 같다. 다만.. 늘 발표하고 돌이켜 보면 내용이건 나의 태도건 모든게 아쉽다. 그래서 글로 정리를 조금 해봤고 이제 누군가가 나에게 API에 대해서 물어본다면 그래도 잘 이야기 할 수 있을 것 같다.

내일부터는 다시 일상으로... 밀린 강의 들으셔야죠 ^-^
내일도 화이팅🔥🔥🔥🔥🔥🔥
TIL 작성 소요시간 약 45분

profile
Junior Frontend Engineer

0개의 댓글