MySQL 아키텍처 MySQL의 전체 구조 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분해서 볼 수 있다. MySQL 엔진 : 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL 파서 및 전처리기, 그리고 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 또한 성능 향상을 위해 캐시나 버퍼 풀과 같은 보조 저장소 기능이 포함돼 있다. 스토리지 엔진 : 위의 MySQL 엔진이 쿼리 분석 및 최적화 등의 두뇌 활동을 담당하고, 실제 데이터를 디스크에 저장하거나 디스크에서 데이터를 읽어오는 부분은 스토리지 엔진이 처리한다. MySQL 서버에서 MySQL 엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있다. 'CREATE TABLE test_ta..
서버 설정 my.cnf 설정 파일의 위치 MySQL 서버는 단 하나의 설정 파일만 사용하는데, 유닉스 계열에서는 my.cnf 라는 이름을 사용한다. 서버를 시작할 때만 해당 파일을 참조하는데, 지정된 여러 개의 디렉터리를 순회하면서 처음 발견된 my.cnf 파일을 사용한다. my.cnf 를 찾기 위해 순회하는 디렉터리 경로가 궁금하다면 다음의 명령어들로 확인해볼 수 있다. 단, mysqld 프로그램은 MySQL 서버의 실행 프로그램으로 해당 option 을 빠뜨리면 실제 서버를 기동할 수 있으니 두번째 명령어로 확인해 보는 것이 좋다. shell> mysqld --verbose --help shell> mysql --help 해당 명령어의 결과를 살펴보면 상당히 많은 내용 안에 다음과 같은 내용이 있다...
개요 이번 포스팅에서는 이터러블 프로토콜에 대해서 정리해 보겠습니다. 이터러블 프로토콜은 자바스크립트 ES6에서 순회와 관련한 핵심적인 개념으로, 이터러블 프로토콜을 중점으로 사고하면서 코드를 작성하면 많은 이점이 있습니다. 이터러블/이터레이터 Array 살펴보기 크롬 개발자 도구에서 콘솔창을 열고 배열 하나를 만들어 보았습니다. 해당 배열의 속성을 열어보면, 많은 항목들 중에 Symbol.iterator가 있는 것을 볼 수 있는데요. Symbol.iterator라는 Key가 가진 값이 함수라고 명시되어 있습니다. 이 함수가 바로 이터러블 프로토콜을 정의하는 친구입니다. 이터러블/이터레이터 프로토콜 이터러블의 정의는 다음과 같습니다. 이터레이터를 리턴하는 [Symbol.iterator]()를 가진 값 앞..
INSERT AUTO_INCREMENT MySQL에서는 순차적으로 증가하는 숫자 값을 가져오기 위해 AUTO_INCREMENT라는 기능을 제공한다. AUTO_INCREMENT는 테이블의 칼럼에 부여하는 옵션 형태로 사용하므로 자동 증가 기능은 하나의 테이블에서만 순차적으로 증가하게 된다. INSERT 쿼리에서 ID를 직접 지정하는 경우 CREATE TABLE sample_tbl ( member_id INT NOT NULL AUTO_INCREMENT, member_name VARCHAR(30) NOT NULL, PRIMARY KEY (member_id) ) ENGINE=INNODB; INSERT INTO sample_tbl (member_name) VALUES ('Georgi Fellona'..
참고 Vuex Tutorial - The Net Ninja를 보고 정리한 글입니다. Vuex 란? 한마디로 Vue.js에서 모든 상태를 한 곳에서 관리해 주는 친구입니다. 중앙에 Store라는 상태 저장소가 있고, 이 Store는 모든 애플리케이션의 컴포넌트에서 접근이 가능합니다. Vuex를 사용한다면 Vue.js만 사용한다면, 보통 여러 컴포넌트 간의 관계는 위와 같은 트리 구조일 것입니다. 만약 4번 컴포넌트에서 이벤트가 발생해서 다른 컴포넌트들의 상태에 변화를 주어야 한다면, 이벤트는 부모를 타고 올라가 Root 컴포넌트까지 전달된 다음, 다시 props를 통해 다른 하위 컴포넌트들로 전달되어야 하겠죠. 하지만 Vuex를 사용한다면 중앙 저장소인 Store가 있고, 특정 컴포넌트에서 상태를 변경한다..
애자일하게 성장하기 얼마 전에 우아한테크코스 2기 분들을 만나서 발표했던 내용을 조금 다듬어서 글로 한번 남겨보고자 한다. 개인적으로 발표를 준비하면서도 지난 1년 간의 경험과 성장하려고 고군분투했던 기억들을 정리하는 계기가 되었다. 그리고 앞으로 내가 집중해서 나아가야 할 방향성을 잡는 데에도 상기하고 있으면 좋을 것 같은 내용이어서 더더욱 글로 한번 정리하고자 한다. 어떻게 공부해야 하나요? 어떤 분야든 다 그렇겠지만 특히나 새로운 기술의 습득을 늘 짐처럼 안고 살아가야 하는 개발자라면, 생각을 안할 수가 없는 질문이다. 어떻게 공부해야 하나요? 라는 질문은 어떻게 성장해야 하나요? 라는 질문으로 바꿔볼 수 있고, 이는 다시 성장하려면 어떻게 해야 하나요? 라는 질문으로 던져볼 수 있다. 성장에 대한..
개요 애플리케이션의 코드를 튜닝해서 성능을 2배 개선한다는 것은 쉽지 않은 일이지만, DBMS에서는 몇 십배, 몇 백배의 성능 향상이 흔한 일이다. 그만큼 SQL 쿼리를 튜닝하는 법을 아는 것이 중요하다. 쿼리의 결과를 예측하는 것은 물론, 옵티마이저의 내부적인 처리 방식도 어느 정도 숙지할 필요가 있다. 쿼리와 연관된 시스템 설정 sql_mode sql_mode라는 시스템 설정에는 여러 개의 값이 동시에 설정될 수 있는데, 몇 개만 보면 다음과 같다. STRICT_ALL_TABLES : 일반적인 MySQL에서는 저장하려는 값의 길이가 칼럼 길이를 넘어가더라도 경고만 발생시킨 후 초과한 부분을 자르고 저장한다. 이 옵션을 주면 경고가 아닌 에러를 발생시켜 칼럼 길이를 넘는 데이터를 저장하는 것을 막을 수..
jenkins-rest CI 관리 도구인 젠킨스를 사용하다 보면 직접 들어가서 사용할 수도 있지만, 젠킨스 API를 통해 코드로 작업할 필요가 생길 수도 있는데요. Jenkins API를 좀 더 쉽게 접근할 수 있는 jenkins-rest 라이브러리를 소개하겠습니다. Jenkins API API 문서 젠킨스 API에 관해서는 젠킨스 주소 뒤에 /api를 붙이면 해당 문서를 볼 수 있는데요, XML, JSON, Python 이 세 가지 형태로 제공한다고 합니다. 보시면 아시겠지만 그닥 사용자 친화적이지는 않습니다. ㅠㅠ 그래서 한 번 jenkins-rest를 통해 자바 코드로 API를 사용해보도록 하겠습니다. 토큰 발급하기 라이브러리를 사용해보기 전에, 먼저 젠킨스에 접근할 수 있는 인증 토큰을 발급받아야..