개발45 Real MySQL - 8장 인덱스 정리 - 1 사전 지식 쿼리 튜닝 랜덤 IO를 줄이는 것이 목표 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것을 의미한다. 예) index 걸린 컬럼만 읽는다던가 (커버링 인덱스) 인덱스 풀스캔 대신 테이블 풀 스캔 사용 순차 I/O 로 테이블을 다 읽는다. 그래서 테이블 풀스캔이 더 빠를 때도 있다. 데이터 저장 매체(디스크)는 컴퓨터에서 가장 느린 부분이다. 따라서 DB 성능 튜닝은 어떻게 Disk I/O를 줄이느냐가 관건인 경우가 많다. 디스크 접근 방식은 랜덤 IO와 순차 IO가 있다. 랜덤 IO vs 순차 IO 랜덤 IO 하드 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미 순차 IO 작업 과정은 동일함 다음 읽을 데이터가 바로.. 2023. 5. 7. Redis의 자료 구조 - Strings, Lists, Hashes, Sorted sets 들어가기 전.. 이 글은 Redis 공식 문서와 redisGate, 그리고 ChatGPT 답변을 참고하여 작성했습니다. 실습 환경 구성 Redis 서버는 Docker Redis를, 클라이언트는 DataGrip(유료)을 사용했습니다. 다른 클라이언트로는 직접 CLI 환경에서 명령어를 사용하거나, (Mac의 경우) Redis GUI 클라이언트인 Medis 2를 App Store에서 다운로드하여 사용하는 방법이 있습니다. Redis Container 실행하기 docker run -d -p 6379:6379 --name redis redis Strings 가장 기본적인 Redis 데이터 유형. 키-밸류 형태로 데이터를 저장하며 캐싱, 카운터, 비트연산 등의 용도로 사용 성능은 대부분 O(1)이나 SUBSTR, .. 2023. 3. 26. INFCON 2022 - 실리콘밸리로떠나는 비전공자 개발자의 지난 4년 회고 (좋았던 선택 vs 후회되는 선택) 주제 4년간의 경험과 선택들. 대단한 사람이 대단히 앞서나간 이야기가 아닌, 평범한 사람이 약간 먼저 경험한 이야기. 발표자: pixelic 한정수 체육전공 → 무역사업 경험, 진로변경 → 대학 졸, 회사 취업/퇴사 → 온라인 무역사업, 결혼 → 국비, 개발자 취업 개발자로 취업한 과정? → 강의보셈. 오늘은 이후의 이야기. 블로그 보면 회고 글을 통해서 자세히 알 수 있음. 1년차: 나무가 자랄 수 없는 콘크리트 바닥 극 초기 스타트업, 백엔드 개발자 경험한 것들 개발자가 되었다는것만으로도 기뻤음. 원래 받던 절반의 연봉. 이상한 최종 과제 베트남 P2P 대출 시장을 조사해서 보고서 제출해라. 입사 전부터 이상한 느낌 일을 하지 않는 CTO 업부시간 내내 놀았음. CTO왈: 노는것처럼 보이겠지만 머릿속.. 2022. 10. 2. TestContainers를 Spring Bean으로 등록해보자 TestContainers 소개와 이어지는 글입니다. 기본 사용법과 단점 인터넷에 올라온 예제에서는 대부분 상속 형태로 TestContainers를 사용한다. @Testcontainers abstract class SampleContainersTest { @Container static GenericContainer postgresSQLContainer = new GenericContainer("postgres"); } public class Sample extends SampleContainersTest { @Test void test() { System.out.println("hello world!"); } } 이 방식의 단점은 여러 클래스에서 상속받은 경우, 각각의 클래스마다 docker run이 .. 2022. 9. 18. Docker volume, mount 알아보기 참고 https://docs.docker.com/storage/volumes/ https://www.daleseo.com/docker-volumes-bind-mounts/ 컨테이너의 데이터는 컨테이너의 삭제와 함께 사라진다. 데이터를 영속성 있게 관리하기 위해서는 마운트를 통해 호스트 시스템에 데이터를 기록해야 한다. 이 방법은 bind mount, volume, tmpfs mount 세 가지로 나뉜다. bind mount 볼륨 개념에 대해 잘 모를때부터 사용하게 됐던 방법이고, 사용이 편리하여 주로 사용하게 되는 방법이다. 개인적인 경험으로는 로컬 환경에서는 바인드 마운트로 충분했다. 공식 document에 나오는 그림인데, 모르고 볼땐 전혀 도움이 되지 않았고, 알고 보니 한번에 이해되는 그림이었다... 2022. 8. 21. TestContainers 소개 TestContainers TestContainers는 JUnit 테스트를 지원하는 Java 라이브러리이다. 테스트 시작시 도커 컨테이너를 띄워주고 테스트 종료시 컨테이너를 제거해준다. 데이터베이스를 포함한 통합 테스트를 위해 사용되며, 실제 데이터베이스 컨테이너를 띄우기 때문에 H2 데이터베이스를 사용한 테스트보다 좀 더 정확성 높은 테스트를 제공한다. 단점은 테스트시마다 도커 이미지 빌드, 컨테이너 생성, 실행, 종료, 제거가 수행되기 때문에 테스트 시간이 오래걸린다. 주의사항으로는 테스트시에 도커 이미지만큼의 메모리가 추가로 필요하다. 혼돈을 피하기 위해 역할 정의만 다시 하자면 Java 테스트코드에서 Docker Container 라이프사이클 관리라고 표현할 수 있다. 따라서 테스트, Docker.. 2022. 7. 24. MSSQL SP(Stored Procedure) 테스트 환경 구축하기 테스트란? 테스트(test)란? : 위키백과 시험(試驗): 지식, 기술, 능력 따위를 평가하고 검사하는 일 실험(實驗): 가설이나 이론이 실제로 들어맞는지를 확인하기 위해 다양한 조건 아래에서 여러가지 측정을 실시하는 일 테스트 코드 코드가 실제로 원하는 동작을 수행하는지 측정을 실시하는 코드 테스트 방법 사람이 하기 1. 원하는 값을 DB에서 찾아서.. 2. 서비스(앱 또는 웹)에서 특정 동작 수행 3. 바뀐 결과 확인 (DB에 잘 저장됐나?) 4. POSTMAN으로 API 호출… 5. 호출 결과 확인.. (응답이 잘 왔나? DB값이 원하는대로 바꼈나?) 6. 에러났으면 다시 데이터, 코드 수정 7. 반복 코드로 하기 1. 원하는 값 세팅(코드 또는 SQL 파일) 2. 테스트 코드 작성 3. 실행 4... 2022. 7. 10. 유스콘 쿠버네티스 복습하기 - 1. 환경 설정 https://github.com/youthcon-21-k8s/k8s-init GitHub - youthcon-21-k8s/k8s-init Contribute to youthcon-21-k8s/k8s-init development by creating an account on GitHub. github.com 유쾌한 스프링방, 루기님을 비롯한 도움을 주신 모든 분들께 다시 한 번 감사드립니다. 실무에서 쿠버네티스를 사용하지 않고 있어 일부 잘못된 설명이 있을 수 있습니다. 댓글로 알려주면 감사하겠습니다. 글은 공부한 내용을 정리하는 느낌으로 편하게 작성했습니다. 실습 환경 구성하기 실습에서는 VirtualBox와 Vagrant가 사용된다. MacOS macOS의 경우 brew를 통해 설치 가능하다. br.. 2022. 6. 12. @Cacheable은 this 호출로 동작하지 않는다. 1. 프록시 스프링의 Cache, AOP, Transaction은 Proxy를 사용합니다. 여긴 조금 더 조사가 필요하지만, 스프링에서 CGLIB 이라는, 동적으로 프록시 객체를 구성하는 라이브러리를 사용하고 있습니다. 프록시 객체는 실제 사용되는 객체를 상속받아, 원하는 작업(AOP, cache 등)을 수행하고 실제 객체를 호출하는 역할을 합니다. 프록시에 대한 예제 코드는 여기를 참고하시면 좋을 것 같습니다 2. Autowired @Autowired 어노테이션은 ApplicationContext에서 알맞은 Bean을 찾아 주입해주는 역할을 합니다. @EnableCaching 어노테이션이 사용된 경우, 의존성 주입 시에 @Cacheable이 사용된 Bean은 실제 구현체 대신 스프링에서 한번 더 감싼 .. 2021. 12. 5. 이전 1 2 3 4 5 다음