목록전체 글 (128)
지나공 : 지식을 나누는 공간
유독 올해는 연말이 온 걸 인지하지 못한 것 같다. 연예대상을 누가 탔다는 뉴스기사 제목을 보고 벌써 연예대상을 하나? 했는데 날짜 보고 놀람...ㅋㅋ 기존에 블로그에 썼던 23년 상반기 회고에서는 신입으로 팀에 배정된지 1년이 막 되어가던 시점이었고 조금씩 팀에서 하는 방향성 논의를 이해하게 됐다고 했었다. 그러나 하반기에는 이직을 해버렸고, 올해는 다시 처음부터 시작하는 느낌이 컸다. 근데 또 신입은 아니니 기존에 느껴본 적 없는 압박감도 상당했다. 이건 여전히 진행중이지만 오롯이 견뎌내야 하는 시간이니 여러 방식으로 에너지를 채워가며 지내고 있다. 부족한 부분도 어느정도 인지하는 중인지라 이런저런 마음이 드는데... 이건 혼자만의 노션 회고에 매년 회고하는 친구들과 함께 잘 정리할 것 같고ㅎㅎ 블로..
Explain은 select, delete, insert, replace, update 연산에 대해 수행 가능하다.이 연산을 통해 MySQL은 옵티마이저로부터 어떻게 쿼리가 실행되는지 어떤 순서로 테이블들이 조인되는지를 볼 수 있다. Explain 결과 해석결과에 나오는 테이블은 MySQL 이 처리할 때 읽는 순서로 노출된다. 이 말은 MySQL이 첫 테이블로부터 row를 하나 읽고, 두번째 테이블로부터 이 row에 매핑된 row를 찾고, 세번째 테이블에서도 반복한다는 말이다. 모든 테이블이 처리되면, MySQL는 선택된 columns를 출력하고 일치하는 행이 더 있는 테이블을 찾을 때까지 테이블 list를 통해 백트래킹한다.idSQL 문이 수행되는 실행순서로, id 값이 작을수록 먼저 수행된거고 id ..
일반적으로 MySQL은 단일서버에서 운영되고 필요에 따라 여러 서버를 구축해서 샤딩할 수 있다. 하지만 자동 샤딩 기능은 없기 때문에 데이터가 커진다면 애플리케이션 레벨에서 수동으로 샤딩 로직을 구성해야 한다. 그런데 Vitess에선 이걸 자동으로 해준다. 마치 MySQL 을 쓰는 것처럼 클라이언트에서 사용하면 되고, 데이터만 확장해서 샤딩 구조를 사용할 수 있다. 즉 MySQL 호환 버전의 클러스터링 시스템이 vitess 라고 보면 된다. Vitess 란 컨테이너 환경에서 제공되는 확장과 관리가 용이한 MySQL 기반의 분산 데이터베이스.Scalable. Reliable. MySQL-compatible. Cloud-native. Database. docs 에서 말하는 주요 기능은 아래와 같다.built..
JDBC란?Java Database Connectivity. 자바에서 DB에 접속하고 SQL 쿼리를 실행하며 결과를 처리할 수 있게 하는 표준 API로, JDBC 드라이버를 통해 특정 데이터베이스(MySQL, Postgre SQL 등)와 자바 애플리케이션 간의 통신을 가능하게 한다. 커넥션을 얻어 DB에 연결하고 명령어를 실행해서 결과를 처리한 뒤, Statement, ResultSet, Connection 객체를 닫아서 자원을 해제한다.// 연결Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb", "username", "password");// 명령 실행Statement stmt = conn...
Response already committed / broken pipe 위 상황이 발생하는 통신 과정에 대해 알아보자. 클라이언트가 서버에 요청서버는 클라이언트의 요청을 수신해서 필요한 작업을 수행응답 준비HTTP 메시지 형태의 응답을 구성하여 준비한다. header, body 로 이루어진다.응답 전송:서버는 준비한 응답을 클라이언트에게 전송하는데, 이때 header가 먼저 전송되고 body가 뒤따라 전송된다.응답 header를 클라이언트에 전송하고 나서 응답 body를 보내려는 시점을 commit 이라고 한다. 이 시점부터는 header를 변경하거나 새로운 응답을 보내는 것이 불가능하다.데이터 전송 중 클라이언트에서 연결 종료클라이언트가 응답을 받는 도중에 연결을 종료할 수도 있다. 사용자가 중간에 ..
Query Explain Planhttps://www.mongodb.com/ko-kr/docs/rapid/tutorial/analyze-query-plan/explain result를 보고 query에 대한 아래 정보를 얻을 수 있다.쿼리 수행에 걸리는 시간쿼리가 인덱스를 사용하는지쿼리 수행을 위해 스캔되는 문서나 인덱스 키의 개수쿼리 성능에 대한 통계를 제공하는 메소드[cursor.explain("executionStats")] & [db.collection.explain("executionStats")]쿼리가 인덱스를 사용하는지 여부와 방법을 측정할 때 유용아래 document가 들어있다고 가정하자.{ "_id" : 1, "item" : "f1", type: "food", quantity: 500 }..
보호되어 있는 글입니다.
코틀린 인 액션을 통해 빠르게 코틀린을 손에 익히고 있다. 코드나 사용법은 손과 눈에 익히면 그만인데 그 외에 언어의 특징은 기록해두려고 한다. 자바와 마찬가지로 코틀린도 정적 타입 언어다. (statically typed) 정접 타입 언어란, 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻 동적 타입 언어에는, JVM의 경우 Groovy나 JRuby 등이 있는데 타입과 관계 없이 모든 값을 변수에 넣을 수 있고 메서드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 그러나 이러한 동적 타입 언어는 이름을 잘못 입력하는 등의 실..
Spring Batch의 도메인 이해 1) Job 배치 계층 구조에서 가장 상위에 있는 개념으로, 하나의 배치 작업 자체를 의미함. 배치 작업을 어떻게 구성하고 실행할지 전체적으로 설정하고 명세헤 놓은 객체 최상위 인터페이스로서 스프링 배치가 기본 구현체를 제공한다. JobLauncher가 run을 통해 job을 실행시킨다. 내부에 List 이라는 steps를 가지고 step을 거기다 add한다. build는 실제 job 기본 구현체 SimpleJob 순차적으로 step을 실행시키는 job. 스텝을 포함하고 있는 컨테이너 역할 모든 job에서 유용하게 사용 가능한 표준 기능을 가진다. FlowJob 특정 조건과 흐름에 따라 step을 구성해서 실행시키는 job Flow 객체를 실행시켜서 작업을 진행한다...
메모리와 디스크 메모리 : RAM. 빠른 액세스를 위해 데이터를 임시로 저장하는 저장소로, 컴퓨터 전원이 꺼지면 휘발된다. 디스크 : HDD, SSD처럼 영구적으로 데이터를 저장하는 저장소. 디스크 내의 데이터는 CPU 처리 속도가 메모리보다 느림. 그러나 저장 용량이 크고 전원 꺼져도 휘발되지 않는다. Redis는 메모리 기반의 저장소다. 그러니 전원 끄면 Redis의 데이터가 날아가지만 Redis는 영속성을 위한 기능을 제공한다. Redis의 백업. 영속성 redis에서 데이터 접근은 메모리에서 일어나지만, 쌓인 데이터를 디스크에 저장할 수도 있다. Redis가 이렇게 데이터 영속성을 지원하는 방버베는 아래 두 가지 방식이 있는데, 이를 통해 Redis를 껐다 켰을 때 기존 데이터가 유지되게 할 수 ..