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 정보는..
사내에서 쓰고 있던 스프링부트 버전은 2.2.4였다. 보안문제도 있고 스프링부트 3점대가 나오고 있는 상황에서 너무 낮은 버전을 쓰고 있는 것 같아 2.7.14로 버전을 업그레이드 했다. 버전이 바뀌면서 스프링 자체적으로 작동방식이 많이 변경되어 여러 수정작업을 거쳤다. 그 중 Spring Security와 관련한 수정작업을 하며 Spring Security에 대한 이해가 부족함을 느꼈다. 이번 기회에 Spring Security를 공부하겠다는 마음으로 글을 작성해봤다. Spring Security에 대해 알아보자 서블릿 컨테이너는 DispatchServlet이 Http Request를 가지고 URL에 매핑되어 있는 Controller에 요청을 전달하고 로직을 수행한 후 Http Response를 반환하..