본문 바로가기

Spring

(23)
JPA 와 N+1 문제 안녕하세요. 오늘은 날씨가 흐린 주말이군요. 집에서 코드작성하기 좋은 날인 것 같습니다. 오늘은 N+1 문제에 대해 다뤄보려고 합니다. N+1 문제는 JPA, Hibernate 등 ORM을 사용하는 백엔드 개발자라면 한 번은 반드시 마주하게 되는 대표적인 성능 병목 이슈입니다.N + 1 문제JPA를 쓴다면 반드시 만나게 되는 성능 지옥 N+1 문제란 무엇인가?정의하나의 쿼리를 실행했더니, 관련된 데이터를 조회하기 위해 추가로 N개의 쿼리가 발생하는 문제 그래서 최종적으로 총 1 + N번의 쿼리가 실행됩니다.이걸 "N+1 문제"라고 부릅니다. 예시로 알아보기List teams = teamRepository.findAll();for (Team team : teams) { System.out.printl..
Java Spring 에서의 Bean 이란? 안녕하세요! 즐거운 주말이 되어 오늘도 포스팅합니다! 오늘의 주제는 저의 지난 포스팅이나 다른 Spring 관련된 내용에서 늘 등장하는 Bean 이란 어떤것인지에 대해 알아보려고 합니다!  Bean 은 우리 모두가 알고있듯 '콩' 이란 의미이죠? 또한 Java 를 보면 항상 나오는 커피잔 로고를 보신 적 있을 겁니다. 별로 이론적인 내용과는 상관없긴 하지만 자바가 커피한잔을 의미한다고 치면 Bean 은 아마도 '커피콩'의 '콩'을 의미하는 것 같습니다.  이제 좀 더 이론적인 내용으로 들어가보겠습니다. Spring 에서 Bean 이란 무엇인가요?"Spring 에서 Bean 이 뭔가요?" 라는 질문은 초보자뿐 아니라 중급 개발자에게도 한 번쯤 다시 짚고 넘어갈 필요가 있는 중요한 주제입니다. Spring ..
Spring - JPA 꼭 제대로 정리하고 싶었던 Spring 에서의 JPA (Java Persistence API)에 대한 포스팅을 해보겠습니다. 그럼 시작! 1. JPA란?JPA 는 자바 애플리케이션에서 객체(Object)와 관계형 데이터베이스(RDB)를 매핑하기 위한 표준 API 입니다. JPA 는 DB 테이블과 자바 클래스를 일일이 SQL 로 연결하여 쿼리 등을 보내 DB와의 연락을 주고 받는 것이 아니라, 자바 객체만 다뤄도 자동으로 SQL 이 실행되는 ORM 기반 기술입니다. 이게 무슨말인지 정의에 사용된 용어부터 차근차근 알아보겠습니다. 우선 ORM 은 Object-Relational Mapping 의 줄임말로, 객체와 관계형 데이터베이스를 연결하는 프로그래밍 기술을 의미합니다. 이 ORM 을 이해하기 쉽게 풀어보..
Spring Framework 와 Spring Boot (2) 안녕하세요! 지난 포스팅에 Spring Framework 와 Spring Boot 에 대한 내용을 포스팅하다 글이 길어져서 Spring Boot 에 대한 내용은 이번 포스팅에서 진행하도록 하겠습니다. 지난 포스팅과 이어지기 때문에 앞선 포스팅도 읽어주시면 감사하겠습니다! https://wanglan.tistory.com/entry/Spring-Framework-%EC%99%80-Spring-Boot Spring Framework 와 Spring Boot (1)이번 포스팅에서는 Spring Framework 와 Spring Boot 에 대한 내용을 포스팅 해보려고 합니다. Spring Framework 의 등장 배경과 진화 과정, 장단점, 철학, 비판 등 Spring Boot 에 도달하기 까지의 과정을 알..
Spring Framework 와 Spring Boot (1) 이번 포스팅에서는 Spring Framework 와 Spring Boot 에 대한 내용을 포스팅 해보려고 합니다. Spring Framework 의 등장 배경과 진화 과정, 장단점, 철학, 비판 등 Spring Boot 에 도달하기 까지의 과정을 알아보겠습니다. 1. Spring Framework 란? Spring Framework 는 자바 플랫폼에서 기업용 애플리케이션을 개발하기 위한 범용 애플리케이션 프레임워크입니다.이름의 이유는 과거 기업용 어플리케이션 개발을 위해  Java EE(엔터프라이즈 에디션)의 스펙을 구현한 EJB를 통한 개발을 진행할 때의 어려움과 복잡함을 개선하고, EJB 시절의 어려움을 '겨울'에 빗대어 새로운 시작인 '봄'을 생각하며 작명을 했다고 합니다. 저는 공대 출신이기에 처..
Spring - Redis의 Pub/Sub 및 WebSocket 구현하기 현재 프로젝트를 진행하면서 실시간 알림 서비스를 구현하고 있습니다. 알림 서비스의 동작 방식은 다음과 같습니다. 1. 유저가 가게에 주문(Order)을 요청하면 새로운 주문이 생성되고 Waiting 이 몇팀있는지 반환받는다.2. 가게 사장님이 유저가 보낸 주문을 확인하고 "입장(ADMISSION)" 또는 현재 상태에 맞는 메세지를 보낸다.3. 유저는 사장님이 보낸 메세지를 확인하고, 자신의 주문 상태에 맞게 주문을 진행한다. 일단 큰 진행방식은 위와같이 구상하였습니다. 일단 지금의 상태에서 필요한 부분을 정리해보겠습니다. 1. 사장님이 주문의 상태를 변경할 때, 메세지를 "보낸다"2. 유저는 사장님이 보낸 메세지를 "받는다"3. 1, 2에서 보내고 받는 것을 실시간으로 처리한다.4. "주문 생성" 이라는..
Spring - DB 조회의 최적화 백엔드를 개발하는 사람이 고민하는 부분 중, 중요한 부분인 데이터베이스에 접근하여 원하는 값을 찾으려 할 때의 성능 최적화가 있습니다. 오늘은 이런 DB 조회할 때의 성능 최적화에 대한 다양한 방법이나 아이디어에 대한 내용을 말해보겠습니다. 1. DB 조회 성능 최적화 방법 🔍1. 적절한 조회방식 선택데이터를 API가 필요한 조건에 맞춰서 정확히 지정하여 조회하는 것이 효율적입니다. 다음은 여러가지 DB를 조회하는 기술들에 대한 간략한 설명입니다.JPQL/Criteria API: JPA를 활용할 때 효율적인 쿼리 작성으로 필요한 데이터만 조회.Native Query: 복잡한 쿼리나 대량 데이터 처리 시 SQL을 직접 사용하여 최적화.QueryDSL: 동적 쿼리 작성 시 성능과 코드 가독성 모두 확보.2..
Spring - Redis 적용 실습 지난번 포스팅에서 `Redis` 에 대해서 간략하게 알아보았습니다. 이번 포스팅에서는 실제로 `Redis` 를 구현하여 `Lock`을 생성하고 동시성 제어하는 코드의 예제를 보겠습니다. 1. Redis 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' build.gradle 에 위의 의존성을 추가해줍니다. Spring boot 에서는 이렇게 redis 의존성이 추가되면 기본적으로 Lettuce 클라이언트를 사용하여 Redis를 구현할 수 있게 됩니다. 2. Redis 설정appilcation.properties 에 다음과 같은 설정을 추가합니다.# Redis Settingspring.data.redis.ho..