일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 람다 캡쳐링
- 스프링
- 슬로우 쿼리
- oracle
- Connection Draining
- ContentCachingRequestWrapper
- Cross-Zone Load Balancing
- 아파치 드루이드
- hikari cp
- CannotGetJdbcConnectionException
- 네트워크 io
- queryDsl #JPA #hibernate
- afterCompletion
- RequestBody로깅
- Application-Based Cookie
- Route53
- ChatGPT
- 자연변수
- aws
- 코딩삽질일기
- reflection API
- ReactAdmin
- superset-oracle
- SSR #CSR
- Duration-Based Cookie
- jpa
- querydsl-sql
- UNION 열
- Routing Policies
- 자바로그
- Today
- Total
목록전체 글 (38)
Forest Gump?
최근 회사에서 서버 환경에서의 원인 모를 데이터베이스 쿼리 성능 저하 문제를 겪어 며칠간 고생했던 경험이 있습니다. AWS RDS와 EC2 간 네트워크 대역폭 문제를 트러블 슈팅하는 과정을 공유하고 기록하고자 글을 쓰려고 합니다. 문제 상황 어느날 AWS RDS를 모니터링 하다가 AWS RDS 성능 개선 도우미를 확인해봤는데 , CPU 사용률이 일시적으로 급증하고 세션이 8코어인 처리 속도를 웃도는 50개의 세션이 차있는것을 발견했습니다. 트래킹을 하다보니,평균 15초 정도 소요되는 메소드를 발견했습니다. 단순히 쿼리에 이상인줄 알았지만, 로컬 환경에서는 동일한 쿼리가 300ms도 걸리지 않았습니다.문제가 되는 쿼리는 20개 컬럼에 450건 정도의 데이터를 조회하는 단순한 조회 쿼리였습니다. 쿼리..
문제 조건 숫자가 포함된 문자열이 주어지면 2-9숫자가 나타낼 수 있는 가능한 모든 문자 조합을 반환합니다. 전화 버튼과 마찬가지로 숫자를 문자로 매핑하는 방법은 다음과 같습니다. 1은 어떤 문자에도 매핑되지 않습니다. 입출력 INPUT digits = "23" OUTPUT ["ad","ae","af","bd","be","bf","cd","ce","cf"] 문제 접근 이런 그림으로 풀이되는 백트래킹 문제이다. 첫번째 숫자가 특정되면, 다른 번호에 매핑된 배열에 리프 노드를 한번씩 갔다와서 리스트에 넣어준다. 문제 풀이 public static void dfs(List result, Map dic,String digits, int index, StringBuilder path) { //끝까지 탐색했으면 저..
문제 조건 '1'(땅)과 '0'(물)의 지도를 나타내는 m x n 2D 이진 그리드 그리드가 주어지면 섬의 수를 반환합니다. 섬은 물로 둘러싸여 있으며 인접한 육지가 수평 또는 수직으로 연결되어 형성됩니다. 그리드의 네 모서리가 모두 물로 둘러싸여 있다고 가정할 수 있습니다. 입출력 INPUT : char[][] grid = { {'1', '1', '0', '1', '0'}, {'1', '1', '0', '0', '0'}, {'1', '1', '1', '1', '0'..
고민의 시작 요즘 회사가 점점 성장하다 보니 많은 프로젝트들이 쏟아지며 진행되고 있는 중이다. 일정과 개발의 편의를 위해 비즈니스 단위로 프로젝트들이 관리되고 있는데, 점점 많은 프로젝트들이 생기다보니 클라우드 인스턴스와 깃 레포만 점점 많아지고 있는 느낌이 들었다. 인원은 한정적인데 반해 여러명이 진행한 프로젝트들이 점차 생기다보니 인원 수 보다 레포지토리가 몇배는 많아지고 있다. 또 여러 프로젝트들에 조금씩 걸쳐있기 때문에, 해당 프로젝트에 대한 전문성도 떨어지고 있어 결과적으로 효율이 떨어진다는 느낌이 들었다. 더군다나 기존 레거시 프로그램도 같이 운영되고 있어 스프링 프레임워크를 안쓰는 프로젝트의 코어를 변경할 필요가 생겼을때는 분석하는데 시간이 더 많이 걸린 경험도 있었다. 옛날에 만들어..
Route53 TTL 이란? TTL(Time to Live ) 설정은 Route53 레코드 생성시에 설정할 수 있습니다. 캐싱 된 시간을 초 단위로 설정이 가능한데, 100초로 설정 시 Client가 Route53 을 통해 쿼리를 보낼 시에 IP주소와 함께 설정 된 캐싱 시간인 TTL로 같이 주게 됩니다. 이런 구조로 되어 있으면, Client는 TTL정보를 캐싱 하여 다음번에 질의 할떄 Route53이 아닌, 기존에 캐싱 되어 있던 정보에 기록된 ip주소를 입력합니다. 이로인해 트래픽의 양을 조절 할 수 있습니다. 이는 요금 청구와도 연관이 있는데, AWS Route53 는 트래픽을 기준으로 요금이 청구 되기 때문에 적당한 TTL 설정이 필요합니다. 하지만 너무 긴 시간을 주게 되면, IP변경시에 잘못..
DNS란? 인터넷을 사용하면서 누구나 알고있는 도메인인 naver.com/google.com/daum.net 은 전부 다 DNS을 사용하고 있습니다. DNS(Domain Name System)는 사람에게 친숙한 표현인 호스트명을 IP 주소로 변환해 주는 시스템을 말합니다. 우리가 자주 쓰는 도메인을 입력하면, 해당 호스트에 매핑되는 IP를 찾아서 그 주소로 접속 할 수 있게끔 도와 주는 시스템입니다. DNS는 계층적 구조로 이루어져 있는데, 오른쪽으로 갈 수록 하위 계층에 속합니다. .com > example.com > www.example.com > api.example.com 예를들어 api.example.com 의 경우는 아래와 같은 구조를 갖고 있습니다. 1. .com 2. .example.com..
SSL/TLS 이란? SSL 인증서를 이용하면 데이터를 전송할 때 전송 중 암호화(in-flight encryption)가 가능합니다. SSL은 보안 socket 계층(Secure Sockets Layer)을 의미하며 연결을 암호화 하는 데 사용되고, 만료 일자(expiration Date)이 존재하며 주기적으로 갱신이 필요합니다. TLS는 SSL의 최신 버전으로, 전송 계층 보안(Transport Layer Security)을 의미하고, 듣던 강의해서는 거의 같은 의미로 쓰인다고 했습니다. 임의의 도메인 ex) A.com 으로 접속할때, SSL 설정 여부로 브라우저가 자물쇠로 연결이 안전한지 알려주기도 합니다. AWS ELB에 SSL 설정시 진행 과정 유저가 HTTPS를 통해 설정한 로드 밸런서와 연결..
Sticky Session(session affinity)이란? 먼저 Sticky Session, 혹은 "session affinity"에 대해 알아봅시다. 이는 특정 사용자의 모든 요청을 특정 EC2 인스턴스에 계속 연결하도록 하는 기능입니다. 이렇게 하면 사용자와 서버 사이의 세션 상태가 유지될 수 있습니다. 이해를 쉽게 하기위해서, Sticky Session 이 없이 만약 로드 밸런서가 사용자의 모든 요청을 새로운 인스턴스로 라우팅한다면 매번 사용자는 세션 정보가 유지되지 않아서, 로그인 계속하게 되는 상황이 될 수 있습니다. 하지만 단점도 물론 존재하는데, sticky session 설정이 있을경우 해당 인스턴스를 찾으러 가는 성질 때문에 완벽한 로드밸런싱이 안될 수도 있습니다. (처음에 Webs..
Introduction JPA 강의를 듣다가, JPA 엔티티는 꼭 기본 생성자를 생성해야 한다라고 들었는데, 강의 상의 간략한 내용으로는 jpa프록싱 할때 필요하여 기본 생성자가 있어야한다 ! 라고만 설명을 들어서 , 왜 기본 생성자를 반드시 갖추어야 하는지 궁금해서 더 찾아 봤습니다. JPA ORM 먼저 JPA 생성자 전에, JPA ORM 에 대해서 간략히 설명하겠습니다. JPA(Java Persistence API)는 Java에서 제공하는 ORM(Object-Relational Mapping) 프레임워크로, 객체와 관계형 데이터베이스 사이의 매핑을 쉽게 처리해줍니다. 그러나 이 JPA를 사용하려면 몇 가지 규칙이 있으며, 그 중 하나가 바로 '엔티티는 반드시 public 또는 protected인 기본..
기존 페이지 중 리뉴얼 되는 페이지가 있어, 사용하고 있던 도메인을 그대로 사용해야 하는 일이 있었다. S3버켓에서 cloudfront로 호스팅한 새로운 프로젝트를 하고, AWS ROUTE53을 통해 DNS 설정을 하려했다. 작업 자체는 어려움이 없어, 기존에 쓰던 MY.com도메인을 해제해 준 뒤, 기존에 준비한 cloudFront의 엔드포인트를 엔드포인트를 연결해줬다. 다만 리뉴얼되기 전의 프로젝트에 대한 사용처가 소수지만 남아있어서, 사용중인 A-OLD프로젝트의 MY.com도메인에 연결된 서버를 리뉴얼된 A-NEW로 바꾸고, A-OLD 서버의 도메인을 MY2.com으로 바꿨다. 이슈 발생 이론상으로는 전혀 문제될 것이 없이 MY2.com으로 접속하면 A-OLD서버가 나와야 하는데, A-OLD가 아닌..