React native(앱), Flutter, Ionic 등이 있다. React native는 화면의 요소들(HTML 태그 안)도 앱에 다 들어가 있다.
앱은 반드시 API서버에만 요청을 보내는 것은 아니며, 앱에서 네이버 웹페이즈를 보는 경우에는 웹서버로 요청한다. 별도의 웹서버를 두거나 분기처리하는 등의 방법등이 있다. 일반적으로 사용자가 앱에서 정보를 요청하면 앱은 이 요청을 API 서버에 전달한다.
- Android : Java, Kotlin 등이 해당한다.
- iOS : Swift 등이 행당한다.
Rraspberry Pi, Arduino, Alexa, Siri, Google, Assistant 등이 있다. IOT 장치도 클라이언트의 일종이다. IOT 장치가 센서를 통해 데이터를 수집하면, 이 요청을 API 서버에 전달한다.
- JavaScript : React, Angular, Vue, Svelte, Ember 등이 해당한다.
- CSS : Tailwind, Bootstrap 등이 해당한다.
- Desktop : Desktop 또는 PC application에서는 Electron, C# 및 VB, GWT, Swing, JavaFX, KDE, GNOHE 등이 해당한다.
web처럼 화면을 주고 받는 것이 아닌 데이터만 주고받는 인터페이스이다. Android, iOS, IOT, Web, Desktop Client에서 API 서버로 요청한다.
- REST, SOAP, GraphQL, gRPC, AWS, API Gateway, Kong, Aplgee, Nginx 등이 해당한다.
Web 서버는 클라이언트(일반적으로 브라우저)의 요청에 따라 웹 페이지를 제공하는 서버이다. 주로 HTTP 프로토콜을 이용하여 통신하며, 사용자가 웹 사이트의 URL을 웹 브라우저에 입력하면, 웹 서버는 해당 웹 페이지의 HTML, CSS, Nginx, IIS등 다양한 웹 서버 소프트웨어를 통해 구성할 수 있다. 웹서버는 웹사이트의 컨텐츠를 인터넷을 통해 전달하는 중요한 역할을 수행하며, 웹의 기본적인 작동 원리를 이루는 핵심적인 요소이다.
- Spring Boot, Spring MVC, Express 등의 프레임 워크와 Jetty, Tomcat, Webshere등의 서버가 해당한다.
애플리케이션에서 발생하는 이벤트를 기록하는 과정을 의미한다. 그는 파일, 콘솔, 데이터베이스 등 다양한 출력 대상에 기록될 수 있다. 다양한 로깅 라이브러리(Log4j, Logback, SLF4J 등)를 통해 로깅 기능을 쉽게 구현할 수 있다.
- 데이터를 효과적으로 관리하고 분석하기 위한 다양한 도구로는 Elastlsearch(비정형 데이터를 저장하는 툴), Logstash(로그 모으기), Kibana(화면), Spluunk, Fluentd 등이 있다.
보안은 크게 Authentication(승인), Authorization Service(접근 가능한 권한)로 나뉜다. 로그인 해서 들어가는 경우는 Authentication에 해당하고, 관리자가 관리자 페이지로 들어가는 경우는 Authorization에 해당한다.
- Auth0, Okta, AWS Cognito 등이 해당한다.
파일 스토리지(File Storage)는 데이터를 파일로 저장하고 관리하는 데이터 스토리지 방식이다. 일상에서 컴퓨터를 사용할 때 보통 접하게되는 폴더(디렉토리)와 파일의 계층 구조를 가지고 있다. 파일 스토리지에서 각 파일은 고유한 이름과 디렉토리 경로를 가지며, 사용자는 이 경로를 통해 파일에 접근하고 파일을 읽거나 쓸 수 있다.
- Ambry, AWS S3 등이 해당한다.
큐는 비동기 처리를 위한 중간 미들웨어라고 생각하면된다.
동기 큐에서는 요청이 들어온 순서대로 처리되어 한 번에 하나의 요청만 처리하고, 그 요청이 완료되어야만 다음 요청을 처리할 수 있다.
비동기 큐에서는 요청이 들어온 순서와 상관없이 처리될 수 있다. 요청이 들어오면 큐에 추가되며, 별도의 작업자(worker)가 큐에서 요청을 가져와 병렬로 처리한다.즉, 동기큐는 응답이 올 때까지 기다리고, 비동기 큐는 호출하고 바로 다음것을 처리한다.
- Kafka, RabbitMQ, AWS Kinesls 등이 해당한다.
🎨 큐와 스레드?
스레드와 큐는 서로 다른 역할을 하지만, 병렬처리나 비동기 처리를 구현하는데 함께 사용된다. 예를 들어, 비동기 작업 큐에 작업을 추가하면, 별도의 작업 스레드가 큐에서 작업을 가져와 처리한다. 이를 통해, 여러 작업을 동시에 처리하면서도 작업의 순서를 유지할 수 있다. 이렇게 스레드와 큐를 적절히 사용하면, 시스템의 성능을 향상시키고 응답 시간을 줄일 수 있다.
여기서 Queue의 pub/sub이 사용된다. pub/sub은 Publish/Subscribe의 약자로, 메시지 지향 미들웨어 패턴 중 하나이다. 이 패턴은 메시지를 보내는 측(Publisher)과 메시지를 받는 측(Subscriber) 사이에 직접적인 연결을 만들지 않는다. 대신, 메시지는 특정 주제(Topic) 또는 채널(Channel)을 통해 교환된다.
예를들어, 유튜브 채널 운영자는 새로운 비디오를 만들어서 업로드한다. 이것이 바로 'publish', 즉 '발행'하는 과정이다. 그런데 이 비디오를 모든 사람에게 직접 보내주지 않는 대신 유튜브라는 '중간 매개체'를 통해 비디오를 공유한다. 그러면, 이 채널을 구독하고 있는 사람들은 새로운 비디오가 올라왔다는 알림을 받게 되는 것이 'subscribe', 즉 '구독'하는 과정이다. 구독자들은 자신이 원하는 채널만 구독하면 되니까, 그들이 관심 있는 내용만 볼 수 있다.
즉, pub/sub 시스템은 메시지를 보낼 사람(publisher)과 받을 사람(subscriber) 사이에 직접적인 연결을 만들지 않는 대신 중간에 'queue'라는 공간을 두어 메시지를 전달한다. 이렇게 하면, 각자가 원하는 시간에 원하는 작업을 할 수 있게 된다.
데이터베이스(Database)는 회원 데이터나 게시판 데이터 등 정보들을 담아낸다.
- SQL, MongoDB, Cassandra, AWS DynamoDB, IBM DB2 등이 있다.
데이터를 모으거나 전처리 하거나 빠른 계산에 필요한 빅데이터 용 도구이다. 빅데이터는 데이터 양이 많아서 고속으로 어떻게 처리할 것인지가 관건이다.
- Hadoop HBase, Hive, Spark, AWS EMR 등이 해당한다.
CI/CD는 개발자가 새로운 코드를 작성하면 그 코드가 자동으로 테스트되고, 문제가 없다면 바로 사용자들에게 제공되는 과정을 말한다. 문제 발생 시 빠르게 대응할 수 있고, 사용자들은 항상 최신 기능을 이용할 수 있게된다.
- VM, Docker, Kubernetes, AWS ECS, Jenkins, TravlsCI, Gitlab 등의 소프트웨어를 배포하는 방법을 지원하는 도구나 서비스가 있다.