JavaScript - 익명의 즉시 실행 함수로 스크립트 시작하기

* 익명의 즉시 실행 함수는 다음의 코드와 같이 정의
(function() {
    // ... 코드 생략 ...
}());


* 익명 함수는 자바스크립트가 런타임에 구문을 해석하여 실행.

  이는 외부의 접근을 제한함을 의미.
  따라서 외부 코드에서 익명 함수의 내부 코드를 수정할 수 없음.
 

* 즉시 실행 함수는 선언과 동시에 실행.
  익명 함수가 런타임에 사용될 준비가 되면 즉시 함수의 초기화 코드를 실행할 수 있기 때문.

JavaScript - this란

* call/apply 또는 bind를 사용하지 않을 경우 this 값은 항상 전역 객체를 참조.
단, 다음 경우 제외.
1. new 연산자를 사용하여 호출된 경우, 현재 만들어지고 있는 새로운 객체를 가리킴
2. 객체의 멤버인 경우, 이 객체를 가리킴

Maven - 명령어

* compile
complier:complie의 실행으로 src/java 및의 모든 자바소스를 컴파일해서 target/classes로


* package
target디렉터리 하위에 jar,war,ear등의 압축파일 생성.

이름은 build엘리먼트의 finalName엘리먼트의 값을 사용.
지정되지 않을 경우 "아티팩트아이디-버전”의 이름으로 압축됨
(각 압축종류별로 플러그인이 필요, 빌드 시 알아서 다운로드함)

* install
로컬 저장소로 배포


* deploy
원격 저장소로 배포


* clean
빌드를 통해 생성된 target디렉터리 삭제


* mvn clean test, mvn clean install
이전 빌드로 인해 남아있는 산출물의 문제로 빌드 오류가 발생하는 경우, 이런식으로 할 수 있음

Ehcache 란

* EhCache는 경량의 빠른 캐시 엔진으로 확장/분산 기능을 지원하며 높은 품질을 제공.

* xml 설정
<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <cache name="simpleBeanCache"
              maxElementsInMemory="10000"
              eternal="false"
              timeToIdleSeconds="120"
              timeToLiveSeconds="120"
              overflowToDisk="true"
              maxElementsOnDisk="10000000"
              diskPersistent="false"
              diskExpiryThreadIntervalSeconds="120"
              memoryStoreEvictionPolicy="LRU"

    />
</ehcache>


* Cache 조회하기
CacheManager cacheManager = CacheManager.create();
Cache cache = cacheManager.getCache("simpleCacheBean");


* Cache 생성/수정하기
CacheManager cacheManager = CacheManager.create();
Cache cache = cacheManager.getCache("simpleCacheBean");
cache.put(newElement);


* Cache 삭제하기
CacheManager cacheManager = CacheManager.create();
cache.remove("SimpleCacheBean");

Java - 문자열로된 숫자 자리수 채우기

* String.format 을 사용하여 빈 자리를 0으로 채울 수 있다.
 


* 사용예
System.out.pringln( String.format("%03d", 3) ); => 003
System.out.pringln( String.format("%02d", 2) ); => 02
System.out.pringln( String.format("%02d", 10) ); => 10

Oracle - 테이블 락 확인하기

* 현재 테이블에 락이 걸려있는지 조회할 수 있다.


* 락 테이블 조회하기
SELECT
      B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE

      , A.XIDUSN, A.SESSION_ID, A.LOCKED_MODE
FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID
;
 

* 특정 테이블 락 여부 확인하기
SELECT
     A.SID, A.SERIAL#

     , B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID

  AND B.ID1=C.OBJECT_ID
  AND B.TYPE='TM'
  AND C.OBJECT_NAME = '테이블명'
;

Oracle - 한 쿼리로 INSERT 혹은 UPDATE 하기

* 테이블에 데이터 추가시 조건에 해당하는 값이 존재하면 해당 행을 UPDATE하고,
없으면 INSERT 하는 경우 사용


* 사용법
MERGE INTO [ schema. ] { table | view } [ t_alias ]
   USING { [ schema. ] { table | view } | subquery } [ t_alias ]
   ON ( condition )
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
              [, column = { expr | DEFAULT } ]...
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })



- INTO : DATA가 UPDATE되거나 INSERT 될 테이블
- USING : 비교할 SOURCE 테이블 혹은 서브쿼리.

              INTO절의 테이블과 동일하거나 다를 수 있음.
- ON : UPDATE나 INSERT를 하게 될 조건.

         해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절 실행
              , 없으면 WHEN NOT MATCHED 절 실행.
- WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용.

                            (UPDATE, DELETE 포함 될 수 있음)
- WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용.

                                   (INSERT)