Dev(10)
-
[MacOS M1] Apple Silicon Mac에 VM을 이용하여 Ubuntu 설치하기
M1 MacOS에 가상머신을 이용하여 Linux 설치하기 UTM은 Apple Silicon Mac 환경에서 x86/x64 운영체제를 가상화할 수 있게 합니다. 이 Hypervisor를 이용하면 VM환경에서 Linux나 Windows를 설치하여 사용할 수 있습니다. Ubuntu Server를 다운받은 후, UTM을 실행시킵니다. 본인 컴퓨터에 맞는 타입으로 iso파일을 다운받으면 됩니다. 저의 경우 MacOS M1 Appli silicon으로 arm 타입으로 다운받았습니다. 새 가상머신 만들기 버튼을 누르고 Virtualize(가상화) 를 누른 후 운영체제 Linux로 가상머신을 생성합니다. 탐색으로 통해 Boot ISO Image 를 불러오고 장치 설정은 각자 컴퓨터 사양에 맞춰 설정해주면 됩니다. 저의..
2023.11.18 -
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 11. 뉴스 피드 시스템 설계
요구사항 개략적 설계 피드 발행 뉴스 피드 조회 상세 설계 피드 발행 상세 설계 뉴스피드 조회 상세 설계 캐시 구조 마무리 뉴스피드 시스템은 인스타그램이나 트위터와 같이 홈페이지 중앙에서 지속적으로 업데이트되는 포스팅 시스템을 말합니다. 뉴스피드 시스템을 설계하는데에서 고민해야하는 부분은 아래와 같습니다. 내가 작성한 포스팅을 나를 팔로워한 사용자들에게 발행하는 것 팔로잉하고 있는 사용자의 피드를 나의 뉴스피드에서 읽는 것 간단하게 표현하자면, 데이터를 쓰는 파트 그리고 데이터를 읽는 파트에 대해 설계하면 됩니다. 1. 요구사항 뉴스피드 시스템을 설계하기 위해 필요한 요구사항들을 생각해봅니다. 모바일, 웹 모두 지원 뉴스 피드 내가 직접 포스팅을 올릴수도 있고 팔로잉하고 있는 사용자가 올린 포스팅을 뉴스..
2023.08.26 -
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 01. 사용자 수에 따른 규모 확장성
※ 이 포스팅은 가상 면접 사례로 배우는 대규모 시스템 설계 기초의 1장. 사용자 수에 따른 규모 확장성 부분을 정리한 것입니다. 개요 웹계층 Scale Out 로드밸런서 stateless 메시지 큐 로그, 메트릭, 자동화 데이터 계층 Scale Out 로드밸런서 && 데이터베이스 다중화 데이터베이스 규모 확장 샤딩 데이터베이스 종류에 대한 고민 응답시간 개선 캐시 CDN Cache && CDN 적용 결과 데이터 센터 1. 개요 1.1. 단일서버? 모든 컴포넌트(웹앱, DB, 캐시서버 등)가 단 한대의 서버에서 실행되는 시스템입니다. 웹서비스를 이용하고자하는 사용자가 웹서버에 바로 접근하는 구조로 웹서버가 다운될 경우 웹사이트 접속이 불가능합니다. 또, 데이터베이스가 하나이기 때문에 장애가 발생했을 시,..
2023.05.19 -
[Hexagonal Architecture] 3. Adapter 구현하기
Web Adapter 구현하기 Persistence Adapter 구현하기 Output Port ORM Entity Mapper 클래스 참고 1. Web Adapter 구현하기 웹 어댑터는 incoming adapter 중 하나로, 외부로부터 http를 통해 request를 받아 애플리케이션 코어를 호출하는 주도하는 어댑터입니다. 우리가 controller 클래스로 정의하는 부분이 이에 해당되며, http와 관련된 기능을 담당합니다. 웹 어댑터는 application - port - in에 위치한 input port를 호출합니다. input port는 외부 어댑터와 애플리케이션 코어가 통신하는 명세로 인터페이스로 되어있어 DIP(의존성 역전 원칙)이 작용됩니다. 이전시간에 설명했던 UseCase 인터페이..
2023.03.31 -
[OOP] SOLID 원칙
S, SRP O, OCP L, LSP I, ISP D, DIP 1. SRP Single Responsibility Principle 단일 책임 원칙 하나의 객체가 하나의 책임만 갖는다 (= 클래스를 단 하나의 목표만 가지고 작성한다.) 높은 유지보수성 모듈 전반의 가시성을 제공한다 1.1. SRP 적용 예 1 특정 자원을 저장하는 기능과 조회하는 기능은 책임이 다릅니다. 저장에 관한 비즈니스 로직과 조회에 관한 비즈니스 로직을 서로 다른 클래스로 분리하여 하나의 클래스가 하나의 목표만을 가지도록 만듭니다. 저장에 관한 기능이 변경되었을 때에, 조회에 관한 서비스는 변경되지 않는다. 1.2. SRP 적용 예 2 계좌에 관한 도메인이 있을 때, 계좌에 관한 비즈니스 로직은 계좌 도메인 안에 작성하고, 계좌 ..
2022.12.05 -
[Hexagonal Architecture] 2. Use Case 구현하기
헥사고날 아키텍처는 도메인 중심의 아키텍처로 적합합니다. 도메인 엔티티를 먼저 만들고, 그 후 유스케이스를 구현하는 순서로 진행합니다. 유스케이스의 동작은 아래와 같은 순서로 진행됩니다. 입력값에 대한 유효성을 검증하고 시스템을 동작하기 전에 비즈니스 규칙을 검증한 후 엔티티 모델을 조작하고 출력 결과값을 반환합니다 ※ 참고로 코드는 kotlin + webflux + coroutine 로 구성되어있습니다. 1. 입력 유효성 검증 1.1. input model web adapter의 일부분으로, application - port - in 에 위치합니다. 모든 필드는 불변 필드로 지정하고 (final) 유효성 검증 설정하여 잘못된 값 입력시 익셉션 throw 시킵니다.(@NotNull, @Min 등) 입력값..
2022.11.18