일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Elasticsearch
- minikube
- 공부
- AWS EKS
- CKA
- Kubernetes
- mysql 튜닝
- Pinpoint
- CloudWatch
- IntelliJ
- Kubernetes 자격증
- 정보처리기사 실기 기출문제
- kotlin querydsl
- MySQL
- kotlin spring
- PETERICA
- tampermonkey
- AI
- 기록으로 실력을 쌓자
- Spring
- Java
- Linux
- 코틀린 코루틴의 정석
- 정보처리기사실기 기출문제
- 정보처리기사 실기
- APM
- kotlin
- kotlin coroutine
- CKA 기출문제
- aws
- Today
- Total
목록전체 글 (739)
피터의 개발이야기
ㅁ 들어가며 MySQL DB에서 Select 쿼리가 늦어지는 이유에 대해서 정리하였습니다. 1. 시스템 리소스를 초과하는 경우 MySQL DB가 처리 가능한 워크로드 용량을 초과하여 CPU 사용량이 많거나, 메모리가 부족하게 됩니다. CPU 사용률과 가용 메모리를 항상 모니터링하는 것이 좋습니다. 가끔 CPU 스파이크가 발생하는 것은 정상이지만 오랜 기간 동안 지속적으로 많은 CPU가 사용되면 SELECT 쿼리가 느리게 실행될 수 있습니다. SELECT 쿼리는 디스크 탐색으로 인해 실행 속도가 저하될 수 있습니다. 디스크 I/O를 최소화하기 위해 데이터베이스 엔진은 디스크에서 읽은 블록을 캐시하려고 합니다. 즉, 다음에 데이터베이스가 동일한 데이터 블록을 필요로 할 때 디스크가 아닌 메모리에서 해당 블록..
ㅁ 개요 MySQL을 사용하면서 InnoDB에 대해서 잘 이해하지 못한 부분이 있어서 공부를 하게 되었다. 백엔드 입장에서 시스템 포퍼먼스를 위해 캐싱기능을 이용하는데, InnoDB도 Memory를 이용한 캐싱처리를 통해 DB 포퍼먼스를 향상 시켰음을 알게 되었다. 이번 글은 InnoDB의 구조를 이해하고 세부적인 처리 방식에 대해서 정리하였다. ㅁ InnoDB의 구조 ㅇ Buffer Pool를 이용한 성능 향상 Buffer Pool은 MySQL의 DB Engine인 InnoDB가 Table Caching 및 Index Data Caching을 위해 이용하는 Memory 공간이다. Buffer Pool 크기가 클수록 상대적으로 Disk에 접근하는 횟수가 줄어들기 때문에 DB의 성능이 향상된다. ㅇ Mem..
ㅁ 개요 Spring Cloud Gateway 로그 상에서 308 PERMANENT_REDIRECT 상태 코드가 지속적으로 발견되었다. 이를 모니터링하고 원인을 분석하는 과정을 정리하였다. ㅁ Http status Code Http Status Code는 크게 다섯 가지 HTTP 상태 코드 범주(또는 클래스)가 있다. 각각은 서버에서 브라우저로의 다른 응답을 나타낸다. 1XX — 정보 코드 : 서버가 요청을 확인하고 처리 중이다. 2XX — 성공 코드 : 서버가 요청을 성공적으로 수신, 처리하였다. 3XX — 리디렉션 코드 : 서버가 요청을 받았지만 다른 곳으로 리디렉션된다. 4XX — 클라이언트 오류 코드 : 서버가 페이지 또는 웹사이트를 찾을 수 없거나 연결할 수 없다. 이것은 사이트 측의 오류이다...
ㅁ 개요 이전 글인 SQL 연습을 위한 실습 사이트에 대해서 작성하였다. 이번에는 로컬 Docker에서 MySQL5.7 환경을 구성하고 샘플 데이터를 적재하는 과정을 정리하였다. MySQL 8.0 설치과정은 [MySQL] Mysql Docker 설치, 8.0을 참조하세요. ㅁ MySQL 설치 $ docker run -d -p 3307:3306 \ # 로컬 3307포트를 컨테이너 3306포트로 맴핑 -e MYSQL_ROOT_PASSWORD=strong-password \ # 비밀번호 설정 -v /Volumes/500GB/data/mysql57:/var/lib/mysql \ # 컨테이너의 mysql폴더를 로컬에 마운트하여 데이터가 삭제되는 것을 예방한다. --name mysql_57 mysql:5.7 ㅇ 로..
ㅁ 개요 Apple Mac mini m1을 구입하여 개발환경을 세팅하고 있습니다. 개발용 MariaDB를 설치합니다. 저장되는 데이터는 로컬에 저장하도록 설치해 보겠습니다. ㅁ 도커 이미지 받기 docker pull mariadb ㅁ 도커 컨테이너실행 docker container run -d -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=pwd123 \ -v /Volumes/500GB/data/mariadb:/var/lib/mysql \ --name mariadb_mac mariadb ㅁ 실행 프로세스 확인 dokcer ps ㅁ 데이터베이스 접속 테스트 테스트 접속이 잘 되었습니다. ^^ ㅁ 버젼 확인 제가 설치한 mariadb의 버젼은 10.5.8-MariaDB-1 입니다.
ㅁ 개요 SQL 공부를 하면서 공부환경을 위해 MySQL를 설치하고 데이터도 세팅하기에는 버거운 점이 있다. 그래서 SQL 공부를 도와줄 수 있는 사이트를 알아보았다. 우선 DB없이 SQL을 연습할 수 있는 튜트리얼 사이트 w3schools, sql fiddle를 알아보고, SQL 문제를 풀어볼 수 있는 사이트에 대해서 정리하였다. Tutorial ㅁ w3schools ㅇ SQL의 기본적인 문법을 공부할 수 있는 사이트이다. ㅇ SQL Tutorial의 카테고리를 통해 SQL의 다양한 문법을 연습할 수 있다. ㅇ URL: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all ㅇ 위 링크에서 유통업체 관련 8개의 테이블과 샘플 데이터를 제..
ㅁ 개요 ㅇ Redis 정보를 확인하기 위하여 Redis Client가 필요하였다. ㅇ 예전에는 Redis Desktop을 사용하였는데, 이 툴은 불편한 점이 있었다. ㅁ Redis Desktop의 단점 내가 사용한 Redis Desktop Manager의 버젼의 특성이닞 모르겠지만, 레디스 키를 조회할 때에 HashTable의 경우 10000개의 데이터를 한번에 불러오고 있었다. 그래서 실제로 운영의 포퍼먼스에 영향을 두었다. ㅁ Another Redis Desktop Manager 설치방법 ㅇ 이곳으로 이동하면 다음과 같은 설치 설명을 확인 할 수 있다. $ brew install --cask another-redis-desktop-manager ㅇ brew로 설치 하면 간단하게 설치할 수 있다. ㅁ..
ㅁ 개요 ㅇ 백기선님의 유튜브 '[리액터] 리액티브 프로그래밍 2부 Flux와 Mono'를 보고 Flux와 Mono를 공부하였다. ㅁ Techio 학습 연습 Techio를 통해 학습 및 코딩 연습을 할 수 있다.
ㅁ 개요 하루의 경험을 기록해야겠다는 모티브가 되어준 이동욱님의 QUERYDSL의 노하우가 담긴 영상이 있어서 정리를 하였다. 객체 지향적 JPA를 통해 SQL문 작성에서 자유로워 질 수는 있지만, 실질적 데이터베이스 성능을 위해서는 real SQL도 고려해야한다. 이 영상에서 JPA의 장점과 단점을 고려하여 DB 성능을 어떻게 구현할 수 있을 지에 대한 노하우를 얻을 수 있었다. ㅁ 목차 ㅁ extends / implements 사용하지 않기 ㅁ 동적 쿼리 BooleanExpression ㅁ exist 메소드 금지 ㅁ Cross Join 회피 ㅁ Entity 보다는 Dto 를 우선 ㅁ Group By 최적화 ㅁ 커버링 인덱스 ㅁ 커버링 인덱스 조회는 나눠서 진행 ㅁ 마무리
[kubernetes] 쿠버네티스 목차 [kubernetes] 모니터링 방법 정리 ㅁ 개요 ㅇ 쿠버네티스 모니터링을 위한 Metrics 서버 설치 과정이다. ㅇ Node과 Pod의 CPU, Memory 사용량을 모니터링 할 수 있다. ㅇ [kubernetes] Metrics Server 설치, Metrics API not available 에러 해결 과정에서 설치과정을 다시 정리하였습니다. ㅁ git 소스 $ git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git $ ls aggregated-metrics-reader.yaml auth-reader.yaml metrics-server-deployment.yaml README.md a..
@Valid 벨리데이션 체크가 필요한 Dto에 @Valid 어노테이션을 붙인다. @ 중첩된 Dto validation 벨리데이션 체크가 필요한 dto 안에 중첩되는 dto가 있는 경우 다시 @Valid 어노테이션을 선언할 수 있다. @Schema(description = "벨리데이션 1단계 DTO") public class ValidationDepth1Dto { @NotNull(message = "Null만 체크하고 빈값을 체크하지 않는다.") private String nullChkStr; @NotEmpty(message = "Null, \"\"만 체크하고 공백은 체크하지 않는다.") private String emptyChkStr; @NotBlank(message = "Null, \"\", 공백을 포..
[kubernetes] 쿠버네티스 관련 글 목차 ㅁ 들어가며 Udemy, certified-kubernetes-administrator-with-practice-tests > lightning-lab 과정을 정리하였습니다. 1. Upgrade the current version of kubernetes from 1.26.0 to 1.27.0 exactly using the kubeadm utility. Make sure that the upgrade is carried out one node at a time starting with the controlplane node. To minimize downtime, the deployment gold-nginx should be rescheduled on ..
ㅁ 개요 JWT 토큰을 디코딩 하는 과정에서 에러가 발생하였다. 특정 유효한 Base 64 인코딩 문자열에 대해 Java11에서 Base64.decode가 실패가 발생하였다. 특정 사용자에게만 발생하는데, 토큰을 비교해 보면 특정 문자열인 _(언더바)가 들어가는 경우 에러가 발생하였다. 이를 분석한 과정을 정리하였다. ㅁ 에러 내용 [authorization] [http-nio-8082-exec-42] [2023-06-08 15:50:19:1373892465] ^[[1;31mERROR^[[0;39m ^[[36mo.a.c.c.C.[.[.[.[dispatcherServlet]^[[0;39m - Servlet.service() for servlet [dispatcherServlet] in context wit..
ㅁ 들어가며 데이터 마이그레이션 작업 시 임시적으로 MySql이 필요하여 helm으로 빠르게 설치하게 되었다. 그 과정에서 추가적으로 알아두면 좋은 점이 있어서 정리해 보았다. ㅁ Helm repo 추가 $ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories ㅇ 차트 리포지토리 추가가 되었다. $ helm search repo bitnami ㅇ 리포지토리를 통해 설치가능 헬름 차트들의 목록과 설명을 확인 할 수 있다. ㅁ helm install $ helm install mysql-temp --set auth.rootPassword=tempopassword bitnami/m..
ㅇ taint 특정 키와 값이 일치하는 Pod만 해당 노드에서 예약되도록 한다. - 워커노드의 특성에 따른 Pod배치 시에 유용하다. $ kubectl taint nodes app=statistics:NoSchedule 예를 들어 통계작업을 하는 Pod의 경우 메모리 사용량이 높기 때문에 메모리에 특화된 WorkNode그룹에 스케줄해야할 필요가 있다. 이런 경우 위와 같이 taint를 적용하여 스케줄링이 가능하다. 위에서 추가했던 테인트를 제거하려면, 다음을 실행한다. 명령 끝에 있는 '-'만 유일한 차이점이다. $ kubectl taint nodes app=statistics:NoSchedule- ㅇ toleration - taint에 대한 관용이다. 그래서 노드에 설정 taint가 다른 Pod S..