PHP에는 numner_format() 가 있어 숫자 타입의 데이터에 콤마(,) 또는 소숫점(.)을 표현 하는데 큰 어려움이 없지만


Javascript 에는 위의 함수가 없기 때문에 숫자 타입의 데이터에 3자리마다 콤마를 찍어 출력하고 싶은 경우 다음 함수를 만들어 사용한다.



<실행결과>

1) 결과와 같이 숫자타입의 문자열이 들어가면 3자리 마다 콤마(,)를 삽입하여 리턴해준다.

var res = gfnNumberFormat("10000")

"10,000"


2) 소수점 숫자타입의 문자열도 문제없이 콤마(,)를 삽입하여 리턴해준다.

var res = gfnNumberFormat("1000000.00")

"1,000,000.00"


3) 한글문자열이 입력되면 한글 그대로 출력해준다.

var res = gfnNumberFormat("한글테스트")

"한글테스트"


4) 영문문자열이 입력되면 영문 그대로 출력해준다.

var res = gfnNumberFormat("abcdefg")

"abcdefg"


함수는 구현 방법에 따라 다르게 구현 할 수 있는데, 위의 함수는 정규식을 이용하여 구현하였기 때문에 한글, 영문, 숫자타입, 소수점에 대해서 예외처리 없이 구현할 수 있다.

'프로그래밍 > Javascript' 카테고리의 다른 글

Form에서 데이터 전송시 주의할 점  (0) 2015.10.12

일반적인 프로그램의 실행구조를 살펴보면 OS에 직접적인 영향을 받는다.



[일반적인 프로그램]



Java 프로그램의 실행구조를 살펴보면 OS위에 JVM (java virtual machine) 으로 실행하게 되며


JVM은 자바 바이트코드 를 실행할 수 있는 주체로


이론적으로 모든 Java 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.



 

[Java 프로그램의 실행구조]



Java는 운영체제(OS)에 독립적이지만 JVM은 운영체제(OS)에 의존적이다.


[운영체제(OS)에 독립적인 Java]


자바 컴파일러는 JVM이 인지 할 수 있는 자바 바이트코드 를 생성한다.



[자바 바이트코드 생성]



< Temporary Table >


하나의 세션 동안이나 트랜젝션(Commit 하기 전) 동안 임시적으로 데이터를 보관하기 위해 제공된다. (세션이나 트랜젝션이 종료되면 테이블의 데이터는 Truncate 된다.

일반테이블과 다르게 테이블의 레이아웃은 dictionary에 존재하지만 데이터는 디스크 상에 존재하지 않고

메모리상에서 [INSERT] [UPDATE] [DELETE] [SELECT] 하는 테이블이다.


1. TEMPORARY TABLE 생성


CREATE GLOBAL TEMPORARY TABLE [테이블명]

      ON COMMIT [DELETE|PRESERVE] ROWS ;

ON COMMIT PRESERVE ROWS : 세션별로 데이터가 존재 (세션이 종료시 데이터 소실)

ON COMMIT DELETE ROWS    : 트랜젝션별로 데이터 존재  (Commit 하면 데이터 소실)


2. 예제


-- Session-Level Temporary

CREATE GLOBAL TEMPORARY TABLE TBL1

(

    ID       NUMBER

,   NM      VARCHAR2(10)

,   DT      DATE

)     ON COMMIT PRESERVE ROWS ;


-- Transaction-Level Temporary

CREATE GLOBAL TEMPORARY TABLE TBL2

(

    ID        NUMBER

,   NM       VARCHAR2(10)

,   DT       DATE

)      ON COMMIT DELETE ROWS ;


SQL>

SELECT TABLE_NAME

     , DURATION

  FROM USER_TABLES

 WHERE TEMPORARY   = 'Y'

   AND TABLE_NAME IN ('TBL1', 'TBL2') ;

TABLE_NAME | DURATION

------------------------------

TBL1       | SYS$SESSION

TBL2       | SYS$TRANSACTION

SYS$SESSION        : 세션이 종료되면 데이터 소실

SYS$TRANSACTION : 트랜젝션이 종료되면 데이터 소실


-- 하나의 임시 테이블은 더로 다른 사용자가 접근이 가능하다. 하지만 데이터는 서로 다르다.

-- 자신의 SID를 조회

SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1 ;

       SID

----------

       962


-- 데이터 INSERT

SQL> INSERT INTO TBL1(ID, NM, DT) VALUES(1, '홍길동', SYSDATE) ;


-- 데이터 SELECT (이때 다른 세션에서 조회하면 데이터가 존재하지 않는다.)

SQL> SELECT * FROM TBL1 ;

ID  | NM       | SYSDATE

-------------------------------------

1   | 홍길동   | 2015/09/25 10:52:04


-- 트랜젝션으로 설정한 경우 Commit시 데이터가 사라짐

-- 다른 사용자가 접속한 경우도 데이터는 보이지 않는다.

SQL> COMMIT ;


-- 세션으로 설정한 경우 Exit하는 경우 데이터가 사라짐

-- 다른 세션으로 접속한 경우도 데이터는 보이지 않는다.

SQL> EXIT


==> TEMP TABLE도 일반 TABLE처럼 Insert or Update  할 때 Lock잡는다. Lock조회하면 조회된다


* 중요

 테이블의 Definition 은 Dictionary 에 저장된다.

 하지만 SELECT TABLESPACE_NAME FROM DBA_TABLES ; 를 조회해 보면 조회되지 않는다.

 테이블의 정보는 Dictionary (owner의 DEFAULT_TABLESPACE)에 저장되지만 실 데이터는 디스크에 저장되지 않고 메모리상에서 소멸되기 때문이다.


3. TEMPORARY TABLE 삭제


DROP TABLE T1 ;

DROP TABLE T2 ;



 원본

 수정

 설명

  -vmargs

  -vmargs

 

  -Dosgi.requiredJavaVersion=1.5

  -Dosgi.requiredJavaVersion=1.5

 

 

  -Xverify:none

 클래스 검사 생략. 이클립스 실행 시간이 줄어든다.

 

  -XX:+UseParallelGC

 Parallel Collector를 사용. 병렬 가비지 컬렉션.

 

  -XX:-UseConcMarkSweepGC

 병행 mark-sweepGC 기능을 수행하여 GUI 응답 속도 처리

 

  -XX:PermSize=32M

 이클립스 클래스 로딩 기본 메모리

 

  -XX:MaxPermSize=128M

 이클립스 클래스 로딩 최대 메모리

   -XX:NewSize=32M JVM에서 새로운 객체가 생성 될때 로딩되는 최소 영역

 

  -XX:MaxNewSize=32M

 JVM에서 새로운 객체가 생성 될때 로딩되는 최대 영역

  -Xms256m

  -Xms256m

 이클립스 실행시 잡는 최소 메모리

  -Xmx256m

  -Xmx256m

 이클립스 실행시 잡는 최대 메모리


* Xms와 Xmx를 똑같이 설정한 이유는 이클립스가 메모리를 유동적으로 관리하는데 이걸 정적으로 고정시켜 주기 위해서이다.

 유동적으로 관리하게 놔두면 자바는 메모리가 부족할때 확보하려고 메모리 할당을 하게 되고 메모리의 여유가 있으면 남는 메모리를 조금씩 시스템으로 돌려버린다.

 이러한 작업때문에 이클립스 속도가 더 느려지기에 아예 처음부터 최소값과 최대값을 고정시켜 버리면 불필요한 작업을 하지 않게 된다.

 물론 메모리 값은 컴퓨터 사양에 따라 수정하면 된다.


* Heap Memory


[Window] -> [Perference] -> [General]  에서 'Show heap status' 체크박스에 체크.



체크를 해주면 이클립스 오른쪽 하단에 현재 메모리 사용량과 휴지통 아이콘이 생긴다.
힙에 메모리가 많이 쌓였을때 휴지통을 눌러서 한번씩 정리해주면 된다.



Code Assist 비활성화

[Window] -> [Preferences] -> [Java] -> [Editor] -> [Code Assist tab] 에서 'Enable auto activation' 을 꺼준다.

단축키 ctrl + space 로 코드 어시스트 사용가능하다.




'Tools > Eclipse' 카테고리의 다른 글

이클립스 단축키  (0) 2015.10.16
이클립스 설치 및 한글버전 설정  (0) 2015.10.13
탭을 공백문자로 바꾸어주도록 설정  (0) 2015.09.23

ORA-12899: value too large for column


( ORA-12899: "유저명"."테이블명"."컬럼명" 열에 대한 값이 너무 큼(실제: m, 최대값: n)  )


ORA-12899는 INSERT를 한다거나 UPDATE를 하다가 다음과 같은 에러가 발생하는 경우가 있다.


1. 실제로 최대값보다 실제 입력된 값이 커서 발생하는 경우이다.


2. 오라클의 문자셋 NLS_CHARACTERSET의 설정의 문제다 ( 캐릭터셋(charset)의 문제 -> UTF-8 과 ASCII의 Byte 수가 달라 각 3Byte, 2Byte, 1Byte를 계산하다 문제가 생긴 경우)



이번에 포스팅 할 경우는 공백이다.


쉽게 발생하는 케이스가 아니라서,


보통 위의 경우라면 해결방법이 인터넷에 많이 올라와있지만 공백의 경우 찾기도 쉽지 않고 설마 공백이 문제가 될 거라 생각하지 않았다.


대부분 실제 입력 값이 크지 않고 입력되는 값이 모두 영어인 경우라면 다음을 확인해보면 될 것 같다.


3. 공백값 chr(49824)


오라클 공백값이 기존 1byte의 스페이스 키를 입력하여 나온 chr(32) 이다.


하지만 에러가 나는 공백값은 아닌 chr(49824)는 2Byte이다. (공백인듯 공백아닌 공백같은)


두 공백을 비교하면


 chr(32)

 chr(49824)

 1Byte

 trim가능, replace 처리가 스페이스 키로 만든 공백으로 처리 가능

 2Byte 

 trim불가, replace 처리가 스페이스 키로 만든 공백으로는 불가능


가장 쉽게 해결하는 방법은 해당 공백을 복사하여 replace해주는 방법이다.


SELECT REPLACE(CHR(49824), ' ', ' ') FROM DUAL;


이 공백문자를 만들기도 힘든데 어떻게 들어왔는지는 모르겠다.

'데이터베이스 > Oracle' 카테고리의 다른 글

ORA-01460: unimplemented or unreasonable conversion requested  (0) 2015.10.19
TEMPORARY TABLE  (0) 2015.09.25

프로젝트를 하다보면 A라는 개발자는 Tab으로 소스의 라인을 맞추고 B라는 개발자는 Spaces으로 또 C개발자는 Tab과 Spaces를 섞어서 라인을 맞춘다.


이런경우 제 3자 혹은 A개발자와 B개발자 그리고 C개발자의 소스를 공유하였을 때 서로 다른 라인으로 또는 라인이 맞지 않는 뒤죽박죽인 소스를 보는 경우가 많은데, 이러한 가독성이 없는 프로그램 소스는 개발의 효율을 상당히 조하시키는 요인이 된다.


소스 파일을 공유하고 서로 보기 좋게 코딩하는 방법중 가장 기본적인 방법인 이클립스에서 Tab을 Spaces로 변경되어 사용하는 방법이다.


이클립스 설정은 다음과 같이 설정하면 된다. (캡쳐는 없음)


1. 이클립스 상단 메뉴들 중 [Window] -> [Preferences] 를 차례로 클릭하여 설정 팝업을 띄운다.


< 텍스트 파일 설정 >

2. 설정 팝업에서 [General] -> [Editors] -> [Text Editors] 를 차례로 클릭하고 우측의 "Insert spaces for tabs" 체크박스를 체크한다.


< 자바 파일 설정 >

3. (2)위 동일하게 [Java] -> [Code Style] -> [Formatter] 를 차례로 클릭하고 우측의 "Edit" 버튼을 클릭한다.


4. [Tab policy] 항목을 "Tab only" 에서 "Spaces only" 로 바꾸고, 상단의 profile name을 적절하게 변경한다. (Ex.Eclipse Tab-to-Space)


< XML 파일 설정 >

5. (2)와 동일하게 [XML] -> [XML Files] -> [Editor] 에서 "Indent using spaces" 라디오버튼을 체크한다.


6. 적용을 하면 설정 완료된다. (설정을 완료하였다 하더라고 이미 작성된 파일들에는 적용되지 않으므로 프로젝트 시작전에 미리 세팅하는 것이 좋을듯 하다.)


위의 설정은 웹 개발자들이 자주 사용하는 텍스트 파일, 자바파일, xml파일을 동일하게 적용하기 위함이다.


위와 같이 적용이 끝난 후 코딩을 하면 Tab을 눌렀을 경우 Spaces가 4칸의 효과를 확인 할 수 있다.


이렇게 개발자들이 설정을 하고 나면 Tab을 사용하던 Spaces를 사용하던간에 동일한 Spaces를 이용하여 라인을 맞춘것으로 보이기 때문에 가독성에 있어서 효율적인 소스코드를 볼 수 있다.

'Tools > Eclipse' 카테고리의 다른 글

이클립스 단축키  (0) 2015.10.16
이클립스 설치 및 한글버전 설정  (0) 2015.10.13
속도개선 설정하기  (0) 2015.09.25

+ Recent posts