Project/Buy me If you can 11

Buyme Jmeter 락 X / 낙관적 락 / 분산락 / 테스트 결과

Case 3,4)트래픽의 부하가 심하지 않은 경우(User 5000, Ramp-up period 15sec~60sec) 락 사용 전과 낙관적 락 사용 후의 응답속도와 Throughtput 은 비슷하다는 것을 볼 수 있다. Case 1,2)하지만, 대규모 트래픽을 처리해야 할 때 (User 10000, Ramp-up period 5sec~10sec) 낙관적 락을 사용하는 경우 성능은 사용하기 전에 비해 다음과 같이 개선된다, Case 1 Create Order응답 시간: 1,417ms 개선 (29.6% 향상)처리량: 82.3건/초 증가 (29.3% 향상)Attempt Payment응답 시간: 3,187ms 개선 (40.3% 향상)처리량: 60.0건/초 증가 (30.2% 향상)Check Stock응답 시간:..

Buyme TIL240828 jpa 쿼리오류 / docker-compose 환경설정 / 로컬의 properties , docker-compose 환경설정 관련 학습

order-server gradle build 시 코드에러 전문OrderServiceApplicationTestsall > com.example.buyme.order > OrderServiceApplicationTests1tests1failures0ignored0.005sduration0%successfulFailed testsTestsStandard outputStandard error00:40:25.713 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [com.ex..

Buyme TIL240827 MSA 환경에서 api gateway 를 통한 데이터 통신

멀티 모듈 화 후 API 게이트를 통해 각 모듈을 연결할 때, 전환된 환경에서 다른 모듈에 있는 엔티티를 직접 참조할 수 없는경우, 어떤 방법을 사용하는게 좋은지?방법은 크게 3가지가 있다.REST API 를 통한 정보조회RestTemplateWebClient현재 MSA 환경에서 API 게이트웨이를 통해 다른 독립적인 (세분화된) 서비스들과 통신을 하는 것이기 때문에, REST API (http response)를 통해서 하는 것이 맞다. MSA 환경에서 order-service 를 쓰는데, Product 정보가 필요한 경우를 예상해보자  1. WebClient.Builder 사용을 위한 의존성 추가dependencies { implementation 'org.springframework.boot:..

Buyme TIL240826 멀티모듈 통신오류

첫번째, Execution failed for task ':bootJar' 라는 오류가 발생했다.이는 org.springframework.boot:spring-boot-dependencies:3.3.2 외부 종속성을 해결할 수 없어서 발생하는 오류로, 모노리스 서비스를 멀티모듈화 하면서 엔티티 등의 결합 관계가 제대로 정립되지 않아 발생하였다. 일부 엔티티 연결등을 통해 해당 오류를 해결했다.   두번째,docker-compose up --build  를 통해 빌드업을 하는 중 다음과 같은 에러가 발생했다,=> [order-service build 3/5] COPY ../../ ./ ..

Buyme TIL240816 모노리스 서비스를 MSA 로 구조화하기 - 멀티모듈화 / (트러블슈팅) 콘텐츠 루트 충돌 문제

유저 / 상품 / 주문 으로 구성된 현재의 모노리스 서비스를 마이크로서비스로 분리하고, 각 마이크로서비스 간의 통신 및 데이터베이스 연동을 구현하고자 한다. 그러기 위해서, 첫번째로 멀티 모듈 디펜던시 관리를 하고자 하였다. 즉, 첫번째로 해야 할 작업은 모노리스 서비스를 멀티 모듈화 하는 것이다. 멀티 모듈 디펜던시 관리는 큰 규모의 프로젝트에서 모듈 간의 의존성을 체계적으로 관리하기 위해 필요하다. 모듈화는 코드의 재사용성과 유지보수성을 향상시키지만, 각 모듈이 서로 올바르게 의존하고 독립적으로 배포되려면 모듈 간의 의존성을 효과적으로 관리해야 한다. 여기서 모듈은 하나의 실행 또는 배포 가능한 어플리케이션 일 수도 있고, 특정 기능을 담은 컴포넌트일 수도 있다. 모든 코드를 user-service ..

Buyme TIL240813 기술적 의사결정 - 주문 상태 및 반품 상태의 세분화와 Enum 사용

주문 및 반품 상태를 세분화한다는 것은 주문과 관련된 각 상태를 보다 명확하게 정의하여, 상태 전이를 쉽게 관리하고 추적할 수 있도록 하는 것을 의미한다. 예를 들어, 주문은 여러 단계의 상태를 거칠 수 있으며, 각 상태를 명확히 정의해두면 코드의 가독성과 유지보수성이 크게 향상된다.  Enum을 사용하는 이유명확한 상태 관리: 각 상태를 Enum으로 정의하면, 코드에서 특정 상태를 쉽게 이해하고 관리할 수 있다.안전성: Enum은 상수의 집합이기 때문에, 잘못된 상태 값을 사용할 가능성을 줄인다.가독성: 상태를 문자열로 처리하는 대신, Enum으로 정의하면 코드의 가독성이 향상된다.

Buyme TIL 240810 .env 파일 세팅하기

.env 파일이란? 프로젝트 바로 밑에 만들고, 비밀번호 등 민감한 정보를 .env 파일에 기록하여 민감 정보 유출 방지 .env 파일에 예 MYSQL_ROOT_PASSWORD=1234 라고 쓴 후, docker-compose.yml 파일에서 mysql_root_password 같은 민감 정보를 다음과 같이 표현할 수 있다. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 또한, .gitignore 에 반드시 .env 파일을 추가하여야 한다.

Buyme TIL240809 Dockerfile/DockerCompose 세팅 (intellij 로 실행한 환경과, docker로 실행한 환경은 다르다)

오늘은 Docker/DockerCompose 환경 구축을 하였다. 에러 1 => ERROR [app build 3/6] COPY build.gradle.kts settings.gradle.kts /app/ 0.0s------ > [app build 3/6] COPY build.gradle.kts settings.gradle.kts /app/:------failed to solve: failed to compute cache key: failed to calculate checksum of ref 327dbb8b-f7ef-45d8-92c0-8c553ef7f0db::1ey6bs0voi1gicus18fdcw4wu: "/settings.gradle.kt..

1-2 ERD

User - Order: 1 : M (비식별) - 한 명의 사용자는 여러 개의 주문 가능Order - OrderItem: 1 : M (식별) - 한 개의 주문은 여러 개의 주문 상품을 포함Product - OrderItem: 1 : M (비식별) - 한 개의 상품은 여러 주문 상품에 포함User - Wishlist: 1 : M (비식별) - 한 명의 사용자는 여러 개의 위시리스트 항목을 가질 수 있음Product - Wishlist: 1 : M (비식별) - 한 개의 상품은 여러 위시리스트 항목에 포함Order - Payment: 1: 1 (식별) - 한 개의 주문은 하나의 결제와 연결