외부활동/immersion 7

주문 재고 요청시 동시성 제어 [REDIS 분산락(Distribution Lock)]

https://softmoca.tistory.com/345 주문 재고 요청시 동시성 제어테스트 [트랜잭션/격리수준/LOCK/REDIS]https://softmoca.tistory.com/346현재 포스팅은 위 포스팅으로 이어 진다. 동시성 제어가 필요한 이유현재 kwangsang에서는 마감 시간이 가까워 졌을 때 떨이로 상품을 내놓는 점주 분들과 마감 할인 상품softmoca.tistory.com해당 포스팅은 위 포스팅과 이어 진다. 최종 동시성 제어 성능 비교 정리 [100명 동시 요청 기준]동시성 제어시 고려해야할 사항 4가지 중요 우선 순위  - 우선 순위중 하나라도 만족을 못하면 이후 순위들은 무의미해진다.(EX : 아무리 시간이 준수하고, 사용자 요청 순서가 보장되어도 데이터 무결성이 지켜 지지..

주문 재고 요청시 동시성 제어테스트 [트랜잭션/격리수준/LOCK/REDIS]

https://softmoca.tistory.com/346현재 포스팅은 위 포스팅으로 이어 진다.동시성 제어가 필요한 이유현재 kwangsang에서는 마감 시간이 가까워 졌을 때 떨이로 상품을 내놓는 점주 분들과 마감 할인 상품에 대한 정보를 필요로 하는 고객들을 위한 유통 서비스 플랫폼을 제작 중이다. 그리고 당시에는 @@대학교와 협약을 맺어 해당 서비스 플랫폼을 운영하기로  했었고 나는  1000명 이상의 동시 사용자들의 주문 요청에 대한 동시성을 제어하는 API를 개발 하는 역할을 되었다. 해당 서비스에서 동시성 제어를 필요로 하는 부분에 대해 간단히 알아보자.처음 푸쉬 알림을 통해 고객들에게 마감 할인 상품에 대한 정보가 주어지면 특정 시간에 많은 사용자의 트래픽이 몰리게 된다.그리고 해당 화면과..

JMeter 부하 테스트

부하테스트에는 여러가지 툴들이 있다.그중 유명한 JMeter와 nGrinder가 있지만 비교적 자료 소스가 많고 설치 법과 사용법이 간단해서 JMeter를 고르게 되었다.맥 OS인 나는 늘 그렇듯 brew로 설치를 하였다.윈도우를 사용하다가 맥 OS로 갈아타니 자질구레한 설정까지 신경을 안써도 되서 너무 좋을 것 같다. brew짱우선 대부분의 부하테스트 툴을 사용하기 위해서는 JAVA를 먼저 설치를 해야한다.하지만 brew를 사용하여 설치하면 이미 내부에서 java를 먼저 설치하고 이후 jmeter를 설치한다   JMeter란 ?Apache에서 만든 자바로 만들어진 웹 어플리케이션 성능 테스트 오픈 소스이다. - 웹 - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)- SO..

포트원 결제 연동 플로우 정리 [노마드코더]

포트원(통합 결제 솔류션)을 통해서  전체 결제 흐름이 어떻게 이루어 지는지 살펴 보자. 1. 사전 준비 우선 계정을 만들고 관리자 패널에 로그인을 해보자결제 연동 클릭 결제대행사로 카카오페이 선택   나주에 사용할 API키 및 API 비밀번호를 확인할 수 있다.복사해서 따로 저장해두자.   2. 프론트 엔드우선 위와 같은 포트원 SDK를 추가한다.포트원 SKD를 설치하면 IMP라는 전역 변수가 생성된다. 이 변수를 통해 포트원과 상호 작용 할 수 있다.  이전에 발급 받은 가맹점 식별코드를 사용해서 초기화 한다.  그 후 버튼에 이벤트 리스너를 추가한다.   onClickPay 내부에는 IMP 변수 안에 있는  request_pay 함수를 호출한다.이 함수는 결제 요청에 대한 모든 옵션이 포함된 구성 ..

AWS와 Slack 간단 연동하고 에러로그 알람 받기 [Cloudwatch, chatbot,Simple Notification Service ]

AWS와 Slack을 연동하여 AWS에서 Slack으로 알람을 보내보자 ! 현재 배포된 서버에 대한 로그가 AWS의 cloudwatch에 쌓이고 있다. 이때 해당 서버에 에러가 발생한경우 Slack으로 알람을 보내어 팀원 전부에게 알려보고자 한다 ! 간단 순서 요약 1.Cloudwatch 로그 그룹의 로그 스트림 중 특정 문자열 포함시 '지표 필터 생성' 2. Slack 채널 생성 3. 경보 알림 'SNS(Simple Notification Service)' 주제 생성 4.해당 지표 필터를 트리거로 '경보(알람)' 생성 5. 'AWS Chatbot'에서 'Slack'으로 클라이언트 생성 해당 과정을 간단히 말하자면 AWS의 Cloudwatch에 생성되는 로그 중 (설정자가 원하는)특정 문자열, 예를 들면..

Redis와 분산 락(Distributed Lock)

레디스(Remote Dictionary Server) 메모리에 저장하는 key-value기반의 NoSQL DBMS - 캐싱 뿐 아니라 임시작업큐, 실시간 채팅,메시지 브로커 - 메모리에 저장되어 빠른 속도로 접근가능, get/post 경우 10만 TPS이상 가능 - 싱글 스레드로 한번에 하나의 명령만 처리, race condition(두개 이상의 프로세스가 동시에 하나의 리소스에 대해 접근할 때 서로 경쟁)이 거의 발생하지 않는다 - 다양한 자료구조 제공, 개발의 편의성 증가 - 메모리에 저장된 데이터를 디스크에 영속화Persistence( RDB,AOF 두가지 옵션 존재) → 서버에 치명적인 문제가 발생하더라도 복구 가능 RDB: 특정한 간격으로 현재 레디스의 메모리에 존재하는 데이터의 스냅샷을 남기는..

캐시란 ?

캐시의 사용 이유 캐시 : 데이터나 값을 미리 복사해 놓는 임시 장소 보통 기본적으로 3Tier 아키텍처 구조를 많이 사용한다. 작은 서비스라면 문제가 없지만 사용자가 많아지고 서비스가 커진다면 클라이언트가 많아지고 요청이 많아저서 DB에 대한 부하도 증가 하게 된다. 그러한 DB의 부하를 줄이기 위해 캐시를 도입한다. 약 80%의 결과가 20%의 원인으로 부터 온다는 법칙 이런 법칙을 캐시에도 적용을 시켜 이해해 보면 직관적으로 빠른 이해를 할 수 있다. 캐시에 자주 사용되는 약 20%의 데이터를 미리 캐싱해 둔다면 효과적인 성능 향상을 기대할 수 있다. 공간적 지역성과 시간적 지역성 공간적 지역성 :참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성 시간적 지역성 : 사용 되었던 데이터가 빠른 시..