전체 글
-
[ Hexagonal Architecture ] 헥사고날 아키텍처 이해하기공부하기/아키텍처 2023. 2. 16. 19:35
헥사고날(Hexagonal) 아키텍처는 소프트웨어 디자인 패턴 중 하나로, 소프트웨어 시스템을 구성하는 다양한 컴포넌트들을 격리시키는 것을 목적으로 합니다. 이 아키텍처는 포트와 어댑터(Port and Adapter) 아키텍처로도 알려져 있습니다. 헥사고날 아키텍처의 핵심 개념은 "포트(Port)"와 "어댑터(Adapter)"입니다. 포트: 시스템 외부와의 인터페이스를 정의 어댑터: 포트를 구현 포트는 시스템의 기능을 외부에 노출하고, 어댑터는 그 기능을 구현합니다. 헥사고날 아키텍처는 이러한 포트와 어댑터를 중심으로, 비즈니스 로직과 외부 시스템을 분리합니다. 이로 인해 시스템은 더욱 모듈화되고, 유연성과 유지보수성이 높아집니다. 또한, 외부 시스템의 변경에 대한 영향을 최소화할 수 있습니다. 아키텍처..
-
[ Layered Architecture ] 레이어드 아키텍처 이해하기공부하기/아키텍처 2023. 2. 16. 17:55
레이어드 아키텍처는 소프트웨어 아키텍처의 일종으로, 각 계층(layer)을 엄격하게 분리하여 구성하는 아키텍처 스타일입니다. 이 아키텍처에서 *각 계층은 서로 직접적인 의존성을 가지지 않으며, *높은 결합도와 낮은 응집도를 갖는 것을 지양합니다. 일반적으로 레이어드 아키텍처는 다음과 같은 세 가지 계층으로 구성됩니다. 프레젠테이션 계층(Presentation Layer): 사용자 인터페이스를 담당하는 계층으로, 사용자의 요청을 받아 처리하고 응답을 반환합니다. 주로 웹 어플리케이션에서 브라우저나 모바일 앱과 같은 클라이언트와 상호작용하는 부분입니다. 애플리케이션 계층(Application Layer): 비즈니스 로직을 처리하는 계층으로, 사용자 요청을 받아 해당 요청에 대한 작업을 수행하고 데이터를 처리..
-
4. NestJs & Hexagonal - [ 테스트 ] - 실패하는 테스트가 성공하도록 최소한으로 구현하기공부하기/node.js 2023. 2. 14. 18:46
지난 포스팅글로 실패하는 survey module의 crud 및 search 메서드의 실패하는 테스트 케이스를 작성했습니다. 이번 포스팅으로 실패하는 테스트가 성공할 수 있도록 최소한으로 구현해보도록 하겠습니다. 포스팅으로 사용되는 코드는 Create 메서드를 기준으로 작성했습니다. 코드는 여기를 참고해주세요 survey module import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CREATE_SURVEY_INBOUND_PORT } from './in-port/survey-create.ip'; import { CREATE_SURVEY_OUTBOUND_PORT } from './..
-
3. NestJs 설문조사 미니 프로젝트 - [ 테스트 ] - 실패하는 테스트 케이스공부하기/node.js 2023. 2. 14. 18:37
지난 포스팅에서 작성한 in bound port, out bound port, service를 사용하여 실패하는 테스트 케이스를 작성하도록 하겠습니다. 실패하는 테스트 케이스를 작성한 뒤 각각의 테스트 케이스가 통과할 수 있도록 구현할 예정입니다. 지난 포스팅에서 모든 서비스의 execute의 리턴값을 null로 설정했기 때문에 이번 포스팅에서 작성된 모든 테스트 케이스는 실패합니다. 설문지 목록(findAll) 테스트 케이스 import { SurveyFindAllInPortInputDto, SurveyFindAllInPortOutputDto, } from '../../in-port/survey-findall.ip'; import { SurveyFindAllService } from '../survey..
-
2. NestJs & Hexagonal - [ ports ]공부하기/node.js 2023. 2. 12. 20:52
헥사고날 아키텍처로 애플리케이션을 만들기 위해서 우선 in-bound-port, out-bound-port 인터페이스와 dto의 타입을 미리 선언하고 in bound port를 implements한 service를 사용하여 테스트 케이스를 작성할 생각입니다. 구현된 서비스는 모두 null을 리턴하고, 곧 작성할 테스트 케이스에서 실패하는 테스트 케이스를 작성하는데 활용할 예정입니다. 전체 코드는 여기를 참고해 주시고 이 포스팅은 Survey Create 과정을 기준으로 진행됩니다. survey-module 디렉토리 구조 Survey Create UseCase SurveyController : 컨트롤러는 service를 의존하는 것이 아닌 in bound port인 interface를 의존한다. Creat..
-
1. NestJs 설문조사 미니 프로젝트 - [ 엔티티 ]공부하기/node.js 2023. 2. 12. 19:56
각 모듈을 구현하기 전 엔티티를 설계합니다. 인덱스는 설정하지 않았습니다. 초기 버전의 엔티티를 미리 설계한 후 구현하면서 필요한 부분을 수정하는 방향으로 포스팅을 이어나갈 생각입니다. ERD 하나의 설문지는 여러개의 질문을 갖을 수 있고 하나의 질문은 여러개의 보기를 갖을 수 있는 구조입니다. 응답하는 유저 테이블과 유저 응답테이블이 존재하고 유저 응답 테이블의 경우 질문 테이블과 관계를 갖습니다. response 테이블의 경우 survey_id를 따로 저장하지 않았습니다만, 성능테스트를 통해 survey_id를 넣는것이 더 좋은 성능을 갖는다면 추가하는 방향을 생각하고 있습니다. Entities src/survey/Survey.entity.ts import { Question } from '../qu..
-
MySQL Storage Engines 요약카테고리 없음 2023. 2. 10. 17:11
데이터베이스의 성능을 극대화하기 위해 효과적으로 사용할 수 있도록 MySQL의 각 스토리지 엔진의 기능을 이해하는 것이 필수이다. MySQL은 다음과 같이 테이블에 다양한 스토리지 엔진을 제공합니다. MyISAM MyISAM은 이전 ISAM 스토리지 엔진을 확장 MyISAM 테이블은 압축 및 속도에 최적화 MyISAM 테이블은 플랫폼과 운영 체제 간에도 이동 가능 MyISAM 테이블의 크기는 최대 256TB까지 가능 yISAM 테이블을 읽기 전용 테이블로 압축하여 공간을 절약할 수 있다. MyISAM 테이블은 트랜잭션에 안전하지 않다. MySQL 버전 5.5 이전에는 저장 엔진을 명시적으로 지정하지 않고 테이블을 만들 때 MyISAM이 기본 저장 엔진이다. 버전 5.5부터 MySQL은 InnoDB를 기본..
-
MySQL UNION 요약공부하기/데이터베이스 2023. 2. 10. 16:21
UNION : 여러 select 문에서 둘 이상의 결과를 단일 결과로 결합할 때 사용한다. 모든 선택 문에 나타나는 컬럼의 수와 순서는 동일해야 한다. 결합되는 열의 데이터 타입이 동일하거나 호환되어야 한다. 기본적으로 UNION 연산자는 DISTINCT 연산자를 명시적으로 지정하지 않은 경우에도 중복 행을 제거한다. UNION ALL을 사용해서 중복 행이 제거되지 않은 결과를 얻을 수 있다. UNION ALL은 중복을 제거하지 않기 때문에 UNION보다 빠르다. 문법 SELECT column_list UNION [DISTINCT | ALL] SELECT column_list UNION [DISTINCT | ALL] SELECT column_list ... UNION VS JOIN -> JOIN은 결과 ..