전체 글
-
도메인 주도 설계 - 2. 의사소통과 언어 사용(UBIQUITOUS LANGUAGE)디자인 패턴 2024. 4. 4. 09:48
본 내용은 에릭 에반스의 도메인 주도 설계를 공부하면서 제 나름대로 이해하기 쉽게 정리한 글입니다. 이해가 어려우시다면 댓글 부탁드립니다. 문제 공통 언어가 없는 프로젝트는... 개발자가 도메인 전문가를 위해 자신들의 언어를 번역해줘야 함 도메인 전문가도 개발자 간, 다른 도메인 전문가 간의 언어를 번역해줘야 함 심지어 개발자 사이에서도 서로 번역해줘야함 이렇게 되면 일상적인 토론에서 쓰이는 용어가 코드에 녹아는 용어와 단절된다. 번역은 의사소통을 무디게 하고 지식 탐구는 빈약하게 만든다. UBIQUITOUS LANGUAGE(보편 언어) 프로젝트 팀원들 사이에 탄탄한 토대가 될 보편 언어가 필요하다. 도메인 모델이 이 보편 언어의 근간을 제공하고 소프트웨어 구현에 이르기까지 연결할 수 있다. 보편 언어는..
-
도메인 주도 설계 - 1. 지식 탐구디자인 패턴 2024. 4. 2. 23:33
본 내용은 에릭 에반스의 도메인 주도 설계를 공부하면서 제 나름대로 이해하기 쉽게 정리한 글입니다. 이해가 어려우시다면 댓글 부탁드립니다. 지식탐구 지식 탐구는 혼자서 하는 활동이 아니다. 개발자가 도메인 전문가와 같이 협업하여(질문과 설명이 오가며) 도메인에 대한 지식을 이해하고 어떻게 동작하는지 알아가는 것이다. 이를 기반으로 다이어그램같은 도구로 초기 모델을 작성할 수 있다. 지식 탐구를 진행하면 다음과 같은 활동들이 거치게 된다. 모델과 구현의 연계: 도메인 모델과 구현이 본질적으로 연결된다. 모델을 기반으로 하는 언어 정제: 모델을 기반으로 용어들이 통일되고 용어들로 문장을 구성할 수 있게 된다. 별도의 해석 없이 문장을 명확히 이해할 수 있게 된다. 풍부한 지식이 담긴 모델 개발: 모델은 단순..
-
마이크로 서비스 아키텍처를 알아보자 (SOA의 공통점과 차이점)etc. 2022. 5. 22. 20:58
왜 마이크로 서비스를 배워야 하나? 가장 많이 사용되는 패러다임 검증된 패러다임 특정 기술에 묶여 있지 않은 아키텍처 MSA 아키텍처를 사용하는 개발자 수요가 많음 MSA전의 아키텍처들 1. 모놀리딕 아키텍처(Monolith Architecture) 가장 처음에 나온 아키텍처 프로세스안에 모든 소프트웨어 컴포넌트가 들어있는 구조 각 컴포넌트 끼리 강하게 결합되 있음 (의존성↑) 장점 디자인하기 쉬움 네트워크 구축, 메시지 메커니즘, 큐 등 필요없음 네트워킹, 직렬화 등 필요없기 때문에 퍼포먼스가 좋음 문제 Single Technology Platform 모놀리딕은 모든 컴포넌트가 하나의 개발 플랫폼을 사용해서 개발되어야함 항상 그 작업이 최선일 수 없음 특정 기능을 위해 다른 플랫폼을 사용할 수 없음 미..
-
부하테스트 - Locust (설치 및 스크립트 작성)파이썬 2022. 5. 15. 22:14
들어가며 파이썬으로 작성된 Locust라는 툴을 설치해서 사용하는 방법을 알아보고 웹 애플리케이션에 부하 테스트를 적용해본다. 참고 사항: locust는 영어로 메뚜기라는 뜻인데, 이 툴에서 부하를 주는 것을 swarming(무리 짓기)이라고 표현한다. 왜 Locust? 우선 다른 부하 테스트 툴도 많지만 왜 이 Locust를 사용하면 어떤 이점이 있냐면, Jmeter, nGrinder,SOAP UI 등의 도구는 사용과 스케일링을 하는데 어려움이 있는 반면에, locust는 설치와 사용이 편리하고, 파이썬 스크립트로 작성을 하기 때문에 훨씬 빠르고 간편하게 부하 테스트를 해볼 수 있다. 설치 설치는 아주 간단하다. pip install locust # poetry를 사용한다면 poetry add locu..
-
Node.js 이벤트이미터(Eventemitter)란?NodeJS 2022. 5. 8. 19:23
들어가며 이벤트가 갖는 의미는 무엇일까? 애플리케이션안에서 발생한 응답 가능한 사건을 말한다. Node JS 한정 개념은 아니지만 Node JS의 아키텍처에 그간을 이루는 중요한 개념이다. Node JS에서의 이벤트 시스템 이벤트와 event 모듈의 EventEmitter로 발생하는 이벤트 이루어져 있다. 각각 무엇인지 알아보면, 시스템 이벤트 libuv 라이브러리가 적용된 C++ 코어에서 타이머 작업 혹은 DB 커넥션, IO, HTTP 등을 처리한다. libuv 이벤트 루프에는 6개의 페이즈가 있는데 시스템 이벤트의 종류에 따라 각 페이즈에 분류되어 처리된다. EventEmitter 옵저버 패턴으로 디자인되어 있으며, 개발자가 실제로 이벤트를 만들고 이벤트를 발생시킬 수 있도록 만들어져 있다. Even..
-
Poetry 의존성 Syntax (~, ^ 에 대해)파이썬 2022. 4. 20. 17:13
Poetry로 의존성 관리하다보면 pyproject.toml에 ~나 ^가 버전앞에 적혀있는 것을 볼 수 있다. 이러한 Syntax에 대해 정리해보았다. Caret Requirements Django = "^3.2.4" 0이 아닌 가장 왼쪽의 버전 섹션 까지만 유지한다. 3.2.4 ≤ Django < 4.0.0 사이의 버전을 유지하면서 Poetry가 의존성 관리를 해준다. Django = “^0.3.1” 이라면 0.3.1 ≤ Django < 0.4.0 사이의 버전을 유지한다. Tilde Requirements Django = "~4.0.4" 가장 왼쪽 섹션 기준으로 버전을 유지한다. major, minor, patch 섹션이 존재한다면 Django = "~4.0.4” → 4.0.4 ≤ Django < 4...
-
[Django] DRF Router(라우터) 동작 원리파이썬/Django 2022. 2. 13. 22:42
들어가며 DRF의 대표 클래스(ViewSet, Serializer, Router)중 하나인 Router의 종류와 동작원리를 알아본다. Router는 간단하고 빠르게 자동으로 url 라우팅을 할 수 있도록 해준다. from rest_framework import routers from apps.account. import views router = routers.SimpleRouter() router.register(r'users', views.UserViewSet) urlpatterns = router.urls 위와 같은 코드를 작성하면 ^users/$ ^users/{int: lookup}/$ 의 url패턴이 자동으로 생성된다. DRF에는 SimpleRouter, DefaultRouter 두 가지를 제공..
-
[Django] DRF Serializer(시리얼라이저) 동작 원리파이썬/Django 2022. 1. 24. 22:44
들어가며 DRF에서 주요 클래스(ViewSet, Router, Serializer) 중 하나인 Serializer의 동작 원리를 살펴본다. Serializer의 기능은 세 가지가 있는데 다음과 같다. 모델 객체 → 파이썬 네이티브 타입인 dict 타입 객체로 직렬화 dict 타입의 데이터를 validation dict 타입 → 모델 객체로 역 직렬화 validation 기능은 주로 역 직렬화 전에 dict 타입의 데이터를 검증해주는 기능으로 사용된다. 이 Seirlaizer의 세 기능을 각각 어떻게 동작하는지 알아본다. 1. Model → dict class UserSerializer(serializers.Serializer): username = serializers.CharField() passwor..