
[Spring & JPA] N + 1 문제에 대하여.
2023. 2. 1. 19:17
Spring/JPA
0. 들어가며 🏃🏻♂️ 이번 글에서는 JPA를 사용할 때 중요한 개념인 N + 1 문제에 대해 알아보려합니다. N + 1 문제는 JPA를 처음 공부할 때부터 중요하다고 들었고, 이에 대한 해결법 역시 대략적으로 알고있다고 생각했습니다. 그런데 막상 실제 프로젝트에서 엔티티가 여러 OneToMany, ManyToOne 필드들을 가지게되고 서로 얽혀있다보니 이를 다루는 방법을 잘모르겠어서 애를 먹은 경험을 했습니다. 또한 N + 1 문제를 해결하기 위해 사용하는 방법들이 어떤 쿼리를 날리길래 해당 문제를 해결하는지, 어떤 방식으로 동작하는지에 대해서도 모르고 사용한다는 생각이 강하게 들었습니다. 이를 위해 N + 1 문제에 대해 조금 더 깊게 알아보는 시간을 가져보았고, 이를 정리해보려합니다. 결론부터 말..

[Spring & Project] 채팅 읽음 확인 기능 구현하기
2023. 2. 1. 00:10
Spring/Project
0. 들어가며 🏃🏻♂️ 진행중인 팀 프로젝트에서 웹소켓을 통해 실시간 채팅 기능을 구현했습니다. 채팅기능을 구현한 이후 상대방이 채팅을 읽었는지 여부를 확인할 수 있으면 좋겠다는 의견이 나와 이를 구현하게 되었고, 해당 요구사항을 반영하기 위해 고민했던 과정들을 블로그에 정리해보려 합니다. 1. 요구사항📕 변경된 요구사항은 "아래 사진과 같은 기능을 추가하자" 였습니다. 위 사진처럼 빨간 박스로 쳐진 부분과 같이 읽지 않은 메시지를 표시하는 기능이 있다면 좀 더 서비스 경험이 좋아질 것이라는 의견이 있었고, 이 부분을 새롭게 구현해야 했습니다. 2. 고민해야했던 점 과 구현한 방식 🤔 먼저 고민했던 부분은 기존 구조로는 채팅을 읽었는지 여부를 알기가 어려워 어떤 정보를 추가해야할지를 결정하는 것이었습니..

[Spring & Dev] 웹소켓에 대하여.
2023. 1. 14. 20:16
Spring
0. 들어가며🏃🏻♂️ 진행 중인 팀 프로젝트에서 실시간 채팅 기능을 구현하기 위해 웹소켓을 사용해보았습니다. 예전 수업 과제로 실시간 코인 거래소를 만든 경험이 있는데 이 때는 Polling을 사용했어서 이번에도 그러면 되겠다라고 생각하고 있던 도중 실시간 채팅에 대해 조금 검색해 보니 웹소켓이라는 키워드를 발견할 수 있었습니다. 이번 글에서는 HTTP로 실시간 서비스를 구현하는 방법에 대해 먼저 알아보고 이를 통해 웹소켓이라는 프로토콜이 왜 등장하게 되었는지에 대해 알아보도록 하겠습니다. 또한 웹소켓 프로토콜이 무엇인지, 동작 방식은 어떤지 등에 대해 알아보고 Spring에서 웹소켓 구현은 어떻게 하는지 간단하게 알아보도록 하겠습니다. 1. 실시간 서비스를 HTTP로 구현해보기🏀 0) 실시간 서비스..

[Spring] @SpringBootApplication 에 대하여.
2022. 4. 12. 01:46
Spring
0.🚶들어가며 Spring boot로 프로젝트를 실행하면 알아서 만들어지는 유일한 자바 코드로 아래와 같은 코드를 찾아볼 수 있습니다. import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 여기에 붙어있는 어노테이션인 @SpringBootApplication이 어떤 역할을 하고 있는지 궁금하여 ..

[Spring] @Autowired 해야하는데 조회 빈이 여러 개라면..
2022. 3. 22. 02:05
Spring
0.❓문제상황❓ 스프링 컨테이너에 빈 등록을 아래와 같이 한 경우를 생각해보겠습니다. 위 코드를 설명을 간단히 설명하면 아래와 같이 두 구성으로 이루어져 있는 상황입니다. 할인 정책 할인 정책에 의존성이 있는 오더 서비스 또한 할인 정책은 두 가지로 Fix, Rate 방식이 있는 상태이죠. 세 클래스 모두 @Component 어노테이션을 붙였기 때문에 스프링 컨테이너에 빈으로 등록됩니다. 이때 문제가 생깁니다. OrderServiceImpl 클래스의 생성자를 보시면 두 번째 인자로 DiscountPolicy를 받는 것을 알 수 있고 Autowired로 의존성 주입이 될 것을 예상할 수 있습니다. 그런데.. DiscountPolicy로 조회한 빈이 위 같은 상황에서는 Fix와 Rate 방식 두 가지로 조회..