2017년 3월 26일 일요일

링크모음

▶ 뉴스

  - 아이티클 : http://www.itcle.com
  - IT월드 : http://www.itworld.co.kr
  - 베타뉴스 : http://www.betanews.net
  - 지디넷 : http://www.zdnet.co.kr
  - 전자신문 : http://www.etnews.com
  - 블로터닷넷 : http://www.bloter.net
  - CIO코리아 : http://www.ciokorea.com
  - 플래텀 : http://platum.kr
  - 생각노트 : http://insidestory.kr
  - 슬로우뉴스 : http://slownews.kr
  - 테크니들 : http://techneedle.com
  - 아웃스탠딩 : http://outstanding.kr
  - 뉴스페퍼민트 : http://newspeppermint.com
  - 모비인사이드 : http://www.mobiinside.com/kr/
  - 벤처스퀘어 : http://www.venturesquare.net
  - 브런치 : https://brunch.co.kr
  - ㅍㅍㅅㅅ : http://ppss.kr
  - CLO : http://clomag.co.kr



▶ 블로그

  - 란즈크 : http://blog.naver.com/yeux1122
  - 감마 : http://gamma0burst.tistory.com
  - 꽃잔 : http://www.gamsungit.com
  - 신제갈량 : http://jegalcsh.blog.me
  - 씨디맨 : http://www.cdmanii.com
  - 엔돌슨 : http://www.ndolson.com
  - 광파리 : http://kwang82.hankyung.com
  - 함영민 : http://www.dicagallery.com
  - 서명덕 : http://www.itviewpoint.com
  - 이지이 : http://www.272it.com
  - Liverex : http://liverex.tistory.com
  - T.B. : http://ryueyes11.tistory.com
  - 엑시노아 : http://blog.eairship.kr



▶ IT 커뮤니티

  - 클리앙 : http://www.clien.net
  - 시코 : http://www.seeko.co.kr
  - 루리웹 : http://www.ruliweb.com
  - 파코즈 : http://www.parkoz.com
  - 쿨앤조이 : http://www.coolenjoy.net
  - 플레이웨어즈 : http://playwares.com
  - 하드웨어배틀 : http://www.hwbattle.com
  - 기글하드웨어 : https://gigglehd.com/gg/
  - 언더케이지 : http://www.underkg.co.kr
  - 데브피아 : http://www.devpia.com
  - 쉐어드아이티 : http://www.sharedit.co.kr
  - KLDP : https://kldp.org
  - DNA개발자네트워크 : http://dna.daum.net/lens/
  - OKKY : http://okky.kr
  - SQLer : http://www.sqler.com
  - Reddit : https://www.reddit.com



▶ 사진

  - 팝코넷 : http://www.popco.net
  - CULTPD : http://cultpd.tistory.com
  - SLR : http://www.slrclub.com



▶ 쇼핑

  - 다나와 : http://www.danawa.com
  - 에누리 : http://www.enuri.com
  - 딜바다 : http://www.dealbada.com
  - 뽐뿌 : http://www.ppomppu.co.kr
  - 중고나라 : http://cafe.naver.com/joonggonara



▶ 취업 / 채용

  1) 정부

    - 워크넷 : http://www.work.go.kr
    - 나라일터 : http://www.gojobs.go.kr
    - 알리오 : http://www.alio.go.kr
    - 커리어넷 : http://www.career.go.kr
    - 공무원되기 : http://injae.go.kr/



  2) 민간

    - 잡코리아 : http://www.jobkorea.co.kr
    - 사람인 : http://www.saramin.co.kr
    - 인크루트 : http://www.incruit.com
    - 잡플래닛 : http://www.jobplanet.co.kr
    - 크레딧잡 : http://www.kreditjob.com



  3) 커뮤니티

    - 취업뽀개기 : http://cafe.daum.net/breakjob
    - 공준모 : http://cafe.naver.com/studentstudyhard
    - 독취사 : http://cafe.naver.com/dokchi
    - 스펙업 : http://cafe.naver.com/specup



▶ HTML

   - Masonry : http://masonry.desandro.com/layout.html
   - HTML5UP : https://html5up.net
   - W3 School : http://www.w3schools.com
   - CSS Reference : http://cssreference.io
   - 코드프로젝트 : https://www.codeproject.com
   - 코딩 문제풀이 : https://www.codewars.com
   - Baekjoon(알고리즘 문제풀이) : https://www.acmicpc.net
   - 부트스트랩 : http://getbootstrap.com
   - 부트스트랩 테마 : http://www.prepbootstrap.com



▶ 형상관리, 협업

   - Github : https://github.com
   - SVN : https://tortoisesvn.net/, https://subversion.apache.org
   - CVS : http://savannah.nongnu.org/projects/cvs
   - Redmine : http://www.redmine.or.kr
   - JIRA : https://www.atlassian.com/software/jira
   - Mantis : http://www.mantisbt.org
   - Trac : http://trac.edgewall.org



▶ IT 강의

   - 데브렉 : http://www.devlec.com
   - 모든에듀 : http://www.modenedu.com
   - 생활코딩 : http://opentutorials.org
   - 닷넷코리아 : http://www.dotnetkorea.com
   - 훈스닷넷 : http://www.hoons.net
   - 태요넷 : http://www.taeyo.pe.kr
   - 인프런 : http://www.inflearn.com
   - 스노우 : http://www.snow.or.kr
   - TED : http://www.ted.com



▶ 데이터베이스

   - 오라클클럽 : http://www.gurubee.net
   - DB사랑넷 : http://database.sarang.net
   - DB 가이드 : http://www.dbguide.net



▶ PHP

   - APMSetup : http://dev.naver.com/projects/apmsetup/
   - PHPSchool : http://phpschool.com
   - 코드이그나이터 : http://www.codeigniter-kr.org
   - 라라벨 : https://laravel.co.kr
   - 워드프레스 : https://ko.wordpress.org
   - 제로보드(XE) : https://www.xpressengine.com
   - 그누보드 : http://sir.kr
   - 텍스트큐브(태터툴즈) : http://www.textcube.org



▶ 프로그래밍

   - 예제(파이썬) : http://pythonstudy.xyz
   - Git 강의 : http://backlogtool.com/git-guide/kr/
   - 코드라이언(루비) : http://codelion.net
   - 코드아카데미(파이썬) : https://www.codecademy.com/ko/tracks/python-ko
   - 남궁성 코드스터디(자바) : http://cafe.naver.com/javachobostudy
   - 스택오버플로우 : http://stackoverflow.com
   - XDA 디벨로퍼 : https://www.xda-developers.com



▶ 스마트폰

   - 맛클 : http://www.matcl.com
   - 세티즌 : http://www.cetizen.com
   - 더어플 : http://www.theappl.com
   - 디벨로이드 : http://cafe.naver.com/develoid
   - 안드로이드펍 : http://www.androidpub.com
   - 안드로이드사이드 : http://www.androidside.com
   - 아사모 : http://cafe.naver.com/appleiphone
   - 맥쓰사 : http://cafe.naver.com/inmacbook
   - 링크,용어 : http://www.ppomppu.co.kr/zboard/view.php?id=phone&no=2918526



▶ 가상화 솔루션

   - Virtual PC : https://www.microsoft.com/ko-kr/download/details.aspx?id=3702
   - Virtual BOX : https://www.virtualbox.org
   - VMware : http://www.vmware.com/kr.html
   - Paralles : http://www.parallels.com/kr/



▶ 영상 편집

   - 소니 베가스 : http://www.sonycreativesoftware.com
   - 어도비 프리미어 : http://www.adobe.com/kr/products/premiere.html

▶ 자료공유

   - 리드트렌드 : http://readtrend.com
   - 네이버 D2 : http://d2.naver.com/home
   - 네이버 개발자센터 : https://developers.naver.com/main
   - 티몬의 개발이야기 : http://tmondev.blog.me/
   - 넥슨 NDC : https://ndc.nexon.com/main
   - SK플래닛 기술블로그 : http://readme.skplanet.com
   - 카카오 기술블로그 : http://tech.kakao.com
   - 비트윈 기술블로그 : http://engineering.vcnc.co.kr
   - 나는프로그래머다 : https://www.facebook.com/iamprogrammer.io/
   - 전자문제집 : http://www.comcbt.com
   - 위키독스 : https://wikidocs.net



▶ 사전

   - 위키피디아 : http://ko.wikipedia.org
   - 나무위키(리그베다) : http://namu.wkiki
   - 미디어위키 : http://www.mediawiki.org
   - 디씨위키 : http://wiki.dcinside.com/wiki/
   - 네이버 지식백과 : http://terms.naver.com
   - 두피디아(두산백과) : http://www.doopedia.co.kr
   - 브래태니커(한국) : http://premium.britannica.co.kr



▶ 단축 주소

   - 구글 : http://goo.gl
   - Bitly : http://bit.ly
   - Owly : http://ow.ly
   - Tinyurl : http://tinyurl.com
   - 3.ly : http://www.3.ly
   - sm1 : http://sm1.kr
   - ze.am : http://ze.am
   - 원링크 확인 : http://www.checkshorturl.com, http://untiny.com



▶ 사진 업로드

   - 구글포토 : https://photos.google.com
   - 플리커 : https://www.flickr.com
   - 스머그머그 : http://www.smugmug.com
   - 500px : https://500px.com
   - Imgur : http://imgur.com
   - Gfycat : https://giant.gfycat.com/
   - PostImage https://postimage.org/
   - Tinypic : http://tinypic.com



▶ 토렌트

   - 유토렌트 : http://www.utorrent.com/intl/ko/
   - 이토렌트 : http://www.etorrent.co.kr
     (http://www.torrentfile.co.kr, http://www.torrentfile.kr,
      http://www.tvcafe.co.kr, http://www.etobang.com)
   - 비트스눕 : https://bitsnoop.com
   - 토렌트킴 : https://torrentkim5.net
   - 토렌트걸 : https://torrentgirl.org
   - 토렌트위즈 : https://torrentwiz.net

▶ 기타

   - KOSA(소프트웨어기술자 경력관리시스템) : https://career.sw.or.kr
   - 한국정보과학회 : http://www.kiise.or.kr
   - 한국전자전 : http://www.kes.org/kor/
   - 소프트웨어공제조합 : http://www.ksfc.or.kr
   - 방송통신위원회 : http://www.kcc.go.kr
   - 온오프믹스(모임) : http://www.onoffmix.com
   - 기업정보공시 : http://dart.fss.or.kr
   - 체불사업주 공개 : http://www.moel.go.kr/view.jsp?cate=3&sec=12



출처: http://scriptkiddie.tistory.com/3
Share:

2017년 3월 24일 금요일

2017년 3월 22일 수요일

Spring properties 설정하기

1. beans에 스키마를 추가한다.

2개를 추가한다.

http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd

최종 xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util-4.0.xsd">

  <util:properties id="global" location="classpath:config/properties/global.properties" />  
    
</beans>

2. properties 파일에 설정을 추가한다.


dbPool.driverClassName=com.mysql.jdbc.Driver
dbPool.url=jdbc:mysql://주소:포트/데이터베이스명
dbPool.userName = 아이디
dbPool.password = 비밀번호

3. 사용하는 xml에 적용한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">
     
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="#{global['jdbc.driverClassName']}"/>
        <property name="url" value="#{global['jdbc.url']}"/>
        <property name="username" value="#{global['jdbc.userName']}"/>
        <property name="password" value="#{global['jdbc.password']}"/>
    </bean>
</beans>

스프링에서@Value("#{global['jdbc.username']}") 으로도 사용가능하다.
Share:

2017년 3월 15일 수요일

메이븐 컴파일 오류시 해결 방안

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
로그가 찍히면

1. Window > Preferences > Installed JREs 로 들어가면 JDK경로로 되어있다.





2. jdk경로로 변경해준다.


3. 프로젝트에서 Mavan Install 후 Maven Update 한다.
Share:

2017년 3월 14일 화요일

Eclipse ini 및 최적화 설정

# 설정 공유
File > Export 에서 Preferences를 export하고 다른 워크스페이스에서 import.

1. 설정파일 수정

eclipse > eclipse.ini 파일을 수정하며, 아래 설정값을 자신의 사양에 맞춰 변경하여 사용한다. 세미콜론(;)은 주석이다.

; workspace의 경로를 윈도우 타이틀바에 출력
-showlocation

; 클래스 유효성 검사 생략, 그러나 나중에 어딘서 오류나는지 확인하기 위해 사용 추천
;-Xverify:none ; jdk 버전으로 설정하면 속도 향상
-Dosgi.requiredJavaVersion=1.6

;---------------------------------------------
; JVM 메모리 관리
;---------------------------------------------

;JVM 시작히 힙 영역 크기 : 최소(ms), 최대(mx)
-Xms64m
-Xmx1024m

;Permanent(영구) 영역 : JVM 클래스와 메소드를 위한 공간, 'Out of Memory' 에러 발생시 크기 조절 = PermSize
;New/Young 영역 : 새로 생성된 개체들을 위한 공간 = NewSize
; Old 영역 : 만들어진지 오래된 객체들의 공간(New영역에서 이동)
-XX:PermSize=64M
-XX:MaxPermSize=512M
-XX:NewSize=128M
-XX:MaxNewSize=512M

; Heap Shrinkage를 수행하는 임계치를 지정한다. 예를 들어 이 값이 70이면 Heap의 Free 공간이 70% 이상이 되면 Heap 크기가 축소된다. MinHeapFreeRatio 옵션과 함께 Heap의 크기 조정을 담당한다. 기본값 70
;-XX:MaxHeapFreeRatio=70

;---------------------------------------------
; Garbage Collection 방식에 따라 가능한 옵션
;---------------------------------------------
; 병렬 GC 사용
; 메모리가 충분하고 코어수 많을때 유리하다.
;-XX:+UseParallelGC

;CMS GC 사용 ; 응답속도가 중요할때 사용한다.
;GC Pause에 의한 사용자 응답시간 저하 현상을 줄인다.
-XX:-UseConcMarkSweepGC
;-XX:+CMSIncrementalPacing

; G1 GC(Garbage-First Garbage Collector) 사용
; 성능은 좋지만 더욱 안정화가 되었을때 사용하는 것이 좋다.
; JDK 1.7.0_4 이후 사용하는것이 안정적
;-XX:+UnlockExperimentalVMOptions
;-XX:+UseG1GC ;-XX:MaxGCPauseMillis=10

;---------------------------------------------

; out of space in codecache 오류 발생시 증가. 이 값은 permGenSpace 공간에 할당되므로 비례하게 커야한다.
-XX:ReservedCodeCacheSize=128m

; 컴파일러의 소수점 최적화 기능을 작동시켜 빨라진다.
-XX:+AggressiveOpts

;개별 Thread의 Stack Size를 지정
;대부분 기본값 사용, 어플리케이션의 스레드 스택에 의한 메모리 요구향이 높아지면 'Out Of Memory' 에러 발생
-Xss4m
-XX:+UseFastAccessorMethods
-XX:CompileThreshold=20000

2. 소스 자동 폴딩 해제

Preferences > Java > Editor > Folding 에서 Enable folding 해제
혹은 Coffee Bytes Java Folding 플러그인으로 기능 확장

3. 코드 자동완성기능 해제

(자동으로 실행되는 것을 해제하고, ctrl+space를 사용해서 동작시킬 수 있다.)
Preferences > Java > Editor > Content Assist 에서 Auto Activation - Enable auto activation 해제

4. 오른쪽 하단에 메모리 사용상태 표시

Preferences > General 에서 Show heap status 체크

5. Spell checking 해제

Preferences > General > Editors > Text Editors > Spelling 에서 Enable spell checking 해제

6. 인코딩 변경

Preferences > General > Workspace 에서 Text file encoding 는 UTF-8, New text file line delimite 값은 사용환경에 따라 변경

7. 줄번호 사용(이클립스 루나버전 이후로는 기본값으로 설정)

Perferences > General > Editors > Text Editors 에서 Show line numbers 체크

8. 이클립스 실행속도 개선

실행할때 로딩되는 플러그인을 제외한다.
Preferences > General > Startup and Shutdown 에서 필요없는 것 제외

9. Validation 유효성체크 해제

자신이 사용할 부분만 켜서 사용한다.
Preferences > Validation

10. 불필요한 플러그인 삭제

1) Preferences > Install/Update 에서 Uninstall or update 선택
2) 불필요한 것 Uninstall

11. Autometic Update Off

Preferences > Install/Updates > Automatic Updates 에서 체크해제

참고링크 : https://slipp.net/wiki/pages/viewpage.action?pageId=5177633
Share:

2017년 3월 12일 일요일

Spring 에 대한 간단한 메모

- HttpSession 을 파라미터로 가질 경우 세션이 생성된다. 기존에 세션이 존재한다면 해당 세션이 전달되고 그렇지 않으면 세션이 생성된다.
따라서 HttpSession타입으 파라미터는 항상 null이 아니다.

-
Share:

Spring 객체와 HTML 폼

스프링 MVC는 HTML폼에 입력한 데이터를 자바빈 객체를 이용해서 전달 받을수 있다.
@RequestMapping 가 적용된 메서드에 파라미터로 자바빈 타입을 추가하면
set 메서드에 매핑된다.

파라미터에 적용된 커맨드 객체는 모델에 자동으로 추가되서 View에서
${객체명.html에서name속성} 으로 지정할 수 있다.

@ModelAttribute를 통해 객체명 부분을 변경 가능하다.
Share:

Srping 인코딩 필터 설정

요청 파라미터의 캐릭터 인코딩을 web.xml 에서 encodingFilter 통해 설정 할수 있다.

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>EUC-KR</param-value>
   </init-param>
 </filter>
<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>


Share:

Spring DispatcherServlet

- DispatcherServlet 설정

: 1개의 WebApplicationContext를 갖는다.
: WEB-INF 밑에 [서블릿이름]-servlet.xml 파일로 부터 설정 정보를 읽어온다.

아래와 같이 web.xml 에 설정 했으면 dispatcher-servlet.xml 에서 정보를 읽는다.

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
한 개 이상의 설정 파일을 설정해야 하는경우는 다음과 같이 한다. contextConfigLocation 초기화 파라미터는 설정 파일 목록을 값으로 갖는데 
콤마(,), 공백문자(" "), 탭(\t), 줄바꿈(\n), 세미콜론(";)을 이용하여 구분한다.
경로는 웹 어플리케이션 root 디렉터리를 기준으로 한다.

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value> 
     /WEB-INF/main.xml 
     /WEB-INF/dev.xml
   </param-value>
  </init-param>
 </servlet>

아래와 같은 경우에는 각각 WebapplicationContext를 생성하기 떄문에
동시에 사용할 수 있는 공통빈 필요한 경우 ContextLoaderListener을 통해 설정이 가능하다. ContextLoaderListener 는 contextConfigLocation를 명시하지 않으면 /WEB-INF/applicationContext.xml을 설정 파일로 사용한다.
classpath에서 정보를 읽어 오고 싶으면 'classpath:' 접두어를 사용하면 된다.

ContextLoaderListener  가 root Context 가 되고 dispatcherServelt 가 생성하는 Context가 자식이 된다.


<servlet>
  <servlet-name>Adispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 

<servlet>
  <servlet-name>Bdispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>
 


<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
           /WEB-INF/dev.xml 
           /WEB-INF/common.xml 
           classpath:config/conf.xm
     </param-value>
</context-param>

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Share:

Srping execution 표현식

- execution 명시자
: Advice를 적용할 메서드를 명시할 때 사용.
   
- 기본 형식

execution(수식어패턴? 리턴타입패턴 패키지패턴?이름패턴(파라미터패턴)
▶ 수식어 패턴
  - 생략가능한 부분.
  - public, protected 등이 옴.
▶ 리턴타입패턴
  - 리턴 타입을 명시
▶ 클래스이름 패턴, 이름패턴
  - 클래스 이름 및 메서드 이름을 패턴으로 명시.
▶ 파라미터패턴
  - 매칭될 파라미터에 대해서 명시.

- 특징
: 각 패턴은 '*'를 이용하여 모든 값을 표현.
: '..'을 이용하여 0개 이상이라는 의미를 표현.

- EX

▶ execution(public void set*(..))
  - 리턴 타입이 void이고 메서드 이름이 set으로 시작하고, 파라미터가 0개 이상인 메서드 호출.
▶ execution(* com.spring.chap.core.*.*())
  - com.spring.chap.core 패키지의 파라미터가 없는 모든 메서드 호출.
▶ execution(*.com.spring.chap.core..*.*(..))
  - com.spring.chap.core 패키지 및 하위 패키지에 있는 파라미터가 0개 이상인 메서드 호출.
▶ execution(Integer com.spring.chap.core.DevService.delete(..))
  - 리턴 타입이 Integer인 DevService 인터페이스의 delete() 메서드 호출.
▶ execution(* get*(*))
  - 이름이 get으로 시작하고 1개의 파라미터를 갖는 메서드 호출.
▶ execution(* get*(*, *))
  - 이름이 get으로 시작하고 2개의 파라미터를 갖는 메서드 호출.
▶ execution(* read*(Integer, ..))
  - 메서드 이름이 read로 시작하고, 첫 번째 파라미터 타입이 Integer이며, 1개 이상의 파라미터를 갖는 메서드 호출.

within 명시자
- 메서드가 아닌 특정 타입에 속하는 메서드를 Pointcut으로 설정할 때 사용.

EX
▶ within(com.spring.chap.core.DevService)
  - DevService인터페이스의 모든 메서드 호출.
▶ within(com.spring.chap.core.*)
  - com.spring.chap.core 패키지에 있는 모든 메서드 호출.
▶ within(com.spring.chap.core..*)
  - com.spring.chap.core 패키지 및 그 하위 패키지에 있는 모든 메서드 호출.

bean 명시자
- 스프링 빈 이름을 이용하여 Pointcut을 정의


EX

▶ bean(Dev)
: 이름이 Dev인 빈의 메서드 호출

▶ bean(*DevService)
: 이름이 DevService로 끝나는 빈의 메서드 호출

Share:

2017년 3월 10일 금요일

ORACLE 튜닝


- 처음 컬럼이 where 조건절에 존재하지 않으면 index를 Access할 수 없다.
- Unique index는 Unique Scan 과 Range Scan 모두 가능하다. Unique Scan은 Unique Index의 구성 칼럼 모두에 대해 where 조건 절에서 EQUAL(=) 상수 받을 때의 Access.
- Unique 인덱스의 구성 칼럼 모두와 EQUAL(=) 상수 모두를 만족 시키지 못하면 Range Scan을 한다. Range Scan의 경우 적어도 하나의 컬럼에 대하여 where 조건절에서 EQUAL(=) 상수 를 받을 때의 Access 행위를 말하고 모든 Index의 where조건절에 없을 경우도 해당이 된다.
- Non Unique 인덱스는 Range Scan하고 비교연산자 상수를 받을때 Accesss이다.

- 실행계획보기
1. explain plan for SQL문
2. select * from table(dbms_xplan.display);

- 결한인덱스 변경시 기존 SQL문에도 영향이 있고 순서가 중요하다.
- 결한 인덱스 첫번째 컬럼 연산자가  EQUAL(=) 이여야 한다.
- 옵티마이저는 컬럼의 매칭율이 높은것중 최근에 생성된 Index를 ACCESS 한다.
- index Suppressing
: CHAR나 VACRH의 DATE TYPE과 DATE를 비교할 경우 DATE DATA TYPE 기준으로 비교되는것에 함수에 적용된다.
ex)  컬럼 TD_DATE 가 DATE TYPE일 경우
WHERE TD_DATE = '20170311' 일 경우  WHERE TD_DATE = TO_dATE( '20170311' , 'YYYYMMDD') 로 사용.
:  CHAR나 VACRH의 DATE TYPE과 NUMBER를 비교할 경우 NUMBER DATATYPE 기준으로 비교되는것에 함수에 적용된다.
EX) WHERE CODE = 0544 는 내부적으로 WHERE TO_NUMBER(CODE) = 0544 로 사용.

- EXISTS는 주어진 조건을 만족하는 첫번쨰 레코드를 만나면 트랜잭션을 멈춘다.
- JOIN은 순서에따라 영향을 받는다. ( 처리가 좁은 테이블부터 시작하게 한다.)

- Driving Table이란 가정 먼저 Access하는 Table이다.
-Cost Base Optimizer : 통계쩡보가 먼저 우선하며 동일조건일 경우 from절의 앞 테이블이 Driving Table됨.
- Rule Base Optimizer : 동일조건일 경우 from 절의 뒤 Table이 Driving Table이 됨.

-일반적으로 동일 조건일경우 From절의 뒤부터 먼저 ACCESS된다. (Optimizer MOME가 RULE이거나 CHOOSE인 경우 )

- Nested Loop Join
: 부분범위처리를 하는경우
: 순차적으로 처리
: Driving table의 인덱스 액세스는 첫번쨰 로우만 Random Access이고 나머지는 Scan
연결작업은 Random Access 이다.

- Sort Merge Join
: 전체범위를 처리하는경우
: Euqi-Join에 대해서만 가능
: HINT USER_MERGE을 사용해 일반적으로 구현
: 자신의 인덱스를 사용하는 경우만 Random Access이고 Merge작업은 Scan방식
: 상수값을 받아 줄여진 범위가 30%이상이면 Sort/Merge Join이 유리함.
: 처리량이 많은경우 ( Random Access를 하지 않으므로 )
: 자신의 처리범위를 줄이는게 관건.

-Hash Join
: 전체범위를 처리하는 경우 유리.
: HINT USER_HASH를 사용해 일반적으로 구현
: Oracle8 Server는 Cost-Based 옵티마이저를 사용할 경우만 Hash Join을 고려.
: Hash Join/Merge Join의 사용 여부는 옵티마이저가 결정하며, 조인 칼럼들에 unique 해쉬 값을 생성하는데 유리한 테이블을 지정함.
: Equi-Join에 대해서만 가능
: Hash Function을 이용해 메모리와 CPU를 많이 사용해 대용량 데이터 처리할경우 사용.
: 양쪽 테이블의 scan이 동시에 이루어지므로 Parallel Query Option사용하면 효과적.
: 자신의 처리범위를 줄이는게 관건.
: 처리량이 많은경우 ( Random Access를 하지 않으므로 )

- Outer Join
: IN, OR 비교 연산자는 사용할수 없으므로 IN LINE VIEW 이용한다.
: 모든 컬럼에 반드시 (+)를 사용해야 한다.
: 기준이 되는 테이블이 반드시 DRIVING TABLE이 된다.

- MAX 함수
: HINT INDEX_DESC 를 이용해서 Access를 줄인다.

- UNION
: 중복되는 사항이 없는경우 SORT 하지 않는 UNION ALL을 사용한다.

- Exists
: 주오진 조건을 만족하는 첫 번째 레코드를 만나면 트랜잭션을 멈춘다.



- 통계정보 관련 명령어

--관리자로 로그인
sqlplus
sys

-- 파일실행 ( 해당 경로로 가서 sqlplus 실행 )
@파일이름.sql

-- 옵티마이저 정보 보기
SHOW PARAMETER OPTIMIZER

--권한 변경
ALTER SYSTEM SET OPTIMIZER_MODE=RULE SCOPE=SPFILE;
ALTER SYSTEM SET OPTIMIZER_MODE=ALL_ROWS SCOPE=SPFILE;

-- 재시작
STARTUP FORCE

-- 통계만들기
ALTER SESSION SET SQL_TRACE=TRUE;

sql문

ALTER SESSION SET SQL_TRACE=FALSE;

-- SQL_TRACE 여부
SHOW PARAMETER TIMED_STATISTICS

--TRC 파일 위치
SHOW PARAMETER USER_DUMP_DEST

-- 통계정보 새로 생성
ANALYZE TABLE TAB35 COMPUTE STATISTICS;

-- 테이블의 기존 통계정보를 이용하여 생성
ANALYZE TABLE TAB35 ESTIMATE STATISTICS;

-- tkf 생성
tkprof 기존파일명.trc 만들파일명.TKF SYS=NO EXPLAIN=로그인ID/PW

Share:

2017년 3월 8일 수요일