분류 전체보기

[Spring Cloud] Spring Cloud Bus와 메시지브로커 연동 (1)
Spring Cloud Bus P2P Message Broker RabbitMQ vs Kafka Spring Cloud Bus 분산 시스템의 노드를 경량 메시지브로커와 연결 상태 및 구성에 대한 변경사항을 연결된 노드에게 전달한다. (Broadcast) 여기서 노드는 마이크로 서비스를 뜻한다. 대표적인 메시지브로커는 RabbitMQ, Kafka, ActiveMQ 가 있다. 그렇다면 피투피와 메시지브로커는 어떤 차이가 있을까 Peer-to-peer 피투피는 메인 서버를 거치지 않고 서버에 연결된 클라이언트끼리 직접 통신하는 방식이고 주로 블록체인 기술이나 게임 서버에 많이 활용된다. 현재 재직중인 직장의 블록체인 메인넷은 피투피 방식으로 되어있다. 메인넷 CLI에 listpeers라는 명령어가 있는데, 클..
[JPA] 다중 Unique 제약조건 생성하기
Unique 제약 조건 Unique 제약조건이 있는 컬럼은 모든 값이 고유하도록 만들 수 있습니다. 예시 create table NFT ( NFT_ID bigint primary key auto increment, NFT_NAME varchar(25) unique, ) comment 'NFT 정보'; NFT 테이블에서 NFT_NAME은 중복되면 안됨으로 Unique 제약조건을 추가할 수 있습니다. 다중 Unique 제약 조건 다중 Unique는 여러 컬럼을 묶어서 Unique로 만드는 제약조건입니다. 예시 create table NFT ( NFT_ID bigint primary key auto increment, NFT_NAME varchar(14) not null, NFT_SUB_NAME varchar..

[디자인 패턴] 팩토리 메서드 패턴
팩토리메서드는 부모 클래스에서 객체를 생성하는 인터페이스를 제공하고, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성패턴입니다. 문제 트럭 운송만 처리 가능한 대부분의 코드가 'Truck' Class에 있습니다. 얼마 후 해상 물류 기능을 추가해 달라는 요청이 수십 개씩 받기 시작했다고 가정해 봅시다. 현재 대부분의 소스코드가 'Truck' Class에 결합되어 있기 때문에 'Ship' Class를 추가하려면 전체 코드 베이스를 변경해야 할 것입니다. 해결 운송 매체에 관한 인터페이스 'Transport'를 만들고 'Truck'와 'Ship' 등 수단 클래스가 Transport를 구현시키게 합니다. Truck과 Ship은 각각 트럭 운송, 해양 운송을 맡게됩니다. 예시 public i..
Effective Java를 읽으며 코드 리펙토링
이펙티브자바의 목차 생성자 대신 팩토리 메서드를 고려해라 Item: Consider static factory methods instead of constructors 장점 1. 이름을 가질 수 있다. package com.everyparking.api.dto; import lombok.Builder; import lombok.Data; import org.springframework.http.HttpStatus; @Data @Builder public class DefaultResponseDtoEntity { private String message; private Object data; private HttpStatus httpStatus; private DefaultResponseDtoEntity(..
[Spring Boot] 요청, 응답 시 Json에 루트 추가하기
RealWorld로 스프링부트를 공부하던 중 다음과 같은 Json 포맷을 발견했다. Request Format { "user": { "email": "jake@jake.jake", "password": "jakejake", "username": "jake" } } 위와 같이 "user"로 VO를 한번 감싸는 방식의 요청이다. Response Format { "user": { "email": "jake@jake.jake", "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqYWtlIiwiZXhwIjoxNjYzOTk2NTA4LCJ1c2VybmFtZSI6Impha2UifQ.W3h0uxdWyvIgbgaG1nqfCsIcvyIG06gZhUT95YVNPCs", ..
객체지향의 사실과 오해를 읽으며 코드 리팩토링
http://www.yes24.com/Product/Goods/18249021 객체지향의 사실과 오해 - YES24 『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝게도 많은 사람들이 객체지향의 본질을 오해하고 있다. 가장 www.yes24.com "객체지향의 사실과 오해"는 인프런 김영한님의 JPA강의에서 추천한 책이다. 사람은 자동차 문을 열면 안된다. 객체지향에서는 자동차도 객체이기 때문에 사람이 자동차에게 문을 열어달라고 요청해야한다. 자동차가 예외를 확인한 후 문을 여는 것이 옳다. 위 내용을 읽고 나의 코드를 리팩토링 해봤다. 기존 코드 도메인 @Getter @NoArgsConstructor @AllArgsConstruct..

[학교 관리 프로젝트] 도메인 단위 테스트와 테스트 코드를 가독성있고 빠르게 작성하는 방법
테스트할 도메인은 아래 포스트를 참고하자. 2022.08.31 - [학교 관리 서비스 프로젝트] - [학교 관리 프로젝트] UserDetails를 구현한 User 도메인, @Query를 사용한 JPQL과 서비스 코드 구현 [학교 관리 프로젝트] UserDetails를 구현한 User 도메인, @Query를 사용한 JPQL과 서비스 코드 구현 UserDetails.java UserDetails를 상속한 클래스는 Abstract하거나 아래의 메서드를 완성시켜야한다 반환타입이 boolean 값인 메서드는 이 계정이 유효한지 판단하는 메서드다. 접속한지 90일이 지났거나, 신 tae-wk.tistory.com 한글 메서드 명 사용하기 실무에서 사용할지 모르겠지만, 나의 경우 테스트 코드의 메서드 명은 주로 한글..

[JUnit] - JPA · MySQL 테스트 Failed to load ApplicationContext 트러블 슈팅
Failed to load ApplicationContext ApplicationContext load를 실행한 원인은 다양하다 JpaTest중 예외가 발생했다면 이 글을 참고하자. h2같은 인메모리 데이터베이스 또는 DERBY, HSQL를 사용하는 테스트에서는 아마 만날 있이 없을 것이다. IllegalStateException or NullPointerException 테스트 중 datasource를 불러오지 못했다면 전자, JpaRepository를 상속한 객체에 접근했다면 후자일 것이다. 자세한 에러 원인은 아래에서 보고 우선 해결 방법부터 설명하겠다. @DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Repla..