본문 바로가기

전체 글400

[소프트웨어 아키텍처 101] Ch. 14 이벤트 기반 아키텍처 스타일 이벤트 기반 아키텍처(event-driven architecture)는 확장성이 뛰어난 고성능 애플리케이션 개발에 널리 쓰이는 비동기 분산 아키텍처 스타일이다. 적응성이 좋아 소규모 애플리케이션부터 크고 복잡한 애플리케이션까지 두루 사용할 수 있다. 이벤트를 비동기 수신/처리하는 별도의 이벤트 처리 컴포넌트들로 구성되며, 스탠드얼론 아키텍처 스타일로 사용하거나 다른 아키텍처 스타일(ex. 이벤트 기반 마이크로 서비스 아키텍처)에 내장할 수도 있다. 애플리케이션은 대부분 요청 기반 모델(request-based model)을 따른다. 이 모델에서는 어떤 액션을 수행하도록 시스템에 요청하면 요청 오케스트레이터가 접수한다. 요청 오케스트레이터는 보통 유저 인터페이스이지만 API 레이어나 엔터프라이즈 서비스 버.. 2024. 1. 18.
[소프트웨어 아키텍처 101] Ch. 13 서비스 기반 아키텍처 스타일 서비스 기반 아키텍처(service-based architecture)는 마이크로서비스 아키텍처 스타일의 일종으로, 아키텍처가 유연해서 가장 실용적인 아키텍처 스타일 중 하나이다. 마이크로서비스나 이벤트 기반 아키텍처와 마찬가지로 분산 아키텍처지만 비교적 덜 복잡하고 비용이 많이 들지 않아서 많은 비지니스 관련 애플리케이션에 널리 채택된 아키텍처이다. 1. 토폴로지 서비스 기반 아키텍처의 기본 토폴로지는 각각 따로 배포된 유저 인터페이스와 원격 서비스, 그리고 모놀리스 데이터베이스로 이루어진 대규모 분산 레이어 구조이다. 이 아키텍처 스타일에서 서비스는 큼지막한 단위로 분리해 별도로 배포하는 애플리케이션의 일부이다(보통 도메인 서비스라고함). 서비스를 배포하는 방식 자체는 여느 모놀리식 애플리케이션과 동.. 2024. 1. 15.
[소프트웨어 아키텍처 101] Ch. 12 마이크로커널 아키텍처 스타일 이미 수십 년 전에 만들어진 마이크로커널 아키텍처(microkernel architecture, 플러그인 아키텍처라고도 함)는 오늘날에도 널리 쓰이고 있다. 이 아키텍처 스타일은 (단일 모놀리식 배포 단위로 패키징해서 다운로드 및 설치가 가능하며, 보통 고객 사이트에서 서드파티 제품으로 설치되는) 제품 기반 애플리케이션에 적합하며, 비제품 고객 비즈니스 애플리케이션에도 많이 사용된다. 1. 토폴로지 마이크로커널 아키텍처 스타일은 코어 시스템(core system)과 플러그인 컴포넌트(plug-in component)라는 두 가지 아키텍처 요소로 구성된 비교적 단순한 모놀리식 아키텍처이다. 애플리케이션 로직은 독립적인 플러그인 컴포넌트와 기본 코어 시스템에 골고루 분산되어 확장성, 적응성, 애플리케이션 기.. 2024. 1. 15.
[스터디] GraphQL이란? REST API에서의 문제점 오버페칭과 언더페칭 REST API 시스템에서는 요청의 목적에 맞게 엔드포인트와 응답할 데이터들을 미리 정의한다. [GET] 메서드로 유저 정보를 받아오고 싶다면, 대체로 서버 도메인 끝에 'user/[userId]'와 같은 경로 변수를 붙여서 요청을 보낸다. 이때 유저 정보를 보여주는 UI가 페이지마다 조금씩 다를 수 있다. 메인 화면에서는 유저의 닉네임만 보여주고, 계정 설정 화면에서는 닉네임과 이메일을 모두 보여주는 경우가 그렇다. 필요한 데이터의 형태가 다르니까 API의 엔드포인트를 두 개로 나누어야 할까? 만약 그렇다면 새로운 엔드포인트의 경로 변수는 무엇으로 정해야 할까? 이 방식은 모호하고 비효율적이다. 데이터에 포함할 필드를 유연하게 바꿀 수 없어서 불필요한 값.. 2024. 1. 15.
[Java] HashMap Map 키와 값으로 구성된 Entry 객체를 저장하는 구조를 가지고 있는 자료구조 키와 값은 모두 객체 값은 중복 저장될 수 있지만, 키는 중복 저장 불가 만약 기존의 키와 동일한 키로 값을 저장하면 기존의 값에서 새로운 값으로 대치됨 HashMap Map 인터페이스를 구현한 대표적인 Map 컬렉션 Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있음 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어 성능이 뛰어남 HashMap은 해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없다. 또, 삽입되는 순서와 들어있는 위치 또한 관계가 없다. HashMap 선언 HashMap map1 = new HashMap.. 2024. 1. 15.
[Java] 자바 난수(랜덤 숫자) 생성 : Math, Random 자바에서 난수를 생성하는 방법은 Math 클래스를 활용하는 방법과 Random 클래스를 활용하는 방법 두 가지가 있다. 두 방법의 차이점은 Math.random() 메소드는 0.0에서 1.0 사이의 double 난수를 얻는데 사용하지만, Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다는 점이다. 또, Math.random()은 종자값(seed)가 현재시간으로 고정인 반면, Random 클래스는 종자값(seed)를 설정할 수 있다. 종자값 : 난수를 만드는 알고리즘에 사용되는 값, 종자값이 같으면 같은 난수를 얻는다. Math.random() public class RandomExample { public static void main(String[].. 2024. 1. 15.