Spring Boot
-
JPA 주의점 (1) - OSIV false 설정 (open-in-view)Spring Boot/JPA 2024. 4. 19. 23:25
웹 서비스 성능에 중요한 지표로 "처리량"과 "응답시간"이 있다. 처리량 (throughput) - https://www.youtube.com/watch?v=JJJ4LReZ5q4서버에서 들어온 요청이 처리되는시간을 말한다.db connection 획득 시간db statement 전송 및 쓰기 시간요청 받은 statement 처리 시간db clent에게 result set 반환하는데 걸리는 시간db connection을 반환하고 Transaction이 idle되는 시간처리량을 숫자로 표현할때 TPS (Transaction Per Second)를 사용한다. TPS = transaction count / time초당 몇개의 클라이언트 요청 처리할 수 있는지 지표응답 시간 (response time) - 아래의..
-
멀티모듈 잘 설계해보기Spring Boot 2024. 4. 18. 01:35
배경 사내에 MSA를 도입 해보자는 이야기가 있어서, 이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다. MSA를 공부하려고 강남 교보문고에 들려서 MSA 관련 책 5권을 훑어봤는데 선수지식이 필요하다고 느껴서 이론 공부는 잠시 미루기로 했다. 내가 필요하고 판단한 선수지식은 다음과 같다. 멀티모듈 DDD (https://yeoon.tistory.com/147) port-adapter pattern (https://yeoon.tistory.com/148) Spring Cloud event-consistency, 카프카 AWS EKS 그중 가장 먼저 만들어보면서 해볼만한 멀티모듈 부터 다뤄본다. 결론부터 말하면 아래처럼 구성했다. 이런 구조에 다다른 이유를 기록 해본다. 멀티모듈 실무에서 처음 경험한..
-
Kafka 기본개념 정리Spring Boot/DB 2024. 4. 16. 01:29
1. Kafka 기본 용어 Producer의 messge 저장 대상 Broker는 기본 라운드로빈 방식으로 결정됨 Key를 지정해서 원하는 Broker에만 저장하는 방식도 제공 2. Kafka란? 링크드인에서 2010년 아래와 같은 문제 해결하기위해 개발, 2011년 아파치 오픈소스로 공개 실시간 데이터 처리 문제 데이터 파이프라인 구축 및 확장 문제 다양한 시스템과의 연동 분산 이벤트 스트리밍 플랫폼이라고 공식 페이지에서 소개하고 있음 포츈 100대 기업 80% 이상이 사용 중 (제조업, 은행, 보험, 통신사 . . . 광범위한 산업군) 3. Kafka 특징/사용용도 카프카 핵심 특징 빠른 데이터 전송, 높은 처리량, 낮은 지연 시간 파티션 파일 OS 페이지 캐시 사용 Zero Copy (디스크 버퍼 ..
-
DB Replication이란? 사용 이유Spring Boot/DB 2024. 3. 19. 19:44
1. 배경 사내 프로젝트는 단일 RDS를 Database로 사용중 RDS 장애 발생시 모든 서비스가 멈춘다. (가용성이 낮다) 부하, 트래픽 증가로 DB의 자원이 부족할때 확장이 어렵다. 단일 RDS 사용시 수직확장 수직 확장은 가격 대비 성능 비율이 선형적이지 못하다. 수직 확장이나, DB 업데이트를 위해서는 서비스를 중단해야한다. DB의 쓰기와 읽기 요청은 비대칭 적이다. 대부분 읽기가 더 많다. 2. Replication 도입 Replication이란? DB 백업이나, 성능 향상을 위해 DB를 여러대의 서버로 복제하는 행위 Replication을 도입하면 확장하기 쉽고 고가용성의 DB 구조를 구성할 수 있다. 데이터 저장소의 읽기와 쓰기로 분리 부하 분산 → DB 성능 향상 쓰기 속도 향상, 읽기 ..
-
[springboot] Datasource Proxy로 SQL query logging 하기Spring Boot/환경설정 2024. 1. 11. 21:17
1. Hibernate 기본 쿼리 로그 기본적으로 JPA를 사용하면 쿼리가 어떻게 찍히는지 확인이 필요하다. application.yml에 hibernate 옵션을 넣어주면 가독성 좋은 query를 찍어보며 개발할 수 있다. 아래는 쿼리찍히는 예시 2. Datasource Proxy 운영 환경에서 유용한 확장 기능을 제공하는 Datasource proxy(https://github.com/jdbc-observations/datasource-proxy)를 사용하면 더 풍부한 SQL query를 찍을 수 있다. [대표적으로 쓸만한 기능] slow query가 발생하면 INFO대신 WARN이나 ERROR로 로그를 찍수 있다. 쿼리 호출 앞뒤로 어떤 작업 하도록 설정 할 수 있다. hibernate에서는 ?표로..
-
artillery로 부하테스트 하기Spring Boot/환경설정 2023. 10. 29. 01:49
1. 설치 // 설치 npm install -g artillery@latest // 설치 확인 artillery version 2. 사용법 : https://www.artillery.io/docs/reference/cli/run // 터미널에서 바로 실행하기 artillery quick --count 100 -n 50 http://localhost:8080/health // script로 실행하기 artillery run test.yaml // json 파일로도 실행할 수 있다. artillery run test.json // 테스트 결과 report로 만들기 artillery run --output test-run-report.json test.json // 테스트 결과 report html로 보기 a..
-
[docker] docker compose로 데이터베이스 한번에 N개 띄우기Spring Boot/환경설정 2023. 10. 23. 15:53
하나의 프로젝트에서 N개의 DB 연결이 필요한 상황 Local 실행환경 구축을 위해서 아래와 같이 구성했다. 1. Docker 이미지를 띄울때 SQL문으로 DB를 생성한다. 2. MYSQL_TCP_PORT 값 설정으로 컨테이너 내부 port 설정을 변경 해준다. version: '3' services: mysql: platform: linux/amd64 image: "public.ecr.aws/docker/library/mysql:5.7.38" environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes - MYSQL_TCP_PORT=33060 - autoReconnect=true - characterEncoding=UTF-8 - sslMode=DISABLED - TZ=Asia/Se..
-
[JPA] 간단하게 OneToMany 데이터 API 구현하기 - @Embeddable, @Embedded, @ElementCollection 활용하기Spring Boot/JPA 2023. 10. 15. 23:14
요구사항 레시피를 저장하고 조회, 삭제할 수 있는 API를 구성한다. JPA 연관관계 설정 없이 OneToMany 데이터 모델링 방법을 정리한다. API Spec 레시피 저장 api POST localhost:8881/api/recipe/new # requestBody { "name": "Fresh Mint Tea", "description": "Light, aromatic and refreshing beverage, ...", "ingredients": ["1 inch ginger root, minced", "1/2 lemon, juiced", "1/2 teaspoon manuka honey"], "directions": ["Place all ingredients in a mug and fill wit..