- Layered architecture faults and improvementstarryeye오늘은 계층형 아키텍처의 문제점에 대해 알아보겠다. 계층형 아키텍처는 코드에 나쁜 습관들이 스며들기 쉽고.. 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들이 생긴다. 위는 전통적인 웹 애플리케이션의 구조이다. 의존성의 마지막은 영속성 계층이므로 애플리케이션은 데이터베이스에 의존하게 된다. 따라서, 어떤 요구사항을 구현할 때 데이터베이스의 구조를 먼저 생각하고 이를 토대로 도메인 로직을 구현하기 쉽다. 즉, 데이터베이스 주도 설계로 유도 되는 것이다. 하지만, 비즈니스 관점에서는 도메인 로직을 먼저 만들어야한다. 도메인 로직이 맞다는 것을 확인한 후에 이를 기반으로 영속성 계층과 웹 계층을 만들어야한다. 또한, ORM 프레임워크를 계층형 아키텍처와 결합하면 비즈니스 규칙을 영속..
- 2023-06-22 23:13:53(1년 전)
- 시스템 설계 고민 2starryeye가장 간단하게 구현한 시스템 부터 대규모 트래픽을 감당할 수 있을 정도의 시스템 까지 생각하면서.. 시스템 설계 방법을 나열해보겠다.. (아래 내용은 트랜잭션 격리 수준에 따라 내용이 좀 달라질 수 있다.) (틀린 점이 있을 수 있다.. 있으면 댓글 부탁드립니다.) 기술 스택 : Spring, JPA, MySQL 요구사항타임라인 기능 설계에 대해 고민해보자.. 타임라인 기능이란.. 내가 어떤 게시글을 작성하면.. 나를 팔로우하는 사람들은 내 게시글을 각자의 타임라인 페이지(보통 home 페이지이다.)에서 볼 수 있는... 기능이다. 각 방법에서 쓰기 관점과 조회 관점으로 나눠서 설명하겠다. A 사용자가 B 사용자를 팔로우 하였고, B 사용자가 게시글을 쓰는 상황이라 생각하자. 첫번째 방법가장 간단하게 생..
- 2023-06-09 01:59:00(1년 전)
- 시스템 설계 고민 1starryeye가장 간단하게 구현한 시스템 부터 대규모 트래픽을 감당할 수 있을 정도의 시스템 까지 생각하면서.. 시스템 설계 방법을 나열해보겠다.. (아래 내용은 트랜잭션 격리 수준에 따라 내용이 좀 달라질 수 있다.) (틀린 점이 있을 수 있다.. 있으면 댓글 부탁드립니다.) 기술 스택 : Spring, JPA, MySQL, Redis 요구사항 게시물의 좋아요 기능 설계에 대해서 고민해보자.. 좋아요 카운터를 증가시키는 트랜잭션은 2개의 쿼리로 진행했다. 1. 현재 좋아요 수 조회 2. 좋아요 수 = 현재 좋아요 수 + 1 -> JPA 에서 Dirty Check 기능으로 업데이트하는 것과 같다. 쿼리 1개로 하면 안되나..? -> 밑에서 따로 다룬다. 시스템 설계 방법 첫번째 방법 가장 생각하기 쉬운 방법이다. 위..
- 2023-06-08 22:45:24(1년 전)
- Event-Driven 아키텍처 와 Pub/Sub 모델starryeye개념이 헷갈려 간단하게 정리해보겠다.. 두 개념 모두 분산 환경에서 메시지 교환 방식을 효과적으로 관리하는데 사용되는 패턴이다. Event-Driven Architecture (EDA) 시스템이 특정 이벤트에 반응하여 동작하는 방식이다. 이벤트는 시스템의 상태가 변경되었음을 나타내고, 해당 이벤트는 다른 구성 요소가 구독하거나 반응할 수 있다. 이벤트의 생성, 감지, 소비를 중심으로 하는 아키텍처인 것이다.. 따라서 비동기성, 느슨한 결합 등의 특징이 있다. Pub/Sub Model Event-Driven Architecture 에 속하는 특정 유형이라 볼 수 있다. Publisher 는 이벤트 또는 메시지를 생성하고.. Subscriber 는 해당 메시지를 수신한다. Publisher 와 Subscri..
- 2023-06-03 02:17:05(1년 전)
- Hexagonal Architecture 정리starryeyeHexagonal Architecture 의 각 컴포넌트 별 책임과 주의 사항에 대해 정리해보겠다.. clean architecture 에서는 Application layer 와 Domain layer 를 합쳐서 Application Core 라고 부른다. Application 은 port 와 Use case, Service 가 존재하는 layer 를 뜻하나.. Domain이 포함된 개념으로 불리기도 함. Application 유스케이스 책임 1. 입력을 받는다. 2. 비즈니스 규칙을 검증한다. (도메인 엔티티와 책임 공유) 3. 모델 상태를 조작한다. 4. 출력을 반환한다. 각 유스케이스 마다 다른 입력/출력 모델을 가져가도록 해보자.. 각 입력 모델은 입력 유효성 검증 책임을 가진다. 주의) 입력 유..
- 2023-05-15 20:19:20(1년 전)
- CQRS PatternstarryeyeCQRS(Command Query Responsibility Segregation) 패턴 에 대해 알아보자... 단어 자체의 해석은.. 명령 조회 책임 분리(커멘드 쿼리 책임 분리)이다. (명령과 조회의 책임을 분리하자) -> 보통 성능이 중요한 조회용 외부 시스템과 비즈니스 명령이 많은 내부 시스템으로 분리한다. 자세한 정의 CQRS 패턴은 도메인에서 발생하는 이벤트와 상태를 분리하여 처리한다. 즉, 명령(Command)과 조회(Query)를 각각 다른 모델로 처리하는 것이다. 명령 모델은 상태 변경을 처리하고, 조회 모델은 상태를 조회한다. 이렇게 하면 각각의 모델은 명확한 역할을 가지게 되어 유지보수 및 확장이 용이해지며, 코드의 복잡성이 줄어들게 된다. 또한 CQRS 패턴은 이벤트 소싱(Event..
- 2023-02-15 01:37:22(2년 전)
- Saga Pattern (feat. MSA)starryeyeSaga Pattern은.. 마이크로 서비스들끼리 이벤트를 주고 받아 특정 마이크로 서비스에서의 작업이 실패하면.. 이전까지의 작업이 완료된 마이크로 서비스들에게 보상(Complemetary) 이벤트를 소싱함으로써 분산 환경에서 원자성(Atomicity)을 보장하는 패턴이다. 쉽게 풀어보자.. 트랜잭션의 관리 주체가 DB 서버 자신들이 아닌 Application에 있다. Application이 분산되었을 때 각 Application 하위에 존재하는 DB는 자신의 트랜잭션만 처리하는 구조에 사용된다. 따라서 MSA 구조에 사용하기 좋다. 2PC와 비교 2PC 와는 다르게 각 Application 은 자신의 트랜잭션만 처리하며.. Application 개발자가 트랜잭션 로직을 Application에 구현해야..
- 2023-02-13 23:59:42(2년 전)
- Two Phase Commit (feat. MSA)starryeyeMSA 아키텍처가 어려운 이유중 하나는.. 여러 마이크로 서비스간의 트랜잭션 처리이다. 기존 Monolithic 아키텍처에서는 DBMS가 제공해주는 트랜잭션 기능을 사용했다.. 자세하게.. 관계형 데이터베이스 + Monolithic 아키텍처를 도입한 서버 Application은 DB 서버에서 제공하는 트랜잭션의 Commit 과 Rollback을 이용하여 데이터를 일관성 있게 제어가 가능하다. 하지만.. MSA 구조에서는 Application 과 DB 가 분산 되어.. 트랜잭션 처리를 DBMS에서 제공하는 기능을 통해 달성할 수 없다. 자세하게.. MSA 구조에서는 각 서비스별로 DB 인스턴스 + Application이 분리 됨에 따라 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그..
- 2023-02-13 23:59:01(2년 전)
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)