티스토리 툴바

...빌어먹을 7월달...

야옹 | 2011/07/28 16:01
Posted by jeroschoi

7월달....

정신없이 바쁜 달이였다.

시스템 OPEN , 현업에서의 제품사용 ,  밑에사람을 두고 일하는것 , 실 운영시스템 제한된 조건의 APP개발 ,

엄청나게 많은 비 , 2호선과는 다른느낌의 지옥철 출근길 9호선 , 2가지 Roll .... 바빴다.. ㅋㅋ

그래도 트랜스포머3 를 쏴준 친구가 있어 영화 한편 본게 그나마 참 다행이다.....

연애는 언제하노 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아놔 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이젠 연애해도 될꺼 같은데 이런식으로 가다간 미래가 무섭다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


5월달에 읽은 독서 "완득이"

아는 동생의 추천으로 읽은 책 -      _-

결론부터 말하자면 가볍게 킬링 타임으로 읽을 책 정도였다

그냥 고등학생 성장기 소설?

결과론적으로 보자면 나보다 좀 더 힘든 청소년기를 적어놓은 글?

단순히 문체와 문장력을 생각하면서 읽은 책인듯 하다

물론 내가 어떠한 책을 평가 할 정도로 박식한 평론가는 아니지만

적어도 나에게는 그리 공감하기보단 그냥 예전 추억을 떠올릴 수 있을 정도의 책이였던거 같다

5월 21일

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

써놓은 독서에 대한 생각글로 이때는 왜 그냥 책을 읽는데 많은 것에 대해 의미를 두었는지 모르겠다

단순하게 그냥 독서를 하였다는 것만으로도 충분히 목적을 가지는데 말이다.

예전부터 봐야겠다고 생각했지만 못보고 있었던 책을

3월달에 Age마케팅에 관한 책을 괜찮게 읽었던 터라

찾아 읽게 되었는데 공감할 수 있는 내용은 많이 있었지만 왠지 모를 딱딱함이 책에서 묻어나

아쉬웠지만 내용을 읽을때는 크게 지루함 없이 읽혔던 책이다

과거 , 오늘날의 문화 , 현실 이런 주제로 30이라는 숫자에 대한 얘길 하는 책이였는데

과거로 부터 자유로울 수 있는 사람은 없다라던가 , 현실을 사는 30대의 이야기 성인의 과도기 쯤(끼어있는 세대?)

직장은 가족이 아니다 <= 요즘 특히 와 닫는 이야기였던

등등 공감가는 부분이 꽤나 있긴 했던 책이였던것 같다.

정리하자면 서두에 잠시 얘길 하였지만 심리학이란 주제라서 그런건지 딱딱했던 필체나 느낌 ,

내용상의 공감가지 않던 몇몇 주제(조명효과 , 멘토)등은 

많은 기대를 하고 읽은 책이여서 그랬는지 조금은 아쉬웠지만

그럭저럭 읽어볼만한 책임에는 분명하고 멋진 30대를 위해서 읽어볼만 한 책이였다+_+

30대 당신이 하는 일은 옯다!!

TAG 독서

JMS (Java Message Service)

개발새발 | 2011/04/15 16:07
Posted by jeroschoi

JMS 자바 메세지 서비스

Enterprise messaging products (or as they are sometimes called, Message Oriented Middleware products) are becoming an essential component for integrating intra-company operations. They allow separate business
components to be combined into a reliable, yet flexible, system. In addition to the traditional MOM vendors, enterprise messaging products are also provided by several database vendors and a number of internet related
companies. Java language clients and Java language middle tier services must be capable of using these messaging systems. JMS provides a common way for Java language programs to access these systems.


Enterprise 환경에서 Message를 생성하고 교환할 수 있는 java 기반의 Client나 Middle tier Service가 사용 하는것

해석을 하자면 이런뜻이다

결국 JAVA기반으로 Messging Service할 때 이거 쓰면 좋다!!

http://www.ibm.com/developerworks/kr/library/j-jmsvendor/index.html 

Server 부분은 아직 내공이 부족해 -_- JMS Server 시스템을 구현하는 방법은 위의 주소를 참조 하면 좋을듯 싶다

Client 부분의 구현은 Connection , Session , Queue, MessageProducer, MessageConsumer. Message 를 구현한 뒤
Producer 의 Send 사용하요 보내고 , Consumer Receive를 사용하여 받으면 된다

Connection은 JNDI나 해당 서버에서 지원하는 API로 사용하면된다. 예제는 JNDI를 이용한 ConnectionFactory로 Conneciton을 
구현한 예이다.
ex)
Connection connection;
Context messaging = new InitialContext();
connectionFactory = (ConnectionFactory) messaging.lookup("ConnectionFactory");
connection = connectionFactory.createConnection();
connection.start(); //Message를 보내기전에는 Connection을 Start 해줘야 한다.

Session은 Connection으로 부터 생성한다.
ex)
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
session = connection.createSession(true,0)
//위의 생성 Session은 Auto Transation 아래의 생성은 Send 나 Receive 후 Session.commit 이나 Session.rollback을 해줘야
//한다.

MessageProducer, MessageConsumer 는 Session으로 부터 생성하는데 해당 Destination이 정해져 있어야한다. 여기서 Destination은 Queue이며 Queue역시 Session으로 부터 생성된다/
ex)
MessageProducer sender;
MessageConsumer receiver;
Queue stockQueue;
String QueueName = "TargetQueue";

stockQueue = Session.createQueue(QueueName);
sender = session.createProducer(stockQueue);
receiver = session.createConsumer(stockQueue);

Ps : stockQueue는 connection을 맺은 Server에 TargetQueue라는 이름 Queue이다.

위와 같이 객체들의 생성이 끝났따면 마지막으로 보낼 Message를 구현해야한다
JMS의 Message는 다양한 형태를 지니고 있으며 각 Message마다 특징이 있기때문에 선별하여 사용하면 된다

Message는 Session으로 부터 생성되며 Message가 생성되면 Producer 와 Consumer를 이용하여 해당 Message를 Queue로 보내고 받게 된다.
ex)

TextMessage SendMessage ;
TextMessage ReceiveMessage;

SendMessage = Session.createTextMessage();
SendMessage.SetText("TEST_MESSAGE");

sender.send(SendMessage); // "TEST_MESSAGE" 해당 서버의 큐에 저장된다
ReceiveMessage = receiver.receive()

System.out.println(ReceiveMessage.getText()); // "TEST_MESSAGE" 보냈었던 Message가 출력된다.


그외에 JMS Type 이라든가 Selector을 이용한 Message Filtering 등등의 기능도 있다.

더많은 정보는 ORACLE(Sun이 ...먹혔죠) 홈페이지에서 JMS로 검색하여 스팩문서를 읽어 보기를 권한다!!










TAG Java, JMS

제주도 20110313_우도탐방

Trip && Photo | 2011/04/12 16:08
Posted by jeroschoi

- 우도의 바닷가 -
제주도에 있는 섬중 하나...

바다 색이 애매랄드였다...애...매...랄...드...

왠지 외국 바닷가에 간듯한 기분이 들꺼 같은...+ _+

JNDI 이거 뭐냐?

개발새발 | 2011/04/08 14:56
Posted by jeroschoi

JNDI (Java Naming Directory Interface)

Sun에서 만든 위치추적기(?) API 이라고 설명하면 되려나..

객체에 대한 위치정보를 담고 있는 API라고 생각하면 되겠다. 

Properties 나 Hashtable 의 정보를 JNDI 인터페이스인 Context에 담아

해당 정보or 객체를 Lookup으로 가져와 사용하는 형식이다

Ex) MQ의 정보를 담고 있는 JndiProp라는 Properties를 사용해서 MQ의  QueueConnectionFactory를 가져오는 Source

Context jndiContext = new InitialDirContext(JndiProp); // 생성자로 IntialDirContext 인자값으로 Properties 사용
QueueConnectionFactory connectionFactory2 = (QueueConnectionFactory)jndiContext.lookup(JndiProp.get("QCF").toString()); // 해당정보에서 "QCF"(QueueConnectionFactory)의 정보를 lookup으로 가져와 사용

http://blog.daum.net/erica96/7697764 <== 자세한 정보는 요기~!! 참조
TAG Java, JNDI

음.. 나도 모르게 책을 보러 갔다가 눈에 꼭 띄어 선택하게 된 책!!

물론 내가 이제 서른이라는 나이에 접어 들어서 고르게 된것이 사실이다

뻔한 나이 마케팅에 속았다고 얘기 할 수도 있겠지만

나이 마켓팅에 속아도 될만한 책이 였던것 같다.

삶이란게 B(born) 와 D(dead) 사이의 C(Choice)다

아름다운 경치는 돈으로 살 수 있는것이 아니다...돈...

사실 서른에 대한 이야기라기 보단 그냥 읽어봐도 좋을 듯한 그런 책이였다.

Junit 사용

개발새발 | 2011/04/07 13:58
Posted by jeroschoi

Eclipse에서 쉽게 CASE를 TEST할 수 있는 Junit 

썰기...(내부 구현) 말기...(외부 구현확인)

Debuging 보단 정확히 할 순 없겠지만 생산성으로 봐서는 더 좋을꺼 같다는 생각이 들었다.

Test 방법론? 모듈별 Source Test 시스템? Test기반 개발법?

습관화 해야할 개발방법인거 같다+_+

Assert !!

정복!!! Log4j

개발새발 | 2011/03/30 15:06
Posted by jeroschoi

본문서는 자유롭게 배포/복사 할수 있지만

이문서의 저자에 대한 언급을 삭제하시면 안됩니다

저자 : GoodBug (unicorn@jakartaproject.com)

최초 : http://www.jakartaproject.com 

=============================================


LOG4J

I. 들어가면서.. 그리고 log4j


log4j는 자바 어플리케이션에서 빠르고 효과적으로 로깅 할 수 있도록 도와주는 오픈 소스 프로젝트입니다.


로깅(logging)은 코드의 가독성을 떨어뜨리는 단점이 있지만 애플리케이션에 문제가 있을 때 개발자가 자세한 상황을 파악할 수 있도록 해 주며 테스팅시 빠질 수 없는 요소입니다.


아마도 여러분들은 여러 어플리케이션이 추가되면서 각 개발자들만의 독특한 로깅방식이 서로 썩이고 얽혀서 화면에 나타나는것을 많이 봤을겁니다 -_-;
즉 로깅방법을 통일할 필요가 있는것이죠. 모든 개발자가 특정 포맷에 맞추어서 로깅 한다면 한결 로깅하기도 편하겠지요


오픈 소스 프로젝트인 Log4j는 개발자들이 매우 손쉽고 다양한 형태로 로깅을 할 수 있도록 도와줍니다. 성능또한 우수해 더이상 System.out.println을 사용할 필요가 없습니다.



II. 다운로드


다운로드 http://logging.apache.org/log4j/docs/download.html

매뉴얼 http://logging.apache.org/log4j/docs/documentation.html

API spec http://logging.apache.org/log4j/docs/api/index.html



III. LOG4J 구조


일단 log4j를 잘 모르지만 그 구조만 살짝 살펴보고 넘어갑시다

log4j는 크게 3가지 요소로 구성되며 그 구조는 다음과 같습니다

① Logger(Category) : 로깅 메세지를 Appender에 전달합니다.

② Appender : 전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지

                   아니면 DB에 저장할 것인지 매개체 역활을 합니다.

③ Layout : Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지

                출력 layout을 결졍합니다.

쉽죠?



IV. LOG4J 로깅 레벨


log4j는 다양한 로깅레벨을 지원합니다.


① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.

② ERROR : 일반 에러가 일어 났을 때 사용합니다.

③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.

④ INFO : 일반 정보를 나타낼 때 사용합니다.

⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다.


만약 로깅 레벨을 WARN 으로 설정하였다면 그 이상 레벨만 로깅하게 됩니다.

즉 WARN, ERROR, FATAL 의 로깅이 됩니다.



V. 샘플코드 1


jsp에서 사용하는 예제가 없어 만들어 봤습니다.


test.jsp


<%@ page contentType="text/html;charset=MS949"
 import="org.apache.log4j.Logger" %>

<%!
 static Logger logger = Logger.getLogger("test.jsp");
%>

<%
logger.fatal("fatal!!");

logger.fatal("fatal2!!", new NullPointerException("널입니다요"));

logger.error("error!", new NumberFormatException());

logger.error("error!2");

logger.warn("warn");

logger.info("info");

logger.debug("debug");
%>


static Logger logger = Logger.getLogger("test.jsp");

static 메소드 getLogger를 통해 logger 인스턴스를 가져옵니다.
getLogger에는 파라미터로 스트링 혹은 클래스를 사용하는데 jsp에서는 클래스를 파라미터로 주기에는 좀 애매합니다. 그냥 스트링으로 주도록 하지요


logger.fatal("fatal!!");
logger.fatal("fatal2!!", new NullPointerException("널입니다요"));
  
logger에 fatal 레벨의 메세지를 전달합니다. 다음 두가지 메소드를 지원하는군요

fatal(Object message)

fatal(Object message, Throwable t)

각 레벨마다 위처럼 두가지 메소드를 지원합니다.


지원 메쏘드
logger.fatal(Object message) logger.fatal(Object message, Throwable t)
logger.error(Object message) logger.error(Object message, Throwable t)
logger.warn(Object message) logger.warn(Object message, Throwable t)
logger.info(Object message) logger.info(Object message, Throwable t)
logger.debug(Object message) logger.debug(Object message, Throwable t)


VI. 샘플코드 2


서블릿의 경우 다음과 같이 코딩하면 되겠군요

TestServlet.java


import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestServlet extends HttpServlet {


    static Logger logger = Logger.getLogger(TestServlet.class);


    public void init(ServletConfig config) throws ServletException {
         super.init(config);
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

         try {
              ...
   
              logger.info("Hellow World~");

              ...

          } catch (Exception e) {
              logger.error("Error at TestServlet", e);
          }
     }
}



VII. LOG4J 설정


log4j 설정은 프로그램 내에서 할 수 있지만 설정파일을 사용함으로서 좀더 유연하게 log4j환경을 만들 수 있습니다.


프로그램에서 설정

<%@ page contentType="text/html;charset=MS949"
 import="org.apache.log4j.*,java.io.* "
%>

<%!
 static Logger logger = Logger.getLogger("log4j.jsp");
%>

<%
String layout = "%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n";
String logfilename = "DailyLog.log";
String datePattern = ".yyyy-MM-dd ";

PatternLayout patternlayout = new PatternLayout(layout);
DailyRollingFileAppender appender = new DailyRollingFileAppender(patternlayout, logfilename, datePattern);
logger.addAppender(appender);
logger.setLevel(Level.INFO);
logger.fatal("fatal!!");
%>


property 파일에 설정
log4j.properties를 만들어 /WEB-INF/classes 밑에 놓으세요



log4j.rootLogger=INFO, stdout, rolling

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender

log4j.appender.rolling.File=output.log

log4j.appender.rolling.Append=true

log4j.appender.rolling.MaxFileSize=500KB

log4j.appender.rolling.DatePattern='.'yyyy-MM-dd

log4j.appender.rolling.layout=org.apache.log4j.PatternLayout

log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n


#최상위 카테고리에 INFO로 레벨 설정 및 appender로 stdout, rolling을 정의

log4j.rootLogger=INFO, stdout, rolling

#stdout 어펜더는 콘솔에 뿌리겠다는 정의

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

#stdout 어펜더는 patternlayout을 사용하겠다는 정의

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

#페턴은 다음과 같이 포맷팅 하겠다는 것을 정의

log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n


#역시나 rolling 어펜더는 파일로 처리한다라고 정의

log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender

#로그 파일 이름은 output.log

log4j.appender.rolling.File=output.log

#true면 톰캣을 내렸다 올려도 파일이 리셋되지 않습니다.

log4j.appender.rolling.Append=true

#파일 최대 사이즈는 500KB로 설정

log4j.appender.rolling.MaxFileSize=500KB

#파일 포맷은 output.log.2005-03-10 으로 관리하겠다고 정의

log4j.appender.rolling.DatePattern='.'yyyy-MM-dd

#역시나 rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의

log4j.appender.rolling.layout=org.apache.log4j.PatternLayout

#rolling 어펜더는 패턴 레이아웃 포맷

log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n



VIII. 설정 포맷


로그파일명 포맷 (DatePattern)
로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.

형식 설명
'.'yyyy-MM 매달 첫번째날에 로그파일을 변경합니다
'.'yyyy-ww 매주의 시작시 로그파일을 변경합니다.
'.'yyyy-MM-dd 매일 자정에 로그파일을 변경합니다.
'.'yyyy-MM-dd-a 자정과 정오에 로그파일을 변경합니다.
'.'yyyy-MM-dd-HH 매 시간의 시작마다 로그파일을 변경합니다.
'.'yyyy-MM-dd-HH-mm 매분마다 로그파일을 변경합니다.



PatternLayout 포맷
로그자체를 어떤 포맷으로 남길지 결정합니다.
layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이 일반적으로 가장 많이 쓰입니다.


형식 설명
%p debug, info, warn, error, fatal 등의 priority 가 출력된다.
%m 로그내용이 출력됩니다
%d 로깅 이벤트가 발생한 시간을 기록합니다.
포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
%t 로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
%% % 표시를 출력하기 위해 사용한다.
%n 플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
%c 카테고리를 표시합니다
예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%C 클래스명을 포시합니다.
예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%F 로깅이 발생한 프로그램 파일명을 나타냅니다.
%l 로깅이 발생한 caller의 정보를 나타냅니다
%L 로깅이 발생한 caller의 라인수를 나타냅니다
%M 로깅이 발생한 method 이름을 나타냅니다.
%r 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
%x 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.
%X 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.

예시) (같은 색끼리 보시면 됩니다)

위의 test.jsp를 다음 포맷으로 출력해본다면

[%c] [%C] [%d] [%F] [%l] [%L] [%m] [%M] [%n] [%p] [%r] [%t] [%x] [%X]는 다음과 같다

[test.jsp] [org.apache.jsp.test_jsp] [2005-03-10 12:37:23,561] [test_jsp.java] [org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] [64] [fatal!!] [_jspService] [개행] [FATAL] [765567] [http-8080-Processor25] [] []



일본 소설의 거장인 +_+ 무라카미 하루키 소설이다

많은 사람들이 읽은 책.. 제목만 봐서는 전혀 내용을 짐작할 수 없는 책...

1Q84가 아닌 IQ84로 보인 책...-_-; (분명 그렇게 본사람이 꽤 있을꺼라....)

첫부부분에서는 그저그렇다가... 중반으로 갈 수록 빠져들고 후반부에서 다시 지루해진 책이였다

1권만 읽고 2권은 안읽기로 했던...책이였다.

독자의 상상력을 자극하는 부분(리틀 피플, 2개의 달등..) 과 남녀가 따로 겪는 일상생활을 점점 연관되어 만드는 전개(냉정과 열정사이와 비슷한)와 읽는 내내 두명의 주인공(?)이 같이 느끼게 되는 공간이 언제일까 하는 그런 궁금증을 만드는 것은 뛰어났지만..

왠지 2권은 읽기 싫어진-_-; 뒤부분의 이야기에 왠지 반전이 있을듯 한데 ... ㅋ




TAG 1Q84
블로그 이미지

jeroschoi

휴먼블랙홀!! 독서, 면허증, 등산, 여행, 반쪽, 다이어트, 실력~

카테고리

분류 전체보기 (31)
야옹 (16)
개발새발 (9)
2011 독서 프로젝트+_+ (5)
Trip && Photo (1)