Back-end/Spring

[Spring/JPA] N+1 문제 및 N+1 해결 방법 과 즉시 로딩, 지연 로딩 이란?

이번 게시물에서는 오랜만에 Spring과 관련된 내용을 다뤄보려고 합니다. 바로 N+1 문제인데요. Spring을 사용하고, JPA를 사용하신다면 한번쯤은 들어봤던 문제일겁니다. N+1문제는 무엇일까요? 0. N+1 문제란? JPA에서 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상을 말합니다. 직접 실습을 통해서 살펴보겠습니다. DB구조 및, Service, Controller, Dto 설계 DB 구조는 노래(Song)는 한개의 플레이리스트(Playlist)에만 속할 수 있고 테스트 데이터로는 3개의 플레이리스트에 노래 5개씩 총 15개의 노래를 추가했습니다. @Service public class SongServi..

2022.11.24 게시됨

Back-end/Nest.js

[Nest.js] Multi-Tenancy Database Design (부제. NestJs + Multi-Tenancy+TypeORM)

이번 팀 sprint에서는 Firestore를 사용하고 있는 프로젝트를 GCP Cloud MySQL로 마이그레이션 하는 작업이 포함됐었습니다. 상황을 말씀드리자면 각 TF팀마다 각각 다른 프로젝트를 진행하고 있었고, Firestore에는 각 TF팀마다의 Collection 형식으로 구현한 뒤, Document로 쪼개서 데이터들을 관리하고 있었습니다. 저희 팀이 개인정보처리를 담당하는 팀이다 보니, 'Document형식의 DB가 아닌 RDB를 사용해서 개인정보를 더 안전하고 체계적으로 관리해보자'라는 생각과 함께 이 sprint가 시작이 되었죠. 여기서 고민은 시작되었습니다... 팀 리더와 제가 나눈 이야기를 바탕으로 정리한 요구사항은 세 가지였습니다. 먼저 각 TF팀마다 schema가 생겼으면 좋겠다. ..

2022.11.03 게시됨

글/기록

좋은 개발자란 가치를 알아야 한다 (부제. 사람은 계속 변한다.)

사람은 계속 변합니다. 저 또한 마찬가지죠. 벌써 제가 스타트업이라는 울타리 안에 들어와서 개발자로 일을 시작한 지 1년이 조금 넘어가고 있네요. 스타트업 인턴 회고(40일차) 9월 8일, 스타트업 인턴을 시작하게 되었습니다. 백앤드 개발 인턴으로 시작하게 되었지만, 40일이 지난 현재 오히려 백앤드 보다는 프론트앤드랑 더 가까워진 듯한 느낌입니다. 스타트업은 생각 resilient-923.tistory.com 위 글은 극초기 스타트업에 들어갔던 2021년 10월 즈음 제가 썼던 회고록입니다. 제 마음가짐과 가치관은 저때와 같을까요? 놀랍게도 상당히 많이 달라졌습니다. 개발자로써, 한 사람으로서 말이죠. 마침 요즘은 저 스스로 저에게 일어나고 있는 약간의 변화들에 혼란스러워하는 시기인 듯하여 깊게 생각을..

2022.10.19 게시됨

Back-end/Server & Cloud

[GCP/docker] Appengine 배포환경에서 .env 분기하기(부제. env-cmd)

현재 진행 중인 프로젝트들은 GCP에서 AppEngine이라는 서비스를 이용해서 운영되고 있습니다. 거의 대부분은 GKE환경에서 배포가 되고 운영을 하고 있지만 저희 팀에서 진행 중인 프로젝트는 AppEngine을 사용하고 있죠. (AppEngine에 대해서는 다음 시간에 자세히 다뤄보기로 하고) 오늘은 AppEngine 환경에서 env 파일을 어떻게 사용하는지에 대해 알아보도록 하겠습니다. 0. 먼저 React에서 CRA란? 현재 프로젝트의 프론트앤드는 CRA(Create-React-App)를 통해서 설계가 되어있습니다. CRA는 리액트로 웹 애플리케이션을 만들기 위한 환경을 제공해주고 CRA 하나의 명령어만으로 리액트 개발환경을 쉽게 구축할 수 있다는 장점이 있죠. (자세한 내용은 여기 페이지에서 확..

2022.10.03 게시됨