내 언젠가.. 이걸 이용해서 코메디를 창조해 보리라!! 아잣! 이제 휴식 ㅋㅋㅋ



아래는 키보드 후킹


etc



json

jstl(태그라이브러리.. 내가 옛날 jsp를 보긴 한거군;;)


음.. 아래건 틈틈히 한번씩 읽어볼것 (css등)

jsp 필터 개념 (간단히 접근하면.. 작업을 처리한다의 재귀 개념)


체인오브 리스폰스빌리티

(추가)

목적 없는.. 호기심 주의! 

by givingsheart 2014. 1. 2. 09:42



추가로 찾아볼 내용

포지션 1: 서버 클라이언트 개발 팀원 및 팀장 

업무내용 

:클라이언트 어플리케이션 개발팀

- GEM(Globally Executable MHP)/BD-J 표준에 따른 Java 어플리케이션 개발 
Android 환경에서 동작하는 드리머 클라이언트 어플리케이션 개발  


 -  Understanding of Xlet based Java TV framework
 -  Understanding of GEM(Globally Executable MHP)/BD-J specification 
 -  Experience of JMF(Java media Framework) is a plus
 -  Experience of developing applications in android environment is a plus.


업무내용 

- 서버 서비스 어플리케이션 개발팀원

- server-side application developer
Cloud 기반 Server-side Java 어플리케이션 개발 
- 안정적이고 효율적으로 동작하는 서버 시스템 개발

 

주요 업무
1) Blu-ray, networked/IP-based media players등의 TV connected device에서 동작하는 드리머 서비스의 back-end system 개발. 
2) cloud 기반으로 전세계를 대상으로 서비스할 드리머 서버시스템의 지속적인 성능향상 작업

 

자격조건 Knowledge : .
 - Deep understanding of Java servlet/Jsp
 - Deep understanding of RDBMS.
 - Deep understanding of open standard based development

 

Skill : 
 -  Expert in OO design and implementation using Java
 -  Expert in java networking application development.
 -  Expert in enterprise application architecture.



포지션2: JSP, Servlet 개발자 팀원 및 팀장 

업무내용 

- 서버 서비스 어플리케이션 개발팀원

- server-side application developer
- Cloud 기반 Server-side Java 어플리케이션 개발 
- 안정적이고 효율적으로 동작하는 서버 시스템 개발

 

주요 업무
1) Blu-ray, networked/IP-based media players등의 TV connected device에서 동작하는 드리머 서비스의 back-end system 개발. 
2) cloud 기반으로 전세계를 대상으로 서비스할 드리머 서버시스템의 지속적인 성능향상 작업

 

자격조건 Knowledge : .
 - Deep understanding of Java servlet/Jsp
 - Deep understanding of RDBMS.
 - Deep understanding of open standard based development

 

Skill : 
 -  Expert in OO design and implementation using Java
 -  Expert in java networking application development.
 -  Expert in enterprise application architecture.


by givingsheart 2014. 1. 2. 08:59

아래에서 java api 항해 지도를 보던중,, java.media 란 패키지가 3d등을 지원하는 것에 호기심을 느껴서 



java media framwork 라는 것을 찾아보려고.. 아래 사이트에서 정보를 찾은후


바로 다운 받을까해서 오라클 사이트를 살펴보던중



adf mobile download 라는 것도 보고, 이클립스용 엔터프라이즈 팩이란 것도 보고(일단 다운받아둠)


아래는 adf 에 대한 현업 개발자들의 의견(결론:스프링 프레임워크!)


by givingsheart 2014. 1. 2. 08:59

http://cafe.naver.com/jjdev/1364



내 경우에.. 파일 관리 시스템을 만들면서 팩토리 패턴을 사용할때 해당 파일작업(copy,delete,rename,move)을 수행할
워커(copyWorker,deleteWorker)를 이름과 실제 클래스 명(패키지네임 포함)을 xml파일을 통해 저장하고 로드해서 사용
했었다.

스프링 프로젝트에서도 요런식으로 쓰나보나.. 내가 모르는건 root의 개념.. 및 패키지간 관계의 표현인듯..?


+ jsp 책을 보다가.. was (web app service)를 배포할때 파일들,리소스들의 접근 경로에 대한 문제도 생각해야한다.


by givingsheart 2014. 1. 2. 08:53

1. io를 통한 채팅 프로그램 개발 경험이 정말로 큰 도움이 되었음.(종료) 

   =>덕분에.. 이젠 내가 대충 소켓,스레드 사용해서 어떤 프로그램을 만들고 싶다라고 생각이 들면.. 자바 도큐만
   보면서 구현이 가능할듯.. 뭐랄까.. 나름 상당한 고민을 했었고.. 그만큼 풀어냈다고 혼자 착각중임 -_-;
   큰 수확은.. 예외 핸들링을 통한.. while() 업무의 종료 조건 / 수행 조건의 구분이엇고.. 스레드에게 작업을
   시킨다는 것,병렬 처리의 필요성과 순차적 의존에 대한 한계등.. 대해서도 여러가지 깨달음이 있었음..  
    글고 PrintWriter(system.out) .. 그리고 오토 플러쉬.. 머리에 담아 뒀었는데.. 실제로 시행착오를 겪었고.. 
    디버깅해서 원인을 찾고.. 뒤통수 한대 맞은 기분이었음..OTL

2. 기존 nio 계획중 모든 기능 구현이 아닌, 우선 간단한 버전 (채널및 셀렉터 사용, 다이렉트 버퍼 사용)
   으로 다중 (63명) 채팅 룸 하나 구현. (한마디로 셀렉터 하나만 사용하겠다는 의미 클라1개,서버 2개) (오늘중으로 처리 가능)

3. 앞으로 db나갈 예정인데.. 쿼리에 대해 학습겸 해서..  간단하게 쿼리 생성 툴 만들 예정. (예전에 jsp
   교재 땜에 마구잡이로 구현은 해놨었음.)

  =>요걸 실전에 쓸수 있을정도로 만들라면.. ui는 대충 구현(swing사용)..  아주 복잡해질 reflect도 집어치우고..

   1.그냥 사용자가 클래스 이름(=테이블이름), 멤버 필드 타입,변수명 타입,변수명,(pk = 인스턴스 구분까지) ... 
     지정하게 하면 
   2.이클립스가 세터,게터 자동 지원하는 것처럼..  특정 필드 세터(update쿼리) , 게터(selecte쿼리)를 생성
     해줌 (=>xml 파일로 쏴주는 것도 간단할듯.. java.util.property 클래스 땡큐~
   3.복잡한 테이블간 or 행(row)간 or 열(col)간  where  xx and bb  join 등의 복잡한 연산은.. 접어둠


   vs  

   1. data define language : create , alter, drop  생성
   2. modify : insert, update, delete 생성
   3. query : select 
   로 구분하고.. 각 타입에 따라 패턴이 있을테니.. 고민해보고 만들어 봐도.. 

  vs row(레코드) 단위로 처리: delete 
      column(필드) 단위로 처리: insert , update, selete

결론: 관계형 db 만세~  테이블 = 클래스 , pk column & 하나의 row = 인스턴스 , 각각의 column = 클래스 멤버필드
   음.. 그리고 잘은 모르지만.. get,set,조회,정렬,삽입,삭제,생성,소멸등.. 복잡한 비지니스라는 것도 잘개 쪼개면.. 
   거의다 쿼리 단위로 쪼개질듯..  글고 클래스간 관계(association)도 fk를 통해서 표힌이 가능하고..하여간 db쿼리 공부겸 
   툴 만들기 늦어도 다음주 부터 시작. 

추가: 관계형 db의 한계.. 객체 지향의 interface , extends 등의 상속과, 해당 클래스와 메서드간 연결을 못한다. 
       그럼으로 POJO(Plain old java Object) 처럼 아무것도 상속 받지 않고, 겟,셋만 구현한 빈 클래스로 dao를
       만들어서.. 사용한다. 서버와 디비 사이단에.. 하이버네이트, 또 머가 있었드라..?

자바 ee5 : 애플릿 컨테이너 , 어플리케이션 컨테이너, 웹 컨테이너(jsp컨테이너로 jsp,서블릿 관리), ejb컨테이너,
      데이터베이스

--front end--
JAVA CLIENT LAYER (html,xml,css,기타등등.. view단에서 바로 db와 연결할라면.. JQuery=Ajax + html)
{
client tier :일반 어플리케이션 client , 다이나믹 웹 어플리케이션 client
}

--back end--  (jsp 등등)
JAVA SEVER LAYER (사용자=클라이언트의 요청(view)에 따라 컨트롤하여 비지니스 수행(control -> model = db쿼리작업)
{
web tier : jsp 페이지
business tier : EnterprizeBean A , EnterprizeBean B , ...
}

DATABASE LAYER
{
els tier : DB A , DB B ...
}

(etc)오늘 받은 jdbc 쿼리 문서중.. where 조건 연산자를 보니까.. 프로그래밍 언어의 조건(논리,비교) 연산자와는 조금 달리
    실제 비지니스에서 필요한 조건 연산(범위,테이블간(도메인)간 조인, 인스턴스(로우)간 컬럼간.. 등등)과 데이터 베이스의 
     무결성(not null)등등.. 그리고 제공하는 내장 프로시저의 경우.. api를 공부하듯 보면 될듯..
     아 글고 join 문(& 연산자 같음) 사용시 퍼포먼스 올리기 위해 "인덱스"를 사용하는 것이 좋습니다. 란 말이 있는데.. 예전에
     담배 피다 떠올린.. 숫자 중복 코드에서 배열의 인덱스 + 논리 연산자만 가지고 했을때 약 20배의 성능이 좋아 졌던 것과 
     유사한듯.. 
     그게 아니라도 최소한 문자열 비교보단, 숫자 비교가 빠르지..
     
     select = 컬럼(필드),컬럼,컬럼...
     from = 테이블,테이블,테이블...  
     where = 조건 & 조건 or 조건... 
     values = 값, 값, 값...
     
    말 그대로 if else 의 조합 + 게터,세터 아닌가..

    특정 부서의(테이블) 특정 이름 직원(컬럼일수도 있고 테이블일 수도 있고)의 연봉정보(테이블)를 알고 싶어요~  
    조인을 연산을 통해.. 추출하거나, 서브쿼리를 이용한다고 함. 

    채팅 프로그램에 db를 사용한다면;; p2p가 아니고 서버 브로드 캐스트 방식일때.. 해당 채팅룸의 모든 데이터를 db에
    남겼다면,..  xxx날짜에 채팅한 사람중 로그인,아웃 시간이(사용시간) 3시간이 넘고 여자면서 나이가 20~30대인 사람들
    의 데이터를 조회해주세요. 란.. 요청에 대해 어떻게 처리를 할것인가?  전부 and , between 조건으로 처리할 것인가?
    테이블을 멋지게 설계해두고 효율적인 방법으로 타겟을 좁혀 나갈것인가..


    오.. oracle sequence 란게.. 순차적으로 자동증가 하는 값을 생성하는 오라클 객체라네..  내가 오늘 채팅 구현할때
    쬐끔 신경쓰였던 것이.. 클라가 accpet 단에서 개별적으로 i/o스레드를 배정받는데.. 이 경우에 채팅에서 유저를 식별
    하기 위한 name or nickname or id를 어떻게 처리해야 할까였다. 왜냐하면 유저에 대한 아웃풋 스트림의 경우 다중 채팅
    임으로 모아둘(컨테이너를 포함하는 클래스) 필요가 있었고.. 식별을 일반 리스트처럼 인덱스의 경우는 별 문제가 없지만..
    , 셋or 맵 구조라면.. 중복되지 않는 키값이 필요했다. 내 경우엔 i/o 스레드 객체에 소켓 정보를 저장해두지 않고 인풋 스트
    림만 개별 스레드가 보관하는 방식이라.. 아웃풋 스트림을 모아둔 클래스에 서비스 메서드로 중복되지 않는 문자열을 만들게
    끔.. 초간단하게.. guest 란 기본 문자열에 number란 static 변수를 0부터  getUniqueName() 호출 시마다 return "guest" +
     num++; 요 딴식으로 구현했었다. -_-; (자동 증가 = 시퀀스라니까.. 떠올랐다;;)
     key&Object로 하냐..(물론 일반 프로그램이라면.. 클라쪽에서 어셉 요청
    (한마디로 서버주소 적은 소켓 객체 생성 성공) 

(etc2) java.sql.Connection , java.sql.Statement, java.sql.ResultSet, PreparedStatement 등등.. 내가 공부하고 있는 jsp
 교재를 보면서 한번씩 보고 이해하고 사용해봤던 클래스들이다.. 디비와의 통신(i/o스트림) 또한 자바라면 .. 소켓io,파일
 io와 거의 똑같이 설계했을 것이다. 스트림 생성-> i/o작업 -> 스트림 종료..  익숙해서 반갑다 ^_^//

 Class.forName()도 나오네..(reflect 개념에 속함.. 문자열에 매치하는 타입이 있으면 리턴) 내가 이번에 파일 매니저 만들면
 서 구현했던 팩토리 클래스도 xml에서 읽어올때 
 workerMap.put((String)entry.getKey(), Class.forName((String)entry.getValue())) 요렇게 했었는데..

 아.. 뒤에 보니까 드라이버 이름,db url,포트, 계정 이름, 비번등.. .. 약 한달전인가.. 오라클 12c 갈때 sid가 먼지도 몰랐던 때..
 도대체 왜 계정 생성이 안되는지.. 10시간 넘게 고민했었던 당시의 기억이 떠오른다.. 내 경운 11g 로 버전 낮춰서 초 간단하게
 계정 생성 성공.. (12가 먼가 복잡한 개념이 있었음;;)

  dbConnection.createStatement()도 눈에 익숙하고.. 정말로 jsp 책에 절하고 싶은 기분.. 리절트셋이니.. 트랜잭션이니..
  등등.. 리절트 셋의 개념도 잡아 주었고..커넥션 풀링의 개념은.. 책에서도 나왔었고.. 이번에 nio 서버 구현 공부를 하면서
  풀링에 대한 고민도 했었고.. 

  하핫.. 짧은 교재 벌써 다 봤네.. 조금 쉬었다가 nio 채팅 서버,클라 구현 GoGo!
    
(etc3)똥을 싸놓은 파일 매니저의 경우에.. 그 뒤에 꽤나 큰 수정이 있었다.. 허나 중요한 것이 아니기에 우선순위에서 밀림
   .. 다음주는 db쿼리 툴 , jsp 에 우선 순위.. 내 웹서버(정확히는 jsp 컨테이너인 톰캣아..스클립틀릿과 html들아 지못미..)


by givingsheart 2014. 1. 1. 16:41

혼자서 비트단위로 메모리 표시해가며 고민해봤는데..

(ex) 4byte짜리 int -1 의 경우 비트 표시    11111111  11111111  11111111  11111111
즉 1byte 단위로 끊어와도  11111111  <- 제일 첫비트에 1이 표시되어 음수 표현이 가능

여기서 잘못생각한게.. byte    vs  char 타입의 차이아닌가? <-- 바보?

while(!EOF) 이 의미는 while표현식 안의 값이 true , false를 정해주는건데..  !-1 ? -> 비트 전부 반전되니까 000000 이 됨으로 
0의 불린 표현은 false가 되어서..? 에구 헷갈린다..

byte = 0~255  = 256개  <---  byte도 -128~127 이닷!!!
char = 2의 8승 256개 중에 -128~0~127 = 256개 (논리상 중간에 -0 +0 이 있는데 이중 +0을 표시하는 비트로 0를 표현하고 -0은 
음수 표현에 사용)

잘못 접근한듯... 흠.. 쓸데없는데 시간낭비 그만!

(4byte 짜리를 1byte 단위로 쓴다는 것, 1byte 단위로 읽어 온다는 것 즉 상위 3byte는 0값으로 채운다는 의미.
텍스트 방식인 2byte 단위로 쓴다는 것, 2byte 단위로 읽어온다는 것 역시 상위 2byte는 0값으로 채운다는 의미.
그럼으로 -1인  11111111 11111111 11111111 11111111 될리가 없다.)


엉뚱한 고찰인듯하다.. 

by givingsheart 2014. 1. 1. 15:47

로또 번호(중복 되지 않는 6개짜리 숫자열)

 

예전에 중복 체크할땐

 

for(int i = 0; i<arr.length; i++)

{

    for(int j = i+1; j<arr.length; j++)

    {

        if(arr[i] == arr[j])

            isDuplicate = true;

     }

}

요런 식으로 접근했는데..

 

이걸 풀어서 (배열 이름과 연산자 우선순위는 생략)

if( ([0] != [1] && [0] != [2] && [0] != [3] && [0] != [4] && [0] != [5] ) &&

    ([1] != [2] && [1] != [3] && [1] != [4] && [1] != [5])                     &&

    ([2] != [3] && [2] != [4] && [2] != [5])                                        &&

    ([3] != [4] && [3] != [5])                                                            &&

    ([4] != [5]) )

  {

     isDuplicate = false;

  }

 

요런식으로 하면.. 과연 누가 더 빠를까?? (컴파일러가 첫번째걸 어떻게 최적화 시킬지 궁금)

테스트 GoGo!

 

*****************테스트 결과*******************

(처음엔 milisecond으로 받아봤는데 둘다 0이라서 nanosecon으로 변경 = 백만분의 1초가 단위)

 

첫번째 로직 경과시간:45450
두번째 로직 경과시간:2932

=>결론: 배열 첨자 연산은 cpu레지스터에 올라가 저장되고 다른 연산 없이 비교 연산만 반복해주면

           됨으로 엄청 빠르다??   근데 저따위로 풀어쓰면 ㅠㅠ

 

그만 놀고 공부;;;

 

public class main
{

 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  int[] n = {0,1,2,3,4,5};
  
  //시간 테스트
  A(n);
  
  B(n);
 }

 public static void A(int[] n)
 {
  //시작 시간
  long st = System.nanoTime();
  
  for(int i=0; i< n.length; i++)
  {
   for(int j=i+1; j<n.length; j++)
   {
    if(n[i] == n[j])
    {
     int a = 1;
    }
   }
  }
  
  System.out.println("경과시간:" + (System.nanoTime() - st));
 }
 
 public static void B(int[] n)
 {
  long st = System.nanoTime();

  if( ((n[0] != n[1]) && (n[0] != n[2]) &&(n[0] != n[3]) &&(n[0] != n[4]) && (n[0] != n[5])) && 
   ((n[1] != n[2]) && (n[1] != n[3]) && (n[1] != n[4]) && (n[1] != n[5])) &&
   ((n[2] != n[3]) && (n[2] != n[4]) && (n[2] != n[5])) &&
   ((n[3] != n[4]) && (n[3] != n[5])) && 
   ((n[4] != n[5]))
   )
  {
   int a = 1;
  }
   
  System.out.println("경과시간:" + (System.nanoTime() - st));
 }
}

 

by givingsheart 2014. 1. 1. 15:42

아주 단순하게.. 회원 관리 프로그램을 만들었다고 했을때.

 

사용자가 프로그램의 실행파일을 누르면

 

1.구동에 필요한 리소스들을 내 app로 읽어 들인다. (init,load등 startup)

 

2.사용자에게 서비스를 제공한다. (interaction -> update & run 기존 저장 기록(파일,db)등 load)

  a.신규 회원 작성

  b.회원 조회

  c.회원 정보 수정

  d.회원 탈퇴

  e.프로그램 종료하기.

 

3.서비스 종료e 수행시 기록을 파일 or db에 저장해야 한다. (close,write등 finalize)

 

=>1->2->3은 서로 순차적인 의존 관계에 있다.(물론 2->1->3 식으로도 가능하지만.. 3->1->2는 말이 안된다.)

 

(sol)데이터에 대해 이러한 순차적인 의존성이 있을땐 assert or try catch or if(! ) else 등으로 오류처리를 해준다.

 

=>사용자 입장에서 2에서 b회원 조회도중 해당 회원의 정보를 수정c or 삭제d 를 수행할수 있을 것이다. 또는 b회원 조회

도중 메인메뉴로 이동을 원하거나, 이대로 프로그램을 종료하길 원할 수 도 있을것이다.(내가 예전에 만들었던 View

(여러메뉴및 사용자와 인터랙션을 포함하는 awt의 하나의 컴포넌트 개념)들 사이의 이동을 관리및 컨트롤하는

SceneManager의 역할)

사용자의 비지니스->그에 따른 서비스별 관계성-> 그에 따른 서브시스템or클래스or메서드간 의존성은 설계를 복잡

하게한다. 난 이것을 단순화&구조화 시키는 솔루션에 대해서 조금 더 알아야 할것이다.

 

(etc)

=>그림을 화면에 그리는 것도 마찬가지다.. 디바이스(화면 출력용 메모리 관리자) 얻고, 초기화하고, 내가 뿌릴 이미지를

    연결하고, 업데이트하고, 화면에 그리고... 종료시 사용한 리소스들을 해제해주고.. (directx를 초 단순화 시킴) 결국

    개별적인 명령들의 순차적인 모임이다.

 

=>지역변수를 선언하고,할당하고,초기화하고,연산에 사용하고,해당 스택 종료시 자동으로 정리및 소멸되고.. 클래스도 타입

   (데이터+연산)을 정의하고, 내가 사용하겠다고 선언하고, 메모리에 할당하고, 생성자or setter를 통해 초기화하고, 작업을

   수행시키고, 모든 일이 끝났으면 가비지 컬렉터에 넘기거나, 혹은 조금 더 시스템상 상위의 역할을 맡는 클래스라면

   app의 종료와 수명주기를 맞추고.. 

 

 

by givingsheart 2014. 1. 1. 15:27
| 1 |