본문 바로가기

전체 글362

[DB 1편] UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 목차는 DB 목차 에 있습니다. [DB 1편] UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 InnoDB 를 기준으로 정리했습니다. UUID 는 36 무작위 문자로 이루어졌습니다. InnoDB 의 특성상 데이터를 저장할 때, 기본키로 정렬해서 저장을 합니다. (기본키가 유사하다면 물리적인 위치도 유사합니다.) 이것을 클러스터링이라 하며, 범위 검색을 할 경우 빠른 시간내에 찾을 수 있습니다. 그렇기에 UUID 를 기본키로 설정하는 것은 INSERT 할 떄, 물리적으로 데이터가 흩어져서 저장이 될 수 밖에 없습니다. 이는 다음과 같은 영향을 미칩니다. 무작위로 데이터를 저장하기에 Index 나 파일 사이즈가 커질 수 밖에 없.. 2022. 4. 26.
[Querydsl 3편] querydsl from 에 서브 쿼리 넣는 방법 source 는 Github 에 있습니다. 목차는 Querydsl 목차 에 있습니다. [Querydsl 3편] querydsl from 서브 쿼리절 querydsl from 에 서브 쿼리 넣는 방법 아래와 같은 쿼리를 수행하고 싶으나 querydsl 에서는 from 서브 쿼리절을 지원하지 않습니다. 그렇기에 application 단에서 처리하는 방법이 있습니다.select * from ( select * from member where xxx xxx xxx and rownum = 1 ) source 2022. 4. 25.
[Kafka 1편] Kafka 는 무엇인가? 목차 [Kafka 1편] Kafka 는 무엇인가? Kafka 개념 카프카는 분산 스트리밍, 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 입니다. 분산 처리 시스템이며, publish, subscribe message 플랫폼입니다. producer 는 하나의 토픽이 데이터를 넣고, 토픽은 여러 개의 partition 으로 이루어집니다. partition 은 consumer group 으로 매핑되며, consumer group 과 partition 이 늘어날수록 처리량이 늘어납니다. 카프카 사용 시 주의사항 중복 메시지 다음과 같은 상황이 있을 수 있습니다. partition 에서 consumer group 이 데이터를 가져가서 처리합니다. consumer group 에서 정상적으로 메.. 2022. 4. 14.
[테스트 & 리팩토링 1편] 외부 연동 코드를 테스트 하는 방법 목차는 테스트 & 리팩토링 목차 에 있습니다. [테스트 & 리팩토링 1편] 외부 연동 코드를 테스트 하는 방법 아래와 같이 외부 연동 API 를 호출하는 서비스 및 메소드가 있다고 가정하겠습니다. MemberService.register() 를 테스트 코드로 만들어 테스트 하고 싶은데 외부 연동 메소드가 있습니다. 이럴 경우 Mock 을 사용해서 처리를 할 수도 있지만 Mock 을 사용하기 보단 interface 를 만들어 추상화해서 처리하는 방법에 대해서 정리했습니다. public class MemberService { public void register() { ... ... String result = ExternalApi.call(); ... ... } }interface 를 사용하여 작성한 so.. 2022. 3. 24.
spring-boot, docker, flyway 활용해서 로컬 mysql 테스트 환경 구축 source 는 Github 에 있습니다. spring-boot, docker, flyway 활용해서 로컬 mysql 테스트 환경 구축 로컬에 docker + flyway 를 통해 로컬에 mysql 테스트 환경 구축하는 방법을 정리했습니다. docker 는 가상화 컨테이너이고, flyway 는 database 마이그레이션 tool 입니다. flyway 는 ddl 이력 관리도 가능합니다. (형상 관리) 또한, flyway 를 spring-boot 에서 사용하는 것은 테스트 환경을 구축할 때, 편합니다. 이 예제에서는 docker 를 통해 가상의 mysql 을 생성하고, flyway 를 통해 테이블을 하나 생성해 볼 예정입니다. docker 는 설치돼있다고 가정하고 진행하겠습니다. source gradle .. 2022. 3. 16.
mybatis 와 PreparedStatement 정리 mybatis 와 PreparedStatement 정리 PreparedStatement vs Statement PreparedStatement PreparedStatement 는 동일하거나 비슷한 SQL 문을 효율적으로 처리하기 위한 기능을 뜻합니다. 동작 방식 준비 —> 컴파일 —> 변수 바인딩 —> 실행 단계입니다. 준비 단계에서는 ? 를 사용하여 쿼리 작성 insert into xxx (xxx) values(?,?). 컴파일 후, 실행 단계에서는 값을 바인딩 한 후, SQL 실행합니다.Statement Statement 는 위 PreparedStatement 1~4단계를 계속해서 반복해서 사용합니다. 차이점 PreparedStatement 는 처음 한 번만 1~3단계를 거친 후, 캐시에 담아 재사용.. 2022. 3. 11.