하드웨어로서의 서버와 소프트웨어로서의 서버. 두가지 의미가 있음.
백엔드 개발자는 후자인 소프트웨어인 서버로 개발을 하게된다.
Hardware는 컴퓨터를 구성하는 물리적인 부품을 말하며, 눈으로 보고 만질 수 있는 모든 장치를 말함.
Server로 사용되는 Hardware는 고성능 컴퓨터 본체를 말하며, 24시간 켜놔도 무리가 없어야 함.
Client의 요청에 항상 응답하기 위해 거의 항상 켜져 있어야 하며, 고정된 IP 주소를 가져야 합니다.
AWS, Google 등 대형 회사가 Hardware로서의 Server를 인터넷상에서 대여해 주는 서비스입니다.
Software로서의 Server는 Hardware 안에서 실행되는 프로그램이며, Client의 요청을 듣고 응답하도록 설계되어 있음.
컴퓨터에는 수없이 많은 Port가 구성되어 있으며, 이는 Client의 요청을 받아들이고 응답을 보내주는 창구 역할을 함.
각 Port는 연결된 서비스만을 담당하며, 적절한 요청이 들어오면 해당 서비스의 Software에 연결되어 응답을 생성함.
서버는 클라이언트의 모든 요청에 응답해야하며, 먼저 신호를 보내는 일은 일반적으로 없다.
사람 대신 프로그램이 소통하기 위한 접점.
프로그램을 원하는 데이터와 기능으로 안내하는 규칙
Representatopnal State Transfer의 약자로 API를 설계하는 표준 원칙.
API 설계 방식을 예측 가능하고 표준적으로 약속하기 위해 필요함.
1. 클라이언트 서버 역할 분리 : 클라이언트는 유저 경험만, 서버는 데이터와 로직만을 책임지고 완전히 독립되어야 한다.
2. 무상태성 : HTTP의 무상태성과 똑같으며 클라이언트의 이전 상태를 서버가 기억하지 않고 독립적으로 처리함을 말한다.
3. 주문형 코드
4. 캐셔블
5. 계층형 시스템
6. 균일한 인터페이스 : 모든자원이 고유한 주소로 식별되어야 하며, 클라이언트는 하더와 status code를 통해 자신의 상태를 설명할 수 있어야함.
실질적으로 HTML+CSS+JS로 만들어진 수천 수만 줄의 코드를 관리하는 것은 불가능에 가까워진다
이를 관리하기 위해 생긴 것이 프레임워크(Framework)이다.
React : 전세계에서 가장 많이 사용되는 프레임 워크. 그만큼 참고할 소스가 많음.
Vue.js : 문법이 간결하다는 것이 특징. 가볍고 빠르게 보여줄 수 있음.
Svelte : 후발주자라 소스가 적음.
Spring : Java 베이스의 안정성과 신뢰도가 높은 프레임워크
Node.js : Javascript 기반의 빠른 속도와 실시간 처리가 빠른 프레임워크
Django/Flask - python : 문법이 간결하고 개발속도가 빠름. 데이터 분석/AI와 궁합이 좋음.
"역할"에 따라 코드를 분리함.
한 계층을 변경해도 다른 계층을 변경할 필요가 없음!
Controller > Service > Repository 로 요청을 보내고
Repository > Service > Controller로 응답 을 보낸다
데이터를 저장하는 것을 넘어 데이터를 관리하기 위한 전문 시스템.
데이터의 일관성과 명확성이 있음.
은행이나 예약 시스템에 사용
빠른 속도와 유연한 확장성이 장점.
공용 쿼리 언어가 없음
SNS 등의 데이터 구조가 바뀌기 쉬운 곳에 매우 유용
REST API를 받아서 쓰기만 했지 실제로 어떤 것인지 잘 모르고 쓰고 있었다.
RESTful한 API를 설계하기 위해서는 어떤 것들을 고려해야하는지 이제 다른 사람에게 설명할 수 있을 것이다.