Spring
[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..
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 한글 메서드 명 사용하기 실무에서 사용할지 모르겠지만, 나의 경우 테스트 코드의 메서드 명은 주로 한글..
[Spring Security] BasicAuthenticationFilter와 TestRestTemplates을 사용한 테스트코드 작성
적용하는 방법 @EnableWebSecurity(debug = true) @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { CustomLoginFilter filter = new CustomLoginFilter(authenticationManager()); http .httpBasic() } } BasciAuthenticationFilter를 설정하는 방법은 http의 Basic 옵션을 enable 시켜주면 된다. B..
[게시판 RESTful API] - RestController와 Service를 구현해보자 (3)
https://tae-wk.tistory.com/53 [게시판 RESTful API] - domain을 만들며 Entity를 알아보자. 1. 게시판을 저장할 POST 엔티티를 만들어준다. @Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class Post { @Id @Genera.. tae-wk.tistory.com 프로젝트 세팅과 domain을 작성하는 방법은 위 포스트를 참고하면된다. 1. RestController package com.developer.controller; @RestController @RequestM..