프로그래밍 8

헥사고날 아키텍쳐 - 도메인 헥사곤으로 비즈니스 모델링(1)

도메인 헥사곤으로 비즈니스 모델링엔티티를 활용한 문제영역 모델링도메인 엔티티의 순수성문제영역 모델링의 주요 초점은 최대한 실제 시나리오를 코드로 변환하는 것, 비즈니스 요구사항을 이해하고 코드로 변환하는데 실패하면 결과적으로 비용의 손실이 발생할 수 밖에 없다문제영역 모델링의 핵심은 엔티티를 만드는 것이다. 엔티티가 비즈니스 요구사항과 밀접한 관계를 가져야 하기 때문에, 비즈니스 관련 코드와 기술 관련 코드가 혼동되는 것을 방지 해야한다.(기술적: 소프트웨어 맥락에서만 존재하고 의미가 있는 것)헥사고날 아키텍처는 전통적인 비즈니스 문제를 해결하려는 프로젝트에 초점이 맞춰져 있기 때문에, 새로운 개발 프레임워크와 같은 순수하게 기술적인 프로젝트에는 최선의 접근 방법이 아닐 수도 있다.도메인 엔티티는 비즈니..

프로그래밍 2024.08.18

헥사고날 아키텍쳐 - 프레임워크 헥사곤

프레임워크 헥사곤소프트웨어와 통신할 수 있는 기술을 결정한다. 통신은 두 가지 형태로 발생할 수 있다.드라이빙 방식(Driving): 입력 어댑터(Input Adapter)를 사용한다.드리븐 방식(Driven): 출력 어댑터(Output Adapter)를 사용한다.드라이빙 오퍼레이션과 입력 어댑터드라이빙 오퍼레이션은 소프트웨어에 동작을 요청하는 것이다.웹 애플리케이션에서 사용자가 버튼 눌러 폼을 제출하는 경우외부 시스템에서 REST API로 애플리케이션에 데이터를 요청하는 경우외부 시스템에서 MQ로 메세지를 보내는 경우이러한 API는 외부 엔티티가 시스템과 상호작용하고, 외부 엔티티의 요청을 도메인 애플리케이션으로 변환하는 방법을 정의한다.드라이빙이라는 단어는 외부 엔티티들이 시스템의 동작을 유도하기 때..

프로그래밍 2024.08.04

헥사고날 아키텍쳐 - 애플리케이션 헥사곤

애플리케이션 헥사곤애플리케이션 특화 작업을 추상적으로 처리하는 곳, 기술 관심사를 직접 다루지 않기 때문에 추상적인 것을 이야기한다. 도메인 비즈니스 규칙에 기반한 소프트웨어 사용자의 의도와 기능을 표현한다.유스케이스도메인 제약사항을 지원하기 위해 시스템의 동작을 소프트웨어 영역 내에 존재하는 애플리케이션 특화 오퍼레이션을 통해 나타낸다.엔티티 및 다른 유스케이스와 직접 상호작용하고 그것을 유연한 컴포넌트로 만들 수 있다.자바에서는 인터페이스로 정의된 추상화로 나타낸다.public interface RouterViewUseCase { List getRouters(Predicate filter);}입력 포트유스케이스 인터페이스를 구현하는 것이 입력 포트의 역할 이다. 애플리케이션 수준에서 유스케이스에..

프로그래밍 2024.08.04

헥사고날 아키텍쳐 - 도메인 헥사곤

도메인 헥사곤실 세계 문제를 이해하고 모델링하는 활동스타트업 같은 개발자나 도메인 전문가 모두 시스템의 목적에 대한 명확한 비전을 갖고 있지 않거나,문제 영역이 존재하고 도메인 전문가들이 분명하게 알고 있는 상황에서 문제 영역을 엔티티, 값 객체로의 변환 방법을 파악하지 못하면 잘못된 가정을 기반으로 구축되게 될 것이다.이러한 점은 소프트웨어가 간단하게 시작해서, 기반 코드가 커짐에 따라 기술 부채가 누적되고 유지 보수가 더 어려워지는 이유 중 하나로 여겨진다.엔티티식별자 (Identifier): 엔티티는 고유한 식별자를 가지고 있으며, 이 식별자를 통해 다른 엔티티와 구분된다. 동일한 엔티티는 시간이 지나도 동일한 식별자를 유지한다.변경 가능성 (Mutability): 엔티티는 시간이 지남에 따라 상태..

프로그래밍 2024.08.04

헥사고날 아키텍쳐

포트와 어댑터 아키텍쳐라고도 불림 메인 아이디어비즈니스 코드를 기술 코드로부터 분리하는 것비즈니스 코드에 피해를 주지 않고 기술 코드 변경이 가능해야 한다핵심 도메인 로직을 외부 인터페이스(입출력, DB, 사용자 인터페이스 등)으로 부터 분리함으로 달성도메인 헥사곤소프트웨어가 해결하기를 원하는 핵심 문제를 설명하는 요소의 결합, 이러한 요소들은 기술에 구애 받지 않는 형태로 표현되어야 함구성 요소엔티티 - 식별자를 할당할 수 있는 것값 객체 - 엔티티들을 합성하기 위한 불변 객체애플리케이션 헥사곤도메인 헥사곤에서 나오는 비즈니스 규칙을 사용, 처리, 조정비즈니스 측면과 기술 측면 사이에서 양쪽과 상호작용하는 중개자 역할프레임워크 헥사곤애플리케이션 기능의 노출 방법을 결정, 예를 들면 REST, gRPC ..

프로그래밍 2024.08.04

Git reset hard 취소하기, 되돌리기, 복원하기

git reset --hard는 HEAD(커밋 포인터)의 위치를 변경하는 것 예를 들어 원래의 HEAD의 위치가 d937ea20인데 git reset --hard 4251c50f1 명령어로 reset했다고 해보자. git reflog로 reference 로그를 확인 할 수 있는데(커밋 포인터의 위치 변경 로그 등) 위와 같이 확인 할 수 있다. ( git reset --hard 4251c50f1 명령어를 사용했다는 걸 확인 할 수 있음 ) 이를 원복한다는 의미는 다시 원래의 커밋으로 HEAD를 변경해주면 된다는 의미와 같다. git reset --hard d937ea20a로 원래의 커밋위치로 HEAD를 변경해주면 된다.

프로그래밍 2021.05.04

Mysql Server Timezone 설정방법

Mysql Server Timezone 설정 방법 필자는 Mysql 5.7로 진행하였다.(5.7 이하의 버전이나 이후의 버전도 레퍼런스 확인 결과 비슷함) 아래의 명령어로 현재 타임존 확인가능 SELECT @@GLOBAL.time_zone, @@SESSION.time_zone; 위와 같이 출력되면 기본 세팅인 것(As the value 'SYSTEM', indicating that the server time zone is the same as the system time zone. - 시스템 시간대를 따라간다고 한다.) If set to SYSTEM, every MySQL function call that requires a time zone calculation makes a system librar..

프로그래밍 2020.11.16

Http Response Code에 대한 간단한 정리

400과 404의 차이에 대해 구글링하던 결과에 대해 정리해 보고자 한다. 자세한 사항은 표준문서 RFC 2616(https://tools.ietf.org/html/rfc2616#section-10.4)을 참고하자. RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 [Docs] [txt|pdf] [draft-ietf-http...] [Tracker] [Diff1] [Diff2] [Errata] Obsoleted by: 7230, 7231, 7232, 7233, 7234, 7235 DRAFT STANDARD Updated by: 2817, 5785, 6266, 6585 Errata Exist Network Working Group R. Fielding Request..

프로그래밍 2020.02.21