분류 전체보기
천호 로데오점 동대문 엽기 떡볶이 후기
날씨가 우중충해서 매운게 땡겨서 동대문 엽기떡볶이를 어플로 주문했다. 토핑이랑 주먹밥 소세지까지 추가해서 시켰는데 한시간이 넘고 한시간 반이 지나서 왔다. 비도오고 그래서 배달도 힘들고 그런 것 다 이해하는데, 늦으면 먼저 연락해주거나 했으면 좋겠다. 한시간반이면 나가서 재료 사서해도 그것보다는 빠를것 같다. 양은 엄청 많이 주셨는데 국물이 너무 없어서 물넣고 다시 끓여 먹었다. 다음에 먹을때는 조금 여유있을때 먹어야겠다.
Mac OS에 Docker 설치하기
Mac OS에 Docker 설치는 매우 간단하다. 하단 링크로 들어가서 Docker.dmg파일을 다운받고 설치를 우선 진행한다. Docker 설치링크 DMG파일을 실행하면 다음과 같은 창이 출력되고 드래그 하여 Application으로 옮겨주면 된다. 그 다음 도커를 실행하면 작업표시줄에 출력되고 클릭하면 자세한 상태와 기본 내용이 출력된다. 이제 시작해보자. 도커 시작!
Docker 기본 개념 정리
마이크로서비스를 사용하고 배포를 자동화하고 하면서 유동적인 컨테이너인 Docker가 많은 인기를 얻고 여기저기 회사에서 많이 사용되고 있다. 실제로 백엔드 개발자에게는 거의 필수로 알고 가야하는 툴중에 하나가 되어버렸다. Docker란 무엇인가? 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼 이라고 한다. 여기서 컨테이너는 다양한 프로그램, 실행환경을 컨터이너에 동일한 인터페이스로 제공하여 여러 프로그램의 배포와 관리를 단순하게 해준다. 컨테이너 (Container) 컨테이너는 OS 와 격리된 공간으로서 별도의 프로세스가 동작하는곳을 말한다. 그러면 기존에 OS에서 VM을 설치하여 사용하던 방식과 무엇이 다른지 알아보자. VM과 Docker의 차이 기존의 VMware는 HostOS에 GuestOS가 올라..
html의 화면을 캡쳐해서 이미지로 변경하는 html2canvas와 pdf로 저장하는 jsPDF 라이브러리 소개
회사에서 업무를 진행하면서 현재 화면을 pdf로 만들어야하는 일이 있었다. 기존에 html을 pdf로 스프링에서 만드는 업무는 진행을 했었다. 이때는 이전에 포스팅을 했었으니 참고 하시면 좋을 것 같다. (Spring에서 html2pdf를 사용해서 pdf파일 만들기) 우선 현재 화면을 딱 캡쳐해서 image로 만드는 작업이 필요했다. 그 작업을 제공해주는 라이브러리가 바로 html2canvas이다. html2canvas 우선 html2canvas를 사용하기 위해 파일을 받아보자. npm install --save html2canvas 캡처를 진행하기 위해서는 캡처하고자 하는 영역을 selector로 위치를 받아서 지정할 수 있다. 우선 캡처를 진행할 화면을 간단하게 만들어보자. Hello world! W..
27인치 LG 모니터 게임 가정용 27MK400H 구입 후기
모니터가 너무 오래되어서 하나 구매하고자 알아보던 도중에 27인치 모니터가 싸게 나와서 구매하였다. 평소에 아이맥이 사고 싶었는데, 아이맥이 없고 맥북이 있으니 흉내라도 내보자는 생각에 LG 27인치 모니터를 샀다. 가격은 189,000원 생각보다 저렴하다. 예전에 처음 모니터를 사봤을 때는 21인치도 중고로 8만원정도 했었다. 지금은 다 망가져버려서 쓸 수는 없다. 구매는 네이버 쇼핑을 통해서 하였고 구매도 네이버 페이로 했다. LG 총판이라고 LG 정식 판매업소라고 한다. https://smartstore.naver.com/hjsystem/products/2402760594 물품을 받고 바로 설치를 했는데 생각보다 진짜 크다. 오른쪽은 맥북 13인치고 왼쪽은 델 래티튜드 10인치 인데 차이가 안된다 ..
오라클 SGA 캐시 탐색 메커니즘 정리
Direct Path I/O를 제외한 모든 블록 I/O는 메모리 버퍼캐시를 경유한다. 버퍼캐시의 구조는 해시 구조로 관리된다. 해시 함수를 통해서 나온 결과를 사용하여 해시체인(Bucket)을 찾고 그 해시체인에 연결되어 있는 버퍼 정보를 사용하여 버퍼 캐시 정보를 찾아 갈 수 있다. 만약 해시체인을 찾아주는 해시 알고리즘이 mod(x, 5)라고 할 때, 25번째 블록을 찾고 싶은 경우 해시함수를 사용해서 5로 나누고 나온 나머지 0이 해시체인 0번째를 의미한다. 그 해시체인에는 버퍼 헤더들이 들어있다. 25라는 버퍼헤더를 찾고 그 버퍼헤더가 가리키고 있는 버퍼 블록을 접근하여 데이터를 탐색하면 된다. 만약 27번째 블록을 읽으려고 해시함수를 거쳐서 2번째 해시체인에 갔으나, 버퍼 헤더 27이 없다면??..
오라클의 Table Full Scan과 Index Range Scan
테이블에 저장된 데이터를 읽는 방식은 두 가지이다. Table Full Scan은 해당 테이블에 전체 블록을 읽어서 사용자가 원하는 데이터를 찾는 방식이다. 그리고 Index Range Scan은 인덱스를 이용하여 데이터를 일정부분읽어서 ROWID로 테이블 레코드를 찾아가는 방식이다. ROWID는 테이블 레코드가 디스크 상에 어디 저장됐는지를 가리키는 위치 정보이다. 상당수의 툴(Toad, Orange)에서 데이터를 Full Scan 하는 경우에 실행계획에서 빨간색으로 경고를 보여준다. 그래서 Table Full Scan에 경우 더 느리다는 고정관념이 있으나 모두 그런것은 아니다. Index를 이용한 스캔방식이 더 느린 경우도 있다. Table Full Scan에 경우 읽고자 하는 데이터의 블록을 Mul..
Single Block I/O와 Multi Block I/O
캐시 모두 데이터를 적재해두면 속도도 빠르고 좋으나, 메모리에 한계가 있기 때문에 항상 적재하고 있을수는 없다. 그래서 캐시에서 찾지 못한 경우 I/O 콜을 사용하여 블록씩 데이터를 읽어들이는데 한번에 한 블록씩 가지고 오는 것을 Single Block I/O라고 한다. 그리고 여러 블록을 한번에 가지고 오는 것을 Multi Block I/O라고 한다. 기본적인 인덱스와 테이블 블록을 읽어들일때는 Single Block I/O 방식이 사용된다. 하지만 대량의 데이터를 테이블에서 가지고와야 할 때는 Multiblock I/O가 좋고 그 단위가 크면 대량의 블록에서 데이터를 한번에 가지고 올 수 있기에 프로세스가 잠자는 횟수를 줄일 수 있어 좋다. 그렇기 때문에 대용량 데이터를 Full Scan할때 Mult..
오라클의 논리적 I/O와 물리적 I/O의 차이 그리고 버퍼 캐시 히트율(BCHR) 구하기
오라클에서 SQL을 파싱하는 것을 내부에 저장하고 있는 라이브러리 캐시와 데이터를 캐시하고 있는 DB 버퍼캐시가 존재한다. 이 데이터를 저장하고 있는 캐시 또한 SGA의 중요한 요소 중 하나이다. 데이터 블록에 대해 캐시를 해두어서 다음번에 읽어들일때 같은 작업을 반복해서 하지 않도록 하는 기능을 제공한다. 그럼 이런 버퍼 캐시를 이용하여 처리하는 방식과 직접 디스크에 접근하여 데이터를 접근하는 방식에 차이는 무엇인지 알아보자. 논리적 I/O 와 물리적 I/O 오라클에서 SQL 문장을 처리하는 과정에는 두 가지 I/O가 존재한다. 하나는 논리적 블록 I/O 나머지는 물리적 블록 I/O이다. 논리적 I/O는 SQL 문장을 처리하는 과정에서 메모리 버퍼캐시에서 발생한 총 블록 I/O로써 메모리에 접근하여 데..
시퀀셜 액세스와 랜덤 액세스
데이터베이스에서 데이터를 블록단위로 읽는다. 1 ~ 3 byte와 같이 작은 데이터를 읽을때도 하나의 블록을 읽어들인다. 그리고 테이블뿐만 아니라 인덱스도 블록단위로 읽어들인다. 데이터베이스의 총 블록 사이즈를 알고 싶으면 다음 쿼리를 통해 확인해 볼 수있다.1select value from v$parameter where name = 'db_block_size';cs 그럼 테이블과 인덱스를 블록단위로 읽는 방식에 대해서 알아보자. 테이블 또는 인덱스를 읽는 방식 시퀀셜 액세스 (Sequential Access)논리적 또는 물리적으로 연결된 순서에 따라 차례대로 블록을 읽어들이는 방식이다. 인덱스 리프블록은 앞뒤를 가리키는 주소값으로 서로 연결되어 있는데 이를 이용하여 순차적으로 스캔하는 방식이다.테이블..