전체 글 (17) 썸네일형 리스트형 HTTP 요청 순차 처리 솔루션 개발 프로젝트 - 1 안녕하세요.이번 글에서는 HTTP 요청을 순차 처리하기 위한 솔루션을 개발한 개인 프로젝트에 대해서 소개하고자 합니다.이번 1편에서는 구현한 프로그램의 개요, 전체적인 구조 및 동작 방식, 그리고 관련 기술 선택 근거에 대해서 설명하도록 하겠습니다. 전체 소스 : https://github.com/chrismrkr/bypass-server1. 프로젝트 개요Spring 기반의 서블릿 컨테이너는 멀티 스레드로 클라이언트 요청을 처리합니다. 그러므로, 클라이언트의 여러 요청이 멀티 스레드를 통해서 동시에 처리될 수 있다는 것을 의미합니다. 그렇다면 'Spring 기반 서블릿 컨테이너가 클라이언트의 특정 요청들을 순차적으로 처리하기 위해서는 어떻게 해야할까?' 라는 기술적 호기심을 생겼고, 이를 해결하기 위해서.. Spring Security에서의 Filter 안녕하세요.이번 글에서는 Spring Security가 어떻게 Filter로 등록되고 동작하는지에 대해서 정리하고자 합니다.'필터와 인터셉터란?' 포스팅의 연장선에 있는 글이므로 아래를 참고하시면 이해하는데 도움이 될 수 있습니다.https://okkkk-aanng.tistory.com/35 필터와 인터셉터란?안녕하세요.이번 글에서는 필터와 인터셉터에 대한 내용을 다루고자 합니다.'필터와 인터셉터를 내가 과연 제대로 알고 있을까?'와 같은 반성을 하게 된 개인적인 사건(?)이 있었고, 이에 대한okkkk-aanng.tistory.com DelegatingFilterProxy와 SecurityFilterChainDelegatingFilterProxy를 통해 서블릿 컨테이너는 스프링 컨텍스트에 Bean으로 .. 필터와 인터셉터란? 안녕하세요.이번 글에서는 필터와 인터셉터에 대한 내용을 다루고자 합니다.'필터와 인터셉터를 내가 과연 제대로 알고 있을까?'와 같은 반성을 하게 된 개인적인 사건(?)이 있었고, 이에 대한 고민을 풀고 필터와 인터셉터에 대해서 Deep-Dive하여 정리해보고자 글을 작성하게 되었습니다. DispatcherServlet? 필터? 인터셉터?필터와 인터셉터에 대해서 최초로 접하게 되었던 기술은 Spring MVC 였습니다. 제가 알고 있었던 간단한 내용은 아래와 같았습니다. 필터 : DispatcherServlet 앞단에서 HTTP 요청 및 응답을 처리하기 위한 오브젝트인터셉터 : DispatcherServlet이 HTTP 요청에 맞는 Handler를 호출하기 이전에 가로채어 특정 작업을 실행하는 오브젝트.. 웹 채팅 프로그램 개발 프로젝트 후기 - 1 안녕하세요.웹 기반 채팅 프로그램을 개발한 사이드 프로젝트 과정과 후기를 남겨봅니다.회사에서 웹 소켓과 관련된 업무를 담당하며 해당 기술에 관심을 갖게 되었고, 해당 기술 관련 개발 역량을 기르고자 시작한 프로젝트입니다.Backend와 Infrastructure에 초점을 맞춘 글이며, 프로그램의 구성, 주요 기능 구현 방식, 그리고 성능 분석 및 트러블 슈팅 과정에 대해 구체적으로 설명했습니다. 프로젝트 진행 과정을 리마인드하고 해당 분야에 관심있는 다른 방문자님들께 내용 공유하기 위한 목적으로 작성했습니다. 특정 부분에 대해서 더 궁금하다, 내용 설명이 잘 이해가 안된다, 부연 설명이 필요하다, 보완이 필요한 설명이다, 등등 모든 피드백은 주시면 감사히 받겠습니다. 아래 링크에서 프로젝트의 전체 소.. 웹 채팅 프로그램 개발 프로젝트 후기 - 4 안녕하세요.이번 편에서는 채팅 메세지를 저장하고 조회하는 메커니즘을 어떻게 구현했는지에 대해서 설명하도록 하겠습니다. 1. 채팅 메세지 저장 및 조회채팅 메세지의 영구적인 저장소로는 Elastic Search를 사용했습니다. Elastic Search를 영구적인 저장소로 채택한 기술적 선택 이유는 아래와 같습니다.역색인 구조(Inverted Index)로 데이터를 저장하므로 키워드, 조건 등의 검색 성능이 높음정형화된 데이터가 아닌 비정형 데이터를 저장하기 위해 사용됨채팅 메세지를 조회할 때 주로 특정 채팅방, 특정 시간 이후 등의 조건으로 검색하고, 또한 채팅 메세지는 정형화된 데이터로 다른 데이터와 특정한 관계를 맺지 않는 비정형 데이터이기 때문에 Elastic Search를 활용하여 저장하였습니다... 웹 채팅 프로그램 개발 프로젝트 후기 - 3 안녕하세요.채팅방 퇴장 기능, 성능 분석에 대해서 정리하였습니다. 3. 주요 기능 구현 방식5. 채팅방 퇴장 기능최초 트랜잭션은 아래의 흐름으로 구현했습니다.ChatRoom 존재여부 확인 : chatRoomRepository.findByIdMemberChatRoom 삭제 : memberChatRoomRepository.delete(memberId, roomId)ChatRoom에 참여 중인 Member 확인 : memberChatRoomRepository.findByRoomIdChatRoom 참여 중인 Member가 없으면 삭제 : chatRoomRepository.delete(roomId) 위 트랜잭션은 동시에 실행될 때 Isolation Level 때문에 문제가 발생함을 확인했습니다. MySQL의 기본.. 웹 채팅 프로그램 개발 프로젝트 후기 - 2 안녕하세요.1편에서는 요구사항, 프로그램 구성, 그리고 유저 간 채팅 메세지 송수신 기능에 대해서 설명하였습니다.이어서 다른 주요 기능 구현 방식에 대해서도 진행해보겠습니다. 3. 주요 기능 구현 방식2. 채팅 메세지 저장 및 조회 기능 채팅 이력은 Spring Data Elastic Search를 통해 Elastic Search에 저장되도록 구현하였습니다. 채팅 메세지는 키워드, 저장 시간 등의 기준으로 조회되어야 하므로 Elastic Search에 저장하는 것을 선택했습니다. Spring Data Elastic Search에 대해 정리한 링크는 아래와 같습니다. [Github Link] https://github.com/chrismrkr/WIL/blob/main/infrastructure/elasti.. OAuth2.0을 활용한 로그인 및 토큰 발급 서비스 개발 후기 1 안녕하세요.OAuth2.0을 활용한 로그인 및 토큰 발급 서비스를 개발한 개인 프로젝트 후기를 남겨봅니다. 1부에서는 OAuth2.0의 흐름과 Kakao OAuth2.0을 이용하여 Access Token을 발급하기 위해 WAS를 어떻게 구현했는지에 대해서 설명하고, 2부에서는 OAuth2.0이 대체 왜 이와 같은 흐름으로 설계가 되었을지에 대한 개인적인 분석과 고찰을 남겨보려고 합니다. 프로젝트 진행을 리마인드하고 해당 분야에 관심있는 다른 방문자님들께 내용 공유하기 위한 목적으로 작성했습니다. 내용에 대한 피드백은 언제든 환영합니다.아래 링크에서 프로젝트의 소스 전체를 확인할 수 있고, README를 참고하여 Docker Compose로 로컬환경에서 실행하여 데모해보실 수 있습니다. [Github L.. 이전 1 2 3 다음