본문 바로가기

분류 전체보기

(717)
[DDD] Notification and Event 생소한 단어들일 수 있다. DDD를 하지 않으면, 잘 모른다. 우선, 공부를 해보자. Notification은 전파, 전달에 대한 기능을 구현하는 모듈이다. Event가 발생했을때, Notification을 주어서, 특정 이벤트를 발생시키는것이다. Outbox패턴으로 작업한다면, 이벤트를 저장하고, 배치나 스케줄러를 통해서 적정 단위로 처리된다. 이벤트 소싱과 Notification은 다르다. Notification이란, Repository에서 애그리게잇을 가져올때 이벤트를 사용해서 재구성한다. 재구성 하기 위해서는 이벤트 소싱이 가장 중요하다. 특정이벤트를 관심있어 하는 주체에 대해, Notification이 발동된다. Notification은 이벤트 소싱에 저장된 일련의 애그리게잇, 주체에게 이벤트를..
[Java] 제네릭을 조금 잘 써보면 어떨까 제네릭을 좀 잘 써보자. 제네릭은 개인적인 생각으로는 인터페이스의 존재이유와 비슷하다고 생각한다. 타입이나 제약을두지 않고, 해당 상속받은 개체에서 자유롭게 짜는것을 의미한다. 예를 바로 들어보자 package com.smith.PqrsFramework.Interface; public class OrderInterface { T name; R id; public T getName(){ return this.name; } public R getId(){ return this.id; } public void setName(T name){ this.name = name; } public void setId(R id){ this.id = id; } } 간단하게 제네릭 클래스를 사용하는 방법은 바로 이렇다. 그러..
[CS] 레이어드 아키텍처 간략하게 말하면 레이어드 아키텍처는 이렇다. 특징은 있다, 상위 레이어에서 하위 레이어에 대한 의존은 허용하지만, 하위 레이어에서는 허용하지 않는다. 인프라 스트럭처에서 사용자 인터페이스나, 응용 레이어에 대한 의존은 허용하지 않는다는 의미이다. 1) 인프라스트럭처 레이어 쉽게 얘기하면, 마리아 디비, 카프카 등 연결이 되어있는 레이어이다. Mybatis로 치면, 다오가 있을거고, JPA로 치면 레파지토리가 있을것이다. 무튼 이렇게 생각하면 된다. 2) 도메인 레이어 해당 도메인 레이어는 이렇다. 서비스나 비즈니스 로직이 들어간 레이어를 의미한다. 3) 응용계칭 컨트롤러, 사용자가 요청을 원하는 계층 정리해서 얘기하면, 사용자에게 원하는 요구를 받아서, 수행하는 계층이다. 뻔하고 알고있지만, 헷갈리거나 ..
[Spring] 멀티모듈의 개념 멀티모듈, 단일 프로젝트로하면 어떤 장점이 있을까? 왜 굳이 멀티 모듈을 두는것일까? 시스템적으로 보장이되고, 빠른 개발 사이클을 가질 수 있다. 멀티모듈과 MSA가 어떤 연관이 있을까? MSA에서는 분리와 병합이 자주된다. 시스템의 분리,통합을 유연하게 만들어줄 수 있는 좋은 아키텍처를 만들 수 있다. 클린 아키텍처라는 책에서는 모놀리틱과 msa적인 변경이 자유로운 아키텍처가 좋은 아키텍처라고 얘기한다. 대부분 공통화된 코드를 분류해서 뽑아내려고하면 공통화된코드를 Common으로 모은다. 그러면, common이 계속 커지면서 개발하기 힘들어진다. 1. 스파게티 소스가 된다. Common이 커지면서 영향범위가 점점 커지기 마련이다. 즉 스파게티 소스가 되고 분리가 어려워진다. 쉽게 말하면 뭐가 뭔지 모르..
[NestJs] Api 좀 더 Restful 하게 변경 거지같던 레거시..가 아니고 내 코드를 좀더 바꿨다. (controller) import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Put, NotFoundException } from '@nestjs/common'; import { CorpService } from './corp.service'; import { JwtAuthGuard } from 'src/auth/auth-guard'; import { Corp } from './entities/corp.entity'; import { ApiTags, ApiOperation, ApiResponse, ApiQuery, ApiParam, ApiBody } from '@nestjs/sw..
[NestJs] 수정, 삭제 저번에는 생성을 하는 API를 간단하게 개발했는데, 이제는 수정 및 삭제에 대한 API를 생성해보자 뭐 생성만 하면 사실 수정은 껌이다. 서비스는 기존 생성과 동일하다. 바뀐 부분이라면 dto,entity 가 변경됬다. (컨트롤러) @Put('') putCorp(@Body('corp') corpReqDto :CorpReqDto){ return this.corpService.saveCorp(corpReqDto); } (Dto) import { IsNotEmpty } from "class-validator"; import { Corp } from "./entities/corp.entity"; import { ClassSerializerInterceptor } from "@nestjs/common"; impo..
[NestJs] Post , 생성 간단한데, 이것저것 삽질을 많이한것같다. 무튼 스프링에서 넘어가는 개발자들을 위해서 도움이 될까 한다. class-transform, class-validator, auto-mapper,Interceptor등을 살펴봤지만, 뭔가 간단하게 dto entity를 변환하는데 불필요한 기능? 좀, 의도와 다른 기능들이 보였다. 그래서 이건 나중에 적용하도록 하려고한다.(class-validator는 dto validation에 많은 도움을 줄것같다) 무튼, 시작 entity에 메소드를 추가했다(이건 jpa소스 작성 습관 같다) import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; import { CorpReqDto } from '../corp.re..
[GIT]gitignore 파일내용추가 깃 레파지토리 항상 최상위에 존재한다. 해당 파일 내용을 변경해서 푸쉬하면 된다. 잘안되면 git rm -r --cached . git add . git commit -m "Apply .gitignore" 이 명령어로 초기화하고 커밋하면된다. 아래는 깃 파일 샘플 양식이다. 참고하자gi # : comments # no .a files *.a # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore..