Jini's Blog

Ing...

  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Downloads
    • Dvd
    • Games
    • Software
      • Office
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Uncategorized

[Spring] 다국어 처리 동작 과정

 Jini     오후 3:40     spring     No comments   

1. Client(브라우저)에서 요청을 보냄.

2. LocaleChangInterceptor가 request를 인터셉터.

3. request 파라미터중 locale 정보를 가로챈다.(피들러 등으로 locale 정보 확인 가능, Accept-Language)

4. LocaleChangInterceptor가 현재 applicationContext에 설정된 LocaleResolver를 얻어 setLocale 메소드 호출
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

JUNIT 테스트 작성 방법

 Jini     오전 1:44     JUNIT     No comments   

package com.jini.ch4;

import java.io.*;
import junit.framework.*;


public class FileReaderTester extends TestCase {
 
 private FileReader _input;
 private FileReader _empty;
 private static final String FILE_NAME = "c:/Users/jini/Desktop/data.txt";
 
 public static void main (String[] args) {
  //1. 기본적인 Test 실행 방식.
  junit.textui.TestRunner.run(suite());
  
  //2. 해당 클래스에서 test로 시작하는 모든 메소드를 테스트 하도록 함.
  junit.textui.TestRunner.run(new TestSuite(FileReaderTester.class));
  
  //3. 여러 클래스의 Test Suite를 연결하기 위한 MasterTester 클래스 방식/
  junit.textui.TestRunner.run( suite2());
 }

 public FileReaderTester(String name) {
  super(name);
 }
 
 /**
  * 메소드명을 파라미터로 하는 TestSuite 
  * @throws IOException
  */
 public static Test suite() {
  TestSuite suite = new TestSuite();
  suite.addTest(new FileReaderTester("testRead"));
  suite.addTest(new FileReaderTester("testReadAtEnd"));
  return suite;
 }
 
 public static Test suite2() {
  TestSuite result = new TestSuite();
  result.addTest(new TestSuite(FileReaderTester.class));
  result.addTest(new TestSuite(FileReaderTester.class));
  return result;
 }
 
 public void testRead() throws IOException {
  char ch = '&';
  for(int x = 0; x < 4; x++) {
   ch = (char)_input.read();
  }
  
  assertEquals('d', ch);
 }
 
 public void testReadAtEnd() throws IOException {
  int ch = -1234;
  for(int x = 0; x < 141; x++) {
   ch = _input.read();
  }
  
  assertEquals("read at end", -1, _input.read());
 }
 
 public void testReadBoundaries() throws IOException {
  assertEquals("read first char", 'B', _input.read());
  int ch;
  for(int x = 0; x < 140; x++) {
   ch = _input.read();
  }
  
  assertEquals("read last char", '6', _input.read());
  assertEquals("read at end", -1, _input.read());
  assertEquals("read past end", -1, _input.read());
 }
 
 public void testEmptyRead() throws IOException {
  assertEquals(-1, _empty.read());
 }
 
 public void testReadAfterClose() throws Exception {
  _input.close();
  
  try {
   _input.read();
   fail("read past end에 예외가 발생하지 않음");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 protected void setUp() {
  try {
   _input = new FileReader(FILE_NAME);
   _empty = newEmptyFile();
  } catch (IOException e) {
   throw new RuntimeException(e.toString());
  }
 }
 
 protected void tearDown() {
  try {
   _input.close();
  } catch (IOException e) {
   throw new RuntimeException("테스트 파일을 닫는 중 에러 발생");
  }
 }
 
 private FileReader newEmptyFile() throws IOException {
  File empty = new File(FILE_NAME);
  FileOutputStream out = new FileOutputStream(empty);
  out.close();
  return new FileReader(empty);
 }
}

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

해당 달을 기준으로 달력 만드는 쿼리.

 Jini     오전 12:44     Oracle     No comments   

WITH T AS
(SELECT TO_DATE('201309', 'yyyymm') YM FROM DUAL)
SELECT *
FROM   (
           SELECT MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '1', LEVEL)) SUN
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '2', LEVEL)) MON
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '3', LEVEL)) TUE
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '4', LEVEL)) WED
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '5', LEVEL)) THU
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '6', LEVEL)) FRI
                , MIN(DECODE(TO_CHAR(YM + LEVEL - 1, 'D'), '7', LEVEL)) SAT
           FROM   T
           CONNECT BY
                  LEVEL <= LAST_DAY(YM) - YM + 1
           GROUP BY
                  TRUNC(YM + LEVEL, 'IW')
           ORDER BY
                  SAT
        )
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Override, toString()

 Jini     오전 12:37     JAVA     No comments   

왠지 있을 것 같다고 생각만 하고 찾진 않았었는데 실제로 있었다.
이전까지는 toString() 메소드를 Override하기 위해서 노가다성 코딩을 했었는데 역시 자동으로 해주는 라이브러리가 있었네..



[필요패키지]
org.apache.commons.lang.builder.ToStringBuilder

[사용메소드]
ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

옵션은 "SHORT_PREFIX_STYLE"외에도 다양하게 존재한다.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Row 단위 데이터를 Column 단위로 변환

 Jini     오전 2:34     Oracle     No comments   

■ 기본원리

1. 각 ROW 데이터가 몇 번째 행의 몇 번째 컬럼에 위치해야 하는지를 결정
2. 예를 들어서 아래와 같은 데이터가 있으며 한 행에 4개의 컬럼으로 표시하고 싶다고 할 경우 각 위치는 다음과 같다.

  [원본자료]
  EMP_ID
   ----
   A001 -> 1, 1
   B001 -> 1, 2
   C001 -> 1, 3
   D001 -> 1, 4
   E001 -> 2, 1
   F001 -> 2, 2
   G001 -> 2, 3
   H001 -> 2, 4
   I001 -> 3, 1
   J001 -> 3, 2
   K001 -> 3, 3
   L001 -> 3, 4

3. 위치를 결정했으면 해당 위치 값을 ROWNUM과 CEIL, MOD를 통해서 만든다.
SELECT NO
     , CEIL(NO/4) AS ROWINDEX
     , MOD(NO, 4) AS COLINDEX
     , EMP_ID
FROM ( SELECT ROWNUM AS NO
                   , EMP_ID
        FROM    TEMP )
▶결과는 다음과 같다(COLINDEX값이 0인 경우를 좌표에서는 4번째 위치라고 생각)
NO    ROWINDEX    COLINDEX    EMP_ID
 1           1           1      A001
 2           1           2      B001
 3           1           3      C001
 4           1           0      D001
 5           2           1      E001
 [중략]
12           3           0      L001

4. 다음으로 각 행의 데이터를 DECODE 함수를 이용하여 좌표에 맞게 위치시킨다.
SELECT CEIL(NO/4) AS ROWINDEX
    ,  DECODE(MOD(NO, 4), 1, EMP_ID) AS COL1
    ,  DECODE(MOD(NO, 4), 2, EMP_ID) AS COL2
    ,  DECODE(MOD(NO, 4), 3, EMP_ID) AS COL3
    ,  DECODE(MOD(NO, 4), 0, EMP_ID) AS COL4
FROM ( SELECT ROWNUM AS NO
            , EMP_ID
       FROM    TEMP )
▶결과는 다음과 같다.
ROWINDEX  COL1    COL2    COL3    COL4
1         A001   
1                 B001  
1                         C001 
1                                 D001
2         E001   
2                 F001  
2                         G001 
2                                 H001
[중략]

5. 마지막으로 위 결과를 ROWINDEX 기준으로 GROUPING 해준다.
SELECT CEIL(NO/4) AS ROWINDEX
    ,  MAX(DECODE(MOD(NO, 4), 1, EMP_ID)) AS COL1
    ,  MAX(DECODE(MOD(NO, 4), 2, EMP_ID)) AS COL2
    ,  MAX(DECODE(MOD(NO, 4), 3, EMP_ID)) AS COL3
    ,  MAX(DECODE(MOD(NO, 4), 0, EMP_ID)) AS COL4
FROM ( SELECT ROWNUM AS NO
            , EMP_ID
        FROM    TEMP )            
GROUP BY CEIL(NO/4)

결과는 생략.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

오라클 한글깨짐 현상해결

 Jini     오전 1:37     Oracle     No comments   

1. 레지스트리 편집기 실행 : 시작 -> 실행 -> regedit
2. HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 하위 경로 폴더중 이름이 "NLS_LANG"인 속성의 데이터 확인
3. "NLS_LANG" 속성을 KOREAN_KOREA.KO16MSWIN949로 변경
4. CMD창에서 SQLPLUS /NOLOG 실행
5. CONN /AS SYSDBA 실행
6. 다음의 쿼리 수행
UPDATE PROPS$ SET VALUE$ ='KO16MSWIN949' WHERE NAME = 'NLS_CHARACTERSET';
UPDATE PROPS$ SET VALUE$ = 'AMERICAN_AMERICA.KO16MSWIN949' WHERE NAME = 'NLS_LANGUAGE';
COMMIT;

SHUTDOWN IMMEDIATE;
STARTUP;

※ 기존에 존재하던 한글 데이터는 깨질 수 있음.
※ 한글깨짐 현상은 위 방법외에 다른 방법도 존재하므로 위 방법으로 해결안될 경우 다른 방식으로 해결 필요.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

한글이 3byte인 경우 캐릭터셋 확인

 Jini     오전 1:20     Oracle     No comments   

오라클의 문자집합이 KO16KSC5601, KO16MSWIN949 인 경우는 2 Byte로 한글을 인식.
UTF8/AL32UTF8의 경우 3Byte로 한글을 인식.
단 UTF8/AL32UTF8의 경우는 한글 정렬이 가능하다는 장점이 있다.

캐릭터셋 확인하는 방법
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
최근 게시물 이전 게시물 홈

Popular Posts

  • Java 버전별 특징 및 변경사항
    1. Java7 • 타입추론 List<String> list = new ArrayList<>(); • 이진수 리터럴, 숫자 리터럴에 _ 지원 • Switch문 문자열 가능 • try-with-resources 문 : Au...
  • 윈도우(Window)에서 사용 포트 확인 및 프로세스 KILL
    1. 특정포트가 열려있는지 확인 - netstat -na | findstr "포트" 2. 열려 있는 포트의 PID 확인 - netstat -nao | findstr "포트" 3. PID 찾기 - task...
  • 오브젝트 : 코드로 이해하는 객체지향 설계
    오브젝트 - 코드로 이해하는 객체지향 설계 / 조영호 지음 / 위키북스 객체지향에 대해 그 동안 잊고 있었던 것들을 상기시켜주고 새로운 인사이트를 줬으며 그 동안의 설계에 대해 돌이켜 보게 해준 유익한 책. 객체 사이의 의존성을 완전히 없애는 것이 정...
  • New Features Java 1.7(JDK 1.7)
    ■ The New Objects Class   1) Objects.requireNonNull(T), Objects.requireNonNull(T, String)     #. 아래 Person 객체 생성시 newLastName이나 newFirstNa...
  • 자신의 목표를 설정하는 방법
    1. 목표세우기 : 목표를 세울때는 가능한한 구체적이어야 한다. 또한 평가할 수 있고 실현 가능성이 있는 목표를 정한다. 장기 목표와 단기 목표로 나누고 데드라인을 분명히 하는 것이 좋다. 2. 우선순위 정하기 : 자신의 생활에서 중요한 순서대...

Recent Posts

Recent Posts Widget

Blog Archive

  • ▼  2023 (4)
    • ▼  3월 (1)
      • 오브젝트 : 코드로 이해하는 객체지향 설계
    • ►  2월 (1)
    • ►  1월 (2)
  • ►  2022 (1)
    • ►  2월 (1)
  • ►  2020 (8)
    • ►  7월 (1)
    • ►  4월 (3)
    • ►  3월 (4)
  • ►  2018 (1)
    • ►  7월 (1)
  • ►  2015 (1)
    • ►  5월 (1)
  • ►  2014 (5)
    • ►  8월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
    • ►  1월 (1)
  • ►  2013 (10)
    • ►  12월 (1)
    • ►  11월 (1)
    • ►  9월 (2)
    • ►  8월 (3)
    • ►  7월 (3)
  • ►  2012 (1)
    • ►  3월 (1)

Categories

  • 객체지향 (1)
  • 도서요약 (1)
  • 문법에서 문장까지 (2)
  • 일상 (1)
  • 자기계발 (1)
  • 책 (1)
  • 키보드 (1)
  • 키크론 (1)
  • blogspot (2)
  • error (1)
  • exception (1)
  • GIT (1)
  • JAVA (6)
  • JUNIT (1)
  • K8 PRO RGB (1)
  • kafka (1)
  • markdown (1)
  • mongodb (2)
  • mongotemplate (1)
  • optional (1)
  • Oracle (4)
  • Redmine (1)
  • spring (1)
  • stackedit (1)
  • troubleshooting (1)
  • Visual Studio (1)
  • Webflux (1)

Unordered List

Pages

  • 홈

Text Widget

Categories

Tags

Facebook

  • Home
  • Features
  • _Multi DropDown
  • __DropDown 1
  • __DropDown 2
  • __DropDown 3
  • _ShortCodes
  • _SiteMap
  • _Error Page
  • Documentation
  • Video Documentation
  • Download This Template

Footer Menu Widget

  • Home
  • About
  • Contact Us

Social Plugin

JINI. Powered by Blogger.

Copyright © Jini's Blog | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates