분류 전체보기

    JMH (Java Microbenchmark Harness)

    JMH 프로젝트와 코드를 테스트 하기 위해 알아보던 중 JMH를 알게 되었습니다. JMH는 JDK를 오픈소스로 제공하는 OpenJDK에서 만든 성능 측정용 라이브러리입니다. jit 컴파일러 개발자가 만들었습니다. https://github.com/openjdk/jmh 특정 코드에 대한 간단한 비교, 일부 로직에 대한 성능을 측정해야 할 경우에 사용할 수 있 실제 테스트하기전 워밍업 과정과 실제 측정 과정을 수행하는데 각 과정의 실행 수를 제어할 수 있고, 측정 후 결과로 나오는 시간의 단위를 지정하는 기능도 제공합니다. JMH을 사용하여 benchmark 과정은 크게 다음과 같습니다. benchmarking project 생성 benchmark 클래스 및 소스코드 작성 benchmark 수행 benchm..

    [코틀린]코루틴(coroutine)

    [코틀린]코루틴(coroutine)이란? co : with, togher routine : 규칙적으로 하는일의 통상적인 순서와 방법 coroutine : co + routine의 합성어로 협동루틴 코루틴은 코틀린만의 것이 아닙니다. 이름이 비슷해서 코틀린의 것이라고 생각할 수 있지만 파이썬, C#, Go, Javascript 등 여러 언어에서 지원하고 있는 동시성 프로그래밍 개념입니다. 코루틴은 코루틴이 시작된 스레드를 중단하지 않으면서 비동기적으로 실행되는 코드입니다. 코루틴은 비동기 프로그래밍을 지원하는데 유용합니다. 예를 들어, 네트워크 연결을 통해 데이터를 가져오는 작업을 수행하면서 다른 작업을 수행할 수 있도록 해주는 것이 바로 코루틴입니다. 이러한 방식으로 코루틴은 다중 작업(multitask..

    MySQL 실행계획(explain) 정리

    MySQL 실행계획 정리 쿼리 튜닝 검토 전, 실행계획(explain)을 보고 실행할 SQL이 DB에서 어떻게 처리될지 파악할 수 있습니다. MySQL 튜닝에서 가장 중요한 것은 쿼리와 스키마 설계인데, 스키마 설계는 한번 진행되면 그 테이블을 사용하는 모든 쿼리에 영향을 주기 때문에 좀처럼 변경하기 힘들지만 쿼리는 해당 쿼리만 수정하면 되므로 상대적으로 변경하기 쉽습니다. Slow Query를 없애고 어플리케이션의 성능을 향상 시키고 싶다면 우선적으로 쿼리의 튜닝을 검토해봐야 합니다. 이때 쿼리 튜닝 검토 전, 실행계획(explain)을 보고 실행할 SQL이 DB에서 어떻게 처리될지 파악할 수 있습니다. EXPLAIN 명령을 사용하면 MySQL 엔진이 쿼리를 어떻게 처리하는지에 대한 정보를 제공하는 쿼..

    매트, 토르의 MySQL 성능 최적화

    매트, 토르의 MySQL 성능 최적화 10분 테코톡 - 매트, 토르의 MySQL 성능 최적화 영상을 보고 정리한 내용입니다. 목차 MySQL 8.0과 기본 스토리지 엔진인 InnoDB 인덱스를 활용한 쿼리 최적화 사용할 테이블 인덱스를 왜 쓸까? 데이터베이스에서 성능 최적화는 디스크 I/O 와 관련이 많다. 이 디스크 I/O를 줄이는 것이 조회 성능 개선의 핵심 물리적으로 하드디스크는, 헤더가 물리적으로 움직여야 하므로 데이터의 입출력이 느리다. 실제로 하드디스크 I/O와 메모리 I/O의 속도 차이는 10만 ~ 15만 배 정도이다. 인덱스를 쓰면 조회에 이득을 얻고, 수정/삭제에서 손해를 보는데 괜찮나요? 그럼에도 불구하고 사용하는 것이 좋다. 일반적으로 웹서비스 같은 경우에 CRUD에서 R과 CUD의 ..

    MySQL 실행계획(explain) rows, filtered가 제대로 안나오고 1이거나 100.00일때 해결방법

    MySQL에서 쿼리 튜닝에 대해 공부하다가, 쿼리와 실행계획을 확인할 때 rows와 filtered값이 제대로 확인되지 않았습니다. rows는 항상 1 filtered는 항상 100.00 때문에 간단하게 발생한 상황과 정확한 값이 나오도록 해결한 방법에 대해 정리합니다. 상황 30만건의 데이터가 있는 사원 테이블이 존재합니다. mysql> describe 사원; +--------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------+------+-----+---------+-------+ | 사원번호 | int | NO ..

    Redis 캐시 전략

    캐시는 최근 웹 서비스 환경에서 시스템 성능 향상을 위해 가장 중요한 기술입니다. 캐시는 메모리를 사용함으로 디스크 기반 데이터베이스 보다 훨씬 빠르게 데이터를 반환할 수 있고 사용자에게 더 빠르게 서비스를 제공할 수 있음 메모리(RAM)을 사용한 기술로 데이터베이스보다 훨씬 빠르게 데이터를 제공할 수 있지만, 제공되는 물리 RAM의 용량에는 한계가 있기 때문에 모든 데이터를 RAM에 저장할 수는 없습니다. 때문에 다양한 전략들에 대해 알아보고 상황에 알맞게 사용해야 합니다. 또한 캐시를 사용할 때 데이터 정합성을 고려해야 합니다. 데이터 정합성 문제란 일반적으로, 캐시와 데이터베이스 두 곳에서 같은 데이터임에도 불구하고 데이터값이 서로 다른 다른 문제를 말합니다. DB에서 데이터 조회와 작성을 처리하면..

    Redis 자료구조와 트랜잭션

    Redis 자료구조 종류 Strings Lists Sets Hashes Sorted sets Streams Geospatial indexes Bitmaps Bitfields HyperLogLog Keys Redis의 키는 이진 안전(binary safe)하며, 이는 "foo"와 같은 문자열부터 JPEG 파일의 내용까지 모든 이진 시퀀스를 키로 사용할 수 있다는 것을 의미합니다. 빈 문자열도 유효한 키입니다. 바이너리 세이프 하단 뜻은 키 이름으로 어떠한 바이너리를 사용해도 무방하다는 뜻입니다. Redis Key에 대한 규칙 너무 긴 key는 좋지 않습니다. 예를 들어 1024바이트의 키는 메모리 측면에서 뿐만 아니라 데이터 세트에서 키를 조회하려면 비용이 많이 드는 몇 가지 키 비교가 필요할 수 있기 때..

    Redis 야무지게 사용하기

    nhn forward 의 영상인 Redis 야무지게 사용하기를 정리한 글입니다. NHN FORWARD - redis 야무지게 사용하기 다룰 내용 Redis 캐시로 사용하기 Redis 데이터 타입 야무지게 활용하기 Redis에서 데이터를 영구 저장 하려면? (RDB vs AOF) Redis 아키텍처 선택 노하우 (Replication VS Sentinel Vs Cluster) Redis 운영 꿀팁 + 장애 포인트 Redis 캐시로 사용하기 캐시 : 데이터의 원래 소스보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소 캐시가 유용하게 사용되려면? 캐시 접근이 원본 접근보다 쉽고 빨라야 한다 동일한 데이터에 반복 액세스할 시 캐시가 유용하다 Redis s a cache Most poplar sof..

    10분 테코톡 - AOP

    AOP 우아한 테크코스의 10분 테코톡을 정리한 글입니다 AOP란 (Aspect Oriented Programming) - 관점 지향 프로그래밍 횡단 관심사(Cross-Cutting Concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자는 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있다. 스프링에만 존재하는 개념은 아니다. AOP는 OOP와 같은 패러다임이다. AOP는 OOP를 프로그램구조에 대한 다른 생각의 방식을 제공함으로써 보완하고있다. 각 언어마다 AOP의 구현체가 있다. 자바는 AspectJ를 사용한다. 서비스에서 필요한 내용은 비즈니스 로직이라고 불리는 핵심기능만 수행하면 된다. 그이외에 시간..

    마크다운 이미지 나란히, 이미지 정렬 하는법

    이미지 나란히 1. 마크다운 테이블 그리는법 활용 이미지링크 | 이미지링크 ---|---| 2. html 태그 사용 3개 이미지 띄우기 3. figure 태그 사용 2개인경우 사용 2개이미지. 3개 인경우 사용 3개이미지 이미지 정렬 이미지 좌측 정렬 이미지 중앙 정렬 이미지 우측 정렬 이미지에 주석달기 주석 내용