본문 바로가기

프로젝트/고민

(39)
팩토리 메소드 패턴으로 리팩토링 문제상황 카카오 페이를 통해 결제를 구현했다. 코드는 전적으로 카카오페이에 의존한 상태이다. 문제는 새로운 결제수단이 등록 되었을 때 생긴다. 결제 코드가 카카오 페이에 전적으로 의존하여 기존의 코드를 다 바꿔야 한다는 문제점이 생긴다. 이러한 문제점을 해결하기 위해 팩토리 메소드 패턴을 이용하여 리팩토링 하였다. 이유 여러가지 디자인 패턴 중 팩토리 메서드 패턴을 이용한 가장 큰 이유는 객체 생성을 캡슐화 하기 때문이다. 객체 생성을 캡슐화를 통한 얻을 수 있는 이점은 다음과 같다. 확장성 객체 생성 코드를 수정하지 않고도 새로운 객체를 추가하거나 기존 객체를 변경할 수 있다. 이는 시스템의 확장성을 높이는데 큰 장점이 된다. 코드 중복 최소화 객체 생성 코드를 중복해서 작성하는 일이 없어지고, 코드의..
낙관적 락을 적용하여 동시성 문제 해결하기 문제상황 여러명의 이용자가 동시에 주문을 진행하거나 주문을 취소할 경우 즉 멀티 스레드 환경에서 상품의 재고는 안정적으로 변화하는가에 대한 문제를 직면하게 되었다. 결과는 역시나 실패.. 해결방법 이러한 상황에서 내가 선택한 해결 방법을 소개하고자 한다. 선택지는 다음과 같이 있었다. 1. 비관적 락 2. 낙관적 락 3. 네임드 락 4. Redis의 Lettuce 또는 Redisson 라이브러리 활용 각 방법에 대한 장단점을 비교하는 글이 아니기에 내가 선택한 낙관적 락에 대해서 설명하도록 하겠다. 설명하기에 앞서 낙관적 락을 선택한 이유를 설명하겠다. 우선 mysql dbms를 이용하고 있는 상황이었기 때문에 Redis를 적용시키지 않았다. 또한, 상품중 같은 상품을 여러 사용자가 같은 시간에 주문하거..
프로젝트에 vault 적용하기 프로젝트를 진행하며 OAuth 2.0을 적용해 소셜 로그인을 적용했다. 이때 API호출에 대한 키와, 비밀번호가 필요한데, 이러한 설정 파일을 깃허브에 올리지 않고 협업하는 사람들과 어떻게 공유할 수 있을까에 대해서 고민하게 되었다. 그러던 중 vault라는것에 대해서 알게 되었고 vault를 이용해 보안상 중요한 데이터들을 관리해보게 되었다. vault를 처음 적용시키다 보니 많은 어려움을 겪었지만 적용시키는데 성공하였고 적용시키는 과정을 정리한 자료가 많지 않아 이를 정리해보고자 한다. Vault란? 우선 적용하는 과정을 설명하기에 앞서 Vault가 무엇인지부터 알아보도록 해보자. 글의 첫부분을 읽으면 예상할 수 있듯이, vault란 문서와 파일을 저장하는 저장소로, ID기반 비밀 및 암호화 관리 시..
프로젝트를 시작하며(docker) 프로젝트를 시작할때 협업을 하는 동료와 같은 db환경을 사용하면 좋겠다라는 생각에 docker를 이용해 각각의 로컬에서 mysql 서버를 띄워서 같은 db환경을 맞췄다. docker를 처음 사용해 봤는데 이번 기회에 docker에 대해서 정리해보고자 한다. 도커란? 컨테이너 기반의 가상화 도구 가상화? 그렇다면 가상화란 무엇이고 가상화의 등장 배경은 어떻게 될까? 예를들어 6천만원짜리 좋은 성능의 서버가 있다고 가정해보자. 이 서버에 쇼핑몰이 있다고 생각하고 고정 사용자는 1000명이 있다고 가정하면 서버의 성능에 비해 실제로 하는일은 부족해 성능이 아까운 셈이 된다. 이러한 점이 아까워 해당 서버에 새로운 프로젝트를 올리려고 한다. 하지만 앞전에서 사용하던 쇼핑몰 프로젝트와 충돌이 일어나는 상황이 발생..
프로젝트를 시작하며(branch 전략) 앞서 merge 전략에 이어 내가 앞으로 할 프로젝트의 branch 전략과 왜 이러한 branch 전략을 선택했는지에 대해 정리를 해보겠다. 우리는 개발을 진행하면서 우리가 구현한 소스코드를 git이라는 버전 관리 시스템을 통해 관리한다. git을 사용함으로써 우리는 시시각각 코드를 전송할 수 있으며, commit 내역을 통해 어떤 작업이 이루어졌는지 확인할 수 있다. 협업을 할때에도 git을 이용해 각각의 환경의 branch에서 작업을 하고 메인 저장소에 merge를 하며 협업을 할 수 있는데 우리는 어떠한 방식으로 branch를 나누고 개발할수 있을까에 대해서 말해보려고 한다. 대표적인 전략인 git flow, git lab flow, github flow에 대해서 설명하고자 한다. git flow ..
프로젝트를 시작하며(merge 전략) 이번에 스터디에서 프로젝트를 하나 하기로 했다. 주제는 1인 가구를 위한 쇼핑몰로 최근 4개월간 자바, 스프링, 객체지향에 대해서 기초부터 공부한 후 처음으로 하는 프로젝트이다. 처음으로 제대로 하는 프로젝트이다 보니 내가 알고있는 것들을 최대한 담아서 진행하고 싶은 마음이다. 이런 마음으로 프로젝트를 시작하기에 앞서 git merge 전략과 branch 전략에 대해서 알아봤다. git merge 전략 git merge 전략에는 다음과 같이 3개의 머지 전략이 있다. 일반 merge rebase and merge squash and merge 일반 merge 각각에 대해서 살펴보면 일반 merge의 경우 다음 그림과 같이 표현할 수 있는데, merge를 하기 전 브랜치에서 했던 작업들의 커밋 내용과, 해..
단축 url 프로젝트 회고 간단한 url 단축 프로젝트를 만들었다. 요구사항은 다음과 같다. URL 단축 서비스를 만들어야함 단축 URL의 키는 8글자로 생성 - www.abc.com/{단축 URL 키} 키 생성 알고리즘은 자유롭게 단축 URL은 원래 URL로 리다이렉트 되어야함 원래 URL로 다시 단축 URL 생성해도 항상 새로운 단축 URL 생성되어야함 기존 URL은 계속 동작 해야함 단축 URL에서 리다이렉트 될 때 카운트 증가 이러한 정보(단축 URL, 카운트, 원래 URL)를 확인할 수 있는 기능 DB 없이 컬렉션으로 데이터 저장 위 기능을 확인할 수 있는 테스트 코드 해당 서비스를 사용할 수 있는 UI 페이지 위의 요구사항을 보고 url 리다이렉션을 이용해서 만들면 간단하게 만들 수 있을거라고 생각했다. 하지만 만들고 ..