'Languages/Java'에 해당하는 글 9건

Spring Tool Suite 3.0.0.RELEASE

 

스프링 소스 툴 슈트(STS) 3.0.0 이 드디어 릴 됐다. 13일자 업데이트 내용을 참조하고 아래 주소에서 다운로드 받으면 된다. 약간은 심플하고 어찌보면 투박해 보이기까지 한 UI를 보여주고 있다.

물론 STS 이전에 eclipse 4.2버전에 맞추어 개발되었기 때문이겠지만, 항상 새로운 것을 접한다는 것은 설레이게 마련이다.

 

http://www.springsource.org/downloads/sts-ggts

 

Groovy / Grails 전용으로도 IDE를 만나볼 수 있다.

 

업데이트 사이트를 통해 업데이트도 가능해 졌다.

 

자, 이제 사용하기만 하면 된다. ㅋㅋ

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

servlet에서 outputstream을 사용하기  (0) 2012.07.19
자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

1. response.setContentType() 으로 파일의 MIME type 을 지정하여

browser가 받아들일 준비를 할 수 있게 한다.

 

response.reset();

response.setContentType("application/octet-stream");

 

2. getServletContext()ServletContext를 받아온 후,

getResourceAsStream()으로 파일에 대한 InputStream을 만든다.

 

3. response에 대한 OutputStream을 만들고,

 

4. buffer 역할을 하는 byte array를 통해서

stream 내용을 loop 으로 복제하고 flush 한다.

 

※ 이는 일반적인 링크 방식으로 GET 하지 않도록 막을 수 있다.

※ 각종 robot 에 의한 무분별한 GET 이나

※ role base와 같은 형태로 권한을 걸어줄 수도 있다.

 

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

Spring Tool Suite 3.0.0.RELEASE  (0) 2012.08.16
자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

"자바를 한번 해보자!" 라고 생각하는 개발자나 개발자이기를 희망하는 분들이 있다.

흔히 프로그래머라고 하면 까만 화면에 알아 볼 수 없는 텍스트 들로 컴퓨터와 대화를 하는 족속들을 떠올리기 쉽다.

막상 개발자가 되어보면 별 것 아닌 일이지만, 처음 보는 사람들에겐 무척이나 신기하고 어려워 보이는게 사실이다.

그래서 잠깐 시간이 난 사이 몇 가지 기초적인 이야기들을 해볼까 한다.

 

우선 자바는 이런거다~ 하고 시작하면 벌써 졸음이 오고 짜증이 밀려오는 분들이 있기에 화면에 뭔가 찍히는 것을 보고

'아 이렇구나~!'를 같이 느껴 봤으면 하는 생각에 몇 자 적어 보려고 한다.

 

몇 줄 안썼는데 벌써 뭔가 답답함이 밀려온다. ㅎㅎ 나만 그런가?

 

우선 코드부터 보자.

이쯤에서 생각나는게 자바는 컴파일 언어라서 바로 뭔가 보이지 않는다. 컴파일 하는 방법도 모르는 분들에게

죄송함이 밀려온다. 차차 그 과정도 설명해 보겠다.

우선 자바가 돌아가는 환경을 만드는 작업부터 설명하고 싶었는데, 그건 일단 미뤄야 겠다.

며칠 전 이클립스 버전도 4.2 버전이 출시되었고, STS도 3.0.0M 버전이 나왔다는데, 마일스톤 버전이라 정식

배포까지는 좀 기다려야 하나보다.

뭔 소리냐고 하시는 분들이 있을까봐 각설!

 

public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Hello, World!");

	}

}

 

우선 자바가 돌아가는 환경은 구축 되어 있다고 가정하고

(안되시는 분들은 여러 곳에서 검색을 통해 기본적으로 JDK나 jre정도는

설치를 해 주시길 바란다. 거기 위의 소스도 대강 정리는 되어 있을 것 같은데..

괜한 짓을 하고 있는 걸까? 암튼 ....)

 

자바는 텍스트(문자) 형태로 코딩을 한다. C나 C++도 마찬가지다.

한줄한줄 명령을 내리면 컴파일 과정에서 컴퓨터가 알아 듣는 코드로 바뀌고

우린 그걸 실행하는 것으로 컴퓨터와 대화를 한다.

 

위의 코드를 메모장이나 울트라 에디트 등의 편집기, 혹은 이클립스라는 개발툴을 이용해 타이핑 한 후,

HelloWorld.java 라는 이름으로 저장을 하자. 우선 하자!

 

자바는 대소문자를 구분하기 때문에 이를 무시하고 마구 때려 넣으면 성질을 낸다.

잘 보고 타이핑 해야 한다.

 

컴파일 방법은 간단하다. 윈도우 환경이라면, 그리고 패스 설정이 잘 되어 있다면,

윈도 환경에서 실행>cmd (엔터) 쳤을 때의 까만 화면에서 이를 컴파일 해 볼 수 있다.

컴파일 명령은 아래와 같다.

 

javac HelloWorld.java

 

정상적으로 컴파일이 되었다면, 실행을 해 보자.

실행 명령은 아래와 같다.

 

java HelloWorld

 

실행하면 아래와 같이 나온다.

 

Hello, World!

 

모든 개발자들이 여기부터 시작했다는 것을 잊지 말기 바란다.

 

여기까지 잘 되었다면 이제 머리아픈 설명을 조금 덧붙이고자 한다.

 

- public class HelloWorld 의 의미 :

 

지금 만든 이 녀석은 클래스이고, 이름은 HelloWorld이며 어디서든

접근 가능하다는 뜻이다.

 

뒤에 붙는 {} 안에 그 내용을 적는다.

 

- public static void main(String[] args)

 

이녀석은 클래스 내부 어디서나 사용할 수있는 스태틱 메소드 이고 리턴값은 없으며(void) 이름은 main이고, 외부에서도 접근 가능(public)하다.

String이란 문자들로 이루어진 배열 형태의 이름이 args라는 인자를 가진다.

 

두 줄만 붙잡고 얘기했는데 겁나 머리아프다. 일단 무시하고 넘어가자. 클래스를 만들었고 그 안에 메소드가 있다고 그냥 알고 넘어가면 된다.

 

- System.out.println("Hello, World!");

 

화면에 Hello, World! 라고 찍으라는 명령이다. 물론 화면이 아니라 다를 곳이 될 수도 있다. 기본적인 출력 방향이 모니터이기에 모니터에

원하는 글씨가 찍혔다고 보면 된다.

 

 

 

 

 

 

 

 

 

 

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

Spring Tool Suite 3.0.0.RELEASE  (0) 2012.08.16
servlet에서 outputstream을 사용하기  (0) 2012.07.19
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

웹 개발자다 보니 애플리케이션 실행의 빈도가 매우 낮다.

 

그러다 보니 꼭 잊어버린다.

 

이클립스 or STS 에서 해당 프로젝트에 오른쪽 마우스 클릭 후,

 

 Properties > Run/Debug Settings > New > Java Application > OK >

 

Arguments Tab > VM arguments 에 다음을 추가

 

-Dfile.encoding=MS949

 

그 후 Apply ~ ! > OK !

 

잊지 말자.

 

잊었으면 찾아라도 보자. ㅜㅜ

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

servlet에서 outputstream을 사용하기  (0) 2012.07.19
자바기초(1) Hello World  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

Java API 모음

Languages/Java 2012. 6. 25. 21:48

자바 1.5 api 영문 : http://java.sun.com/j2se/1.5.0/docs/api/index.html
 
자바 1.6 api 영문 : http://java.sun.com/javase/6/docs/api/
 
자바 1.7 api 영문 : http://docs.oracle.com/javase/7/docs/api/index.html

 

스프링 2.5 api 영문 : http://static.springsource.org/spring/docs/2.5.x/api/index.html

 

스프링 3.1 api 영문 : http://static.springsource.org/spring/docs/3.1.x/javadoc-api/

 

그루비 api 영문 : http://groovy.codehaus.org/groovy-jdk/
 
Tomcat 5.5 Servlet api 영문 : http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html
 
Tomcat 5.5 Jsp api 영문 : http://tomcat.apache.org/tomcat-5.5-doc/jspapi/index.html
 
Tomcat 6.0 api 영문 : http://tomcat.apache.org/tomcat-6.0-doc/api/index.html
 
Tomcat 7.0 api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/api/index.html
 
Tomcat 7.0 Servlet api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html
 
Tomcat 7.0 Jsp api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/jspapi/index.html
 
iBatis dev api : http://ibatis.apache.org/docs/java/dev/
 
iBatis user api : http://ibatis.apache.org/docs/java/user/

 

자바 POI API 영문 : http://poi.apache.org/apidocs/

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

자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

아주아주 간단한 암호화 모듈을 하나 소개 합니다.

암호화 : 키 값을 정하고 정한 키값과 스트링을 입력해서 암호화된 스트링을

반환 받습니다.

복호화 : 키 값과 암호화 된 스트링을 입력하면 원래의 암호화 되기 전 스트링 값을 리턴 받습니다.

 

소스는 아래와 같습니다.

 

package enc;


import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Usage:
 * 
 * String crypto = SimpleCrypto.encrypt(masterpassword, cleartext)
 * ...
 * String cleartext = SimpleCrypto.decrypt(masterpassword, crypto)
 * 
* @author ferenc.hechler */ public class SimpleCrypto { private final static String HEX = "0123456789ABCDEF"; public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] result = encrypt(rawKey, cleartext.getBytes()); return toHex(result); } public static String decrypt(String seed, String encrypted) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(seed); kgen.init(128, sr); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); return raw; } private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public static String toHex(String txt) { return toHex(txt.getBytes()); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length()/2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue(); return result; } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2*buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } private static void appendHex(StringBuffer sb, byte b) { sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f)); } public static void main(String args[]) { SimpleCrypto cr = new SimpleCrypto(); // 암호화 Key 설정 String key = "EncTestByKimByoungKi"; try { System.out.println("Encryped ID1 : " + cr.encrypt(key, "tds")); System.out.println("Encryped PW1 : " + cr.encrypt(key, "1qaz@WSX")); System.out.println("Encryped ID2 : " + cr.encrypt(key, "tds_dev2")); System.out.println("Encryped PW2 : " + cr.encrypt(key, "dnsdud123!")); System.out.println("Encryped ID1 : " + cr.decrypt(key, "58544B468EE67EB87FF2A617FFB7D7C0")); System.out.println("Encryped PW1 : " + cr.decrypt(key, "C9D99D34BB00936FA1C0731D98873CE2")); System.out.println("Encryped ID2 : " + cr.decrypt(key, "4D7E7AD0670DC2FCD0E9D7D4C98008A8")); System.out.println("Encryped PW2 : " + cr.decrypt(key, "3DFB2746F3CBD8D87D7E239DD7ADBE4C")); } catch (Exception e) { e.printStackTrace(); } } }

이클립스 등에서 실행 해보면 간단한 암/복호화를 실제 해볼 수 있습니다.

 

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

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21
History of Java  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

EJB란?

Languages/Java 2012. 6. 21. 18:17

EJB란

EJB가 생겨난 배경

서버측에서 어플리케이션을 개발할 경우, 이하와 같은 문제가 있다.

・종래의 어플리케이션에서 필요로 하는 비지니스로직 뿐만 아니라, 시스템 서비스를 이용한 데이터베이스처리와 트랜젝션처리의 프로그램이
필요로 하기 때문에 어플리케이션의 개발에 시간이 걸린다.
・각각의 어플리케이션 서버에서는 독자의 API가 제공되고 있기 때문에 각사의 API를 사용해서 작성한 어플리케이션에는 이동성이 아니고 부품화가 곤란함

이같은 문제를 해결해서, 서버 어플리케이션의 생산성의 향상과 이동성을 실현하기 위해서 생겨난 것이 Enterprise JavaBeans(EJB)이다.

EJB의 개요
Enterprise JavaBeans(EJB)는 독립한 부품이 아닌, 미국 Sun Microsystems사가 제창한 규약이다.

EJB는 서버 어플리케이션의 개발을 용이하게해 다중다양한 Platform과 제품간의 이동성을 실현하기 위하여
이하와 같은 비지니스로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정하고 있다.

비지니스 로직을 탑제한 부품을 "Enterprise Bean"이라고 불린다. Database처리, Transaction처리등의 시스템 서비스를 이용한
로직을 감추고 있는 부품을 "컨테이너"라고 불린다.

EJB를 이용함으로 인해 개발자는 어플리케이션개발시에 비지니스 로직의 개발만 전념하는 것이 가능하다.

또, EJB의 한가지 특징은 Enterprise Bean의 "Deployment"를 행하는 것이다. Deployment를 행하는 것에는 Enterprise Bean은 컨테이너에
설치된 실행가능한 상태로 된다. Deployment를 행하는 것으로 인해 각사의 여러가지 EJB제품상에서 Enterprise Bean을 동작시키는 것이 가능하게 된다.

EJB에는 "deployment descriptor"에 의한 Enterprise Bean이 갖는 각종의 속성값을 지정하는 것이 가능하다.
deployment descriptor의 내용을 변경하는 것에서 Enterprise Bean의 소스 코드를 변경하는것이 아니고 각각의 환경과 니즈에 의한 운영환경을 카스타마이즈하는 것이 가능하다.

EJB의 도입효과
EJB에는 지금까지 설명한것과 같은 큰 2가지의 특징이 있다.
・어플리케이션 개발이 용이
・어플리케이션에서 이동성이 있다.

이것들의 특징을 활발히 함으로 인해서 서버 어플리케이션을 보다 빠르게 구축하는 것이 가능해 졌다.
이러한 EJB를 도입하는 것에 의해 서버 어플리케이션 개발의 생산성이 향상되어 서버 어플리케이션 개발 비용이 삭감하는 것이 가능하다.

EJB의 기본구성
EJB는 이하의 4개의 요소로 구성되어 있다.

1. Enterprise Bean
2. Container
3. EJB Server
4. Client Application

이 4가지 요소중 어플리케이션 개발자가 용이한 것은 Enterprise Bean과 client application의 2가지이다.

■Enterprise Bean
비지니스 로직을 실장한 서버 컴포넌트이다.
Enterprise Bean에는 이하의 2가지의 모델이 있다.
1. Session Bean
2. Entity Bean

"Session Bean"는 클라이언트의 대화처리를 실현하는 OBject이다.
"Entity Bean"는 Database에 격납된 레코드를 Object로서 뽑아내거나 격밥하기 위하여 이용하는 Object이다.

일반적으로는 클라이언트가 Session Bean을 불러 Session Bean이 Entity Bean을 불르는 것으로 데이터베이스에 접근을 행한다.

■Container
EJB서버와 Enterprise Bean의 중간에 위치해, 클라이언트 어플리케이션은 그 컨테이너를 경유해서 Enterprise Bean에 접근한다.
컨테이너가 데이터베이스처리와 트랜젝션처리등을 숨기기위해 개발자와 그것들을 의미하지 않는 어플리케이션을 개발하는 것이 가능하다.

■EJB Server
EJB서버는 컨테이너를 관리해서 EJB로서 필요한 시스템 레벨의 서비스( 데이터베이스 처리, 트랜젝션 처리등)을 실현한다.

■Client application
EJB에 준거한 클라이언트 어플리케이션이다.
Java Applet, Java Application, Servlet, JavaServer Pages(JSP) 베이스의 어플리케이션등이 있다.

Enterprise Bean의 기본동작

Enterprise Bean의 기본동작을 설명한다.

클라이언트부터 서버의 Enterprise Bean에의 접근은 컨테이너를 경유해서 행한다.
컨테이너는 Enterprise Bean의 대리가 되는 "EJB object"와, EJB object의 생성/삭제를 행하고 "EJB home"을 의미한다.
클라이언트는 컨테이너가 갖는 이 두가지 object를 통해서 Enterprise Bean에 접근한다.

이하의 클라이언트가 컨테이너를 통해서 Enterprise Bean에 접근할 때의 흐름을 나타낸다.

1. JNDI의 lookup메소드에서 EJB home을 검색한다.

2. 클라이언트가 습득한 EJB home에 대해서 create 또는 find메소드를 호출하면 컨테이너가 Enterprise Bean의 대리 object에 있는
EJB object를 생성한다. 이 때, 컨테이너 내부에는 실제로 비지니스 로직이 갖춰져있는 Enterprise Bean의 인스턴스가 생성된다.

3. 클라이언트는 Enterprise Bean의 대리가 되는 EJB object의 비지니스 메소드를 호출한다. 컨테이너가 그것을 중개해서
Enterprise Bean의 메소드를 호출한다.

실현환경
EJB서비스에는 EJB의 컨테이너라고 하는 개념이 포함되어 있다. 컨테이너는 EJB 어플리케이션을 넣기 위한 용기이다.
개발환경에서 작성된 EJB 어플리케이션은 전개된 후 서버에 전송하는 컨테이너에 설치하는 것에 의해 실행가능한 상태로 된다.
EJB어플리케이션을 전개하는 것을 "Deployment"라고 한다

 

출처 : http://blog.naver.com/sorrowx0311/110072060518

 

[보태기]

EJB에 대한 개념을 정리해 보도록 하겠습니다. 음.. EJB라고 하면 엔터프라이즈 자바 빈(Enterprise Java Bean)이라고 하는 건 다들 아시죠^^ 썰렁했나? 그런데 이말가지고는 EJB의 뜻을 해석 하기는 어려우실 건니까 분산환경, RMI등을 이해 한 후 EJB에 대해 알아 보기로 하겠습니다.

우선 EJB를 보시기 전에 자바 RMI라고 하는것에 대해 알아 보자구요, Java RMI는 Remote Method Invocation의 머리말을 딴 말인데 JDK1.1부터 자바에 내장된 기술입니다. Java 환경에서 Computer 간 또는 Program 간에 통신(객체를 주고 받을 수 있습니다)을 할 수 있는 기능을 제공합니다. 자바에 내장 되었다는 것은 CORBA, DCOM, EJB등은 통신을 대신 해주는 미들웨어(Middleware)가 필요한데(EJB를 사용하기 위해서는 이 사이트에서 강좌가 진행 중인 웹 로직, 웹 스피어등의 미들웨어가 필요하다는 겁니다.), RMI는 이미 JVM에서 지원을 한다는 이야기죠… 제 생각엔 분산 시스템 환경을 구축하는데 간단한 것이라면 RMI를 추천 합니다. 그리고 미들웨어라는 말이 자주 보이는데 이것은 분산 환경에서 애플리케이션들이 연결되어 서로 데이터를 교환할 수 있게 해 주는 Software정도로 보시면 되겠습니다.

객체 지향의 개념에서 프로그램이 객체들 간의 메세지 전송으로 실행 된다는 이야기를 많이 보셨을 겁니다. 그런데 만약 그 객체들이 서로 다른 컴퓨터에 존재한다면 어떨까요? 과거 분산 시스템은 서로 다른 프로그램들이 다른 컴퓨터에 존재하고 실행되는 것이었는데 최근의 객체 지향에서는 각 객체가 분산되어 존재하는 개념인 것입니다. 그래서 서로 통신을 하는데 다른 컴퓨터에 있는 객체의 메소드를 호출 한다든지 또는 객체들도 던졌다 받았다 한다는 것이 RMI 입니다.

분산컴퓨팅, 분산객체에 대한 개념에 대해 정리하면 아래와 같습니다. 물론 Java Network 강좌에 나와 있는 내용 입니다.

분산 컴퓨팅 이란? 네트워크에서 서로 다른 시스템 간에 응용 프로그램을 분산해서 처리하는 환경을 말합니다. 즉 하나의 컴퓨터에 존재하는 Application이나 프로세스에서 스스로 처리하거나 수행하기 어려운 작업을 다중 프로세서나 컴퓨터에 분산 시키는 것입니다. 분산 컴퓨팅을 적용한 Application을 Distributed Application 이라고 합니다.

분산 객체 (Distributed Object) 란? 분산 컴퓨팅 기술이 객체 지향과 접목되어 하나의 프로세서나 컴퓨터에서 실행되는 객체가 다른 프로세서나 컴퓨터에서 객체와 통신이 가능 하도록 하는 기술이 분산 객체 기술이며 분산 객체란 자신이 존재하는 런타임 환경과는 다른 런타임에 있는 객체와 통신이 가능한 객체 입니다.

이제 EJB로 돌아와서 개념을 정리해 보죠… EJB는 대규모 분산 객체 시스템을 구축하기 위한 기술 또는 자바로 서버 측 비즈니스 로직을 작성하기 위한 Enterprise 환경에서의 자바 표준이라고 보시면 됩니다. 흔히 프리젠테이션 로직이라고 하는 것이 화면에 보여지게 되는 정보의 타입, 포맷을 자동으로 처리하는 반면 비즈니스 로직은 급여계산 한다든지 하는 보이지 않는 어떤 처리를 하는 겁니다. 만약 EJB를 사용하기 위해 웹로직 서버를 이용한다고 하면 프로그램 개발자는 웹로직 서버의 컨테이너를 이용하여 작업을 하게 되는데 이는 트랜잭션의 지원, 보안, 동시 접근 처리 등 비즈니스 로직을 처리하는데 있어 필요한 모든 것을 제공 한다고 보면 됩니다. EJB는 엔티티빈, 메시지 드리븐 빈, 상태유지 세션 빈, 비상태유지 세션 빈등 4가지의 타입이 있으며 아마도 오라클자바에 오시는 여러 분들은 수준이 높아 공부하시는데 크게 어렵지 않으리라 생각 됩니다. ^^ EJB는 명세, 스펙만 잘아시면 쉽게 공부 할 수 있습니다.

EJB에 대한 이해를 위해서는 앞서 설명 한 분산 환경, 분산 객체, RMI등을 잘 알고 있어야 합니다. 그래서 RMI의 기초가 부분에 대해 부족하시다고 생각이 드는 분은 Java Network의 RMI강좌중 HelloWorld를 따라해 보시고 오시기를 부탁 드리구요, JSP, Servlet등도 공부를 하시기 바랍니다.

EJB기술을 이용하면 다른 곳에 떨어진(원격의) EJB서버 메모리에 떠 있는 클래스를 참조할 수 있습니다. 다시 말씀 드리면 그 클래스의 메소드를 호출 할 수 있다는 이야기 입니다. 즉 EJB도 내부적으로 컴포넌트의 통신을 위해 RMI를 사용 한다는 겁니다. 그리고 분산 환경이라고 무조건 EJB를 쓰시면 큰일 납니다. 미들웨어 구입을 위한 비용은 둘째 치더라도 EJB는 추가적인 overhead가 있으므로 성능 향상을 위한 EJB 보다는 안정성, 재사용 가능한 시스템, 프리젠테이션 영역과 비즈니스 로직의 분리, 신뢰성 있는 N-Tier 환경, 분산 환경이 꼭 필요한가 등을 고려하여 사용 하는 것이 바람 직 합니다. EJB를 사용하기 위해서는 전용 서버(미들웨어)를 사용해야 하는데 SUN에서 제공하는 J2EE서버의 경우 거의 실무에서는 쓰이지 않으며 주로 웹로직, 웹스피어 등을 이용하셔서 개발을 하게 됩니다.

[위키백과]

엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.

EJB의 종류

  • 세션 빈 (Session Bean)
  • 엔티티 빈 (Entity Bean)
 데이터베이스의 데이터를 관리 객체

- Insert(삽입), Update(수정), Delete(삭제), select(조회) - DB관련 쿼리는 자동으로 만들어지고 개발자는 고급업무처리에 집중 - DB가 수정되면 코드수정없이 다시 배포(설정문서 만들어서 복사)

  • 메시지 구동 빈 (Message-driven Bean)

이상입니다.

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

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25
POJO란 무엇인가?  (0) 2012.06.21
History of Java  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

출처 : 토비의 스프링 3.0(책/도서)



POJO란 무엇인가?

스프링 애플리케이션 개발의 핵심인 POJO를 좀 더 자세히 알아보자. POJO는 Plain Old Java Object의 첫 글자를 따서 만든 약자이다. 최근 몇 년간 자바에서 유행어처럼 사용되고 있는 이 단어는 마틴 파울러(Martin Fowler)가 2000년에 컨퍼런스 발표를 준비하였다가 만들어낸 용어라고 한다.


그런데 POJO라는 용어를 만들어낸 이유가 재미있다.


마틴 파울러는 당시 인기를 끌고 있던 EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것보다는 자바의 단순한 오브젝트를 이용해 애플리케이션의 비즈니스 로직을 구현하는 편이 낫다고 생각했다. 그럼에도 왜 개발자는 자바의 단순한 오브젝트를 사용하길 꺼리는지 궁금했다. 그 이유를 찾아보니 평범한 자바오브젝트에는EJB와 같은 그럴싸한 이름이 없기 때문이었다. 그래서 뭔가 있어 보이도록 만든 이름이 바로 POJO였다. 같은 설명이지만 그냥 "간단한 자바오브젝트를 사용하는데요"라고 말하는 것보다는 "POJO 방식의 기술을 사용합니다."라고 하면 왠지 세련되고 첨단기술을 쓰는 것처럼 느껴진다는 심리를 이용한 것이다. 평범한 자바오브젝트에 멋진 이름을 붙여줬던 시도는 기대 이상으로 성공적이었다.


단지 POJO라는 폼 나는 이름 떄문만은 아니겠지만, 아무튼 그 이후로 POJO 프로그래밍에 관한 개발자들의 관심이 놓아졌고 POJO를 지원한다는 걸 장점으로 내세우는 많은 프레임워크와 기술이 쏟아져 나오기 시작했다. 심지어 EJB조차 3.0에서는 기존의 문제점을 반성하고 POJO프로그래밍의 장점을 적극 도입하려고 했다.

출처 http://en.wikipedia.org/wiki/Plain_Old_Java_Object

In computing software, POJO is an acronym for Plain Old Java Object. The name is used to emphasize that a given object is an ordinary Java Object, not a special object, and in particular not an Enterprise JavaBean. The term was coined by Martin Fowler, Rebecca Parsons and Josh MacKenzie in September 2000:

"We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it's caught on very nicely."[1]

The term "POJO" is mainly used to denote a Java object which does not follow any of the major Java object models, conventions, or frameworks such as EJB. The term continues the pattern of older terms for technologies that do not use fancy new features, such as POTS (Plain Old Telephone Service) in telephony, and PODS (Plain Old Data Structures) that are defined in C++ but use only C language features, and POD (Plain Old Documentation) in Perl. The equivalent to POJO on the .NET framework is Plain Old CLR Object.

 


결론, 그냥 자바다.

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

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21
History of Java  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

History of Java

Languages/Java 2012. 6. 21. 18:06

자바(java) 언어는 텔레비젼, VCR, 토스터기 등 백화점에서 살 수 있는 다른 종류의 기계들과 같은 전기 장비들의 사용자들을 위한 소프트웨어 프로그램을 개발하는 연구 프로젝트의 일환으로 1991년 SUN 마이크로 시스템에서 개발되었습니다. 그 당시 자바(java)의 목표는 폭 넓은 하드웨어 장비들에 대하여 작고, 빠르고, 효과적이고, 이식성을 좋게 만드는 것이었습니다. 이러한 장점을 이용하여 자바(java)언어를 월드 와이드 웹을 통하여 실행 가능한 프로그램들을 전달하기 위한 이상적인 언어로 만들었고, 상이한 시스템 환경상에서 쉽게 사용할 수 있고 이식성이 뛰어난 프로그램들을 개발하기 위한 범용의 목적에 적합한 개발언어로 만들었습니다.

자바(java)는 그 이름에서 부터 여러 가지 사연을 담고 있는 언어이다. 초기 개발 당시 개발 팀장인 제임스 고슬링에 의해 '오크(Oak)'라는 이름으로 탄생했는데, 이것은 당시 자바개발팀의 사무실 밖에 있는 커다란 나무의 이름을 따서 지은 것이라고 합니다. 하지만 이를 사용하려고 할 때 이미 오크라는 이름이 다른 곳에서 사용되고 있어서 새로 붙여진 이름이 자바(java)이다. 그러나 공식적으로는 월드 와이드 웹(World Wide Web, WWW)에 적용되어 1995년 선월드 '95에 출품될 때 비로소 지금의 자바(java)라는 이름을 갖게 된 것입이다.
자바(java)는 자바개발팀의 핵심 인원인의 첫 글짜를 의미하기도 하며, 인도네시아산 커피 원료의 이름이기도 합니다. 자바(java)는 한 마디로 말해서 C나 C++와 같은 컴퓨터 프로그래밍 언어입니다. 즉, 일종의 응용 프로그램을 작성하는 도구인데, 기존의 프로그래밍 언어로 작성한 응용 프로그램과는 그 사용법과 수행 환경에 많은 차이가 납니다. 지금까지의 프로그래밍 언어들이 주로 자신 의 PC에서 프로그램을 만들고 수행시키는 방향으로 주안점을 둔 것에 반해, 자바(java)는 현재 전세계 사람들의 초미의 관심사인 인터넷을 환경으로 프로그램을 만들고 수행시킬 수 있는 응용 프로그램을 만드는 언어인 것입니다.
물론 기존 프로그래밍 언어로써의 특성도 모두 간직하고 있다는 점에서 자바(java)의 활용분야가 가히 상상할 수 없이 폭넓어진다는 것입니다.

"자바(java)를 배울려면 무엇을 준비해야 하나요?"

따로 준비해야 한다는 것은 없습니다.

다만 학습효과를 증대시키기 위해서 C를 먼저 배우는 것이 좋을 뿐입니다.

물론 둘다 배워야 한다면 순서를 정하는 것일뿐이지요...

자바(java)만 배우려면 먼저 자바(java) 관련서적을 읽은 후 자바(java)전문 교육센터에서 배우는게 수월 할 겁니다.

어느정도 프로그래밍 언어에 익숙해져 있다면 독학도 가능하지만...

처음 시작하는 입장에서는 자바(java)에 대해 빠르고 정확한 그리고 바탕이 되는 기본지식을 흡수하는데 더 탁월하기에 자바(java)전문 교육센터를 추천하는 겁니다.

그리고 모르는 부분에 있어 해결해 나가기가 독학보다는 빠르죠...

C언어 알아야 하나요?

위에서 설명 했다시피 꼭 알아야 할 필요는 없습니다...

단지!!! 자바(java)를 이해하는데 도움이 될뿐입니다.

자바(java)언어의 특장점.

자바(Java)는 한번 작성한 코드가 다양한 형태의 플랫폼에서 작동하게 해주며, 자바(Java)프로그램 한가지로 일반 PC나 다양한 네트웍 환경에서 동작하는 애플리케이션의 작성이 가능합니다. 자바(java)자격증 취득후 SI업체의 소프트웨어 개발자나 다양한 종류의 자바(Java) 프로젝트에 참여할 수 있으며, 국내 대기업들의 경우 자바(java) 자격증 취득자를 경쟁적으로 확보하려는 경향이 있고 최근에는 웹 관련 프로그램 개발부분에서 자바(java) 자격증 보유자의 수요가 늘고 있는 실정이라 그 전망은 아주 밝습니다.

자바(java)는 크게 3가지 계열로 볼 수 있습니다.
J2SE, J2EE, J2ME...

J2SE 계열은? 자바(java)의 개발자 계열이라 생각 하시면 됩니다.
J2EE 계열은? 자바(java)의 웹 어플리케이션 계열로 나뉩니다.
J2ME 계열은? 자바(java)의 모바일 계열이라 생각하시면 됩니다.

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

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,