React Query(Tanstack Query)로 서버 상태 관리하기
·
약간의 Front-end
React Query는 React에서 서버 상태 가져오기, 캐싱, 동기화 및 업데이트를 보다 쉽게 다룰 수 있도록 도와주는 라이브러리이다. React Query로 시작했지만, 이제는 React 뿐만 아니라 Vue, Solid 그리고 Svelte 등 다른 프레임워크도 지원하기 때문에 Tanstack Query로 이름이 바뀌었다고 한다! Tanstack Query 공식 문서에 따르면, 기존 상태 관리 라이브러리인 redux, mobX의 경우 클라이언트 상태 작업에는 적합하지만, 비동기 또는 서버 상태 작업에는 그다지 좋지 않다고 언급한다.기존 redux, mobX로 서버 상태를 다루면 다음의 과정을 거치므로 불필요한 보일러 플레이트가 발생하고, 캐싱도 되지 않는다.API 호출 → dispatch → redu..
[Git] Git Submodule로 민감한 정보 관리하기
·
etc
프로젝트에서 사용하는 많은 민감한 정보들이 있다. 각종 application.properties 또는 yml 파일들, JWT의 Secret Key, AWS 서비스와 연동하기 위한 Access Key 등...이 서비스들은 형상 관리를 한답시고 git에 올리면 악용될 여지가 크기 때문에 git에 올리지 않고 따로 보관해야 한다. 하지만 또 이런 설정들은 프로젝트 팀원들끼리 공유되어야 원활히 동작된다는 점에서 변경 및 관리가 까다롭다. ✅ git submodule 이란?git submodule은 특정 레포지토리(super project) 아래에 다른 레포지토리(submodule)를 마운트 해서 사용할 수 있게 해주는 도구다.이 서브 모듈을 private 한 레포지토리로 생성하면 해당 레포지토리에 접근 권한이 ..
인접 행렬 vs. 인접 리스트
·
Algorithms
코딩테스트 문제를 풀다 보면 그래프 문제를 마주하는데, 이렇게 정점과 간선 정보가 주어졌을 때 어떻게 그래프로 표현할 수 있을까?그래프를 표현하는 방법은 크게 2가지가 있다. 바로 인접 행렬과 인접 리스트다. 🟣 인접 행렬인접 행렬은 (정점 * 정점)을 배열로 두고, 두 정점 사이에 간선이 있으면 1로 표시하는 방식이다.배열이다 보니 탐색이 빠르다는 장점이 있다! 그렇지만 아무래도 메모리 공간을 많이 사용한다는 단점이 있다. 정리하면, 인접 행렬을 사용하는 경우는 다음과 같다.상황이유정점의 수가 작을 때$O(V^2)$ 공간이 감당 가능한 경우, 보통 정점이 1000개 이하일 때 사용한다.간선의 수가 많을 때(dense graph)거의 모든 정점이 연결되면 리스트보다 오히려 효율적이다.간선 유무를 자주..
스프링 부트에서 서비스를 우아하게 종료하기(Graceful Shutdown)
·
Spring Boot
서비스를 운영하다 보면 배포, 장비 교체 등을 위해서 서비스를 내리고 다시 올려야 하는 경우가 생긴다.여기서 등장하는 Graceful Shutdown은 말 그대로 서비스를 우아하게 중지한다는 의미다. 서비스를 종료하기 전에 진행 중이던 작업들은 완료하고, 리소스까지 정리한 후에 종료되는 로직을 의미한다. 즉, 종료 신호를 받으면 아래의 과정이 모두 이뤄진 후에 종료되어야 한다는 것이다.새로운 요청을 막기 위해 connection을 모두 닫기애플리케이션이 진행 중인 작업을 모두 완료파일은 마저 저장작업 중이던 DB는 커밋 or 롤백 처리사용자 요청에 응답은 끝까지 주기... 이러한 Graceful Shutdown은 애플리케이션 단에서는 물론이고, 서비스를 컨테이너로 감싸고 있다면 이를 고려한 컨테이너 오케..
무중단 배포 - 롤링, 블루-그린, 카나리 배포
·
DevOps
무중단 배포란, 운영 중인 서비스를 중단하지 않고(zero-downtime) 새로운 소프트웨어를 배포하는 기술이다.즉, 로드밸런서(Load Balancer)를 통해서 연결된 두 개 이상의 인스턴스에 트래픽을 제어하여 배포하는 것이 핵심이다. 무중단 배포는 크게 2가지 종류로 나뉜다.롤링 배포: 제한된 자원에서 하나씩 배포하여 변경해 나가기블루-그린 배포: 현재 사용 중인 버전의 인스턴스 수만큼 새로운 버전의 인스턴스를 준비해서 로드밸런서가 스위칭여기에, 새 버전 소프트웨어의 모니터링과 검증에 초점을 맞춘 카나리 배포도 많이 사용하고 있다.그러면 이제 각각에 대해 자세히 알아보자. ✅ 롤링(Rolling) 배포트래픽을 점진적으로 구버전에서 새 버전으로 옮기는 방식으로, 무중단 배포의 가장 기본적인 방식이다..