Spring

Spring/JPA

테스트 시 @ElementCollection 테이블 동적으로 가져오기(테스트 데이터 초기화)

0. 들어가기 전프로젝트 개발을 진행하다가, 테스트에서 테스트 초기화가 제대로 수행되지 않아서 테스트가 실패하는 상황이 있었습니다.결과적으로는 @ElementCollection으로 생성되는 테이블이 동적으로 초기화되지 않아서 발생하는 문제였습니다.그래서 이번 포스팅에서 문제 상황과 @ElementCollection 테이블을 동적으로 가져와서 해결한 방법에 대해서 간단히 다뤄보겠습니다!1. 문제 상황프로젝트에서 하나의 기능을 개발하고, 전체 테스트를 실행했을 때테스트에서 테스트 초기화가 제대로 수행되지 않아서 테스트가 실패하는 상황이 있었습니다. 프로젝트의 테스트에서는 E2E 테스트를 진행할 때 RestAssured를 사용하고 있습니다.이때 RestAssured가 통합 테스트를 수행하는 스레드와 @Tran..

Spring/JPA

[JPA] JPA N+1 문제 및 근본적인 원인에 대한 개인적인 고찰

0. 들어가기 전 JPA를 사용하면서 발생하는 N+1 문제는 널리 알려져 있고, JPA를 사용하다보면 제법 자주 만나게 됩니다. 그래서 N+1 문제를 다룬 블로그나 다른 레퍼런스들이 상당히 많습니다. 저 또한 N+1 문제를 공부하기 위해 많은 글들을 살펴봤었습니다. 하지만, 다른 글들을 읽어보고 더 깊은 N+1 문제에 대한 개인적인 궁금증들이 생겨나고 쉽게 풀리지 않아서 이번 포스팅을 작성하면서 테스트를 진행해보고 기록해보고자 합니다. N+1 문제 및 근본적인 원인에 대해 추론하고 해결방법을 알아보면서, N+1 문제에 대해서 고찰해보도록 하겠습니다! 😃 (뇌피셜 파티가 될 예정입니다.. 🤣) 예시 엔티티는 가장 간단한 Team-Member 엔티티로 구성하여 도메인 이해가 N+1 문제의 이해에 방해되지 않..

Spring

[Spring] Spring에서 Session 저장소로 Redis 사용하기(feat. Redis Session Clustering)

0. 들어가기 전 이전 포스팅에서 간략하게 Redis를 살펴봤었습니다. 이전 포스팅에서는 Redis의 장점으로 인메모리 저장소의 특성으로 인한 빠른 성능을 중점적으로 소개했습니다. 이번에는 Spring을 사용한 개인 프로젝트에서 Redis Session Clustering을 사용한 과정을 포스팅해보도록 하겠습니다! https://ksh-coding.tistory.com/127 [DB] Redis란? 여러 프로젝트를 살펴보니, 인메모리 저장소로 Redis를 사용하는 것을 많이 볼 수 있었습니다. Redis가 무엇이고, 어떤 장점이 있길래 많이 사용하는 걸까요? 프로젝트에 적용하기 전에 간략하게 Re ksh-coding.tistory.com 1. Session Clustering 앞에서 Session Clu..

Spring

[Spring] 스프링 동시성 처리 방법(feat. 비관적 락, 낙관적 락, 네임드 락)

0. 들어가기 전 이전에는 DB 단의 동시성 처리 방법인 Lock에 대해서 알아봤습니다. https://ksh-coding.tistory.com/121 [DB] DB Lock이란? (feat. Lock 종류, 블로킹, 데드락) 0. 락(Lock)이란? 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능 동시성을 제어하기 위한 기능 저는 처음에 DB 락을 접했을 때, 락을 이 ksh-coding.tistory.com https://ksh-coding.tistory.com/124 [DB] MySQL 및 InnoDB의 DB Lock 알아보기 MySQL에서 사용되는 락은 다음과 같은 2가지 종류로 나뉩니다. MySQL 엔진의 락 스토리지 엔진(InnoDB)의 ..

Spring

[Spring] SpringBoot의 Tomcat 설정 알아보기 (feat. Thread, Thread Pool)

0. Spring Boot의 Tomcat 설정 Spring Boot에는 내장 서블릿 컨테이너인 Tomcat이 존재합니다. Tomcat의 설정과 관련된 설정 키워드는 다음과 같습니다. accept-count max-connections threads.max threads.min-spare 해당 설정들이 어떤 의미인지 알아보기 전에, 이해해야 할 개념들을 살펴봅시다. 1. Thread? 스레드의 개념은 다음과 같습니다. 실행중인 한 프로그램(프로세스) 내에서 구분지어진 실행 단위 하나의 프로세스에서 작업을 처리하기 위한 단위로 생각하면 될 것 같습니다. 실생활 예를 들면, 은행은 은행이라는 프로세스 내에서 여러 고객의 동시 거래 요청 작업을 처리해야합니다. 이때 은행이 병렬적으로 동시 거래 요청 작업을 처리..

Spring/기타

[인증/인가] 쿠키 VS 세션 VS 토큰 (JWT) 방식 중 무엇을 사용할까?

대표적으로 사용자의 인증/인가를 처리할 때 사용하는 방식이 다음과 같이 3가지가 있습니다. 1. 쿠키 방식 2. 세션 방식 3. JWT 토큰 방식 위의 3가지 방식들의 장단점을 살펴보고, 무엇을 사용해야 할지 알아보도록 합시다! 1. 쿠키 인증 방식 - 클라이언트가 인증 정보 관리 (stateless) 먼저, 쿠키 인증 방식입니다. 쿠키 인증 방식은 쿠키에 사용자의 인증 정보를 담아서 인증하는 방식입니다. 인증/인가 Flow는 다음과 같습니다. 1. 클라이언트가 서버에 첫 로그인 인증 요청을 보내면, 서버에서 응답으로 쿠키에 사용자 인증 정보를 담아서 보낸다. 2. 서버에서 응답한 쿠키를 클라이언트에서 저장하고, 인증/인가 요청 시마다 서버로 요청한다. Flow만 보더라도, 인증/인가 작업이 상당히 쉽고..

Spring/JPA

[JPA] JPA 1:N 관계에서 연관관계 주인을 1 대신 N에 두는 이유

이전에 JPA를 사용해서 1:N 연관관계 매핑을 할때는 연관관계 주인이 1 보다 N에 두는 것이 좋다고 배워서 관성적으로 N이 연관관계 주인으로, FK를 가지게 했습니다. 그러나 왜 연관관계 주인이 1이 되면 좋지 않은 건지 제대로 알지 못하고 사용하고 있었기 때문에 연관관계 주인이 1쪽이 되었을 때의 어떤 점이 안 좋은지를 살펴보려고 합니다! 예시는 Member와 Post의 1:N 관계로 설명하도록 하겠습니다! (멤버가 여러 게시글을 작성할 수 있고, 게시물에는 1명의 작성자만 존재한다고 해봅시다!) 🎯 1. 연관관계의 주인이란? 들어가기에 앞서서, 연관관계의 주인이란 무엇을 말하는지 알아봅시다! 우선 '연관관계의 주인' 이라는 용어가 규칙으로 정해진 용어는 아니지만 JPA를 사용할 때 해당 용어로 많..

Spring

[Spring] 스프링 이벤트를 사용하여 도메인 의존성 분리하기

프로젝트를 진행하던 중 스프링 이벤트를 사용하게 되었습니다! 왜 스프링 이벤트를 사용했는지, 어떻게 사용하는지, 사용 시 고려할 점 등에 대해 자세히 알아보도록 하겠습니다! 0. 스프링 이벤트 도입 배경 프로젝트를 진행하면서 다음과 같은 요구사항이 존재했습니다. 팀 캘린더의 일정이 등록, 수정, 삭제되면 팀 피드에 일정 알림이 생성된다. 위의 디자인처럼 팀 피드 공간에 팀 캘린더의 일정이 등록, 수정, 삭제되면 알림이 생성되도록 하는 요구사항이었습니다. (여기서 알림은 실시간 알림이 아니라 게시글처럼 생성되는 알림을 의미합니다.) 스프린트를 거쳐서 팀 캘린더의 일정 등록, 수정, 삭제 로직은 구현되어 있는 상태였으므로 처음에는 단순하게 일정 알림 기능을 추가하면 된다고 생각해서 팀 캘린더 서비스에 다음과..

Spring/JPA

[JPA] @JoinColumn 파헤치기 (feat. JPA 연관관계별 사용)

✌🏻 0. 들어가기 전 JPA 강의 중에 @JoinColumn을 마스터하면 JPA 연관관계를 어느정도는 다 알 수 있다고 들었다. 그래서, 여러 JPA 개념 중에 @JoinColumn에 대해 파헤쳐보면서 JPA 연관관계를 이해해보려고 한다! 앞으로 설명할 연관관계에서 연관관계별로 다음과 같은 예제로 설명하겠다! 1:1 - student lecture 1:N / N:1 - Line(1) Station(N) 🎯 1. @JoinColumn 이란? JoinColumn 어노테이션 클래스를 번역해보면서 이해해보자. JoinColumn의 최상단 주석에는 JoinColumn에 대한 설명이 나와있다. 맨 위의 내용을 요약하면 다음과 같다. Entity 연관관계 또는 Element Collection을 연결하기 위한 Co..

Spring

[Spring] 테스트 시 DB 데이터 초기화 Trouble Shooting

0. 들어가기 전 이번에 테스트를 만들다가, @Sql문으로 초기 스키마와 데이터를 넣게 되었다. 그런데 테스트를 실행해보니 중복 데이터가 있다는 오류가 발생하게 됐다. 결론적으로, main 디렉토리 아래에 있는 초기화 sql을 실행하고 나서, @Sql의 초기 스키마와 데이터 sql을 실행해서 발생한 문제였다. Trouble Shooting 과정을 기록하고자 한다! 1. 문제 상황 기존의 sql 파일 구조는 위와 같았다. src/main/resources 아래에 프로덕션용 schema.sql, data.sql이 존재했고, src/test/resources 아래에 테스트용 test-schema.sql, test-data.sql이 존재했다. 이 상황에서 아래와 같은 테스트를 실행하니 오류가 발생했다. @Jd..

BE_성하
'Spring' 카테고리의 글 목록