달력

5

« 2025/5 »

  • 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
2012. 2. 27. 18:22

Spring 에서 JSON 사용하기 I.lib()/I.lib(Spring)2012. 2. 27. 18:22

.. .. ..
우선 찾아본 바로는 spring에서 지원하는 json데이타 처리법에는 크게 3가지가 있다.( 물론 더 있는거같다)

1. http://www.ibm.com/developerworks/kr/library/wa-restful/index.html

메세지 컨버터를 이용한 방법.
응답 메시지를 json데이타로 컨버팅하는 방법이다.
젤 간단하고 광역적으로 쓸수 있다.

2. http://whiteship.tistory.com/2297

MappingJacksonJsonView 를 이용한 방법
이 방법은 세번째랑 비슷한데 Jackson에서 제공하는 json뷰를 쓴다는거만 틀리고 같다.
위에꺼랑 맞먹게 간단한데.... 좀더 불편한건 ModelAndView를 만들때마다 jsonView로 만든 뷰의 이름으로 생성해야 된다는거

3.
http://ultteky.egloos.com/10496535

그동안 자주 써왔던 json-lib를 이용한 방법이다.
jackson도 안되던 부분이 이놈 뷰를 쓰니까 됐다....슈발...
2번이나 똑같은데 단지 라이브러리 종류가 틀리다.

[펌] : http://msfury.tistory.com/117





------------------------------------------------------------------------------------------------------
3번 json-lib를 사용하는 방법

서버에서 클라이언트로 리턴할 오브젝트를 Json형태로 변환 하거나 또는 그반대로
Json 데이터를 해당 오브젝트로 변환하는 라이브러리가 필요 합니다. 그중에서
Json-lib를 사용 합니다 .
(해당 사이트에 접속하면 다양한 json 라이브러리를 다운 받을 수 있습니다. ).
여기서 최신 버전으로 다운로드를 받습니다.
다운로드 후 이클립스 프로젝트에
라이브러리를 추가 합니다.
웹 사이트 : http://json-lib.sourceforge.net/
다운로드 : http://sourceforge.net/projects/json-lib/files/
사용법은 해당 사이트를 참고 하시면 됩니다.
  • 스프링 전용 JsonView 다운 받기
아래의 사이트로 접속 후 화면 맨 하단을 보면 "json-lib-ext-spring" 가 있습니다.
거기서 최신 버전의 라이브러리를 다운로드 후 이클립스 프로젝트에
추가 합니다.
다운로드 : http://sourceforge.net/projects/json-lib/files/

  • JsonView 스프링 빈 설정
아래와 같이 JsonView를 빈으로 설정 합니다.
<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView"/>

  • ViewResolver 설정

JsonView를 인식 하기 위해서 "BeanNameViewResolver"를 설정 합니다.
WebApplication에서는 여러 Resolver가 존재 할수 있기 때문에
우선 순위를 "0"으로 설정해서 최우선으로 설정 합니다.
    <bean id="beanNameResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver"
p:order="0" />


  • Controller Code
아래의 코드를 보면 매우 평범합니다. 어떤한 라이브러리 참조도
없이 평소처럼 코딩 하면 됩니다. 모든 ajax 처리는 JsonView가
처리 함으로써 단지 JsonView가 선언된 스프링 빈 id를
ModelAndView의 "setViewName" 메서드에 선언만
하면 됩니다.


public final ModelAndView handlerRequest(final HttpServletRequest request,
final HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();

DummyMember dummyMember1 = new DummyMember();
dummyMember1.setId("xxxxxxx");

DummyMember dummyMember2 = new DummyMember();
dummyMember2.setId("yyyyyy");

List list = new ArrayList();
list.add(dummyMember1);
list.add(dummyMember2);

Map resultMap = new HashMap();
resultMap.put("result1", list);
resultMap.put("result2", dummyMember1);

modelAndView.addAllObjects(resultMap);
modelAndView.setViewName("jsonView");
return modelAndView;
}

※ 샘플 도메인
public class DummyMember {
private String id;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}


  • 결과 JSON 패킷

{"result2":{"id":"xxxxxxx"},"result1":[{"id":"xxxxxxx"},{"id":"yyyyyy"}]}

customizing이 필요하면 JsonView 클래스를 상속 받은 후에 "renderMergedOutputModel"
메서드를 override 하시거 아니면 직접 다운로드 사이트에서
소스를 받은 후에 수정 후 적용 하시면 됩니다.
.
:
Posted by .07274.
.. .. ..
[펌]       : http://open.egovframe.go.kr/projects/freediscussion/share/2610
[작성자] : 정지범 님

부재 :
이유 없는 "java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener" 을 더이상 보고 싶지 않은 개발자에게..

전자정부 표준프레임워크 기반을 프로젝트 수행 중에 개발환경에서 "java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener" 를 한번 보지 못한 사람은 아마도 없을 것이다. 필자역시 표준프레임워크 구축 프로젝트를 수행하면서 업무로직을 구현하고 집으로 칼퇴근 해야 할 아까운 시간에 WTP, Tomcat, M2Eclipse, maven 의 궁합에 대해 고민하는 무의미한 시간을 보내는 쓰디쓴 경험을 한 기억이 있다.


1. Eclipse Upgrage로 해결?

WTP, m2Eclipse로 고민하던 때… 처음으로 시도한 방법은 Eclipse 업그레이드!!
소프트웨어의 업그레이드는 막연한 기대감을 주는데.. 나도 그 유혹에 잘 넘어가는 편이라 문제가 발생하면 먼저 업그레이드 부터 생각한다. 전자정부 표준프레임워크의 개발환경 IDE는 Eclipse 3.4를 기반으로 개발되었다. 현재 Eclipse는 3.7 까지 릴리이즈 되었으니 상당히 구버전이라고 할 수 있다. 테스트는 Eclipse 3.6 에서 수행하였다.
먼저 프로젝트 생성 후 pom.xml에 표준프레임워크 관련 dependency를 설정하고 WTP, Tomcat으로 실행!! 역시 눈에 익은 오류가 보인다.

"java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener"

maven dependency에 설정한 라이브러리가 배포되지 않아서 발생하는 오류다. 이를 해결하기위해서 "프로젝트 선택 > 우클릭 > properties > Deployment Assembly 메뉴 > Add 버튼 > Java Build Path Entries > Maven Dependencies 선택" 을 한 후 다시 실행하였다. 성공!!

축배를 들고 싶었다. 여기서 더이상 시간을 쓰고 싶지 않았다. 하지만 이 방법은 치명적인 단점이 있었다. 그것은 maven dependency의 scope가 정상적으로 적용되지 않는다는 것이다.

maven은 dependency에 scope란 옵션이 있다. scope는 compile, provided, test 등이 있으며 의미를 가진다.
예를 들어 provided 의 경우, 컴파일 단계에서 클래스 패스에 추가 하여 사용되긴 하지만 배포 모듈에 포함되지는 않는다. 일반적으로 Java EE 의 API 클래스가 이런 옵션을 사용하게 된다.

Eclipse의 Deployment Assembly를 사용하는 경우, war안에 Java EE API가 포함되어 일부 WAS에 뜻하지 않는 오류가 발생하였다.

2. Maven & Jetty
고심끝에 두번째 방법은 WTP와 Tomcat을 버리는 것이었다. 또 한가지 알게된 것은 Maven이 eclipse가 없는 환경에서도 너무나 많은 일을 할 수 있다는 것이다. 유명한 오픈소스 apache camel은 배포 파일에 까지 포함해서 실행시 maven 명령어를 쓰도록 가이드 하고 있다.

WTP와 Tomcat을 대체할 maven의 플러그인은 바로 jetty plugin 이다. jetty 는 www.mortbay.org 에서 관리하는 오픈소스 servlet 컨테이너 이다. 워낙 경량형 이기도 하고 실행 모듈에 포함해서 서블릿 엔진을 따로 설치하지 않아도 사용할 수 있는 제품을 패키징 할때 포함하기도 한다. Google Appengine의 개발환경에서도 log를 통하여 jetty를 사용하고 있다는 사실도 주목할 만 하다.( App Engine에 흠뻑 빠진 요즘 구글이라면 항상 믿음이 간다. )

이러한 경량의 특성을 살려 maven plug-in으로서도 널리 사용된다. jetty maven 플러그인은 (http://docs.codehaus.org/display/JETTY/Maven Jetty Plugin)에서 사용법을 확인 할 수 있다.

적용방법

1. 먼저 전자정부 표준프레임워크 개발환경에서 수행중인 프로젝트의 pom.xml 을 연다.
2. <build> 설정에 아래의 플러그인 설정을 추가한다.

<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.2.2.v20101205</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<reload>automatic</reload>
</configuration>
</plugin>
</plugins>
</build>

3. "프로젝트 선택 > 우클릭 > Run As > Maven Build > Goal에 jetty:run 입력 > 확인 " 을 차례로 수행'
4. 웹브라우저 접속 "http://localhost:8080";
5. 성공!!

사실 이 방법은 실행 및 테스트에 있어서 Eclipse의 도움을 거의 받지 않는 방법이다. 이로 인해 integration으로 인한 자잘 한 오류에서 벗어 날수 있었다.
무엇보다도 maven의 특성이 정확하게 적용되는 것으로 인해 개발자 PC의 환경의 pom.xml이 개발서버에서도 일관되게 사용할 수 있어 Continuous Integration 적용에도 큰 도움이 된다.

참고 사이트 : http://docs.codehaus.org/display/JETTY/Maven Jetty Plugin
.
:
Posted by .07274.
.. .. ..

아우.. 이 그지같은 이클립스는 쉽게 멀 도와주질 않는다.

이클립스에서 메이븐 프로젝트 생성 ( 생성시 아키타입을 maven-아키타입-webapp 이런걸로 설정해서 생성)

이렇게 생성하고 tomcat 으로 add and remove 하면 생성한 프로젝트가 보이지를 않는다. 그지같다..

다이나믹 웹으로 쓰라는 것인지....

해결방법은 일단.

http://babtingdev.tistory.com/321

이곳에서 찾았다. 저렇게 하니까 된다.

근데

<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<wtpversion>2.0</wtpversion>
<wtpContextName>/</wtpContextName>
</configuration>
</plugin>



요부분을 그대로 바보같이 썼다.
안된다. 당연히 안된다.
<wtpContextName>/</wtpContextName>
이부분을 자기 프로젝트 이름으로 변경해주어야 한다 ;;

글을 잘 못읽은 내 죄지 ㅜㅠ

무튼 도움됬으면 댓글 달고 갑시다. 나도 어렵고 힘들었소~!
.
:
Posted by .07274.
2012. 1. 31. 19:08

MY SQL 계정 생성 I.lib()/I.lib(Mysql)2012. 1. 31. 19:08

.. .. ..
MY SQL 5.X 버젼 계정 생성

1.생성
INSERT INTO user VALUES('localhost', 'egov', PASSWORD('egov123'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y','Y','Y', '', '', '', '', 0, 0, 0, 0);

2. 권한
INSERT INTO db
        VALUES('localhost', 'egov', 'egov', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y','Y');

3. DB 생성
create database egov  DEFAULT CHARACTER SET utf8 ;;

4. 설정 재로딩
flush privileges;
.
:
Posted by .07274.
.. .. ..
알티베이스를 DBMS 로 사용한지도 꽤 된것 같다.
주로 대용량 데이터 처리 업무를 하는데 Altibase가 잘 따라와준 덕분인지 DBMS를 안바꾸고 계속 사용하고 있다.
하지만 역시 산재해있던 버그들로 고생했던것들을 생각하면 아직도 머리가 지끈지끈.. (Altibase 4 초기 버젼 사용때.)

Altibase 5가 나왔다고 들었다. 어떤 매체를 통해서였는지는 잘 모르겠지만 성능이 얼마나 향상되었는지 , 어떤 기능이 생겼는지 궁금하던 차에 마침 이메일로 이벤트 소식이 날아와서 덥썩 물고 신청했다..

1장 알티베이스 개념과 소개
택배로 책이왔다. 올컬러다.. 표지 디자인도 괜찮고 마음에 들었다.
"자~ 이제 HDB가 무엇인지 책을 펴볼까?"
라는 마음으로 책을 폈다.. 하이브리드를 H 라고 쓰는거 같은데 하이브리드가 모야?! 라는 마음으로 한참을 찾다가 두줄 나온것을 간신히 봤다.
"실시간 처리를 요청하는 데이터는 메인 메모리 영역을 이용하고, 대용량의 데이터 처리는 디스크를 이용함으로써 범용 DBMS로서의 기간계 시장을 공략하게 된다"
라고 써있다. 그림이라도 좀 넣어두지. HDB가 뭔지도 모르면 이책은 보지도 못한다는 건가?! Altibase 를 써본 사람이야 이해가 되겠지만 안써본 사람들은 저게 무슨소린지는 아려나;

2장 알티베이스 설치
메뉴를 보니 뭐가 많다.
2-1 알티베이스 DBMS 설치(GUI)
2-2 알티베이스 패치 설치(GUI)
2-3 알티베이스 DBMS 설치 (커맨드 라인)
무슨 설치를 이렇게 복잡하게 나눠놓은거지?! 패치 설치는 뭐지? (초보자라면 GUI가 모지?!) 라는 궁금증으로 일단 첫장을 넘겼다.
"패키지 설치의 개념이라..응?? 응~~??  으응???????? 뭐야 어디서 다운받으라는거야? 무슨소린지 하나도 못알아 듣겠다. 알티베이스 4는 설치가 초 간단하고 심플했는데 5는 뭔가 대단해진건가?! "
라는 생각을 잠깐 하고 보니 책 속에 딸려왔던 A4 용지 한장이 생각나 찾아보니 역시나 다운로드 방법에 대해 언급되어 있다. 나중에 책에 반영하려나 보지?!

서버에 FTP 로 파일을 내려받아서 실행을 하니 바로 설치가 된다. Linux 환경이라 GUI는 기대할수 없지만 심플하니 설치하기 편하다. 이것저것 설정에 대해서 물어보는데 모르면 그냥 Enter를 치면 설치가 되도록 해주는 배려심 ㅎ 책 또한 설정에 대해 보기 편하게 적어줘서 설치에 문제는 없었다.

3장 알티베이스 시작과 종료
isql -u sys -p manager -sysdba 를 시작하면 된다고 하는데 안된다.. 뭐가 문제인지 봤더니 ALTIBASE_HOME을 환경변수로 잡아줘야 한다. 책에도 있는데 조막만하게 써놓으면 내가 아나 ;
무튼 환경변수를 잡아주고(난 root 계정 설치를 했기때문에 root에 환경변수 설정함) 실행하니 된다.

글을 마치며
이제 계정도 만들고 테이블 생성도 해보고 환경설정도 변경해보며 이리저리 뚝딱 거려봐야 겠지만 그부분들은 차후 추가하도록 하겠다. Altibase 를 잘 아는 개발자라고 생각하고 덤벼도 생각보다 설치는 까다로우면서 편했다. (오라클 설치는 더 극악인지라..)
궁금사항은 댓글을 달면 아는 범위 안에서 열심히 설명해줄테니 물어보시고 오늘의 글은 여기서 마무리~!

2012-01-27 pm1 추가사항
책에 유져 생성/수정/삭제 에 대한부분을 못찾겠다.. 가이드북에는 원래 이런게 없는건가 ?! 책보다 검색을 통해 생성을 하는방법을 찾았다.
create user test identified by test123;
위만보면 무슨말인지 모르지.. 해석해서 밑에 쓴다면
create user 사용자 id identified by 패스워드;
이다. 이외에 테이블 스페이스나 부가적으로 이것저것 설정이 되는것 같은데 무슨말인지 잘 모르기에 패스
테이블 스페이스를 미리 생성해두고 유저 생성시 테이블 스페이스를 설정해두는 것이 순서에 맞는듯 하다.
뒷부분에 테이블스페이스를 생성하는데 설정을 따로 해주지 않는이상 테이블 스페이스 접근이 불가능하기에
유저 생성시 테이블스페이스 설정을 꼭 해준다 (안해주면 나중에 alter user 명령어로 수정은 가능하다만 ;;)

2012-01-27 pm2 추가사항
게시판을 만들어 보려고 작업중인데 생각보다 할일이 많다. 우선 테이블 스페이스에 대해서 공부를 해야되고 이후 생성을 해야되며 테이블 생성을 위한 스크립트도 만들어야 되고 시퀀스도 생성해야 되고... 생각보다 쉽지않다.
테이블 스페이스 생성 명령어
CREATE MEMORY TABLESPACE BOARD_TEST SIZE 256M;
시퀀스 생성 명령어
create sequence board_test_seq;

.
:
Posted by .07274.
.. .. ..

*Web 서버를 Tomcat에 설정하는 방법. (For Eclipse)

보통 서버의 개발서버나 실서버는 모두 APACHE 와 TOMCAT으로 구동이 된다.
그래서 APACHE 에는 htdocs 가 들어가고 TOMCAT 에는 IAIPWebApp 가 들어가게 된다.
하지만 개발중인 Eclipse 상에서는 Tomcat만 설정되고 Apache 가 설정되지 않기 때문에
임시방편으로 Eclipse 의  Tomcat의 server.xml 파일에는
아래와 같이 설정을 해준다.

<Host appBase="htdocs" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
      <Context docBase="htdocs" path="/" reloadable="true" source="org.eclipse.jst.jee.server:htdocs"/>
      <Context docBase="IAIPWebApp" path="/iaip" reloadable="true" source="org.eclipse.jst.jee.server:IAIPWebApp"/>
</Host>

Host 의 appBase는 설정을 안해주어도 상관이 없고
Context의 docBase와 path 을 주의하여 설정하면 된다.

.
:
Posted by .07274.
.. .. ..

Spring을 쓰는 이유.


10년전이야 몰라도 요즘 세상은 자바로 개발을 하게되면 스케일이 엄청나게 크다. 앞으로도 스케일이 점점 커지게 되고 그렇게 되면 프로젝트 규모도 커지게 된다.
이렇게 되면 많은 개발자들이 한 프로젝트에 달라붙게 되는데 많은 개발자들이 한 프로젝트에 붙어서 서로 분할하여 개발을 하다보면 분명 중복되는 부분도 많고 또 복잡해지고.. 비즈니스 로직은 점점 복잡해지지 요구사항은 점점 늘지...
스프링은 이런 개발을 편하고 알차게 하라고 만들어진 오픈소스 프레임 워크다.
(오픈소스 : 아무나 가져다 써도 되는 것을 의미)
(프레임 워크 : 좀더 개발하기 쉽도록 공통 클레스를 만들어 묶어놓은 것으로 생각하면 됨.)

어떻게 편하게일까?!

비즈니스 로직을 담은 애플리케이션 부분과 엔터프라이즈 기술을 처리하는 부분의 분리(뭐 단계별로 쪼갰다고 생각하면됨. 멋진말로는 모듈화?!) 등이 있다.
위의것 말고도 많은 편하게를 SPRING 이 제공하고 있다. 그걸 주저리 주저리 쓰면 백년이 걸리고 가장 보편적으로 책을봐도 인터넷 검색을 해봐도 나오는 편하게 해주는 것들이 있는데
Ioc, DI, AOP, (여기에 더하면 PSA도 있다.)
스프링이 JAVA 개발을 편하게 해주는 방법은 위가 전부다. 진짜루~

IOC 란

개발자는 JAVA 코딩시 New연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸시킨다.
IOC란 인스턴스(객체)의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가 하는 대신 스프링(컨테이너)이 대신
해주게 하는것을 말한다.
그럼 이런 의문이 생기겠지 . 이걸 왜 스프링 시켜 내가하면 되는데?!
천재적으로 코딩을 잘하는 개발자라면 쓰지 않아도 된다. Java 상으로 구현하면 되니까.. 하지만
Spring 의 목적에서도 봤듯이 스케일이 커져만 가는 요즘 세상에 그 많은 객체들을 깔끔하게 관리하기도 빡시고
또 자원을 잘 활용해야되는데 이걸 개발자가 하지말고 Spring 시키자!! 이런의미에서 Spring 을 쓰고 이게 IOC 다.
책이나 인터넷 이런곳에서 설명하는것은 좀더 추상적이고 그 말들이 정답이지만 알기 쉽게 설명을해야지 ;;
개념은 위 방식으로 이해하고 그 책들을 읽으면 좀더 이해가 될 것이다.

DI 란?

이건 가장 이해하기 쉬운 개념이다. 레고의 사람을 생각하면 바지를 막 바꿔 낄수 있다. 머리통도 바꿔낄수 있다. 팔에 막 무기도 쥐어줄수 있고 빼서 다른걸 낄수 있다. 이게 DI 이다.
JAVA 상으로 생각해보면 코드를 짜는중에 DB랑 접촉하는 부분(DAO) 이 있는데 생 JAVA로 짜는 사람도 있고(JDBC) iBatis , JPA 등의 프레임 워크를 이용해서 짜는 사람들도 있다. 이때 Spring 을 이용하면 그때마다 필요한 부분을 뺐다 꼈다할수 있다. 여기서 말하는 빼고 끼는것을 주입(인젝션?!)한다고 하는데 뭐 그런의미다. 이게 DI다 쉽게 뺐다꼈다 할수 있는것..

AOP 란?

이놈은 정말 어렵다. 진짜 어렵다.. 백날 공부해도 백날 어렵다. 쉽게 이해하기 위해 그림을 찾다가 발견한것이 아래와 같다.

A B C

 

 



위와같이 A,B,C 클레스가 있다. 안의 색들은 소스들이라는 개념을 가지면 된다.
근데 A,B,C 클레스를 보면 같은 색들이 있는데 이것은 서로 공통되는 소스라고 생각하면 된다.
위와같이 코드를 짜면 공통된것들이 중복되다보니 코드의 가독성도 별로고 개발 속도도 별로다.
그래서 스프링 AOP는 아래와 같이 할수 있게 한다.

A B C

 

 


스프링의 AOP는 저렇게 공통된 애들은 따로 빼두고 필요할때 불러다 쓸수 있도록 해준다.저 공통된 애들중에 하나를 책들에서 설명하는것은 트렌젝션 처리가 있다. 물론 이 외에도 다양한 기능이 있지만 트렌젝션 처리가 AOP를 설명해주기엔 딱이니까..
트렌젝션을 예를 들을때 AOP가 원하는 조건(메소드명에 트렌젝션이라 적기)에 맞춰서 A,B,C 클레스를 개발하면 그 조건에 맞는 메서드가 동작할 시에는 트렌젝션이 그 메서드에 먹는다는거~~ 이게 AOP를 이용한 트렌젝션 개념이다.

AOP에 대해 보통 책을 보면 아래와같이 어렵게 써둔다 (쉽게좀 설명하면 좀좋아 ;;)

관점 지향 프로그래밍(AOP, Apsect-oriented programming)은 핵심 관심사를 분리하여 프로그램 모듈화를 향상시키는 프로그래밍 스타일이다. AOP는 객체를 핵심 관심사와 횡단 관심사로 분리하고, 횡단 관심사를 관점(Aspect)이라는 모듈로 정의하고 핵심 관심사와 엮어서 처리할 수 있는 방법을 제공한다.


위의 설명과 다를거 없다. 이해 안되면 죽어~!


이제 끝이다. 스프링은 저게 다다. 아까 PSA도 있다고 설명했는데 이건 별거 아니다.

환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근 할 수 있게 해주는 기술이 PSA(Potable Service Abstraction)이다.

위 말은 이해하기 쉽게 설명하면 환경이 아무리 달라져도 잘 작동할수 있게 도와주는게 SPRING 이다라는 뜻이다.


끝~!
위 설명은 Spring 의 이해하기 쉽게 쓴 개념일 뿐이지 정석은 아니다.그리고 위 개념을 알고 소스로 몇번 쳐봐야 아~ 이래서 이게 이거구나 싶어진다.
Spring 설정에 관련된 XML을 만들다 보면 JAVA 소스보다 XML 파일이 더 많아지기도 한다. 이건 배보다 배꼽이다라고 안쓰고 말지라고 생각할수도 있는데 조금은 큰 프로젝트만 들어가도 이건 대박 편하다. 해보면 안다. 이부분은 심화과정이나 가야 알게되니 지금은 개념만 알고 넘어가면 된다.
.
:
Posted by .07274.
.. .. ..

가끔 이클립스를 쓰다보면 이상행동을 할때가 있다.

1. 쓸데없이 오류 창을 띄운다. 뭐 치기만 하면 오류라고 난리난리를 핀다. 조금전까지도 정상작동 하던 녀석이
갑자기 안되니 답답하지.. 되던건데 안되니 더 답답하지..

2. 클레스 파일이 있는데 없댄다.. 왜없어?! 분명 있는데... 이클립스씨는 눈이 멀었나보다. 빌드 패스를 다시 잡거나
클레스 파일을 다시만들어도 안된다.. 이클립스가 술취했나 보다.

3. 이유없는 엑박.... 클레스 이름앞에 떡하니 빨간 엑박이 뜬다.. 아무짓도 안했는데..



자 위 3가지 케이스는 분명 내 잘못이 아니다. 이클립스가 술먹어서 헛지랄 하는 것이다.
우선 가장 먼저 해볼수 있는 방법은

1. 프로젝트 앞에서 마우스 우클릭 . validate 버튼 클릭.
- 요놈은 프로젝트에 정말 에러가 났는지 한번 검증해준다. 에러 안나면 정말 이클립스가 술취한 것이고 에러가
났다면 내잘못이니 에러부터 잡자.

2. 에러가 없다고 나온다면 위의 메뉴창에 Project 라는 메뉴가 있는데 Project - clean 을 한다.
- Clean 이라는 놈은 절대로 파일을 지우거나 삭제를 하는것이 아니다. 이클립스가 캐쉬하고 있던 정보들이나
Class 들을 싹 지우고 다시 만드는 것이다. 이걸 하는 이유는 이클립스가 빌드중에 꼬일수가 있기 때문이다.(잘만들던가 ;;)
그래서 이것들을 하면 거의 정리된다.

3. 이건 저 위의것도 해봤는데 이클립스가 정신을 못차릴때다. 이럴땐 최후의 방법이다 이것도 안되면 나도 몰라~!
- 프로젝트에서 마우스 우클릭, Close Project 을 한다. 요놈은 프로젝트를 지우는 놈이 아니다. 프로젝트를 잠시
재우는 놈이다. Close 하고 Open Project 를 하면 된다. 이때 이클립스가 오픈할때 다시 빌드및 컴파일을 하기 때문에
꼬였던 부분을 풀수 있다.



위에 했던 것으로 안되면 답도 없다. 내탓하지 마시길...
근데 만약 이게 정답이었다?!
감사하다고 답글달자. 나 정말 열심히 쓰고 있지 않니?!
댓글보고 힘내는 사람 힘좀 주고 나가라규~! ㅋ

.
:
Posted by .07274.
.. .. ..

테이터를 넣어야할 테이블에

값이 이미 있으면 Update

값이 없으면 Insert

MERGE INTO table_name alias --테이블 명만 올수 있음(셀렉트 쿼리 No)
USING (table|view|subquery) alias --일반적으로 쓰는 쿼리 Ok
ON (join condition) --where 절이라고 생각하면됨(조건에 서브 OK)
WHEN MATCHED THEN --데이터 중복건이 있는경우 Update
UPDATE SET col1 = val1[, col2 = val2…]
WHEN NOT MATCHED THEN -- 중복건이 없는 경우 처리 Insert
INSERT (컬럼리스트) VALUES (값들....);

.
:
Posted by .07274.
.. .. ..
find / -name "200*" -mtime +3 -exec rm "{}" \

/ : 최상위 경로 (/home/iasm...) 이런식으로 특정 경로를 지정해 줄수 있다.

"200*" : 검색할 파일 명 (*는 비스므레 한놈들 다 검색)

-atime (access): 열어본 시간
-ctime (changed) 파일 정보가 변경된 시간
-mtime (modified) 파일의 내용이 변경된 시간.
-mmin +5 -mmin -10 : 6~9분 사이에 수정된 내용을 찾는다.

+3 : 수정된지 최저 3일에서 3,4,5.... 오래전 까지
3 : 정확히 3일전
-3 : 최근 3일간

-exec rm "{}" \ : 검색된 결과와 연계하여 명령을 내린다.(rm은 삭제 명령)

댓글은? 그냥가게??
.
:
Posted by .07274.