소통하는 개발자 Sean
article thumbnail
ORM과 JPA, 구현체들의 관계
Web Programming/JPA 2024. 3. 18. 18:21

🧭 Part1. 질문 여러분들은 ORM, JPA, Hibernate, Spring Data JPA, EntityManager, Repository의 차이와 관계를 설명할 수 있나요? 저도 JPA를 사용하고 있지만 ORM, JPA, Hibernate, Spring Data JPA, EntityManager, Repository 차이 대해 궁금증이 생겼습니다. 어떻게 설명해야 할지, 설명하면서 내가 몰랐던 부분(메타인지)이 어디였는지 알아보도록 하겠습니다! 글이 조금 길다고 느껴지시면 Part3 요약으로만 보셔도 좋습니다! 🧭 Part2. 알아보기 👉 2-1. 그림부터 보면서 친숙해지기 👉 2-2. ORM 👻 2-2-1. ORM ? ORM(Object-Relational Mapping)은 데이터베이스의 테이..

article thumbnail
쿠버네티스 환경에서 여러 Pod가 하나의 Redis 세션을 참조하는 구조
Web Programming/Spring Boot 2024. 2. 25. 19:26

쿠버네티스(Kubernetes) 환경에서 스프링부트(Spring Boot) 애플리케이션을 배포하고, Pod을 2개로 설정했을 때 로그인 문제가 발생했습니다. 로그인을 해도 다시 로그인을 하게 되는 상황이였는데요, 스프링 시큐리티(Spring Security)를 사용할 때, 세션 정보가 한 Pod에만 저장되어 있기 때문에 로드 밸런싱으로 인해 사용자 요청이 다른 Pod로 전송될 때 세션 정보를 찾을 수 없어 로그인 문제가 발생한것으로 보입니다. 스프링 세션 + Redis를 사용하여 문제를 해결해보도록 하겠습니다. Redis를 사용하여 세션을 공유하는 과정을 단계별로 설명하겠습니다. 이 과정은 스프링 부트와 스프링 세션(Spring Session) 라이브러리를 사용하여, 세션 정보를 중앙 집중식으로 관리하는..

article thumbnail
springboot queryDSL 적용, JPQL -> queryDSL로 변경, 이유 + 성능체크
Web Programming/JPA 2023. 11. 3. 14:28

queryDSL에 대해 더 자세히 알고 싶다면, 1편을 보고오시는것을 추천드립니다! 2023.11.03 - [분류 전체보기] - queryDSL이란? 간단한 설명과 사용이유 queryDSL이란? 간단한 설명과 사용이유 👉 글을 쓰게 된 이유 저는 JPA가 복잡한 쿼리를 효율적이고 편리한 개발을 지원하지만 특히 복잡한 쿼리를 작성할 때 일부 단점이 있다고 생각했습니다. JPA는 기본적으로 단순한 CRUD 쿼리와 간 sean-lets-go.tistory.com 👉 Gradle 의존성과 세팅 plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' // Q 클래스 생성 플러그인 // ... } def querydslDir = "$buildDir/ge..

article thumbnail
queryDSL이란? 간단한 설명과 사용이유
Web Programming/JPA 2023. 11. 3. 13:52

👉 글을 쓰게 된 이유 저는 JPA가 복잡한 쿼리를 효율적이고 편리한 개발을 지원하지만 특히 복잡한 쿼리를 작성할 때 일부 단점이 있다고 생각했습니다. JPA는 기본적으로 단순한 CRUD 쿼리와 간단한 조인에 대한 지원을 제공하지만, 복잡한 조인, 하위 쿼리, 복잡한 집계 함수 등과 같이 복잡한 쿼리에 대한 처리는 다소 제한적이기 때문입니다. 특히 JPQL로 쿼리를 작성할 때는 개발자가 직접 SQL 쿼리를 작성하고 런타임에 오류를 볼 수 있었으니 이는, SQL 매핑 프레임워크인 mybatis와 다를게 없다고 생각했었습니다. 허나, 며칠전 기술면접을 보다가 JPA의 JPQL에 이런 관점을 가지고 있다고 대화를 나누던 도중, 면접관님께서 "queryDSL"이 해당 문제를 해결해 줄 수 있을것 같다고 조언을 ..

article thumbnail
nativeQuery을 제거해보자, 이유 + 성능체크
Web Programming/JPA 2023. 11. 2. 17:20

글을 쓰게 된 이유 코드가 지저분해 보여서, chatGPT에게 정리를 부탁했더니 nativeQuery 사용을 지양하라는 팁을 받았습니다. 딱히 생각하지 못한 부분이였는데, 왜 nativeQuery를 지양해야하는지 다시 물어봤습니다. 몇개의 질문과 답변이 오고갔는데, 정리하면 이렇습니다. nativeQuery를 사용하면 데이터베이스에 대한 종속성이 높아지므로, 데이터베이스를 변경하거나 다른 환경으로 전환해야 할 때 작업이 복잡해질 수 있습니다. JPQL이나 QueryDSL과 같은 ORM을 위한 쿼리 언어를 사용하여 코드의 유연성과 이식성을 높이는 것이 좋습니다. 여기서 말하는 코드의 이식성은, 다른 환경이나 플랫폼으로 쉽게 이동할 수 있는 능력을 말합니다. (특정 DB에서만 작동하는게 않도록) 변경할 코드..

article thumbnail
셀렉트&드래그앤드롭 다중 파일 서버로 전송하기 (문제해결)
Web Programming/Spring Boot 2023. 10. 4. 01:08

파일 선택창을 통해 파일을 업로드 할 수도 있고, 파일의 드래그 앤 드롭을 통해 파일을 업로드 할 수 있다. 선택창과 드래그 앤 드롭을 혼합하여 여러개의 파일을 보낼 수도 있어야 한다. 프로젝트를 하면서 겪은 문제는 "드래그 앤 드롭"을 사용했을 때 file이 서버로 전달되지 못했던 것이다. 문제가 되었던 코드를 순차적으로 살펴보자. input type='file'에 드래그앤 드롭 파일 추가해서 서버로 넘기기 (실패) 파일 선택창을 통해 파일을 선택하면 input type='file'을 통해 파일이 들어가기 때문에 name="files"이 위에 보이는 post-register의 files 파라미터로 매핑이 된다. 드래그앤 드롭으로 파일을 등록하면 input type='file'에 value로 등록되지 않..