1. @Mock을 사용하는 이유 단위테스트는 테스트 대상 클래스만 검증하려는 목적이 있지만, 보통 클래스는 여러 다른 클래스에 의존되어있다.그래서 다른 클래스들은 정상적으로 작동하고 있다고 가정을 해야지 원하는 대상 클래스에 대한 테스트를 진행할수 있을것이다. 여기에 서비스에 대한 단위테스트를 작성하고 싶지만 레포지토리와 연결되어있다. 하지만 레포지토리에서 DB를 사용해서 데이터를 얻어야하고, 또한 서비스에 대한 테스트인데 DB정보가 바뀌는거에 의해 서비스의 단위테스트 결과가 바뀐다면 그건 잘못된 테스트일것이다.public class UserService { private final UserRepository userRepository; public UserService(UserRepos..
BackEnd/SpringBoot
1. ReflectionTestUtils이란Spring Framework에서 제공하는 테스트 유틸리티 클래스이다.테스트 코드에서 Reflection을 사용해서 private 필드나 private 메서드에 접근하기 위해 사용한다. 2.사용예시다음 DiscountService는 할인률을 private 필드로 가지고있다.class DiscountService { private double discountRate = 0.1; public double applyDiscount(double price) { return price - (price * discountRate); }} 하지만 테스트에서는 다른 할인률에 대해서도 테스트하고 싶다면, ReflectionTestUt..
1. DTO Projection 이란?데이터베이스에서 엔티티 전체를 가져오지 않고 필요한 컬럼만 조회해서 DTO로 매핑하는 방식을 말한다. 만약 이런 테이블이 있을다고 생각해보자 근데 ResponseDto로 Quest를 반환할때 좋아요수랑 제작자의 이름까지 같이 반환하고싶다.그러면 일반적인 경우라면 Service단에서 연관된 객체들에서 어쩌구저쩌구.... 를 해서 해당 dto를반환할것이다.public record QuestWithLikeResponseDto( Long id, String title, String description, String createrName, Long createrId, Long likeCount, String createdAt) {} ..
0.예전에 만든 로컬 이미지 업로드https://asa9874.tistory.com/673이건 예전에 만들었던 이미지 업로드 기능인데 이번에는 이것을 AWS S3를 사용해서 마이그레이션 할것이다.public class ImageUploadService { private static final String UPLOAD_DIR = "C:/uploads/"; public String uploadImage(MultipartFile file) throws IOException { if (file == null || file.isEmpty()) { throw new IOException("Image file is empty"); } try { ..
1. RabbitMQ일단 RabbitMQ는 메시지 큐 구조에서 메시지를 큐에 저장하고 전달하는 메시지 브로커중 하나이다.왜 쓰는지에 대해서는 아래에서 실전 코드로 알아보겠다. 2.사용 예시2-1. RabbitMQ 실행우선 RabbitMQ를 설치해서 실행해야하는데, 나의 경우엔 로컬 환경에 설치하는건 귀찮기 때문에 Docker 환경으로 빠르게 이미지를 가져와서 실행하도록 하자. docker-compose.yml 파일에 다음 RabbitMQ 설정을 추가하여 docker-compose up --build 할시 RabbitMQ가 실행되도록한다. rabbitmq: image: rabbitmq:management container_name: rabbitmq ports: - "5672:..
1.도달 가능성(reachability)도달 가능성은 객체가 영속성 컨텍스트에 포함될 수 있는지를 결정하는 개념이다.즉, 영속화될 자격이 생긴다는거다.(영속화되는게 아니라 자격이 생긴다는것) 객체 간의 참조 관계에 의해 한 객체가 다른 객체를 참조하고 있으면, 참조된 객체는 도달 가능하게되고 도달 가능한 객체는 영속성 컨텍스트에 의해 관리되며, 데이터베이스와의 동기화가 이루어진다. 만약 다음 같은 3개의 객체가 있다고 볼때, 지금 Aricle은 Board와 Member 객체를 참조관계로 가지고있다.public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany..
0.개요https://asa9874.tistory.com/699 [SpringBoot] STOMP WebSocket 1:1 메시징 사용자별 구독관리https://asa9874.tistory.com/697 [SpringBoot] React + SpringBoot + JWT + Stomp으로 WebSocket 채팅 구현하기1.STOMP(Simple Text Oriented Messaging Protocol)텍스트 기반의 메시징 프로토콜으로 웹소켓과 함께 사용되어 클라이언asa9874.tistory.com해당 글의 이어서이다. 이제 websocket을 이용해서 실시간 채팅방을 만드는것을 완성하였다.그러면 이제 채팅방에 이미지를 업로드 하는 기능을 만들어보자.(AWS 써서 하는거 말고 로컬에서하는 이미지 업로드..
https://asa9874.tistory.com/697 [SpringBoot] React + SpringBoot + JWT + Stomp으로 WebSocket 채팅 구현하기1.STOMP(Simple Text Oriented Messaging Protocol)텍스트 기반의 메시징 프로토콜으로 웹소켓과 함께 사용되어 클라이언트와 서버 간의 실시간 통신을 간편하게 구현할 수 있게 해준다.STOMP 없이도 WebSocket으asa9874.tistory.com해당 내용의 이어서이다. 저번글에서 채팅방에 들어가면 웹소켓으로 서로 연결 되는것을 확인하였다. 하지만 보통 채팅프로그램에서 채팅방에 들어가지않는다고 해도 채팅방 목록에서 새로운 채팅이 업데이트 되는것이 보여야한다! 1.WebSocketConfig..