본문 바로가기

(개발) 프로젝트6

선착순 쿠폰 이벤트 참여 기능 개발 회고 1. 선착순 쿠폰 이벤트 참여 기능 설계 상황 Dailyge 프로젝트를 진행하며 선착순 쿠폰 이벤트 참여 기능을 개발하게 되었습니다. 처음에는 사용자가 선착순 쿠폰 이벤트에 참여하면 바로 사용자가 당첨자인지 확인 후 쿠폰을 발급해주는 구조로 설계했습니다. 즉, 단계 별로 선착순 쿠폰 이벤트 참여 시, 다음과 같은 과정을 거치게 됩니다. 1. 쿠폰 테이블에서 사용자의 id로 발급된 쿠폰이 있는지 확인하여 중복 참여를 검증합니다. 2. 사용자가 선착순 쿠폰 이벤트에 참여하면 쿠폰 테이블을 조회하여 해당 이벤트에 대해 발급된 쿠폰 수량을 확인합니다.3. 당첨자 수만큼 쿠폰 발급이 이루어지지 않았다면 사용자를 당첨자로 선정하고 쿠폰을 발급합니다.  2. 기존 설계의 문제점 그러나 이러한 설계는 두가지 문제점이 .. 2024. 9. 26.
[스프링 서버 구현하기] 템플릿 메소드 패턴과 템플릿 콜백 패턴 사람들과 스프링 서버를 직접 구현해보는 프로젝트를 하며 JDBC를 이용하여 외부 데이터베이스와 연결되는 레포지토리를 작성하게 되었습니다. 구현하는 과정에서 SQL 작성 부분만 바뀜에도 불구하고, 데이터베이스 Connection을 얻어오는 부분 같이 변경되지 않는 부분이 하나의 메소드에 있게 되었습니다. 따라서 변경되는 부분과 변경되지 않는 부분을 분리할 필요가 있다고 생각했고, 그에 대한 방법으로 템플릿 매소드 패턴과 템플릿 콜백 메소드 패턴 두가지를 떠올렸고, 최종적으로 템플릿 콜백 메소드 패턴을 적용했습니다. 또한 PR에서 관련 질문을 받았기에, 좀 더 확실히 익히고자 해당 글을 작성하게 되었습니다.   1. 템플릿 메소드 패턴템플릿 메소드 패턴이란 상속을 통해 기능을 확장해서 사용하는 패턴입니다. .. 2024. 3. 28.
[스프링 서버 구현하기] 외부 데이터베이스 도입과 JDBC 스프링 서버를 직접 구현하며, 데이터를 저장하는 방식을 메모리에 저장하는 방식에서 JDBC API를 이용해서 외부 데이터베이스에 저장하는 방식으로 바꿨습니다. 그 이유는 메모리에 저장하게 되면, 애플리케이션이 종료될 경우 모든 데이터가 사라지게 되게 되기 때문입니다. 따라서 데이터를 영구적으로 저장할 수 있게 데이터베이스를 사용하기로 결정했고, 그 과정에서 학습한 내용을 기록했습니다.   JDBC란?JDBC는 Java Database Connectivity의 약자로 Java에서 데이터베이스에 접속할 수 있도록 해주는 Java API입니다.   JDBC를 통해 데이터베이스에 접근하는 과정JDBC를 통해 데이터베이스에 접근하는 과정은 다음과 같습니다.드라이버 로드DataSource를 통해 데이터베이스 연결 .. 2024. 3. 27.
디미터의 법칙(Law of Demeter) 1. 글을 작성하게 된 계기사람들과 스프링 서버를 만들어보는 프로젝트를 진행하며 디미터의 법칙에 대해 질문을 받았습니다. PR에 답하다 보니, 결합도와 디미터의 법칙에 대해 완전히 이해하지 못한 것 같아 이를 다시 한번 정리하고 글로 작성하게 되었습니다.   2. 디미터의 법칙디미터의 법칙(law of demeter, principle of least knowledge)은 객체지향 디자인 가이드라인입니다. 낮은 결합도를 유지할 수 있는 사례 중 하나입니다. 디미터의 법칙은 다음과 같은 원칙을 준수해야 합니다.각 객체는 다른 객체에 대해서 최소한의 정보만 알고 있어야 합니다.각 객체는 자신이 직접 조작하는 객체가 아닌 다른 객체를 알 수 없습니다.  클래스에 대해서는 구체적으로 다음과 같습니다.클래스 C의.. 2024. 3. 14.
[서버 아키텍처] NCP로 배포하기 : 로드밸런서 + 톰캣 + MySQL 이번에는 배포환경을 구성하였다. 네이버 클라우드 플랫폼(NCP) 크레딧이 있어서 네이버 클라우드 플랫폼으로 배포했다. 아래에서는 배포하면서 실습할 수 있었던 개념들에 대해 이야기해보려고 한다. L4 로드밸런서와 L7 로드밸런서 https://www.ncloud.com/product/networking/loadBalancer NCP 로드밸런서 사용 가이드에 의하면 VPC 환경에서는 네트워크 로드밸런서와 애플리케이션 로드 밸런서를 사용할 수 있다. 네트워크 로드밸런서와 네트워크 프록시 로드밸런서는 L4 계층에 속하고, 애플리케이션 로드밸런서는 L7 계층에 속한다. 따라서 네트워크 로드배런서와 네트워크 프록시 로드밸런서는 L4 로드밸런서로 볼 수 있고, 애플리케이션 로드밸런서는 L7 로드밸런서라고 볼 수 있을.. 2023. 12. 11.
[세션 관리] 세션 저장소를 Redis로 바꾸게 된 이유 기존에 세션에 사용자 정보를 저장할 때, HttpSession을 이용해서 저장했다. 그렇지만, Http Session를 사용하는 방식에서 Redis라는 외부 저장소를 이용해서 세션을 저장하기로 했다. 1. Http Session의 문제점 Http Session의 생명주기를 살펴보면, 서블릿 컨테이너가 Http Session을 생성하는 주체이고, Spring은 서블릿 컨테이너가 만든 Http Session을 주입하는 역할만 한다. 서블릿 컨테이너는 WAS 안에 포함되어 있기에 기존의 Http Session을 이용하면 WAS 1대 당 세션 저장소 1대를 가지고 있게 된다. 1 - 1. 단일 서버가 존재하는 환경 단일 서버가 존재할 때는 세션 저장소가 1대만 존재하기에 별 문제가 되지 않는다. 사용자가 처음에.. 2023. 11. 29.