전체 글155 [대규모 시스템 설계 기초 2] 7장. 호텔 예약 시스템 파헤치기 이론 들어가기 앞서 오늘은 가상면접사례로 배우는 대규모 시스템 설계 기초 2의 7장 호텔 예약 시스템의 내용을 읽고 정리해봤습니다. 호텔 예약 시스템은 해당 내용을 바탕으로 회사 강의 결제 시스템 에 녹여낼 수 있는 부분이 많아보였습니다. 또한 사내 운영 개선 업무를 하면서 적용했던 부분과 연관되는 부분들이 많아 흥미로웠습니다. 요구사항 분석 5000개의 호텔에 100만 개 객실을 갖춘 호텔 체인을 위한 웹사이트를 구축하라. 결제는 예약 시, 전부 진행한다. 결제는 호텔 웹사이트 혹은 앱에서만 가능하다. 10% 초과 예약이 가능해야 한다. 객실 가격은 그날 상황에 따라 유동적이어야 한다. 비기능 요구사항 높은 수준의 동시성 지원 : 성수기, 대규모 이벤트 기간에 고객이 많이 몰릴 때, 동시성 이슈를 예방.. CS/기타 2024. 4. 23. Redis에 대해 알아보자 (자료구조, Cache) 개요 쿠팡에서 모든 상품이 품절 표시되는 문제가 발생하였다. 레디스 DB 때문이란 발표가 있었다. https://www.digitaltoday.co.kr/news/articleView.html?idxno=212904 Redis(Remote Dictionary Server) Remote : 외부 Dictionary : Key-Value 형태 값 저장소 Server : 서버 Database, Cache, Message Broker로도 사용할 수 있다. In-memory Data Structure Store Supports rich data structures Redis 자료구조 비교군인 Memcached에선 Collection을 제공함. String, Lists, Sets, Sorted Sets, Hashe.. CS/기타 2024. 4. 14. [Spring] 팩토리메서드 패턴 적용해서 확장성 높은 코드 만드는 법 문제상황 게시판 목록 조회 API 게시판 유형 별로 다른 테이블을 조회해야 했다. API를 각각 분리하거나, 하나의 게시판 조회 API에서 Type에 따라 if/else 분기에 따라 다른 요소를 조회해야 했다. 예) 일반게시글, 비밀게시글, 인기글A, 인기글B 기존 레거시 시스템에서는 이러한 유형의 데이터들을 if/else로 Service 레이어에서 각각 다른 Repository (여기선 Mapper)를 사용해서 로직을 처리하였다. @Service @RequiredArgsConstructor public class CommunityBoardService { private final CommunityContentsFactoryService communityContentsFactoryService; @Tra.. Framework/Spring 2024. 3. 7. [기타] Mac에서 CLI로 IntelliJ 실행하는 법 순서 /usr/local/bin/idea 파일 생성한다. 해당 파일에 대한 쓰기 권한을 부여한다. chomod 777 /usr/local/bin/idea chomod 777 을 입력하여, 모든 사용자에 대해 r/w/x (읽기, 쓰기, 실행)이 가능하도록 허용한다. 해당 파일에 아래와 같이 내용을 수정 후 저장한다. open -na "IntelliJ IDEA.app" 실행하려는 디렉토리로 이동한다. 잘 수행 되는지 실행해본다. idea . 잘된다. 레퍼런스 https://www.jetbrains.com/help/idea/2023.3/working-with-the-ide-features-from-command-line.html#toolbox 기타 2024. 2. 24. [소프트웨어 아키텍처 101] 챕터 12. 마이크로커널 아키텍처 스타일 마이크로커널 아키텍처 스타일 이미 수십 년 전에 만들어진 마이크로커널 아키텍처(microkernel architecture, 플러그인 아키텍처라고도 함)는 오늘날에도 널리 쓰이고 있다. 이 아키텍처 스타일은 (단일 모놀리식 배포 단위로 패키징해서 다운로드 및 설치가 가능하며, 보통 고객 사이트에서 서드파티 제품으로 설치되는) 제품 기반 애플리케이션에 적합하며, 비제품 고객 비지니스 애플리케이션에도 많이 사용된다. 12.1 토폴로지 마이크로커널 아키텍처 스타일은 코어 시스템(core system)과 플러그인 컴포넌트(plug-in component)라는 두 가지 아키텍처 요소로 구성된 비교적 단순한 모놀리식 아키텍처이다. 애플리케이션 로직은 독립적인 플러그인 컴포넌트와 기본 코어 시스템에 골고루 분산되어 .. CS/기타 2024. 2. 12. [소프트웨어 아키텍처 101] 챕터 11. 파이프라인 아키텍처 스타일 파이프라인 아키텍처 파이프라인 아키텍처(pipeline architecture, 파이프와 필터 아키텍처라고도 함)는 소프트웨어 아키텍처에서 끊임없이 등장하는 기본적인 아키텍처 스타일입니다. 개발자와 아키텍트가 기능을 개별 파트로 분리하기로 결정하는 순간부터 이 패턴이 수반된다. 함수형 언어 개발자는 언어 구조와 이 아키텍처 요소가 유사하다고 생각할 것이다. 사실, 맵리듀스(MapReduce) 프로그래밍 모델을 응용한 많은 도구가 이 기본 토폴로지를 따릅니다. 이처럼 파이프라인 아키텍처 스타일은 저수준에서 구현할 수도 있고 고수준의 비지니스 애플리케이션에도 적용할 수 있다. 11.1 토폴로지 파이프라인 아키텍처는 다수의 파이프와 필터로 구성된다. 파이프와 필터는 특정한 방식으로 조정되며, 보통 필터 간 단.. CS/기타 2024. 2. 12. [소프트웨어 아키텍처 101] 챕터 10. 레이어드 아키텍처 스타일 레이어드 아키텍처 스타일 레이어드 아키텍처(layered architecture, n티어(n-tiered) 아키텍처)는 가장 흔한 아키텍처 스타일 중 하나이다. 단순하고 대중적이면서 비용도 적게 들어 모든 애플리케이션의 사실상 표준 아키텍처이다. 시스템을 설계하는 조직은 그 조직의 소통 구조를 그대로 복제한 듯 설계할 수밖에 없다는 **콘웨이의 법칙**을 떠올려보면, 레이어드 아키텍처는 애플리케이션을 개발하는 아주 자연스러운 방법이다. 그러나 레이어드 아키텍처 스타일은 묵시적 아키텍처 안티패턴, 우발적 아키텍처 안티패턴 등의 몇몇 아키텍처 안티패턴의 범주에 속한다. 10.1 토폴로지 레이어드 아키텍처에서 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성되며, 각 레이어는 애플리케이션에서 주어진 역할을 수.. CS/기타 2024. 2. 12. [마이크로서비스 아키텍처 구축] 챕터2. 마이크로서비스 모델링 방법 2.4 딱 도메인 주도 설계만큼 마이크로서비스 경계를 찾는 데 사용되는 기본 메커니즘은 도메인 주도 설계(DDD)이며, 이는 도메인 자체를 중심으로 진행한다. DDD는 프로그램에서 문제 영역을 더 잘 표현하는 중요하는 개념들을 제시했다. 보편 언어 의사소통을 돕기 위해 코드와 도메인 설명에 사용할 공통 언어를 정의하고 채택한다. 애그리거트 객체들의 집합이며 일반적으로 실제 세계 개념과 관련된 하나의 개체로 관리된다. 경계 콘텍스트 더 큰 범위의 시스템에 대한 기능을 제공하지만 복잡성을 숨기는 비즈니스 도메인 내부의 명시적인 경계. 2.4.1 보편 언어 보편 언어란 사용자가 쓰는 용어를 코드에서 동일하게 사용하려고 노력해야 한다는 것이다. 용어가 통용되는 곳? 코드! 코드에는 동일하게 사용되는 용어가 없기.. CS/기타 2024. 2. 2. [월급쟁이부자들] 따끈따끈한 주니어(2-5년) 백엔드 개발자 취업 후기 왜 지원했나 이 글은 성인 재테크 교육으로 유명한 월급쟁이부자들TV, 월부닷컴을 운영 중인 월급쟁이부자들이란 회사에 주니어 백엔드 개발자로 합격한 따끈따끈한(무려 오늘!) 후기이다. 해당 직무는 월부닷컴의 서버 프로그램을 고도화하고 유지보수하는 일을 한다. 사실 처음 접속했을 때, 월부닷컴이 노코드 툴로 만들어진 게 아닐까 싶었다. 그런데 개발자를 뽑는 걸 봐선, 직접 구축했구나. 싶었다. 또 CEO님이신 너바나님을 팔로우 중이었는데, 링크드인에 종종 올라오는 소식을 보니, 무서운 성장세를 보여주는 회사라는 점, 내집마련이 간절한 직장인의 문제에 공감이 되어 지원하게 됐다. 합격 월급쟁이부자들이 나의 네번째 회사가 됐다. 요즘 같이 이직이 어려운 시기에, 합격한 회사라 감회가 남달랐다 🥹 공고 "개발 뿐.. 생각정리/회고 2024. 2. 1. DispatcherServlet를 중심으로 본 스프링 MVC 동작 원리 오늘은 Spring MVC를 이해하는 핵심인 DispatcherServlet의 동작원리를 알아봄으로써 스프링 웹 어플리케이션이 어떻게 동작하는지 알아보도록 하겠습니다. 정의 디스패처 서블릿(DispatcherServlet)은 Dispatch(보내다) + Servlet(클라이언트의 요청을 처리하고 결과를 반환하는 Servlet의 구현 규칙을 지킨 웹 프로그래밍 기술)의 합성어입니다. 디스패처 서블릿은 서버로 들어오는 모든 HTTP 요청을 가장 먼저 받아서 적합한 컨트롤러에게 응답을 위임하는 프론트 컨트롤러(FrontController)입니다. 역할 이러한 역할은 위와 같은 다이어그램으로 도식화될 수 있습니다. 그런데 프론트 컨트롤러(FrontController), 핸들러(Handler), 핸들러 어댑터(H.. Framework/Spring 2024. 1. 31. [MySQL] MySQL 아키텍처 MySQL 아키텍처 구성 MySQL 접속 클라이언트 역할 대부분의 프로그래밍 언어에 대한 접속 클라이언트 제공 Shell을 통해서도 접속 가능함 MySQL Engine (MySQL의 두뇌) 구성 옵티마이저 요청된 SQL 문을 최적화해서 실행시키기 위해, 실행 계획을 짜는 역할을 함. 쿼리 파서 전처리기 실행 엔진 역할 클라이언트 접속과 SQL 요청을 처리함. MySQL 스토리지 엔진 (MySQL의 손발) 역할 데이터를 실제로 디스크에 저장하거나 디스크에 저장된 데이터를 불러오는 역할 옵티마이저가 작성한 실행 계획에 따라서 스토리지 엔진을 적절히 호출해서 쿼리를 실행 MySQL 엔진이 스토리지를 호출할 때, 사용하는 API를 핸들러 API라고 함 직접 구현하여 추가 가능 운영체제 파일시스템, 하드웨어 쿼리.. DB/MySQL 2024. 1. 30. [JPA] 영속성 컨텍스트란 영속성 컨텍스트 정의 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 생성 및 접근 방법 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다. 엔티티의 생명주기 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed): 영속성 컨텍스트에 저장된 상태 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed): 삭제된 상태 비영속 엔티티 객체를 생성했지만 아직 영.. Language/Java 2024. 1. 29. 이전 1 2 3 4 ··· 13 다음 반응형