💡 백엔드에 많이 사용되는 언어와 프레임워크
백엔드 프로그래밍 언어는 서버에서 데이터를 처리하고, 클라이언트와의 통신을 관리하며, 데이터베이스와 상호작용하는 기능을 제공한다.
🍉 JavaScript (Node.js)
JavaScript는 원래 브라우저에서 등장했으나 Node.js 덕분에 서버에서도 사용할 수 있게 되었다. 게다가 Node.js는 비동기 처리에 특화되어 있는데(원래 JavaScript도 비동기 처리가 가능했으나 Node.js 덕분에 훨씬 효율적) 이는 여러 사용자가 동시에 접속하는 것을 가능하게 만들었다.
🍉 Python (Django, Flask)
Python은 코드가 직관적이라 유지 및 보수가 쉽고 복잡한 웹 앱도 빠르게 개발할 수 있다. 특히 데이터 과학 및 인공지능 관련 도구들이 잘 갖춰져 있다. Django는 Flask보다 많은 기능을 포함하고 있다.
🍉 Java (Spring Boot)
Java는 안정성, 성능, 확장성이 좋아서 커다란 시스템에 주로 쓰인다.
🍉 Ruby (Ruby on Rails)
Ruby는 매우 간결하고 읽기 쉽다. 초보자도 쉽게 배울 수 있고 개발 속도가 빨라서 스타트업이나 프로토타입 만들 때 인기가 많다.
🍉 Go (Golang)
Go는 구글에서 개발했다. 서버에서 여러 작업을 동시에 처리하는 것에 특화되어 있다. (구글의 필요가 발명을 낳았다.)
💡 백엔드에 많이 사용되는 데이터베이스
백엔드는 프론트엔드의 요청에 효율적으로 응답하기 위해서 데이터베이스에도 신경 써야 한다. 주로 관계형 데이터베이스와 NoSQL 데이터베이스가 많이 쓰인다.
🍉 관계형 데이터베이스
데이터를 행과 열로 이루어진 테이블로 저장한다. 데이터가 구조화되어 있기 때문에 SQL을 통해 효율적으로 다룰 수 있다. 대표적으로 MySQL, PostgreSQL, MariaDB가 있다.
🍉 NoSQL 데이터베이스
테이블 대신 문서, key-value, 그래프 등 다양한 형식으로 저장한다. 스키마(데이터 구조)가 고정되어 있지 않으므로 비정형 데이터를 저장하기 적합하다. 대표적으로 MongoDB, Redis, Cassandra가 있다.
💡 백엔드에 많이 사용되는 웹 서버와 API 방식
웹 서버는 클라이언트로부터 HTTP 요청을 받아 처리하고 결과를 다시 응답한다. API(Application Programming Interface)는 서버와 클라이언트가 소통하는 규칙과 도구의 모음이다.
종합하자면, 웹 서버는 클라이언트와 서버 간의 '통로' 역할을 하고, API는 통신을 할 때 적용되는 '규칙'이다. 먼저 API 방식에 대해 살펴보면,
🍉 REST API (Representational State Transfer)
웹에서 데이터를 주고받는 데 가장 널리 사용된다. HTTP와 헷갈릴 수 있는데,, HTTP는 웹에서 데이터를 주고받는 기본 규칙이고, REST API는 HTTP를 사용하는 구체적인 방식이다.
GET 데이터를 가져올 때 사용 (ex. 상품 목록 보기)
POST 새로운 데이터를 서버에 추가할 때 사용 (ex. 새 글 작성)
PUT 기존 데이터를 수정할 때 사용 (ex. 회원 정보 수정)
DELETE 데이터를 삭제할 때 사용 (ex. 댓글 삭제)
HTTP는 편지를 보내는 규칙이다. 누구에게 어떻게 보낼지를 규정한다. REST는 편지 내용의 구조다. REST는 HTTP 위에서 동작하는 아키텍처로서 HTTP를 사용한다. 반면, HTTP는 REST가 없어도 동작할 수 있다. 다른 방식(ex. GraphQL)을 사용하면 된다.
🍉 GraphQL
이 친구도 서버와 클라이언트가 데이터를 주고받는 방법 중 하나라는 점에서 REST API와 비슷하지만 가장 큰 차이는 GraphQL은 한 번의 요청으로 필요한 모든 데이터를 가져올 수 있다는 점이다. REST API에서는 서버가 정해놓은 데이터 구조에 맞춰 데이터를 받아야 하기 때문에 필요한 데이터를 가져오기 위해서는 여러 번 요청을 보내야 할 수 있는 것과 반대다.
웹 서버와 API를 사용하는 실제 예시는 다음과 같다.
🍉 Nginx
Nginx라는 웹 서버는 비동기 이벤트를 기반으로 작동한다. 이는 한 작업이 끝날 때까지 기다리지 않고 바로 다른 작업을 처리하는데 덕분에 동시에 여러 작업이 진행될 수 있고, 동시에 여러 사용자의 요청을 처리할 수 있다.
비동기가 무적권 좋아 보이지만 단점은,, 동기 코드에 비해 훨씬 복잡하다는 것이다. 이는 유지·보수를 어렵게 한다. 비동기는 I/O 작업에는 적합하지만 CPU 집약적인 작업에는 적합하지 않다. 이 경우는 아예 멀티스레드 방식이 더 낫다.
스레드는 작업의 작은 단위다. 프로그램은 여러 스레드를 만드는데 멀티코어 CPU를 사용할 경우 실제로 동시에 여러 작업을 진행한다. 반면 멀티스레드의 경우, 실제로 동시에 처리하지는 않지만 여러 작업들을 아주 빠르게 번갈아가며 실행한다. 그러니 멀티스레드는 여러 스레드를 만들어 각 작업을 병렬로 처리하는 것이고(cpu가 멀티코어일 때 유리), 비동기 처리는 오래 걸리는 작업을 기다리지 않고 다른 작업을 먼저 처리하는 방식이다. 주로 I/O 작업에 유리하고 스레드가 하나여도 된다.
🍉 Caddy
Caddy는 설정이 간단하고 자동으로 HTTPS를 설정해주기 때문에 소규모 프로젝트에서 많이 사용된다. 사용자가 브라우저를 통해 특정 사이트에 접속하면 이 요청은 Caddy로 전달된다. Caddy는 이를 백엔드 서버로 전달(프록시 역할)을 한다. 서버가 데이터를 Caddy에게 주면 이를 다시 사용자에게 넘겨준다.
'분명 전산학부 졸업 했는데 코딩 개못하는 조준호 > Web' 카테고리의 다른 글
프론트엔드 & 백엔드 포함된 초간단 서비스 만들어 보기 - (4) 백엔드의 주요 기술 스택(메시지 브로커, 보안, 로그 및 모니터링) (0) | 2024.10.29 |
---|---|
프론트엔드 & 백엔드 포함된 초간단 서비스 만들어 보기 - (3) 백엔드의 주요 기술 스택(클라우드, CI/CD, 컨테이너 및 오케스트레이션) (0) | 2024.10.25 |
프론트엔드 & 백엔드 포함된 초간단 서비스 만들어 보기 - (1) 프론트엔드의 주요 라이브러리/프레임워크 (0) | 2024.10.04 |
공공데이터포털에서 오픈 API를 사용해서 치킨집 데이터 긁어오기 (7) | 2024.07.23 |
네이버 오픈 API 사용해서 "검색" 데이터 긁어오기 (5) | 2024.07.22 |
한국은행 들어갈 때까지만 합니다
조만간 티비에서 봅시다