Back-end/Spring

[Spring/JPA] @Transactional을 사용하는 이유에 대하여 (부제. JPA Dirty Checking)

이번 포스팅에서는 JPA를 사용한다면 한 번쯤은 사용해 봤을 법한 @Transactional 어노테이션에 대해서 알아보려고 합니다. 0. Transaction이란? 그럼 먼저 Transaction에 대해서 간단하게 짚고 넘어가 보겠습니다. Transaction이란 한 문장으로 정의해 보면 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 의미합니다. 일반적으로 알고 있는 SELECT, INSERT, UPDATE, DELETE을 사용해서 데이터베이스를 사용하곤 하는데요. 데이터베이스를 사용할 때 한번 접근해서 수행하는 작업의 단위라고 할 수 있죠. 트랜잭션의 특징으로는 안전성을 보장하기 위해 필요한 4가지 성질이 있습니다. (ACID 성질) 1. 원자성(Atomicity) : 트랜잭션이 한번 ..

2023.03.02 게시됨

Back-end/Spring

[Spring / TIL] SpringBoot 버전 3.X.X에 Swagger적용하기

프로젝트 진행 중 클라이언트와의 협업에 필요한 API명세를 위해 Swagger를 도입하게 되었습니다. 이 글은 SpringBoot 버전 3.0.0 이상을 사용하는 프로젝트에서 Swagger를 도입할 때 사용해야 하는 Swagger 라이브러리에 대해 정리해보려고 합니다. 결론부터 말씀드리자면. 0. SpringBoot 3.0.0 이상부터는 springfox가 아닌 springdoc-openapi-ui 라이브러리를 사용해야 합니다. 아니 웬만하면 springdoc-openapi-ui를 사용하는 편이 좋습니다. SpringBoot3.0.0 이상이 아니라도 말이죠. 검색해 보면 상위 게시물들은 물론 거의 대부분의 게시물에서 springfox를 이용한 swagger 설정방법을 설명해주고 있지만 사실 sprindd..

2023.02.13 게시됨

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