EP177: 현대 소프트웨어 스택
이번 주 System Design Refresher:
-
Key Value Store는 어떻게 동작하는가 (Redis, DynamoDB, Memcached)? (유튜브 영상)
-
현대 소프트웨어 스택
-
Concurrency는 Parallelism이 아니다
-
JWT vs PASETO: Token 기반 인증의 두 주역
-
Linux Cron 치트시트
-
AI Agent vs MCP
Key Value Store는 어떻게 동작하는가 (Redis, DynamoDB, Memcached)?

현대 소프트웨어 스택 (The Modern Software Stack)

오늘날 소프트웨어를 개발한다는 것은 각각 고유한 역할, 도구, 기술을 가진 여러 레이어를 다루는 것을 의미합니다. 대부분의 현대 애플리케이션을 구성하는 9개 레이어를 소개합니다:
-
Presentation Layer (UI/UX): 사용자가 애플리케이션과 상호작용하는 방식을 담당하며, 시각적 요소, 레이아웃, 사용성에 중점을 둡니다.
-
Edge and Delivery (선택적): 글로벌 전송 네트워크를 통해 콘텐츠를 사용자에게 더 가깝게 제공하여 latency를 줄이고 성능을 개선합니다.
-
Integration Layer (API): 시스템의 서로 다른 부분들이 어떻게 통신하는지 정의하며, 컴포넌트 간의 상호 운용성을 가능하게 합니다.
-
Messaging & Async Processing (선택적): 확장성과 응답성을 개선하기 위해 백그라운드에서 작업과 이벤트를 처리합니다.
-
Business Logic Layer: 애플리케이션의 핵심 규칙, 워크플로우, 의사결정 프로세스를 구현합니다.
-
Data Access Layer: 애플리케이션 로직과 저장된 데이터 사이의 브릿지 역할을 하며, 안전하고 효율적인 데이터 조회 및 업데이트를 보장합니다.
-
Data Storage Layer: 애플리케이션의 정형 및 비정형 데이터를 저장, 조직화, 관리합니다.
-
Analytics & ML (선택적): 데이터를 분석하여 인사이트, 예측, 지능형 기능을 생성합니다.
-
Infrastructure Layer (Hosting / Runtime): 애플리케이션을 배포, 실행, 스케일링하기 위한 컴퓨팅 환경과 리소스를 제공합니다.
Over to you: 현대 소프트웨어 개발에서 가장 과소평가된 레이어는 무엇이라고 생각하시나요?
Concurrency는 Parallelism이 아니다
Concurrency: 단일 CPU 코어에서도 작업들이 겹치는 시간대에 시작, 실행, 완료될 수 있는 설계 접근 방식입니다. 이는 동시에 여러 작업을 관리하는 것에 관한 것입니다.
CPU는 작업 간에 빠르게 전환(context switching)하여 작업들이 동시에 진행되는 것처럼 보이게 합니다. 실제로는 그렇지 않지만요.
Concurrency는 I/O 작업처럼 대기 시간이 포함된 작업에 적합합니다. 대기 중에 다른 작업이 진행될 수 있어 전체적인 효율성이 향상됩니다.
Parallelism: 여러 CPU 코어를 사용하여 여러 작업을 실제로 동시에 실행하는 것을 말합니다.
Parallelism은 데이터 분석이나 그래픽 렌더링과 같이 작업을 나누어 여러 코어에서 동시에 실행할 수 있는 무거운 연산 작업에 탁월합니다.
함께 작동하는 방식
Concurrency와 parallelism은 서로 다른 개념이지만 밀접하게 관련되어 있다는 점이 중요합니다. 잘 설계된 concurrent 프로그램은 필요에 따라 여러 코어를 활용한 parallelism으로 확장될 수 있습니다.
Concurrency와 parallelism의 차이점과 상호작용을 이해함으로써, 더 효율적인 시스템을 설계하고 성능이 뛰어난 애플리케이션을 만들 수 있습니다.
Over to you: Concurrency나 parallelism과 관련하여 어려움을 겪은 적이 있으신가요?
JWT vs PASETO: Token 기반 인증의 두 주역
Token 기반 인증은 수년에 걸쳐 상당히 인기를 얻었습니다. 전통적으로 JWT가 이 분야를 지배해왔습니다.

하지만 이제 새로운 플레이어가 주목받고 있습니다: PASETO, 즉 Platform-Agnostic Security Tokens입니다.
그렇다면 이 둘의 차이점은 무엇일까요?
-
JWT JWT 또는 JSON Web Tokens는 두 당사자 간에 정보를 안전하게 전송하기 위한 공개 표준입니다. JWT는 Header, Payload, Signature로 구성됩니다. JWT는 클라이언트와 서버 애플리케이션 간의 stateless 인증을 구현하는 데 사용될 수 있습니다.
-
PASETO PASETO는 JWT의 현대적인 대안입니다. 보안 기본값을 구현하여 JWT의 보안 결함을 해결합니다. JWT와 달리 PASETO는 강력하고 암호학적으로 안전한 알고리즘을 강제하여 취약점의 위험을 줄입니다. PASETO는 일반적으로 Version, Purpose, Payload로 구성됩니다. PASETO에는 두 가지 타입이 있습니다:
-
Public PASETO: 비대칭 암호화를 사용하여 서명되며 데이터의 무결성을 보장하지만, 기밀성은 보장하지 않습니다.
-
Local PASETO: 대칭 암호화 알고리즘을 사용하여 암호화되며, 토큰 내에 포함된 데이터의 기밀성을 보장합니다.
Over to you: 애플리케이션에서 JWT나 PASETO를 사용해 보신 적 있으신가요?
Linux Cron 치트시트
Cron은 시간 기반 작업 스케줄러로, 사용자가 지정된 간격으로 명령이나 스크립트를 실행하여 반복 작업을 자동화할 수 있게 해줍니다. 스케줄을 정의하는 구문인 Cron expression을 사용하며, 이는 5개의 필드(minute, hours, day, month, weekday)로 구성됩니다.

Cron은 시스템 유지보수, 백업, 로그 로테이션, 정기적인 이메일 전송이나 스크립트 실행과 같은 작업 자동화에 널리 사용됩니다. 이 치트시트에서는 다음을 다룹니다:
-
Cron 형식
-
Cron 예제들
-
특수 Cron 문자열
-
특수 문자
Over to you: Cron을 사용해 보신 적 있으신가요?
AI Agent vs MCP

AI agent는 환경과 상호작용하고, 데이터를 수집하며, 그 데이터를 사용하여 사전에 정해진 목표를 달성할 수 있는 소프트웨어 프로그램입니다. AI agent는 해당 목표를 달성하기 위한 최선의 행동을 선택할 수 있습니다.
AI agent의 핵심 특성은 다음과 같습니다:
-
Agent는 지속적인 인간 개입 없이 자율적인 행동을 수행할 수 있습니다. 또한 제어를 유지하기 위해 human-in-the-loop을 둘 수도 있습니다.
-
Agent는 개인 선호도를 저장하고 개인화를 가능하게 하는 메모리를 갖고 있습니다. 또한 지식을 저장할 수 있습니다. LLM이 정보 처리와 의사 결정 기능을 수행할 수 있습니다.
-
Agent는 환경에서 얻을 수 있는 정보를 인식하고 처리할 수 있어야 합니다.
Model Context Protocol (MCP)는 Anthropic이 AI 모델을 더 강력하게 만들기 위해 도입한 새로운 시스템입니다.
이것은 AI 모델(예: Claude)이 각각의 새로운 통합을 위한 커스텀 코드 없이도 데이터베이스, API, 파일 시스템 및 기타 도구에 연결할 수 있게 해주는 공개 표준입니다.
MCP는 3개의 핵심 컴포넌트로 구성된 클라이언트-서버 모델을 따릅니다:
-
Host: Claude와 같은 AI 애플리케이션
-
MCP Client: AI 모델(예: Claude) 내부에 있는 컴포넌트로, MCP 서버와 통신할 수 있게 해줍니다
-
MCP Server: AI 모델과 외부 시스템을 연결하는 중간자 역할
Over to you: AI Agent나 MCP를 사용해 보신 적 있으신가요?
Related Articles
Thank you for reading.