jjuya

Dev Review the Record
· Kotlin
변수의 선언변수 선언은  val와 var를 사용함 val변수의 선언을 할 때 지정한 값에서 더 이상 변경하지 않아야 하는 경우 사용 var 변수의 값을 바꿀 수 있어야하는 경우 사용 val variableName : String = "변수의 선언 방법"// 변수선언키워드 변수이름 : 데이터 타입 = "값" 자료형 추론데이터 타입은 optional => 생략가능, 값을 가지고 자료형 자동으로 지정  변수 출력 (번외)pringln("print value : $value")  데이터타입Reference Type객체를 생성하고 데이터를 할당하는 방식참조형으로 생성된 객체는 컴파일 과정에서 기본형으로 대체 : 데이터 타입의 최상위 클래스 Any대문자로 사용 숫자형 데이터 타입정수형Long(64bit), Int(..
· Kotlin
특징자바에 비해 비교적 간결한 문법을 제공Null 안정성 제공기본적으로 Null 을 허용하지 않으며, 명시적으로 Null을 처리해야 사용할 수 있음모든 함수가 리턴값을 가짐예외처리를 강제하지 않음자바 8에 호환멀티 플랫폼 지원 (아직은 beta로 명시되어 있음) - Kotlin fun main(arg: Array){ } - javapublic statuc void main(String[] arg){}
약 4~5주간 MSA기반 ecommerce프로젝트를 진행했다.기획부터 개발완료 까지 개인 프로젝트로 진행했다. 개인프로젝트의 장점은 내가 프로젝트의 모든 부분을 속속들이 알고 직접 기획하고 계획해야하는 점이 아닐까 하는점이다.  프로젝트를 진행하면서 막힐때는 정말 답답함에 울고 싶었지만 포기하지 않고 자료들을 찾아보고 함께 비슷한 주제를 가지고 프로젝트를 한 동료들과의 팀 스터디를 진행하며 토론하고 질문하며 많은 인프라를 얻을수 있었던거 같다 뒤돌아보면 정말인지 정신 없이 흘러간 4주간이 아닐까 싶다. 그래서 4주간의 프로젝트를 회고해볼까 한다!회고를 하며 프로젝트에 대해 아쉬웠던점과 앞으로 어떤 방향으로 개선하면 좋을지 고민해 보기 위해 이 글을 작성한다. 프로젝트 소개프로젝트 인원 : 개인 프로젝트프..
기술적 의사 결정초기 프로젝트 설계 시, 대규모 트래픽을 처리하고 선착순 구매를 지원하는 시스템을 설계했다.그래서 추후 스케일 아웃을 고려하여 로드 밸런싱을 염두에 두고 Kafka를 선택했다. 비동기 처리를 위해 Kafka로 이벤트를 발행하고, 이를 통해 시스템의 높은 동시성을 유지하며, 트래픽 부하를 효율적으로 분산시킬 수 있도록 설계하였다. Kafka의 비동기 메시징 시스템을 활용함으로써, 결제 처리와 같은 중요한 작업을 병렬로 처리할 수 있어 시스템의 응답성과 확장성을 높일 수 있었다. 결제 로직전체 동기적으로 순차적 수행되던 로직을 kafka를 통해 비동기적으로 이벤트 발행하는 방식으로 수정했다.성능개선 결과10000건 요청 시 성능개선 확인할 수 있었다!TPS( Throughput: 초당 처리한..
· 기타
TPS 측정하기TPS 확인 방법Thread Group에서 우클릭 후 Add > Listener > Summary Report 추가Samples: 요청 수Average: 요청 응답 시간 평균값Min: 요청 응답 시간 최솟값Max: 요청 응답 시간 최댓값Std. Dev.: 요청 응답 시간 표준편차Error %: 요청 에러발생 비율Throughput: 초당 처리한 요청 수 (TPS)Received KB/sec: 초당 서버에서 수신된 데이터 양Sent KB/sec: 초당 서버로 전송된 데이터 양Avg. Bytes: 요청의 크기 평균 TPS란?TPS는 Transactions Per Second의 약자로 요청 단위로 초당 얼마나 많은 요청을 처리할 수 있는지에 대한 수치이다.TPS가 높을수록 시스템이 더 많은 요청..
Redis 캐싱프로젝트 작업 시 재고 조회를 Redis 캐싱 처리를 해서 관리하고자 한다. 선착순 구매 작업시 많은 사용자들이 재고를 조회하고 그 재고를 바탕으로 주문을 해야 하게 때문에 db에서 재고를 조회하는 대신에 인메모리 db로 동작하는 redis를 선택해 빠르게 데이터를 조회할 수 있도록 하려 한다. 캐싱 방법으로는 로컬 메모리 캐싱, 데이터베이스 캐싱등 여러 방법이 있지만 다양한 데이터 구조를 지원하고 확장성이 뛰어난 Redis를 사용해 캐싱하려 한다! 캐싱 전략캐싱 전략은 웹서비스의 시스템 향상을 기대할수 있는 중요한 기술 중 하나이다.일반적으로 캐시는 메모리를 사용하기 때문에 데이터베이스 보다 훨씬 빠르게 데이터를 응답할 수 있다.메모리는 용량이 크지 않고, 데이터베이스보다 비싸기 때문에 ..
Jmeter 테스트결제 로직을 작성한 후 Jmeter로 테스트를 해보았다.Number of Threads (사용자 수): 1000Ramp-Up Period (래핑 업 시간): 1초Loop Count (루프 카운트): 11000명의 사용자가 동시에 실행되는데 1초 동안 1000명의 사용자가 시작한다.각 사용자가 1회 반복 요청을 보내기 때문에 총 1000번 실행이 되어야 한다. Request{ "productId" : 1, "count" : 1, "addressId": null}1번의 상품을 요청 시마다 하나씩 구매한다.모든 requst가 성공하게 된다면 1000개의 재고가 감소되어야 한다.그렇다면 바로 결과 확인해 보자! 결과 확인  데이터 베이스 확인order는 999개 만들어졌는데 상..
서비스 장애 대응의 필요성MSA구조에서는 각 서비스가 독립적으로 동작하며, 서비스 간의 의존성을 최소화해야 한다.내 프로젝트에서 Order-service에서 다른 서비스로의 요청이 많다.예를 들면 user-service에 사용자 정보 요청이라던가, product-service에 상품요청을 한다.그렇다면 이 상황에서 order-service에서 요청을 보내주는 다른 서비스들에서 응답이 지연되거나 실패하는 경우 어떻게 될까?Order-service의 리소스(예: 스레드풀)가 고갈되어 전체 시스템에 영향을 미쳐 전체 서비스의 장애로 이어질 것이다. 이러한 사항들을 해결하기 위해 Circuit Breaker 패턴을 사용할 것이다Circuit Breaker 패턴 을 구현하면 장애를 빠르게 탐지하고 요청을 차단할 ..
API Gateway란?MSA 아키텍처에서 외부(클라이언트)로부터 각각의 마이크로 서비스로 진입하는 진입점입니다. API Gateway를 공통적으로 사용하여 외부에서는 각 마이크로 서비스를 몰라도 API Gateway의 라우팅을 통해 호출할 수 있습니다.또한 추가적으로 요청에대한 공통 관심사를 API Gateway에서 처리할 수 있습니다. 현재 e-commerce프로젝트에서는 인증 까지  API Gateway 가 해줄수 있게 작업할 예정이다.spring security를 설치하냐 마냐에 대해서도 계속 고민이 되는 지점인 거 같다.하지만 일단 지금시점에서는  API Gateway 에 너무 많은 역할을 부여하지 말아야 한다는 생각으로 시큐리티는 user-service에만 설치할 예정이다. API Gatewa..
Spring BatchSpring Batch는 로깅/추척, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리등 대용양 레코드 처리에 필수적인 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다. Spring Batch에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행을 하게 된다. 또한 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생하게 된다. Spring Batch vs Quartz? Scheduler?Spring Batch는 Scheduler가 아니기에 비교 대상이 아닙니다.Spring Bat..
jjuya 개발 기록
jjuya💕