메타 어노테이션

@Target

 - 어노테이션을 적용할 대상을 지정

 - ElementType 

CONSTRUCTOR         // 생성자 선언부

FIELD                      // enum포함 필드선언부

LOCAL_VARIABLE     // 지역변수 선언부

METHOD                 // 메소드 선언부

PACKAGE                 // 패키지 선언부

PARAMETER             // 파라메터 선언부

TYPE                     // 클래스, 인터페이스, enum 선언부

@Retention

 - 어노테이션 정보가 보관되는 기간을 지정

 - RetentionPolicy

SOURCE    // 어노테이션이 컴파일러에서 버려짐

CLASS    // 클래스안의 어노테이션은 사용되지만 VM에서는 버려짐

RUNTIME    // VM에서 유지가 되므로 리플렉션으로 활용 가능

@Documented

 - Javadoc에 포함

@Inherited

 - 서브클래스 부모 어노테이션을 상속


활용 Exam


@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface Handler {

    String value();

    String name();

}


///


private void base(Handler annotation) {

        Preconditions.checkNotNull(annotation);


        name = annotation.name();

        path = annotation.value();

    }



///


public HttpRequestHandler build(Object obj, Method method) {
        Preconditions.checkNotNull(obj);
        Preconditions.checkNotNull(method);

        base(method.getAnnotation(Handler.class));

        Preconditions.checkNotNull(name);
        Preconditions.checkNotNull(path);
        
        String httpMethod = null;
        
        String upperCaseName = name.toUpperCase();
        if(upperCaseName.startsWith("GET")) {
            httpMethod = "GET";
        } else if(upperCaseName.startsWith("POST")) {
            httpMethod = "POST";
        } else if(upperCaseName.startsWith("PUT")) {
            httpMethod = "PUT";
        } else if(upperCaseName.startsWith("DELETE")) {
            httpMethod = "DELETE";
        }
  HttpRequestHandler handler = new HttpRequestHandler(name, path, httpMethod);
        handler.addArgs(args);
        handler.setRaw(obj, method);
        
        return handler;
    }

[다운로드]

 - http://www.git-scm.com/


[설정]

#vi ~/.gitconfig

[user]

name = "~~"

email = "~~@~~"

[tool]

tool = vimdiff

[i18n]

commitEncoding = cp949

logOutputEncoding = cp949

[core]

quotepath = false


#vi ~/.inputrc

set output-meta on

set convert-meta off


#vi ~/.bashrc

alias ls='ls --show-control-chars'

alias ll='ls -l --show-control-chars -color=auto'


[시스템] > [고급설정] > [환경변수] > 사용자변수 추가 > LESSCHARSET latin1 

TaskExecutor

ThreadPoolExecutor

 - JDK ThreadPoolExecutor에 대한 어댑터 클래스. 손쉽게 사용.

SimpleThreadPoolTaskExecutor

 - Quartz SimpleThreadPool을 사용 만들어짐. 추상화 인터페이스를 통해 Quartz 스케줄러와 독립적으로 사용되면서 Quartz의 작업에 활용 가능한 장점

WorkManagerTaskExecutor

 - CommonJ (웹로직, 웹스피어 등 WAS제공 JavaEE환경)의 작업관리자 어댑터. 


TaskScheduler

ThreadPoolTaskScheduler

 - JDK ScheduledThreadPoolExecutor 스케줄러 어댑터. Thread Pool 방식의 TaskExecutor또한 갖고 있음. 손쉽게 사용

TimeManagerTaskScheduler

 - CommonJ TimeManager를 TaskScheduler로 추상화한 클래스


AOP (Aspect Oriented Programming) 관점 지향 프로그래밍

데코레이터 패턴, 프록시 패턴을 응용, 기존코드에 영향을 주지 않은채로 부가기능을 타겟 오브젝트에 제공할 수 있는 객체지향 프로그래밍 모델에서 출발하여 스프링을 사용하는 방법으로 적용.

정리.

 공통적인 기능을 손쉽게 개발하고 관리할 수 있다.

 쉽게 말하면 코드의 재사용을 위해 탄생했다.

 하나의 모듈을 많은 오브젝트(메소드) 실행시점에 적용함.

*프록시 : 원격 시스템에 있는 오브젝트를 대신해서 클라이언트 오브젝트의 호출을 받고, 이를 원격 오브젝트에 전송해서 결과를 가져와 클라이언트 오브젝트에 돌려주는 역할을 맡은 빈 오브젝트. 요점은 원격호출

대표적기능 : Point cut(적용 대상 선택) , Advice , Advisor (PointCut + Advice) , Autowired (interface + implements) , AspectJ


--토비 스프링 14장.

ORM : Object Relation Mapping.

 오브젝트와 RDB 사이에 존재하는 개념과 접근방법, 성격의 차이 때문에 요구되는 불편한 작업을 제거해줘서 자바 개발자가 오브젝트를 가지고 정보를 다루면 ORM 프레임워크가 이를 RDB에 적절한 형태로 변환해주거나 그 반대로 RDB에 저장되어 있는 정보를 자바 오브젝트가 다루기 쉬운 형태로 변환해주는기술이다.

- 토비의 Spring 11장 중에서

*RDB : Relation DataBase. 관계형 데이터베이스


뭔말인지 참 어려운데 쉽게 말하면 쉽게 DB에 엑세스 하여 정보를 다룰수 있게 도와주는 방법.

이라고 생각한다.

대표적으로 Hibernate. iBatis, Spring JPA 등

'DB' 카테고리의 다른 글

ORM의 사실과 오해  (0) 2015.08.05
MS SQL Id 칼럼 초기화  (0) 2013.08.30

Front Controller Pattern.

몇 개의 서블릿이 중앙집중식으로 모든 요청을 다 받아서 처리하는 방식

대표적 - Spring.


초기에는 URL당 하나의 서블릿을 등록, 독립적 기능을 담당하게 함.

처리방식 - 서블릿 선행작업 수행, 요청의 기능을 담당하는 핸들러 클래스 호출


Spring에서는 최소한의 서블릿으로 처리 (프론트 컨트롤러 패턴 적용)

'java > design_pattern' 카테고리의 다른 글

Design Pattern 기본 원칙  (0) 2014.06.18
Builder Pattern  (0) 2014.06.17
Java Beans Pattern  (0) 2014.06.17
Telescoping Pattern  (0) 2014.06.17
디자인패턴 개인 메모.  (0) 2012.03.29

정의

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크


애플리케이션 프레임워크 : 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크

개발자 : 로드 존슨 (Rod Johnson)

개발시기 : 2003년 J2EE 기술서적의 예제코드에서 출발

모토 : 항상 프레임워크 기반으로 접근하라.

배경 : 2만 라인의 샘플코드에서 시작했으나 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 해서 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에, 애플리케이션을 빠르고 효과적으로 개발할 수 있다.

이에 매료된 독자(개발자)들이 출판사 포럼에 모이기 시작하여 지속적으로 개발하자는 의견을 냄. 그들의 열의 있는 모습에 설득당한 로드존슨이 참여하면서 부터 정식으로 스프링 프레임워크 오픈소스 프로젝트가 시작

목표 : 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해 줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크로 사용되는 것.


경량급 : light weight. 당시 EJB는 무거웠음.(고가의 WAS, 패키징, 디플로이) 그에 비해 스프링은 가벼움 (개발과정 단순, 톰캣 제티 등 범용성, 불필요 WAS)

자바 엔터프라이즈 개발을 편하게 : 편하게 - 개발자가 Low level 단을 신경쓰지 않고 사용자에게 중점을 맞춰 개발


오픈소스 : 상용화o 수정o 재배포o 라이센스 don`t care. 하지만 원저작자 정보는 유지 (자기가 만든것처럼 위장x) Apache 라이센스를 따름 (수정코드 공개 don`t care), 자유로운 의견 제출  = 빠르고 유연한 개발


* 참고: 토비의 스프링 3. 8장 스프링이란 무엇인가?

리플렉션 (Reflection)

자바의 코드 자체를 추상화 하여 접근하도록 만들어진 기능, Method.


 
String checkTarget = "Hello";
Method lengthMethod = String.class.getMethod("length");
int checker = (Integer)lengthMethod.invoke(checkTarget);
int compare = checkTarget.length();

---

checker와 compare는 같다.


'java' 카테고리의 다른 글

동일성 동등성 == equals  (0) 2013.05.22
어노테이션 사용  (0) 2013.05.16
java 연산자 기호표  (0) 2012.09.26
can not find the tag library descriptor for http //java.sun.com/jsp/jstl/core  (4) 2012.07.03
Map (String) -> JsonString 변환  (0) 2012.05.09

우선 설치


sudo apt-get install vsftpd


그리고 설정


/etc/vsftpd.conf

[추가]


chroot_list_enable=YES 


chroot_list_file=/etc/vsftpd/chroot_list 


[주석]

#chroot_local_user=YES 


[저장-종료]




제한할 유저 설정


[생성, 편집]

vi /etc/vsftpd/chroot_list




데몬 재실행

'linux' 카테고리의 다른 글

ubuntu 방화벽  (0) 2013.06.28
리눅스 iptables 방화벽 설정  (0) 2013.06.28
쉘 스크립트 정리  (0) 2013.03.29
/etc/resolv.conf 가 자꾸 초기화 될때  (2) 2012.08.30
우분투 root권한 얻기  (0) 2012.08.29

Tomcat 사용중 Catalina.out 에 관련 로그가 쌓여 귀찮을 때가 있다.


관리에 필요한 로그는 Log4J 또는 별도의 로그 관리로 관리되고 있는 상황


이럴때 Catalina.out 로그를 기록하지 않는 법을 적용하자.


-> #vi .bash_profile

export CATALINA_OUT = "/dev/null";

->/bin/shutdown.sh

->/bin/startup.sh


bash profile을사용하는 모든 톰캣 Catalina Log를 사용하지 않는다.




'tomcat' 카테고리의 다른 글

JRebel 무료로 사용하기  (0) 2014.09.19
Catalina.out 사용중지  (0) 2013.09.25
프로젝트 import 시 Tomcat Server Unbound 문제  (0) 2012.05.16
톰캣 7.0 server.xml  (0) 2012.04.05
publishing faild with multiple error.  (0) 2012.03.28

+ Recent posts