Activity

안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 Caching에 대해 이야기를 풀어내 보려고 합니다. 감사합니다. 개요 문제 현재 모아밤 서비스의 문제점은 Moabam Tech - 실시간 선착순 쿠폰 이벤트 도입기 포스팅을 보면 알 수 있듯 대기열 등록 및 쿠폰 발급 부분에서 DB에 동일한 요청을 계속해서 보내고 있습니다. 즉 불필요한 쿼리가 발생하고 있습니다. 원인 사용자들이 선착순 쿠폰 발급을 위해 쿠폰 발급 요청을 하기 때문에, 단기간에 동일한 요청이 여러번 발생합니다. 또한 스케줄러로 인해 1초마다 동일한 쿼리가 발생합니다. 해결 현재 모아밤 서비스는 쿠폰 정보 변경 가능성이 없다고 봐도 무방합니다. 또한 동일한 요청을 보내고 별도 연산없이 동일한 ..
안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 서브모듈에 대해 이야기를 풀어내 보려고 합니다. 감사합니다. 배경 팀원들과 스프링부트를 활용해 모아밤을 개발하면서, application.yml 혹은 application.properties에 애플리케이션 환경 분리와 Private 정보를 모두 명시해야 했습니다. 때문에, 초반에는 아래와 같이 환경 변수를 활용해 설정 정보를 명시했지만, 이는 큰 문제점이 있었습니다. ... token: iss: ${JWT_ISS} access-expire: ${JWT_ACCESS_EXPIRE} refresh-expire: ${JWT_REFRESH_EXPIRE} secret-key: ${JWT_SECRET_KEY} ... 문제..
안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 예외 처리에 대해 이야기를 풀어내 보려고 합니다. 감사합니다.배경모아밤에서는 @RestControllerAdvice와 @ExceptionHandler를 통해 예외 처리를 진행하고 있습니다. 하지만 왜? 해당 방식을 사용할까요?  단순 예외 처리가 아닌 일반적인 요청 흐름과 예외 발생 시, 흐름을 파악하여 왜 해당 방식을 사용하게 되었는 지 살펴봅시다! 사전 지식BasicErrorControllerSpring 1.X 버전부터는 예외 처리를 위한 BasicErrorController를 구현했습니다. 그리고 Spring Boot는 예외 발생 시, 기본적으로 /error로 예외 요청을 다시 전달하도록 WAS 설정이 ..
안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 실시간 선착순 시스템에 대해 이야기를 풀어내 보려고 합니다. 감사합니다.배경저희 모아밤 서비스는 사용자들을 위해 쿠폰 이벤트를 도입하게 되었습니다. 현재 생각 중인 쿠폰은 선착순으로 진행하는 이벤트로 사용자들이 다양한 종류의 N개 쿠폰을 선착순으로 지급 받도록 할 계획입니다. 선착순 쿠폰 발급 이벤트는 짧은 시간에 많은 트래픽이 발생합니다. 중요한 점은 서버가 다운되지 않고 수량 제한에 맞춰 정확하게 쿠폰이 발급되어야 합니다. 이런 사항들을 모아밤에서는 어떻게 해결했는지 살펴봅시다. 요구사항사용자들은 정해진 재고에 따라 선착순으로 쿠폰을 발급 받을 수 있다.동일한 이벤트에서 동일 사용자가 쿠폰을 중복하여 발급..
안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 Embedded Redis에 대해 이야기를 풀어내 보려고 합니다. 감사합니다. 배경 모아밤에서는 다음 요구사항을 위해 Redis 저장소를 활용하게 되었습니다. 사용자는 다른 사용자에게 12시간 마다 1회 콕 알림을 보낼 수 있다. 사용자는 자신이 속한 방의 인증타임에 알림이 울린다. 개인적으로 프로젝트 코드를 누군가가 클론했다면, 그 즉시 개발 및 테스트를 시작할 수 있어야 한다고 생각합니다. 때문에, 테스트 할 수 있는 환경 구성을 위해 Embedded Redis를 적용하게 되었습니다. 기술 환경 Spring Data Redis Redis를 마치 JPA Repository 이용하듯 인터페이스를 제공하는 Sp..
안녕하세요. 현재 데브코스 4기로 활동 중인 모아밤팀 서버 개발자 홍혁준입니다. 이번 포스팅에서 FCM Push Notification에 대해 이야기를 풀어내 보려고 합니다. 감사합니다. 모아밤 서비스에는 어떤 Push 알림이 필요할까? 푸시 알림이란 사용자가 서비스를 사용하고 있지 않은 상황에서도 사용자에게 알림을 보내는 방법입니다. 푸시 알림을 가장 단순하게 구현하는 방법은 Polling 방식으로 주기적으로 서버에 편지 도착 여부를 묻는 HTTP 요청을 보내는 방법이 있는데요. 이 Polling 방식은 Short Polling과 Long Polling 방식이 있는데, Short Polling은 서버가 줄 데이터가 없음에도 주기적으로 요청과 응답 작업을 반복해야 해서 불필요한 트래픽이 발생합니다. 반..
개요 데브코스 팀원들과 웹툰 서비스를 주제로 사이드 프로젝트를 경험했다. 이 프로젝트를 무사히 마치고 나서 다음과 같은 의문이 들었다. "사용자들은 유료 웹툰을 구매하기 위에 쿠키라는 상품을 사용하는데, 만약 동일한 아이디로 다른 사용자가 동시에 유료 웹툰을 구매하면 어떻게 될까?" 이 의문을 해소하고자 포스팅을 작성하게 되었다. [🌐 프로젝트 저장소] ❗️ 문제 사용 가능한 쿠키가 100개가 있고, 동일한 아이디로 동시에 다른 유료 웹툰을 구매했다고 가정하자. Race Condition (경쟁 상태) : 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태 개발 관점으로 보면 두 명의 사용자가 쿠키에 동시에 접근하여 쿠키 갯수를 감소시킬 수 있게 된다. 즉, 쿠키 갯수라는..
개요 트위터의 제한된 글자수로 인해 짧은 URL 사용이 대중화 되었다. 단축 URL 사용은 해당 URL이 어떤 곳을 가리키는 지는 확인하기 어렵지만, 바이트 수를 줄여준다. 계속해서 단축 URL을 알아가보자. 단축 URL이 실제 URL을 어떻게 확인할까? 단축 URL을 클릭했을 때 발생하는 GET 요청의 응답으로 'HTTP 3XX'가 리턴되고 Location 헤더에 실제 URL 정보가 표시된다. 즉 Body 전체를 응답할 필요없이 'HTTP Header Request'을 지원하는 curl 등을 이용해 반환된 헤더의 Location 정보만 파싱하여 표시해주면 불필요한 리소스를 줄일 수 있게 되는 것이다. 단축 URL 알고리즘 필자의 블로그 주소(hongdosan.tistory.com)를 goo.by에서 단..
개요 백엔드 데브코스에서 마르코님이 진행하는 발표 스터디에서 프록시 패턴을 맡게 되었는데요! 해당 발표를 준비하면서 학습한 내용을 공유하고 싶어서 글을 쓰게 되었습니다. 프록시 패턴 소개 프록시는 직역하면 대리라는 의미를 가지는데요. 직역 그대로 프록시 패턴은 클라이언트가 원래 사용하려는 객체를 직접 쓰는 것이 아닌 대리인을 거쳐 쓰는 패턴이라고 보면 됩니다. 쉽게 말해, 회사 대표를 뵙기 전 비서를 먼저 봐야하는 것처럼, 요청이 왔을 때 항상 프록시가 먼저 받게 되는 것처럼 말이죠! 그림을 보면 프록시와 리얼 서브젝트가 공유하는 인터페이스가 있고 프록시는 리얼 서브젝트를 참조하고 있습니다. 그래서 클라이언트는 해당 인터페이스 타입으로 프록시를 사용합니다! 이처럼 클라이언트가 프록시를 거쳐 리얼 서브젝트..
홍도산
'Activity' 카테고리의 글 목록