RabbitMQ란?RabbitMQ는 신뢰성 높은 메시지 전달과 유연한 라우팅을 제공하는 오픈소스 메시지 브로커입니다. AMQP(Advanced Message Queuing Protocol) 프로토콜을 기반으로 하여, 다양한 토폴로지와 통신 패턴을 지원합니다. 복잡한 라우팅을 처리할 수 있는 Exchange 타입들을 제공하며, 메시지 큐잉, pub/sub 패턴, 피어-투-피어 통신 등 다양한 메시징 패턴을 구현할 수 있습니다.높은 가용성을 위한 클러스터링과 미러링을 지원하며, 메시지 전달 보장을 위한 Publisher Confirms와 Consumer Acknowledgments 기능을 제공합니다. 또한, Java, Python, JavaScript 등 다양한 프로그래밍 언어를 위한 클라이언트 라이브러리를..
Spring In Action(제5판)을 공부하던 중 Converter를 사용해 클라이언트에서 도메인 객체에 대한 id 값을 전달하면 id를 DB에서 도메인 객체를 조회하는 내용이 나왔다.Converter 구현import org.springframework.core.convert.converter.Converter;...@Component@RequiredArgsConstructorpublic class IngredientByIdConverter implements Converter { private final IngredientRepository ingredientRepository; @Override public Ingredient convert(String id) { re..
들어가며 F-lab 프로젝트를 진행하며 글을 작성했을 때 작성자를 팔로우하고 있는 회원에 대한 피드를 생성하는 로직을 구현하는 일이 있었다. 피드 발행 기능을 개발하며 동기 처리를 했을 때와 비동기 처리를 했을 때 성능차이를 살펴보며 스프링의 비동기 처리에 대해 간략히 알아보고자 한다. 간단한 비동기 처리방법 @Configuration // componentScan이 되어야 하므로 @EnableAsync public class AsyncConfig { ... } @Async // 비동기 처리를 하고자 하는 로직에 추가 public void save(Post post, User writer){ ... } 1. 먼저 루트 프로젝트 하위에 비동기처리 관련 설정 클래스를 만든다. 해당 클래스에 @Configur..
들어가며 f-lab 멘토링을 진행하며 SNS 서비스를 만들어보는 프로젝트를 진행하고 있다. 엔티티를 설계하는 과정에서 다대다 관계의 테이블이 필요한 상황이었다. 예를 들어 회원이 좋아요를 한 글을 관리하고 싶었는데 한명의 회원은 다수의 글에 대해 좋아요를 할 수 있고 반대로 하나의 글은 여러 회원들에게 좋아요를 받을 수 있는 상황이므로 회원과 글 사이에는 다대다 관계가 성립하는 것이다. 프로젝트는 JPA를 사용하고 있으므로 @ManyToMany를 사용해 다대다 관계의 엔티티로 설계를 하였다. 그런데 Pull Request에 대한 리뷰를 멘토님이 해주시며 @ManyToMany 사용을 지양해야 한다고 말씀해주셨다. 첨부해주신 글에는 @ManyToMany를 사용했을 때 JPA에서 연결 테이블을 만들어 주기는 ..
1.1 초난감 DAO DAO란? Data Access Object의 줄임말로 DB에 접근해 데이터를 조회하거나 저장하는 등의 역할을 수행하는 객체를 의미한다. //UserDao.java public void addUser(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/toby_spring", "root", "xxx"); PreparedStatement ps = connection.prepareStatement("insert into us..
Cache란? 예를 들어 회원 정보를 가져오는 API가 있다고 해보자. 회원 정보는 DB에 있으므로 정보를 가져오기 위해선 DB에 sql을 날려 조회해야 한다. 조회 요청이 자주 일어나지 않는다면 별 문제가 없겠지만 자주 일어난다면 DB 커넥션을 가져오고 해제하는 과정 등 회원 정보를 가져오기 위한 부가적인 작업들을 반복적으로 수행하게 된다. 이 때 사용할 수 있는 게 Cache이다. 한번 조회했던 회원 정보를 일정 기간 Cache로 보관하여 요청이 왔을 때 DB에 접근하지 않고 해당 정보를 반환해주면 된다. 즉 Cache를 이용하면 성능 개선을 할 수 있다. 다만 Cache를 이용할 때 주의해야 할 점이 있다. 만약 회원 정보가 실시간으로 바뀌는 것이고 이를 실시간으로 조회해야 한다면 Cache 정보는..