반응형

JAVA 기반 WAS 개발시에 한글이 종종 깨지는 경우가 많다. 이런 경우 해결하기 위해 상당한 시간이 소요될 수 있다. 한글이 깨지는 원인이 여러 가지 있을 수 있어서 설정하는 부분도 여러군데이다. 

UTF-8 인코딩 방식을 기준으로 나름대로 정리. 


+ 한글이 깨질때...


1. 이클립스에서 소스(html, jsp, java 등) 저장시 인코딩 포맷을 UTF-8로 설정한다.

2. 받은 스트링을 byte []로 변환시 인코딩을 지정하지 않으면, 시스템 디폴트 인코딩으로 되어서 깨질 수 있다.

String str="한글테스트"; 
byte[] buf = str.getBytes() ;
byte[] buf2 = str.getBytes("UTF-8") ; // 이렇게 한다. ; UNICODE 스트링을 해당 타입으로 인코딩해 준다.

String str2 = new String(buf2, "UTF-8") ;     // 이렇게 받는다. UTF-8 형식으로 알고, 디코딩하라는 의미. (인코딩(변환)하는게 아님)

3. tomcat 서버 설정 (GET방식 안쓰면 안 해도 됨)
HTTP body의 입력 스트림은 기본으로 UTF-8을 이용하여 디코딩한다. 그러나, URL은 ISO-8859-1로 디코딩한다.
브라우저에서 폼 데이터는 기본적으로 UTF-8로 인코딩하므로 POST 전송해도 문제가 없는 것이다. 그러나, GET 방식이면 당연히 문제가 생긴다. 이를 한 번에 해결하려면 아래와 같이 URL 인코딩 방식을 변경해주면 가능하다.

server.xml에서 사용하는 포트 8080, 8443 등 Connector 부분에 URIEncoding을 지정한다.
<Connector port="8080" ... URIEncoding="UTF-8" />

아파치와 연결하기 위해 mod_jk를 사용한다면 아래와 같이 한다.
<Connector port="8009" protocol="AJP/1.3" URIEncoding="UTF-8" />

JSP상에서는 아래와 같이 사용하면 된다.
<a href="show.html?param= <%=java.net.URLEncoder("한글테스트", "UTF-8")%>"> link </a>

4. java에서 데이터 받는 부분 인코딩 설정을 한다.
doPost(HttpServletRequest request, ...) {
request.setCharacterEncoding("UTF-8") ;     // 한글 수신을 제대로 하기 위함. 이후 request 데이터 변수 사용.
}

응답시에는 
response.setContentType("application/json; charset=utf-8") ;
주의사항!!!! (강조!!!)
반드시 PrintWriter out = response.getWriter(); 전에 위의 설정을 해 줘야 한다. 순서가 바뀌면  동작하지 않는다... 

-JSP에서는 다음과 같이한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>


5. jdbc & mysql ; DB에 들어갈 때 깨지면 다음을 확인한다.

-java에서 mysql 접속시, 인코딩 방식 지정.
String url="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8";
Connection con = DriverManager.getConnection(url, "id", "password") ;

-mysql에서 테이블 생성시 인코딩 지정.
CREATE TABLE tablename (
col VARCHAR(100)
) DEFAULT CHARSET=utf8 ;

또는
CREATE TABLE ...
()  COLLATE='utf8_general_ci'

ENGINE=InnoDB
AUTO_INCREMENT=40;


6. ajax에서 한글설정
        var jsonData1 = JSON.stringify ({
              CMDID: "LIST",
              logonid : logonid }) ;
       $.ajax( {
              url: "/servicetest/apitest",
              type: "POST",
              data : jsonData1,
              contentType : "application/json; charset=UTF-8" ,
              dataType : 'json',
              success : function(data) ...
           });

7. 시스템 (OS) 환경의 언어세팅 문제일 수 도 있다. (중요!)
톰캣을 실행할 때, 환경 변수의 설정 상태가 중요하다!.
profile에 LANG=ko_KR.eucKR
또는 톰캣 구동 스크립트 (catalina.sh 등)에 추가.



'Develop > Java' 카테고리의 다른 글

CentOS, tomcat 타임존 문제  (2) 2018.03.06
tomcat 외부라이브러리 경로 설정 및 톰캣 튜닝  (0) 2018.03.06
jqGrid(2) row(줄) 색상 변경/값 변경  (0) 2016.01.22
jqGrid (1)  (0) 2016.01.19
한글 인코딩 UTF8  (0) 2015.06.02
반응형


+해시(Hash) 란?

임의 길이의 데이터를 고정된 길이의 데이터로 변환하는 알고리즘으로 같은 입력데이터는 항상 같은 Hash 값이 생성되며, 입력 데이터의 일부가 조금이라도 변경되는 출력되는 Hash값이 변경되는 특성을 갖는 알고리즘이다.

Hash의 특정으로는 출력된 Hash값으로부터 역으로 원본 입력 데이터의 추출이 불가능하다. 

따라서 패스워드 같은 데이터를 DB에 저장할 때 많이 사용되며, 파일이나 데이터의 무결성 검증을 위해 많이 사용된다. 

-PWD 입력 => Hash(PWD) => DB에 저장된 해시값 비교

-Hash( file data ) => 해당 파일의 무결성값 


+Hash 알고리즘은 종류

MD5 ; 128비트 (16바이트) 생성

SHA1 ; 160비트 (20바이트) 생성

SHA는 생성되는 비트수에 따라 SHA-128, SHA-256, SHA-512 등이 있다.


+ 기타

MD5는 깨진 알고리즘으로 요즘에는 보안상 거의 쓰이지 않는다. 

깨졌다는 것은 출력된 Hash값으로 부터 원본입력 데이터를 복원했다는 것은 아니지만, 출력된 Hash값을 만드는 입력 데이터군을 찾을 수 있다는 의미이다.

즉, 패스워드를 MD5로 저장하여 사용하는 시스템에서 해시값이 유출되었을때,  MD5 값이 같게되는 다른 입력값을 찾을 수 있어서 패스워드 대신 입력해도 MD5 해시값은 일치하기 때문에 패스워드 인증이 통과되는 결과가 나올 수 있다.




반응형
  • vi 시작
    vi filename ; 파일열기, 작성
    vi +10 filename ; 파일 열고 n행으로 이동
    vi +/"hello" filename ; 파일 열고 hello 문자열로 이동
    vi -r filename ; 손상된 파일 복구
    view filename ; 읽기 전용 모드로 파일 열기
    !vi ; 마지막으로 vi 실행했던 커맨드 다시 실행하기
    vi f\[TAB\] ; f로 시작하는 파일명을 선택하기.  \[TAB\]을 더 누르면 f로 시작하는 파일명들을 모두 보여줌.

    * ^M 문자 없애기 (DOS 포맷 텍스트파일을 linux에서 열 때 발생)
    :%s/컨트롤+V누르고 M 또는 엔터//g
    (가끔 터미널에 따라 안될 수도 있음.(단축키가 대신 먹을 때도 있음). 그 경우에는 키 입력을 컨트롤+V누르고 엔터키를 눌러서 대체할 수 있음.)
  • VI (ESC 키 누른 이 후에 커맨드 모드)
    i 현재위치에서 삽입  
    I 현재줄의 처음 위치에서 삽입  
    a 현재 위치에서 추가  
    A 현재줄의 끝 에서 추가  
    o 새로운 한 줄을 커서 아래줄에 연다.  
    O 새로운 한 줄을 커서 위줄에 연다.  
    S 줄을 지우고 삽입모드로  
    R 현재 위치에서 Relpace 모드로  
    J 다음줄과 현재줄을 합친다.  
    ~ 대문자<->소문자  
    . 마지막 명령을 반복한다  
    u (<-> CTRL-R) 마지막 수정한 것을 취소한다.  
    U 줄을 처음 상태로 복구한다.  


-edit-  
cw 한 단어  
2cw or c2w 두 단어  
cc 한 행  
c$ or C 커서 위치에서 행의 끝까지  
cO 커서 위치에서 행의 처음까지  
r 한 문자 변경

-delete-  
dw 한 단어  
2dw or d2w 두 단어  
dd 한 행  
d$ or D 커서 위치에서 행의 끝까지  
dO 커서 위치에서 행의 처음까지  
x (del) or X(bs) 한 문자 삭제

- yanking, copy -  
yw 한 단어  
2yw or y2w 두 단어  
yy 한 행 복사 to clipboard  
3yy ; 세줄 복사 (앞에 복사할 수만큼입력)

y$ or Y 커서 위치에서 행의 끝까지 !!!!  
yO 커서 위치에서 행의 처음까지  
y1 or yh 한 문자 변경  
p ; paste 붙여넣기 (현재 줄 아래에 )  
P ; 현재 커서 윗줄로 삽입

- 커서 이동 - 
h, j, k, l 좌, 하, 상, 우  
\+ or \[enter\] 다음줄의 첫번째 문자로  
\- 이전줄의 첫번째 문자로  
e, E 단어의 끝으로  
w, W 다음 단어로  
b, B 이전 단어로  
$ 행의 끝으로  
0 행의 처음으로 ( 'A' 인 경우 A앞으로 커서이동)  
^ 행의 처음으로 ( 'A' 인 경우에도 맨앞으로 커서이동)  
), ( 다음, 이전 문장의 처음으로  
}, { 다음, 이전문단의 처음으로  
\]\], \[\[ 다음, 이전 구절의 처음으로

^F 한 화면 앞으로 스크롤 (means CTRL-F)  
^B 한 화면 뒤로 스크롤  
^D 반 화면 앞으로 스크롤  
^U 반 화면 뒤로 스크롤  
^E 한 줄 앞으로 스크롤  
^Y 한 줄 뒤로 스크롤  
H 화면의 맨 위줄로 ( nH인 경우 맨 위에서 n행 밑으로 )  
M 화면의 중간 줄로  
L 화면의 맨 아래줄로 ( nL인 경우 맨 밑에서 n행 위로 )

- 검색, 이동 -

/pattern 문자열의 처음에서 앞으로 검색  
?pattern 문자열의 처음에서 뒤로 검색  
n 검색을 다시 반복 (같은 방향)  
N 검색을 다시 반복 (반대 방향)  
fx 현재 줄에서 x가 있는 곳으로 이동 (앞으로)  
Fx 현재 줄에서 x가 있는 곳으로 이동 (역방향)  
tx n행 밑에서 x가 있는 곳으로 이동  
Tx n행 위에서 x가 있는 곳으로 이동  
; 줄에서 찾기를 같은 방향으로 반복  
, 줄에서 찾기를 반대 방향으로 반복  
nG, :n 행 이동 n번째 줄로 이동 (n이 생략되면 마지막줄로) --변환자 주: 이  
기능은 :n 으로 하는것이 편합니다 :)  
G : 마지막 줄로 이동  
nl 열 이동 (n이 생략되면 처음 열로)  
\* 현재 커서가 위치한 단어 찾기 (앞방향)  
\# 현재 커서가 위치한 단어 찾기 (역방향)

mx 현재 위치를 x 이름의 마크로 저장  
\`x 마크한 위치(행, 열)로 이동  
'x 마크한 줄로 이동  
\`\` 이전에 마크한 위치로 이동  
'' 이전에 마크한 줄로 이동

\+ c 코드 분석기
  • vi 기타 커맨드
블록 지정 하여 복사  
    v , 커서 이동 하면 문자 단위 블록 지정. y하면 복사 or x하면 잘라내기. 붙이기는 p. 삭제는 d  
    대문자 V, 커서 이동 하면 라인 단위 블록 지정.

{, } 문자에서 %를 누르면 {} 단위를 모두 선택함.  
^V ; 사각형 형태의 블록 지정  
(windows gvim에서는 ^Q 임.)

+ 쉘로 나갔다가 돌아오기.  
^z 로 나가서 fg 커맨드로 돌아올 수 있다.  
\+ 여러 창으로 작업하기 (screen 유틸)  
screen에서는 C-a S 로 창을 쪼개고  
C-a 으로 창 전환.  
C-a c로 쪼개진 창에 쉘 띄운다.

-- 기타 커맨드

:set nu = set number ; 라인 넘버 보이기  
:q ; 종료  
:qa! ; 강제 종료  
:ZZ ; 저장 후 종료.

--gui에서 beep음 끄기  
:xset b off

-cui에서 끄기  
setterm -blength 0  
setterm -bfreq 10 (작은 소리로 변경)

-- copy & paste  
[숫자]+yy -> p or P or shift+insert

-- delete  
[숫자]+dd ; 행 삭제  
[숫자]+x ; 문자 삭제

-- 반복  
. ; 방금한 것을 반복

-- edit 모드

I ; 현재 첫부분에 편집  
i ; 현재 위치에서 편집  
O ; 윗줄삽입  
o ; 아랫줄 삽입

--검색  
/[검색문자열]

-- 이동  
^+F ; (아래로)  
^+B ; (상위)

-특정 라인으로 이동  
[라인번호]G  
$는 마지막을 의미.

-첫라인으로 이동 ; 1G, 또는 gg  
-마지막라인으로 이동 ; $g 또는 G  
-undo = u  
-redo = ^+r

-- replace ; subsitute  
:%s/[검색어]/[변경어]/g  
:[시작행],[끝행]s/[검색어]/[변경어]/g

-- 예제  
ex) , 를 엔터로 변경  
:%s/,/[변경값]/g  
변경값에 Ctrl+V+Enter 입력 ==> ^M으로 보임. (터미널 클라이언트에 따라 안될 수도 있음. (그럴 경우, ^+V+M 으로 입력?))

ex) 특정 단어가 있는 줄 지우기  
:g/[검색단어]/d

-   여러 문서 편집  
    :args (확인)  
    :n (다음)  
    :3n (3개 스킵 다음)  
    :N (이전)  
    :prev
-   현재 라인에서 특정단어 앞까지 삭제  
    d/\[특정단어\]

:= 현재 행번호 출력

> > 들여쓰기 (tab 추가) ^t(삽입모드시)  
> > << 당겨 쓰기 ^d(삽입모드시)

-   빈 라인 삭제  
    :g/^$/d  
    :%s/^\n//g

-   VIM에서 del, bs 키 입력 설정  
    .vimrc 에 t_kb, t_kD 를 입력하기 위해서 아래와 같이 하면 된다.  
    set t_kb=^H  
    set t_kD=^?  
    [ctrl] + [v],[h] : ^H 가 입력됨  
    [ctrl] + [v],[backspace] : ^? 가 입력됨
  • .exrc 예제

set nu
set autoindent 
set cindent 
set showmatch 
set ts=4
  • 홈디렉터리에 .vimrc 예제

set nocompatible " 오리지날 VI와 호환하지 않음  
set autoindent " 자동 들여쓰기  
set cindent " C 프로그래밍용 자동 들여쓰기  
set smartindent " 스마트한 들여쓰기  
set wrap  
set nowrapscan " 검색할 때 문서의 끝에서 처음으로 안돌아감  
set nobackup " 백업 파일을 안만듬  
set visualbell " 키를 잘못눌렀을 때 화면 프레시  
set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸) 표시  
set shiftwidth=4 " 자동 들여쓰기 4칸  
set number " 행번호 표시, set nu 도 가능  
set fencs=ucs-bom,utf-8,euc-kr.latin1 " 한글 파일은 euc-kr로, 유니코드는 유니코드로  
set fileencoding=utf-8 " 파일저장인코딩  
set tenc=utf-8 " 터미널 인코딩  
set expandtab " 탭대신 스페이스  
set hlsearch " 검색어 강조, set hls 도 가능  
set ignorecase " 검색시 대소문자 무시, set ic 도 가능  
set tabstop=4 " 탭을 4칸으로  
set lbr  
set incsearch " 키워드 입력시 점진적 검색  
syntax on " 구문강조 사용  
filetype indent on " 파일 종류에 따른 구문강조  
set background=dark " 하이라이팅 lihgt / dark  
colorscheme desert " vi 색상 테마 설정  
set backspace=eol,start,indent " 줄의 끝, 시작, 들여쓰기에서 백스페이스시 이전줄로  
set history=1000 " vi 편집기록 기억갯수 .viminfo에 기록

'Develop > Linux_Unix' 카테고리의 다른 글

[도커] tomcat, mariadb 환경 war hang/slow  (0) 2021.04.28
Bash Tip 작업속도를 빠르게  (0) 2021.03.03
리눅스 백그라운드 실행(터미널종료에도)  (2) 2021.02.23
Git 사용법_요약  (0) 2019.12.16
Ubuntu18/tomcat8 setup  (0) 2019.11.08

+ Recent posts