본문으로 건너뛰기

소프트웨어 설계 및 이론

객체지향 설계, 디자인 패턴, 클린 코드 원칙 등 소프트웨어 설계와 관련된 이론과 실무 적용 방법을 정리합니다.

  • 테넌트와 테넌시란 무엇일까요?
    약 13분

    테넌트와 테넌시의 뜻부터 싱글테넌시·멀티테넌시의 차이까지 설명합니다. 문서 협업 서비스를 예로 자원 공유, 데이터 격리, 권한과 DB 분리 방식을 살펴봅니다.

  • 메시지 큐, 큐와 로그부터 순서 보장까지
    약 10분

    메시지를 처리한 뒤 삭제하는 큐와 기록을 보관하는 로그의 차이를 설명합니다. 중복 전달과 멱등성, 순서 보장, 처리 지연을 기준으로 메시지 큐를 비교합니다.

  • 이 응답은 누구 것인가요?
    약 12분

    SSE·WebSocket·postMessage에서 요청과 응답을 상관키로 연결하는 방법을 설명합니다. 요청을 하나씩 처리하는 큐의 한계와 타임아웃·지연 응답 문제를 실행 예제로 확인합니다.

  • 타입스크립트로 잘못된 상태 막기
    약 14분

    TypeScript의 태그 유니온과 브랜디드 타입으로 잘못된 상태를 줄이는 방법을 설명합니다. 입력 검증 결과를 타입에 담는 설계와 적용 범위를 예제로 살펴봅니다.

  • 그 로직은 어디에 살아야 할까요?
    약 4분

    검증과 권한 로직을 모델·서비스·컨트롤러 중 어디에 둘지 살펴봅니다. rich·anemic 도메인 모델을 비교하고, 도메인 서비스와 애플리케이션 서비스의 책임을 구분합니다.

  • DB 조회는 왜 아웃바운드일까요?
    약 4분

    호출 방향을 기준으로 인바운드·아웃바운드 어댑터를 구분합니다. 이벤트 리스너와 fetch, props 콜백을 예로 호출 방향과 코드 의존성의 차이를 설명합니다.

  • 도메인 모델은 왜 DB를 몰라야 할까요?
    약 7분

    헥사고날 아키텍처에서 도메인 모델을 DB와 프레임워크로부터 분리하는 이유를 설명합니다. React에 비유해 포트·어댑터를 이해하고, 코드 의존성을 제한하는 방법을 살펴봅니다.

  • 응집도와 결합도로 살펴보는 프론트엔드 코드 설계
    약 11분

    응집도와 결합도의 종류를 구분하고, 프론트엔드 컴포넌트와 모듈 설계에 적용해봅니다. 상태 관리·의존성 주입·이벤트 버스가 코드 간 의존 관계에 미치는 영향을 예제로 살펴봅니다.