서비스에 k8s 적용 간, 배포 방식에 관하여 관련 레퍼런스를 읽어볼 기회가 생겼습니다.현대 어플리케이션은 높은 가용성과, 빠른 피드백 루프를 요구하기에,이를 위하여 단일 서비스에 대한 전면적 배포방식보다는, 점진적이고 제어 가능한 배포 전략을 채택하는 것이 일반적이게 되었습니다.이번 글에서는 이러한 배포의 대표적인 전략인 Canary, Rolling, Blue-Green을 살펴보도록 하겠습니다. 1. Canary - Canary 배포는 전체 신규 버전을 소수의 인스턴스 혹은 소수의 사용자 그룹에게 먼저 릴리즈하여, 정상 동작 여부와 안정성을 검증한 후 점차 배포 범위를 확대하는 전략입니다.- 이름과 비슷하게 과거, 카나리아 새를 광산에 데리고 갔던 것에서 유래하여 장애 가능성을 사전에 탐지하기 위한 접..
서론Chatting Server를 구현할 일이 생겼습니다. 기본적으로, Chatting은 서버와 클라이언트 간 세션 수립을 기반으로 작동하며, 양방향 통신에 의해 로직이 이루어지는 Websocket프로토콜을 사용합니다.(Websocekt프로토콜이 나오고, HTTP API를 사용한 Polling은 사실상 실시간 채팅에 사용하는 서비스가 있을지 의문인데, 생각보다 채팅 구현관련 레퍼런스를 찾아보면 Polling과 관련한 내용도 자주 볼 수 있었네요.. why..? 굳이..?) Chatting Server를 구현하려면 높은 리소스를 잡아먹는 도메인 특성상, 또한 서버와 Connection이 가능한 클라이언트 수가 제한이 되기 때문에 서비스의 규모가 증가함에 따라 'Scale-out'은 필수적이기 때문에, ..
서론상용 IT서비스를 개발하기 위해서는 코드의 품질, 비즈니스적인 면도 중요하지만, 운영또한 매우 중요한 요소입니다.토이프로젝트로 끝날 프로젝트라면 infra 관련한 부분에 힘을 덜 주어도 되겠지만, 24시간 상용 서비스를 만들어야 하는 저의 경우에는 지속적인 운영, 실시간 트러블 슈팅을 위해 도커와 Github Action을 적용한 CI / CD를 도입하도록 하였습니다. 오늘은 여기서 이 CI / CD란 무엇인지 짚고 넘어가도록하겠습니다. CI (Continuous Integration)CI는 영문 단어 자체를 직역해보자면, '지속적인 통합'이라는 의미를 갖고있습니다.여기서 지속적인 통합은, 개발자 단에서 애플리케이션의 코드 수정이나 추가적인 기능이 구현되었을 경우 새로운 변경 사항들이 정기적으로..
서론 프로젝트 진행 도중 SpringBoot에서 실시간 데이터를 받아오기 위해 외부 API에 웹소켓으로 연동을 하였습니다.외부 api에 소켓 연결을 하여 실시간 데이터를 받아오는 로직은, 기본적으로 마켓 데이터를 실시간으로 제공하는 서비스 특성 상 핵심 기능이었습니다.따라서, 네트워크 연결 실패, 혹은 서버 문제로 인하여 외부 서버에 소켓 연결이 끊길 경우 실시간 데이터를 받아오지 못하는 치명적인 결함이 발견되었습니다.이 문제를 해결하기 위해 연결이 끊길경우 재접속 연결요청을 주기적으로 실행하는 로직이 필요했습니다. 문제 코드public class UpbitWebsocketClient extends WebSocketClient { private final ObjectMapper objectMapp..
현대 서비스 회사들이 많이 애용하는 세션에 관하여 설명을 드리려합니다.JWT Token을 활용한 로그인방법도 있지만, 이번 시간에는 Session 로그인이 어떠한 과정에 의해 활용이되는지 알아보는 시간을 갖도록하겠습니다. 우선, 세션과 쿠키라는 두 가지의 용어에 대한 이해가 필요합니다. 먼저, 왜 쿠키와 세션을 사용하여야 하는가?이에대한 답변을 내놓으려면, http 프로토콜의 특징을 먼저 알아야 하는데, 간략히1. 비연결 지향(클라이언트가 서버에 요청했을 때 그 요청에 맞는 응답을 보낸 후 연결을 바로 끊는 형식)2. Stateless (상태정보를 유지 안함 - 첫번 째 통신에서 데이터를 주고받았다 하여도, 두 번째 통신에서 이전 데이터를 유지하지 않음)의 한계로 인해 사용한다고 알고있으면 되겠습니다. ..
이번 포스팅에서는 JWT token이 무엇인지, 어떠한 방식으로 작동하는지에 대하여 짚어보는 시간이 되겠습니다. 토큰 인증 방식우선, JWT Token을 이해하기 전, Session기반 인증 방식과, 토큰 인증 방식을 이해하여야 합니다. Session기반 인증방식서버의 세션을 사용하여 인증을 하는 방식으로, 서버측(서버 메모리(RAM)이나 데이터베이스)에서 사용자의 인증정보를 관리 및 처리하는 인증 방식을 말합니다. 이에따라 클라이언트가 요청할 때 마다 해당 요청자의 SessionID값을 스토리지에서 탐색하는데 오버헤드가 발생하여 사용자가 증가하면 할수록 성능저하 문제를 일으킬 수 있습니다. Token기반 인증 방식이러한 Session기반의 인증방식의 단점을 개선하기위하여 Token기반 인증방식이 만들..