Back-end/Spring

[Spring / TIL] Spring profiles를 통해 application.yaml 하나로 개발환경 관리하기(부제. @Value 환경변수 사용법)

프로젝트를 개발하다 보면 하나의 서버 애플리케이션을 prod,dev,local 환경에서 각각 실행해야 할 일이 생깁니다. 예를 들면 Cloud SQL을 사용할 경우, private IP도 다를 것이고, 다양한 secret key 값도 환경에 따라서 모두 달라야 합니다. 이런 경우는 굉장히 흔한데 어떻게 효율적으로 관리할까요? 이번 시간에는 일반적인 스프링 부트 애플리케이션을 운영할 때, 하나의 application.yaml(application.properties) 파일 설정으로 Profiles를 관리하고, prod, dev, local 환경을 구성하고, 각 환경변수들을 어떻게 사용하는지에 대한 방법을 설명하려고 합니다. 0. @Value로 환경변수 사용하기 먼저 yaml파일의 프로퍼티 값을 전달받아서 ..

2023.01.17 게시됨

Back-end/Server & Cloud

[GCP/Cloud Logging] NestJs에서 winston을 사용해서 google cloud logging sink router 설정하기.

③ 개인정보처리자는 제1항 및 제2항에 의한 권한 부여, 변경 또는 말소에 대한 내역을 기록하고, 그 기록을 최소 3년간 보관하여야 한다. 제가 속해있는 SecOps팀에서는 admin project내에서의 권한관리를 어떻게 할 것인지, 그리고 권한관리를 효율적으로 하기 위해서 많은 노력을 기울이고 있습니다. 지금까지는 슬랙 쓰레드를 이용해서 권한 요청을 하고, 쓰레드를 이용해서 log를 남기곤 했었는데요. 이제는 개발적으로 확실하게 audit log를 관리해보고자 gcp cloud logging을 도입했고, 그 과정을 정리해보고자 합니다. 0. 왜 winston인가? 많은 Node.js logging module중(morgan, bunyan등등..) winston을 사용한 이유는 multiple tran..

2022.12.02 게시됨

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 게시됨