개요인터넷을 돌아다니던 도중.. 리스트에 단일한 객체만 들어가는 경우 Collection.singletonList() 를 사용하는 것이 좋다는 글을 보았다.테스트 코드인 경우 유용함 - 실 비즈니스 로직엔 싱글톤보단 단순 리스트 사용하는 게 확장에 유리하기에.. 실제로 GPT 도 싱글톤 리스트를 추천하는 것을 보았다.왜 싱글톤 리스트를 단일값인 경우 사용하는 거지?일단 장점이 몇가지 있다.불변성Collections.singletonList 는 불변 리스트를 생성한다.해당 리스트는 단 하나의 요소만 포함되고, 생성 후에는 해당 요소를 추가하거나 제거할 수 없다!메모리 효율사실 정말 미미한 정도라 의미가 있나 싶지만…테스트 코드는 최대한 가벼워야한다고 생각한다!내부적으로 단일 요소만을 저장하기에, 메모리 사..
🎿엔티티 안에 내부 클래스Member VO 에서 엔티티로 전환과정에서Member VO 안에 내부 클래스로 enum 타입을 두고 사용하는 경우마이그레이션 작업시, 괜히 귀찮게 상위수준으로 enum 을 빼야하는 일이 생겼다.타입을 내부에 두는 경우 보기는 쉽지만,만약 가져다가 사용하는 곳이 많아지는 경우, 귀찮은 상황을 야기시킬 수도 있겠다는 생각을 하였다.만약 내부클래스가 존재하고 MemberVO 와 MemberEntity 를 공존시켜야하는 경우 인텔리제이의 리팩토링 기능을 사용하여내부 클래스를 외부로 추출할 수 있다.그냥 앞으로는 내부에 enum 을 두지 않는게 더 나을거같다는 생각이 들었다. Uploaded by N2T
OpenFeign 설명선언적 웹 서비스 클라이언트를 작성하기 위한 Java HTTP 클라이언트 바인더 라이브러리이다.Feign의 주요 목적은 REST API 를 사용하는 서비스 간의 통신을 단순화하고, MSA 구조상 Service Client 를 쉽게 생성할 수 있도록 등장했다.Spring Cloud 와의 연관성스프링 클라우드는 MSA 같은 분산 시스템 패턴을 쉽게 구현할 수 있게 지원하는 프레임워크의 모음중 하나이다.역사는 Netlix OSS 부터 시작하는데.. 이건 너무 길어서 제외함공식문서상 호환Spring Cloud현재 나는 스프링 부트 2.7.16 버전이기에, 2021.0.x aka Jubilee 버전을 사용하면 될 것같다.그래들 추가ext { set('springCloudVersion', "2..
@PreAuthorize("hasRole('ROLE_CUSTOMER')") @PostMapping("/v1/api/orders") public MessageDTO createOrder(@ModelAttribute OrderPageRequestDTO orderPageRequestDTO, @CurrentUser Jwt jwt) { log.info("createOrder orderPageRequestDTO : {}", orderPageRequestDTO); UserDetailsServiceImpl.CustomUserDetails customUserDetails = userDetailsService.loadUserByJwt(jwt); Member member = Member.from(customUserDetai..
역할트랜잭션 상태에 따라 이벤트 핸들러를 실행할 수 있음.예시 상황트랜잭션이 성공적으로 커밋된 후에만 이벤트 핸들러를 실행하도록 설정할 수 있다.트랜잭션 중 발생한 이벤트가 실제로 데이터베이스에 반영된 후에 처리되어야 할 때 유용어노테이션 사용@TransactionalEventListenerphase 속성을 통해 트랜잭션의 어떤 단계에서 이벤트 핸들러를 실행할지를 지정할 수 있습니다. TransactionPhase 열거형( ENUM )을 사용하여 다음과 같은 단계를 지정할 수 있다.BEFORE_COMMIT: 트랜잭션이 커밋되기 바로 전에 실행됩니다.AFTER_COMMIT: 트랜잭션이 성공적으로 커밋된 후에 실행됩니다.AFTER_ROLLBACK: 트랜잭션이 롤백된 후에 실행됩니다.AFTER_COMPLETI..
이전 상황version: '3.8' services: mysql: image: "mysql:5.7.16" container_name: item-browser-mysql environment: MYSQL_ROOT_PASSWORD: ? MYSQL_DATABASE: item-browser MYSQL_USER: item-admin MYSQL_PASSWORD: ? # 문자 인코딩 설정 MYSQL_CHARSET: 'utf8mb4' MYSQL_COLLATION: 'utf8mb4_unicode_ci' command: --lower_case_table_names=1 --character-set-server=utf8mb4 volumes: - mysql-data:/var/lib/mysql ports: - "3307:3306..