728x90
반응형

실무를 하다보면 가장 많이 접하게 되는 용어 중, 하나인 INDEX  

INDEX의 위키디피아의 정의는 아래와 같다.

"데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조"

 

실제 우리가 책을 읽을 때도 제일 처음 접하게 되는게 INDEX(목차) 입니다. 

SQL에서도 동일하게 이 INDEX는 우리가 원하는 정보를 빠르게 찾도록 도와주는 역할을 합니다.

 

INDEX를 생성하고,삭제 등등의 기본적인 내용은 자세하게 정리된 글들이 많아서

저는 실무에서 많이 사용되는 힌트 중에서 INDEX 관련된 내용을 정리해볼까 합니다.

 

전문 DBA가 아닌 단순 개발자의 눈으로 바라봐서 내용이 다소 부실할 수 있습니다.

 

1. Index Range Scan

 

: 인덱스의 일부분만 범위 스캔해서 DATA를 엑세스 스캔 방법 
: Index를 루트 블럭에서 리프 블럭까지 수직 탐색 후 필요한 범위까지만 탐색은 하는 방식입니다.

: 범위를 얼마만큼 줄일 수 있느냐 Table Access 횟수를 얼마만큼 줄이느냐가 성능의 차이를 낸다.

: WHERE절에 인덱스 구성 컬럼이 ‘<’ or ‘>’와 같이 범위 제한 연산자에 의해 이용되거나 BETWEEN or LIKE와 같은 조건 절에 이용될 때       INDEX RANGE SCAN을 하게 된다.

: 인덱스를 Range Scan  하기 위한 가장 첫 번째 조건은 인덱스 선두 컬럼이 조건절에 있어야한다.
  그러니까 쉬운말로.. 인덱스 A를 만들때 이름/나이/성별 순서로 만들었다고 했을 때  쿼리의 조건절에 나이/성별만 있을경우

  INDEX RANGE SCAN 이 되지 않는다. 꼭, 이름을 포함시켜야한다. 

 

2. Index Full Scan

 

 : Index Full Scan은 첫번째 리프블록까지 수직적 탐색 후, 인덱스 전체를 탐색하는 방법입니다. 주로 테이블에서 Table Full Scan의 부담이 크거나 정렬작업을 생략하기 위해 테이블 전체를 탐색하는 것보다 Index를 사용하는 것이 유리합니다. 

 : count 함수를 사용할때도 Index Full Scan을 사용합니다

 : 다음 Index Full Scan을 가장 많이 사용하는 부분이 max와 min함수를 사용할때 입니다. Index Full Scan은 인덱스 전체를 확인하는데 Min Max를 구할때는 인덱스의 시작 혹은 끝 한번 건만 확인하고 탐색은 끝내는 방법으로 1개의 블록을 읽어 결과를 얻을 수 있습니다.

 

 

 

 Full Table Scan과 Index Full Scan의 차이점?

 가장 큰 차이점은  Multi-Block Read가 가능 여부 입니다. Full Table Scan은 Multi-Block Read가 가능하지만 Index Full Scan은 리프블 록을 일일히 방문하기 때문에 Single Block Read밖에 할 수 없습니다. 그래서 때로는 Full Table Scan의 성능이 더 좋을 때가 있습니다.

 

 

3. Index Unique Scan

 

 :  쿼리를 실행했을 때, 결과 값이 유일한 값이 나올 경우입니다. 

    예) 대한민국의 주민등록번호가  123456-1234556 인 사람을 찾는다. 하면

   대한민국에서 123456-1234556 의 주민번호를 가진사람은 1명 뿐이기 때문에 Index Unique Scan 이 됩니다.

   * 컬럼의 값이 유일한 Primary Key에 사용된 Index 

 

 

4. Index Skip Scan

 

: Multi Column Index에서 후행 칼럼을 조건절에 사용할때 활용할 수 있습니다. 성별처럼 선두 칼럼의 고유 값의 개수가 적고 후행 칼럼의 고유 값이 많을 때 효과적입니다.

예를 들어 ( 나라, 나이 ) 로 이루어진 인덱스를 생성했다고 했을 때 나라는 한국,일본,중국이 있고 나이가 20대~30대인 사람들을 알고싶다고 하면 우리가 찾고싶은거는 나이가 20대~30대인 사람들을 찾는거기 때문에 처음 한국에서 20대~30대인 사람들을 찾고, 그 다음 동일한 조건으로 일본,중국에서 20대~30대인 사람들 찾는 방법을 반복하는걸 INDEX SKPI SCAN 방식으로 보면 됩니다.

: 결합 인덱스의 선행 칼럼이 조건식에 없어도 사용 가능

 

 

 

5. Index Fast Full Scan

 

: Index Fast Full Scan은 말 그대로 Index Full Scan보다 빠르다. 전부를 탐색하면서 더 빠르게 결과를 얻을 수 있는 이유는 Multi-Block Read가 가능하기 때문입니다. 하지만 이로 인해 정렬된 상태로 데이터를 받을 수 없다는 제한이 있습니다. Index Full Scan은 데이터의 논리적인 순서로 결과를 얻지만 Index Fast Full Scan은 데이터의 물리적 저장 구조의 순서로 받아오고 그래서 Multi-Block Read가 가능합니다.

 

 

 

 

 

오라클 저장구조 관련 참조 블로그

m.blog.naver.com/jyc8618/220159546783

myjamong.tistory.com/237

728x90
반응형
728x90
반응형

어떤 걸 제일먼저 해볼까 구글링해보다 구글하니... 크롤링이라는걸 해보고싶어졌다.

 

* 크롤링 정의 : 크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부른다.

 

현재 개발환경은  Python 이다.

Python 하면 빼먹을 수 없는게 요 pip 이다. 

 

 * pip는 Python Package Index (PyPI) 저장소로부터 파이썬 패키지를 받아 설치하는 패키지 관리 도구입니다. 

Node.js의 NPM와 비슷하다고 생각하시면 됩니다.

 

크롤링은 아주아주 간단하게 pip 명령어를 통해 패키지 설치가 가능하다!

 

pip install google_images_download

 

라고..해서 설치완료하고 해당 페이지의 예시를 실행하면 된다고했는데...

 

아무것도 되지않는다.. 두둥...

오류 메세지 : unfortunately all 20 could not be downloaded because some images were not downloadable

 

다시 구글링...  최근에 구글에서 크롤링 되지않도록 했단다.. ( 내가 날린 2시간.... 뭐한거지? ㅠㅠㅠ )

하.. 다시 찾아보자 

 

위의 문제를 해결하기 위해서는 .selenium 이라는걸 이용해야 된단다...

이건 뭐지? 

* 셀레늄(Selenium)은 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다. 셀레늄은 테스트 스크립트 언어를 학습할 필요 없이 기능 테스트를 만들기 위한 플레이백 도구를 제공한다.

 

음.. 어렵다..

어쨋든 pip로 설치하란다... 해보자

 

pip install selenium

 

오.. 설치가 잘된다. 그럼 이제 크롤링 되는건가?

 

음... 또 오류 ㅋㅋㅋㅋ 뭐땜에 오류인지 다시 구글링!

결과 selenium을 사용하기 위해서는 safari 말고 chrome, firefox 등을 설치해야한다

chrome이 사용하기 편하니 chrome으로 진행!

chrome설치와 더불어 chromedirver를 설치해야한다고 한다...

근데 구름IDE 는 또 다르데 어렵다 어려워!!

 

1. 구름 ide 에 selenium 설치하기

 

pip3 install selenium

 

2. 구름 ide 내 chrome 설치하기

 

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -

echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list

apt-get update

apt-get install -y google-chrome-stable

 

3. chromedriver 설치하기 

 

일단, 설치된 chrome 버전을 확인하기 

 

google-chrome --version

 

설치된 chrome의 버전에 맞게 chromedriver를 깔아야한다.

https://chromedriver.chromium.org/downloads 로 접속합니다.

 

 

ChromeDriver 다운받기

 

wget -N https://chromedriver.storage.googleapis.com/90.0.4430.24/chromedriver_linux64.zip

 

ChromeDriver 버전에 맞게 설치명령어를 작성한다.

 

unzip chromedriver_linux64.zip

chmod +x chromedriver

mv -f chromedriver /usr/local/share/chromedriver

ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver

ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

rm chromedriver_linux64.zip

apt-get update

apt-get install -y libgconf-2-4

 

 

드디어.. 구름ide 에서 selenium 사용준비 끝!!!

실제 구동은 다음에..

728x90
반응형
728x90
반응형

 

문득, 개발을 해야겠다고 생각이 들었다.

공부를 다시 시작하려고 하니, 뭐 부터해야할 지.. 뭘 해야할지 막막...

 

처음부터 개발환경을 셋팅하자니.. 너무 귀찮고 열심히 구글링한 결과 구름IDE가 눈에 띄었다.

구름 IDE는 도커(Docker) 컨테이너를 기반으로 클라우드 서비스가 구성되어있어서 별도의 설정없이 쉽게 사용이 가능!!

 

* Docker 는 나중에 다시 설명할 계획

 

구름IDE를 들어가서 대시보드 들어가면 본인의 환경에 맞게 셋팅을 할 수 있다.

대시보드를 통해 들어가게 되면 본인이 원하는 소프트웨어 스택을 선택해서 컨테이너를 만들 수 있다. ( 개편해!!! )

 

 

만드는 데 시간이 좀 걸리는데 완성되면 짜잔!! 요렇게 만들어진다.

 

만들어진 컨테이너에 들어가면 개발환경 셋팅 끝!!! ( 요즘 세상 참 좋다.... 신입때는 환경셋팅만 2일이나 걸렸는데.. )

다 불러오면 이렇게 IDE 가 생성된 걸 확인할 수 있다.

드디어.. 개발시작! 

 

 

 

728x90
반응형
728x90
반응형

 

1. this

 

자신의 메모리를 가르키고 생성자에게 다른 생성자를 호출한다.

인스턴스 자신의 주소를 반환한다.

 

Java의 this 키워드는 클래스가 인스턴스화 되었을때의 자기자신의 메모리 주소를 담고있는 키워드이다.

 

2. this()

 

클래스 내부에서 this()를 호출하면 생성자를 호출한다.
물론 매개변수가 있는 생성자라면 그에 맞게 인자를 넣어주어 호출하면 된다.

 

this()를 통해 생성자를 호출할때는 다음의 2가지 제약이 있다.
1. 생성자에서만 호출가능하다.
2. 제일 첫 문장에서 호출해야한다.
3. 생성자 자기 자신을 호출할 수 없다.(재귀호출이 불가능하다.)

728x90
반응형

'IT Diary > # JAVA' 카테고리의 다른 글

Ioc 와 di  (0) 2021.08.10
[ JAVA ] 다형성과 추상화  (0) 2021.08.03
[ JAVA ] 캡슐화란?  (0) 2021.07.11
[ JAVA ] try catch 문  (0) 2021.07.09
[JAVA] Class, Object , Instance  (0) 2021.03.14

+ Recent posts