'분류 전체보기'에 해당되는 글 117건

  1. 2008.01.23 [Spring] BeanFactory와 ApplicationContext
  2. 2008.01.14 [Spring] AOP(Aspect Oriented Programming), 관점지향 프로그래밍의 이해
  3. 2008.01.14 [Struts] Action 에서 포워딩 시 parameter 넘기는 법
  4. 2008.01.12 [Spring] IoC(Inversion of Controll), 역행 제어의 개념
  5. 2008.01.07 버전을 항상 주의합시다.
  6. 2008.01.05 저의 비서를 소개합니다.(프랭클린 플래너와 파카 멀티펜) 2
  7. 2008.01.05 아이프레임 리사이즈 문제 해법
  8. 2008.01.05 멱등(Idempotent)
  9. 2008.01.05 Java API Map
  10. 2008.01.05 Head First Java (뇌 회로를 자극하는 자바 학습법)

 스프링 프레임워크는 IoC를 사용해 컴포넌트들을 관리한다. 컴포넌트간의 연관관계 등을 관리함으로써 객체를 명확하게 이해하고, 재사용이 가능하며, 단위테스트가 쉬워진다. 스프링은 이러한 컨테이너를 두가지 포함하고 있는데, 빈 팩토리와 애플리케이션 컨텍스트가 그것이다.

빈 팩토리기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너이다.
애플리케이션 컨텍스트는 빈 팩토리의 개념 위에 프로퍼티 파일을 해석하고 이벤트를 발행하는 등의 능력이 구현된 것으로, 대부분의 경우 애플리케이션 컨텍스트를 많이 사용한다.

빈 팩토리는 org.springframework.beans.factory.BeanFactory 인터페이스로 정의 되고, 스프링 안에 많은 구현 클래스들이 존재한다. 그중 org.springframework.beans.factory.xml.XmlBeanFactory 가 가장 유용하다. 사용법은 아래와 같다.

BeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));

이 코드는 빈에 대한 정의만 읽어올 뿐 인스턴스화 하지는 않는다. 빈 자체가 필요하게 되기 전까지 인스턴스화 하지 않는데, 이를 "늦게 로딩(lazy loading)"된다고 말한다.

빈을 얻어오기 위해서는 다음과 같이 코드를 작성한다.

MyBean myBean = (MyBean) factory.getBean("myBean");

getBean()에 의해 팩토리는 의존성 주입을 통해 빈을 인스턴스화 한다.

애플리케이컨텍스트는 org.springframework.context.ApplicationContext 인터페이스로 정의되고, 구현 클래스들 중 일반적으로 사용되는 세 개는 다음과 같다.

ClassPathXmlApplicatoinContext : 클래스 경로에 있는 xml파일로부터 로딩
  예) ApplicationContext context = new ClassPathXmlApplicatoinContext("c:/config.xml");

FileSystemXmlApplicationContext : 파일 시스템에 있는 xml파일로부터 로딩
  예) ApplicationContext context = new FileSystemXmlApplicationContext("config.xml");

XmlWebApplicationContext : 웹 애플리케이션에 포함되있는데 xml파일로부터 로딩


 애플리케이션 컨텍스트는 싱글톤 방식으로 빈을 관리한다. 즉 컨텍스트를 시작시킬 때 모든 빈 들을 미리 로딩한다. 싱글톤 빈을 미리 로딩함으로써, 그 빈이 필요할 때 즉시 사용될 수 있도록 해준다.


이 글은 스프링노트에서 작성되었습니다.

작업노트/Framework l 2008. 1. 23. 16:29

 관점지향 프로그래밍.


정말 지친다, 지쳐.

왜 이렇게 용어를 어렵게 만들어놨는지..;

각설하고

관점지향 프로그래밍 역시 별거 아니였다(라고 말할 수 있는 입장은 아니지만;)

나같은 초보 분들께 드리고 싶은 말은.. 용어의 압박감으로부터 벗어나라!(머 이런 뜻이였음.)


관점을 지향한다... 여기서 관점은.. 스프링에서의 관점은 글쎄... 시점이라는 표현이 더 적절치 않나 싶다.

어떤 '시점'에서 Aspect들이 실행되야 하는지가 중요한 관건인것 같아서이다.

(관점이라는 말은 보편적으로 '사물을 보는 시각' 따위로 쓰이는데 관점지향.. 이해만 어려워진것 같다.)

에스펙트는 '스프링인액션'의 번역본에 따르면 횡단 관심사의 기능이라고 되어있다...

(정말... 용어들이 갈수록 과관이다..횡단;; 관심사라;;;)


요점 부터 말하자면;;; AOP는 개발자가 비즈니스 로직에만 집중할 수 있도록

기타 시스템에 관한 서비스(로깅이나 트랜잭션 관리)들을 분리해 놓는 것이다.

즉, 여러 영역에서 '중복'될 수 있는 시스템 관련 코드들을 한곳에서 관리하여 중복도 줄이고

더이상 로직구현이 아닌 부분에 대해서는 개발자가 신경을 쓰지 않도록 하는 것이 취지이다.

(정말 필요하다. 웹 플밍으로 전향하고서 느낀 점인데.. 이 쪽은,

실제 프로그래밍 보다 '기타등등(계층간 설정, 버전 궁합 등)'들에 더 많이 신경써야하는 것 같다..)


다시 쉽게 말해서 로깅 같은 것들을 따로 로그 클래스로 만들어서,

메소드의 시작 전에 호출을 할지 메소드 후에 실행시킬지,

아니면 두번 다 실행시킬지 등등을 xml 설정으로 쉽게 관리 할 수 있게 해주는 것이다.. IoC 개념으로 말이다.

(그래서 시점지향이라고 하는게 맞지 않나..싶다. 왜 관점이어야 하는지 아시는 분은 답글 부탁드림.)


(다음은 AOP관련 용어 설명)

여기에서  로깅(로그를 하는 행위, 기능)이 aspect이고 로그 클래스(실제 구현물)가 advice(충고)이다.

그리고 '애스펙트'를 집어넣을 수 있는 지점들, 즉 메소드, 예외 등이 joinpoint(결합점)가 되고,

실제로 '결합점' 중에서 한 곳에 '충고'를 적용시키면, 그곳이 pointcut(교차점)이 된다.

target(대상)이란 '충고'를 받는 클래스, 즉 pointcut을 포함하는 클래스를 '충고'의 target이라고 말하고

proxy(프록시)는 '대상' 객체에 '충고'가 적용된 후 생성되는 객체를 말한다.

또한 기존의 클래스에 새로운 메소드나 속성을 추가할 수 도 있는데 이는 introduction(도입)이라 부른다.

weaving(엮기)는 애스펙트를 타겟에 적용하여 새로운 프록시 객체를 생성하는 과정이다.

이 '엮기'는 런타임시 어떤 시점에 '엮이게' 하는 것이 일반적이고,

컴파일시, 클래스 로딩시에 '엮을' 수도 있는데 이런 경우 각각 특수 컴파일러와 특수 ClassLoader가 필요하다.

 (헥헥..)


그렇다면 cross-cutting concern(횡단 관심사)란 무엇이냐.. 다음 그림이 크로스 커팅 컨썬이다.-_-

(여기서 또 횡단 관심사의 '관심사'가 왜 '관심사'여야 하는지 모르겠다. 그냥  횡단 기능 등이라고 했으면 이해가 더 쉬웠을텐데..

초짜들에게 혼란만 가중시키는 잘못된 역이 아닌가 싶다. 너무 직역을 해야한다는 압박감을 가진 모양이다. 역자님께서..

혹시 '관심사' 여야 하는 이유를 아시는 분은-_- 댓글부탁.)


사용자 삽입 이미지


코스와 학생, Misc(??) 의 각각의 영역에서 모듈들이 서비스를 제공할때,

이 모듈들은 보안기능 또는 트랜잭션등을 포함하고 있다 치면,

이런 것들은 공통적으로 사용되는 기능들일 것이다.

이론 공통적인 부분을 재사용하기 위해 일반적인 객체 지향 기법으로는 상속이나 위임으로 해결할 수 있는데,

상속을 하게 되면, 객체의 계층도가 무너지고,

(생각해보라. 다이어그램을 그리는데 전혀 관계없는 객체들이 곳곳에서 한 클래스를 상속하면..;)

 위임을 사용하면 번거로워 지며, 위임한 객체에 대한 중복 호출을 필요로 한다.

그래서 AOP를 사용하는 것이다.

AOP를 적용하면 공통 기능을 한 곳에서 정의할 수 있고 그런 기능을 어디에 어떻게 적용할 것인지를 선언적으로 정의할 수 있다.



이 글은 스프링노트에서 작성되었습니다.

작업노트/Framework l 2008. 1. 14. 23:43


struts-config.xml에서의 설정으로는 동적으로 바뀌는 파라메터를 넘겨줄 수 없다.

그래서, 액션 클래스에서의 특별한 처리를 요구하는 데, 다음중 한 방법을 사용하면 된다.


  1.  ActionFoward 객체 직접 생성

    다음과 같이 ActionForward객체를 생성하여 리턴한다.
    return new ActionForward("/index.html?param=" + paramValue, true);

    파라메터가 많을 경우 코드가 지저분해지고 번거러울 수 있다.


  2. ActionMapping객체를 통한 ActionFoward객체 생성

    대부분의 경우 이같은 방법으로 포워드시킨다.

    excute() 메소드에서 전달 받은 ActionMapping 객체를 이용한다.
    ActionForward forward = mapping.findForward("success");
    ActionForward redirect

    = new ActionForward(forward.getName(), forward.getPath()
    + "?param=" + paramValue, true );

    return redirect;


  3. ActionRedirect 클래스 활용

    org.apache.struts.action.ActionRedirect 클래스를 import시켜서 사용한다.
    ActionRedirect redirect = new ActionRedirect( mapping.findForward("success") );
      redirect.addParameter("param", paramValue);
    return redirect;
    * 주의 : 이 방법은 struts 1.2.7 버전 부터 가능하다.



이 글은 스프링노트에서 작성되었습니다.

작업노트/Framework l 2008. 1. 14. 16:07

 IoC(Inversion of Controll)는 우리말로 제어의 역행 쯤 되시겠다. 그렇다면 제어가 역행됬다는 것은 무슨 뜻인가?

지금까지 객체를 생성하고 각 객체 간의 의존관계(생성하고 머 그런거)를 제어하는 권한은 우리 개발자들에게 있었다. 하지만 서블릿, EJB가 등장하면서 제어권이 서블릿과 ejb를 관리하는 컨테이너에게로 넘어가 버렸다. 개발자들이 서블릿과 ejb를 직접 생성하고 싶어도 이 객체들은 직접 생성하여 제어할 수 없고 객체 생성에 대한 제어권이 컨테이너에게 넘어가면서 객체의 생명주기를 관리하는 권한또한 컨테이너들이 전담할 수 밖에 없게 되었다. 제어권 역전 현상이란 바로 이것을 의미하며, 스프링도 컨테이너처럼 이런 현상(?)을 이용하고 있다. 즉, 스프링 역시 내부에 IoC개념, 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다.

스프링은 POJO(Plain Old Java Object : 개발자에 의해 생성/관리되는 평범한 객체 되시겠다.)를 관리하는 컨테이너 역할을 가지고 있다. 즉, 개발자에 의해 정의된 객체(POJO)들을 xml설정에 따라 애플리케이션 시작과 동시에 생성하고 관리하여 주기때문에(기본적으로 그러하다) 컨테이너의 기능상 장점과 POJO 만의 장점을 함께 누릴 수 있는 것이다.
이것이 스프링의 IoC, 역행제어이다.

다음 편에 계속..-_-

'역행 제어'
이 압박감 심한 단어 때문에 어려운 내용일꺼야 지레 겁부터 먹었는데
알고보면 역행제어란 그리 어려운 개념이 아니었습니다.
공부하면서 항상 느끼는 거지만
용어들... 너무 압박감이 심하네요ㅠ

이 글은 스프링노트에서 작성되었습니다.

작업노트/Framework l 2008. 1. 12. 10:49
작년에 처음으로 struts를 공부할 때,

그때는 넷빈즈가 아닌 이클립스로 열혈공부를 했더랬다.

그런데 망할.. struts를 실습좀 하려니 자꾸 not available 에러가 뜨는게 아닌가?

한 3일을 해맸나.. 결국은 넷빈즈로 갈아탔는데,

참 간편한 방법으로 스트럿츠 프로젝트를 생성할 수 있었다.

이 때 부터 넷빈즈를 좋아하기 시작했지.


아무튼 오늘...

회사에서 스트럿츠로 프로젝트를 돌리는데, 언젠가 본듯한 에러가.....

콘솔창을 보고 또 보다가 기억났다. 그 때 그 에러다-_-

뚜둥..

결국 회사분의 힘을 빌어 해결한 방법은.. 자바 1.4버전으로 빌드된 프로젝트를

5.0으로 리빌드 한 것.

버전문제... 그놈의 버전 문제였다.

일년 전 방황했던 3일이...
 
매우 안타까워지는 순간이였다...

그리고, 옆에 물어볼 사람이 있다는게 얼마나 소중한 가도 느꼈다.
작업노트/Developer's Diary l 2008. 1. 7. 20:57
앞으로 저와 최소 몇년은 동고동락할 저의 분신들입니다.

프랭클린 플래너 CEO와,

파카 인시그니아MF 멀티펜.
사용자 삽입 이미지

작년, 친한 선배한분이 취업선물로 플래너를 사주고 싶다고 골르라고 하더군요.
그래서 고른 녀석이 저녀석입니다.
컴팩 시리즈는 예전에 써봤었는데(잊어버렸음ㅠㅠ),
가지고 다니기엔 약간 부담스러웠던 기억이 있어서 CEO를 사야겠다고 마음먹었습니다.
얼만지는 생각하지 말라고 했지만;; 눈치를 안 볼 수 없잖아요?ㅎ
제일 싼 3만원대 바인더중에서 녹색이 들어있는 것을 찾다가 요놈을 골랐습니다.
(리필용지까지 6만원)

배송 온걸 보니 사진으로 봤을때 보다 더 맘에 들더군요^^

사용자 삽입 이미지


플래너가 생기고 나니 볼펜을 멀 꼽아야될까 고민이 되더라구요.
그냥 아무 멀티펜이나 꼽고 다닐참이였지만,
플래너에 어울리는 오래쓸 수 있는 펜을 꼽아야겠다는 생각이 들었습니다.

그래서 구매한 녀석이 파카 인시그니아MF 멀티펜.
3만 8천 약간은 부담스러운 가격이었지만
다 쓰고 심만 갈아끼면 되기 때문에(1000원),
초기에만 부담스러울 뿐 추가비용은 많이 들지 않습니다.

무엇보다도 맘에 드는건 무료 각인 서비스!!
무료로 글씨를 새겨주드라고요^^
애착이 더욱 가게끔 하네요 ㅎ

영문이름을 새길까 닉네임을 새길까 고민하다가 결국은 닉네임을 새겼는데요,
사실 영문이름을 새길껄 하는 후회가..ㅠㅠ

사용자 삽입 이미지


아무튼 앞으로 이 두녀석과 스케줄관리, 시간관리를 철저히 해볼 생각입니다.
돈을 많이 쏟아 부었으니 안할래야 안할수가 없겠죠? ^^

참고 - 구매한 곳.
 - 한국리더쉽센터(http://www.eklc.co.kr/www/shop/shop/mall_main.asp)
 - 베스트펜(http://www.bestpen.co.kr/)
Reviews l 2008. 1. 5. 17:10

How To Resize an IFrame to the Size of Its Contents Without Displaying Scroll Bars

Article ID : 278469
Last Review : November 23, 2006
Revision : 4.1
This article was previously published under Q278469

SUMMARY

In certain situations, you may want to resize an IFrame so that all of its document contents are visible, but no scroll bars are displayed on the page. This article describes how to do this.

Back to the top

MORE INFORMATION

To determine the size of the IFrame's contents, you must access the height and width properties of the underlying IFrame document. Because you only have scripting access to pages that are hosted in the same domain, you can only access the properties to the pages that are hosted within the same domain (for example, Cross Frame Scripting). Therefore, the source document of the IFrame must be from the same domain as the page that contains the IFrame.

The following code demonstrates how to resize an IFrame in this way. Create a new .htm document, and paste the following HTML code. In the SRC attribute for the IFrame, you must supply an HTML page from the same domain that the IFrame loads.

NOTE: This technique may not work correctly if there are absolutely positioned elements that are residing within the IFrame.
<HTML>
<HEAD>
<SCRIPT LANGUAGE=javascript>
<!--
function reSize()
{
	try{	
	var oBody	=	ifrm.document.body;
	var oFrame	=	document.all("ifrm");
		
	oFrame.style.height = oBody.scrollHeight + 
(oBody.offsetHeight - oBody.clientHeight); oFrame.style.width = oBody.scrollWidth +
(oBody.offsetWidth - oBody.clientWidth); } //An error is raised if the IFrame domain !=
its container's domain catch(e) { window.status = 'Error: ' + e.number + '; ' + e.description; } } //--> </SCRIPT> </HEAD> <BODY onload=reSize()> <iframe onresize=reSize() id=ifrm src=YOUR_PAGE_HERE></iframe> </BODY> </HTML>
This example uses try and catch to check for domain consistency, which are only available with Internet Explorer 5 and later. This error checking is included for illustration purposes and is not absolutely necessary; it only allows the script to fail gracefully.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, please visit the following Microsoft Web site:
https://partner.microsoft.com/global/30000104 (https://partner.microsoft.com/global/30000104)
For more information about the support options that are available and about how to contact Microsoft, visit the following Microsoft Web site:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS (http://support.microsoft.com/default.aspx?scid=fh;en-us;cntactms)

Back to the top

REFERENCES

For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
167796 (http://support.microsoft.com/kb/167796/EN-US/) PRB: Permission Denied Error Message When Scripting Across Frame
For more information about measuring element dimensions and locations, see the following Microsoft Developer Network (MSDN) Web site:
http://msdn.microsoft.com/workshop/author/om/measuring.asp (http://msdn.microsoft.com/workshop/author/om/measuring.asp)
For more information about developing Web-based solutions for Microsoft Internet Explorer, visit the following Microsoft Web sites:
http://msdn.microsoft.com/ie/ (http://msdn.microsoft.com/ie/)

http://support.microsoft.com/iep (http://support.microsoft.com/iep)

Back to the top

작업노트/HTML & Script l 2008. 1. 5. 13:01

멱등은 동일한 작업을 어떤 부작용도 없이 한 번이고 두 번이고 계속해서 할 수 있다.

멱등이라는 말은 여러가지 의미로 사용된다. HTTP/서블릿 환경에서 이 말은 동일 요청은 서버에 어떤 잘못된 결과를 야기하지 않고 두 번이상 이루어질 수 있다는 의미이다. 동일 요청은 동일 응답을 가져야 한다는 의미가 아님을, 요청으로 어떤 부작용도 발생하지 말아야 한다는 의미가 아님을 유의해야 한다.

HTTP 스펙 1.1에서는 GET, HEAD, PUT은 멱등이라고 정의하고 있다. 물론 개발자가 멱등이 아닌 doGet()을 작성할 수도 있지만 권장되지는 않는다. POST는 HTTP 스펙 1.1에 의하면 멱등이 아니다.

HTTP GET은 말 그대로 무엇인가를 서버로부터 가져오는 것이지, 서버에 수정을 가하기 위한 것이 아니다. GET은 HTTP 스펙에 따르면 멱등 메소드이다. GET은 어떤 부작용(bad side effect)없이 여러 번 실행할 수 있다.

POST는 반대로 멱등 메소드가 아니다. POST로 전송되는 몸체의 정보는 트랜잭션을 위한 것이면, 이는 되돌릴 수 있는 성질의 것이 아니다. 이런 이유 때문에 doPost()를 구현할 때 유의해야 한다.

-HEAD FIRST Servlet & JSP

작업노트/JSP & Servlet l 2008. 1. 5. 12:53
사용자 삽입 이미지
작업노트/JAVA l 2008. 1. 5. 12:50
 
사용자 삽입 이미지












신선한 책이다.

부제목의 문구대로 뇌 회로를 확실히 자극시켜준다.

웹쪽으로 진로를 정하면서 자바를 공부하기 위해 책을 고르던중,

재미있다는 서평들을 읽고 빨리 읽을 수 있을 것 같아 고른 책이다.

이런 이론서들은 대부분 지루하기 짝이 없다는 건 누구나 다 겪어봐서 잘 알것이다.

하지만 이 책은, 공부하다가 뇌의 구동이 멈추려 할때면 신선한 바람을 공급해준다.

읽어보면 알 것이다.

나는 끝까지 읽는데에 2주 정도 걸렸다.

(하루에 7-8시간씩 매달린것 같다. 매주 4일 공부했으니..64시간정도 걸린 듯)

책 구성이 색다르고 신선했기에 지치지 않고 공부할 수 있었다.

자바를 공부하고 싶은 사람들에게 정말 강추하고 싶은 책이다.

단, 플밍 경험, 객체지향의 개념이 조금이라도 있어야지 읽기에 수월할 것 같다.

가끔... 그런 부분들이 나온다.

작업노트/Books l 2008. 1. 5. 12:35
1 ··· 5 6 7 8 9 10 11 12 

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

카테고리

분류 전체보기 (117)
작업노트 (98)
거미줄세상 (12)
쌓기 (1)
책읽기 (0)
Reviews (4)

달력

«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
get rsstistory! Tistory Tistory 가입하기!