라이선스 종류

  • Apache License
    – 아파치 라이선스는 아파치소프트웨어재단이 자기네 SW에 적용하기 위해 자체적으로 만든 라이선스다. 소스코드 공개 의무 같은 의무사항은 없지만, 아파치 라이선스 소스코드를 수정해 배포하는 경우 아파치 라이선스 버전 2.0을 꼭 포함시켜야 하며 아파치재단에서 만든 소프트웨어임을 밝혀야 한다.
    – 적용 사례 : 
    안드로이드(v2.0), 하둡(v2.0)
  • GNU(Gnu is Not Unix) General Public License(GPL)
     자유소프트웨어재단에서 만든 라이선스다. GNU 프로젝트로 배포하는 소프트웨어(Emacs, GNU 디버거(GDB), GNU 컴파일러 모음(GCC) 등)에 적용하기 위해 리처드 스톨만이 만들었다. 가장 큰 특징은 자유소프트웨어재단답게 가장 강력한 제약 조건을 포함하고 있는 카피레프트 조항이다. GPL 프로그램은 어떤 목적으로, 어떤 형태로든 사용할 수 있지만 사용하거나 변경된 프로그램을 배포하는 경우 무조건 동일한 라이선스 즉, GPL로 공개해야 한다.
    – 적용 사례 : 
    모질라 파이어폭스(v2.0), 리눅스 커널(v2.0), (v2.0), 마리아DB(v2.0), 워드프레스(v2.0), 드루팔(v2.0)
  • GNU Affero GPL(AGPL)
    – GPL을 기반으로 만든 라이선스로 버전1, 2는 아페로, 가장 최신 버전인 버전3은 자유소프트웨어재단에 의해 개발됐다. 수정한 소스코드를 서버에서만 사용하는 개발자가 그 프로그램을 배포하지 않을 경우 사용자는 소스코드를 가질 수가 없는 문제를 해결하기 위해 마련됐다. 서버에서 프로그램을 실행해 다른 사용자들과 통신하면, 실행되고 있는 프로그램의 소스코드를 사용자들이 다운로드할 수 있게 해야 한다는 독특한 조항을 담고 있다.
    – 적용 사례 : 
    몽고DB(v3.0)
  • GNU Lesser GPL(LGPL)
    – 자유소프트웨어재단의 강력한 철학이 담긴 GPL의 카피레프트 조항을 보완하기 위해 만든 라이선스다. GPL은 단순히 소프트웨어를 사용하기만 하더라도 해당 소스코드를 GPL로 공개해야 하는 부담감 때문에 상용 소프트웨어로 쓰기 부담스럽다는 단점이 있다. 그래서 좋은 자유 소프트웨어 제품이 더 많이 쓰이고 표준이 되도록 유도하기 위해 단순한 라이브러리·모듈 링크를 허용한 라이선스이다. 원래는 한정된 라이브러리에만 적용하려는 의도로 ‘Library GPL’이라는 이름을 붙였으나, 모든 라이브러리에 적용된다는 오해를 사 ‘Lesser GPL’로 변경됐다.
    – 적용 사례 : 
    모질라 파이어폭스(v2.1)
  • MIT License
    – MIT 라이선스는 미국 매사추세츠공과대학교(MIT)에서 해당 대학 SW 공학도들을 돕기 위해 개발한 라이선스다. 라이선스와 저작권 관련 명시만 지켜주면 되는 라이선스로, 가장 느슨한 조건을 가진 라이선스 중 하나이기 때문에 인기가 많다.
    – 적용 사례 : 
    부트스트랩 , Angular.jsBackbone.jsjQuery
  • Artistic License
    – 펄 프로그래밍 언어를 사용하던 래리 월이 표준 펄 기능을 위해 만든 라이선스다. 이 단어의 어원은 문학에서 문법상 틀린 표현이라도 시적인 효과를 위해 허용한다는 걸 의미하는 ‘Articstic License'(시적 허용)를 참조해 만들어졌다.
    – 적용 사례 : 
    NPM(Node Package Manager)(v2.0)
  • Eclipse License
    – 이클립스사에서 비즈니스 환경에 적합하도록 만든 기업 친화적인 라이선스로, 강력한 카피레프트 조항이 담긴 GPL보다 제약 조건이 완화된 라이선스이다.
    – 적용 사례 : 
    이클립스(v1.0)
  • Berkeley Software Distribution(BSD) License
    – 버클리의 캘리포니아대학에서 배포하는 공개 SW 라이선스다. BSD 자체가 공공기관에서 만들어낸 것이므로 공공의 몫으로 돌려주자는 의미가 강하므로, 라이선스 자체에는 아무런 제한 없이 누구나 자신의 용도로 사용할 수 있다. 라이선스 및 저작권 표시 조건 외엔 제약이 없는, 굉장히 자유로운 라이선스 중 하나이다.
    – 적용 사례 : 
    Nginx(The BSD 2-Clause License)
  • Mozilla Public License(MPL)
    – 모질라 공용 허가서는 과거 넷스케이프 웹브라우저의 소스코드를 공개하기 위해 개발된 라이선스다. 초기 1.0버전은 넷스케이프 커뮤니케이션의 변호사였던 밋첼 베이커가 작성했고, 1.1과 2.0버전은 모질라재단이 작성했다. MPL의 특징은 소스코드와 실행파일의 저작권을 분리했다는 점이다. 수정한 소스코드는 MPL로 공개하고 원저작자에게 수정한 부분에 대해 알려야 하지만, 실행파일은 독점 라이선스로 배포할 수 있다. 즉 사용한 MPL 소프트웨어와 수정한 MPL 소프트웨어에 대한 공개 의무만 가지며, 별도의 소스코드와 실행파일은 독점 라이선스를 가질 수 있다.
    – 적용 사례 : 
    모질라 파이어폭스(v1.1), 모질라 썬더버드(v1.1)

조건표

라이선스

필수 사항(Required)

허락 조건(Permitted)

금지 조건(Forbidden)

Apache License

제약조건:하

    • 라이선스 및 저작권 명시
    • 변경사항 안내
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음
    • 상표권 침해 금지

GPL

v2.0/v3.0

제약조건:상

    • 수정한 소스코드 혹은 GPL 소스코드를 활용한 소프트웨어 모두 GPL로 공개
    • 라이선스 및 저작권 명시
    • 변경사항 안내
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 보증책임 없음
    • 2차 라이선스

GNU AGPL

(Affero GPL)

v3.0

제약조건:최상

    • 수정한 소스코드 혹은 AGPL 소스코드를 활용한 소프트웨어 모두 AGPL로 공개
    • 라이선스 및 저작권 명시
    • 변경사항 안내
    • 네트워크상 소프트웨어 사용자에게 소스코드 공개
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 보증책임 없음
    • 2차 라이선스

GNU LGPL

(Lesser GPL)

v2.1/v3.0

제약조건:중

    • 수정한 소스코드 LGPL로 공개(단순 활용시 공개 의무 없음)
    • 라이선스 및 저작권 명시
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음

MIT

License

제약조건:하

    • 라이선스 및 저작권 명시
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음

Artistic

License

제약조건:하

    • 라이선스 및 저작권 명시
    • 변경사항 안내
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음
    • 상표권 침해 금지

Eclipse

License

제약조건:중

    • 수정한 소스코드 Eclipse로 공개(단순 활용시 공개 의무 없음)
    • 라이선스 및 저작권 명시
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음

BSD

License

제약조건:하

    • 라이선스 및 저작권 명시
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음

MPL v2.0

(Mozilla Public License)

제약조건:중

    • 수정한 소스코드 MPL로 공개(단순 활용시 공개 의무 없음)
    • 라이선스 및 저작권 명시
    • 특허기술이 구현된 프로그램의 경우 관련 사실을 ‘LEGAL’파일에 기록하여 배포
    • 상업적 이용 가능
    • 배포 가능
    • 수정 가능
    • 특허 신청 가능
    • 사적 이용 가능
    • 2차 라이선스
    • 보증책임 없음
    • 상표권 침해 금지

Beerware

제약조건: 최하

 

    • 맥주 사주기

 

 

 

출처: <http://www.bloter.net/archives/209318>

 

 

 


Posted by 철냄비짱
,

Restful Cross Domain 이슈

JAVA 2019. 1. 25. 09:06

@CrossOrigin(origins="*")


함수 앞에 붙임!!

Posted by 철냄비짱
,

한글의 초, 중, 종성 분리 및 조합의 예제입니다.

 

public class HangulTest{
     //한글 초성
     final char[] first = {'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ',
         'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'};
     //한글 중성
     final char[] middle = {'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ',
         'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ',
         'ㅢ', 'ㅣ'};
     //한글 종성
     final char[] last = {' ', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ',
         'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ',
         'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'};
     /**
     *한글 한 글자(char)를 받아 초성, 중성, 종성의 위치를 int[]로 반환 한다.
     *@param char : 한글 한 글자
     *@return int[] : 한글 초, 중, 종성의 위치( ex:가 0,0,0 )
     */
     public int[] split(char c){
         int sub[] = new int[3];
         sub[0] = (c - 0xAC00) / (21*28); //초성의 위치
         sub[1] = ((c - 0xAC00) % (21*28)) / 28; //중성의 위치
         sub[2] = (c -0xAC00) % (28);//종성의 위치
         return sub;
     }

    /**
     *한글 한 글자를 구성 할 초성, 중성, 종성을 받아 조합 후 char[]로 반환 한다.
     *@param int[] : 한글 초, 중, 종성의 위치( ex:가 0,0,0 )
     *@return char[] : 한글 한 글자
     */
     public char[] combine(int[] sub){
         char[] ch = new char[1];
         ch[0] = (char) (0xAC00 + (sub[0]*21*28) + (sub[1]*28) + sub[2]);
         return ch;
     }
    
     /**
     *한글 초,중,종성 분리/조합 테스트 메소드
     */
     public void doSomething(){
         int[] x = null;
         String str = "그래도 살만한 세상이다. 아?? 구랗쥐 구람";
         int loop =  str.length();
         char c;
         System.out.println( "============한글 분리============" );
         for( int i = 0; i < loop; i++ ){
             c = str.charAt( i );
             if( c >= 0xAC00 ){
                 x = split( c );
                 System.out.println( str.substring( i, i+1) + " : 초=" + first[x[0]]
                         + "\t중="+middle[x[1]]
                         + "\t종="+last[x[2]] );
             }else{
                 System.out.println( str.substring( i, i+1) );
             }
         }
         System.out.println( "\r\n============한글 조합============" );
         System.out.println( "0,0,0 : " +
                     new String( combine( new int[]{0,0,0} ) ) );
         System.out.println( "2,0,0 : " +
                     new String( combine( new int[]{2,0,0} ) ) );
         System.out.println( "3,0,0 : " +
                     new String( combine( new int[]{3,0,0} ) ) );
         System.out.println( "11,11,12 : " +
                     new String( combine( new int[]{11,11,10} ) ) );
         System.out.println( "10,11,12 : " +
                     new String( combine( new int[]{10,11,14} ) ) );
     }

    public static void main( String[] agrs ){
         new HangulTest().doSomething();
     }
 }


Posted by 철냄비짱
,

레노버 5th X1 카본 20HRA02PKR 씽크패드 노트북





http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=B459693132&frm3=V2



2018/06/05 옥션에서 구매후 언박싱 후 개발셋팅


집안에 사용중인 ASUS ROG 와 파견지에서 사용중인 DELL Inpiron 7577

게임과 업무를 각각 다른 기기로 사용중이지만


중간중간 외부미팅 및 세미나, 가볍게 사용할 수 있는 노트북이 필요.

이번에 구매하게 되었다.


문제는 처음엔 팝니다닷컴에서 중고로 20~30만원짜리 노트북을 보다가

전형적인 욕심채우기로 생애 가장 비싼 노트북을 구매.


문서작업 > 문저 및 영화 > 문서,영화,개발 > 문서,영화,개발,게임


순저대로 커져버린 욕심에 추가로 키감, 액정까지 심사숙고 끝에 씽크패드로 결정.


업그레이드 불가 모델로 인해

16G메모리, 1TB SSD로 결정.



1차 언박싱 후 정품박스

마음이 급해서 커터보다는 주~욱 찢음.




본체 박스 모양

안정적으로 잘 되어 있음




박스를 열고 나면 패키지?를 열면 옛날 파로마가구 광고 처럼 여닫이로 여는 방식




여닫이를 열면 내부박스가 살짝 올라옴.

레노버 프래그쉽 모델이라 그런지 상당히 고급스러움.




사자마자 와이프한테 가볍고 작다고 자랑하고 눈총받음.




패키징 작업도중 작업자가 마음이 급했나보다...

새박스의 전원선 박스가 저렇게 양쪽이 찢어져 있었음.

살짝 섭섭했으나 중요한건 이런게 아님.

바로 언박싱.








전원 온 시 로고




맥북처럼 키보드의 펑션키 고정 기능 설정 및 설명이 쉽게 되어 있음.





위 기능처럼 펑션기능을 키고 끄는 설정이 있음. 이거 없으면 욕할뻔 했음.







씽크패드를 결정함에 있어 가장 고민되었던 이유중 하나가...

키보드 레이아웃 중 Ctrl 과 Fn 키의 위치가 원하는 방향과 반대로 되어있어 걱정을 많이 했음.

직업상의 이유로 Ctrl이 가장 좌측에 있어야 코딩이 편함.

기대도 안했던 Ctrl <> Fn 키 변경 기능이 있음. 상당히 좋음.

T420s 이후로 7~8년만에 쓰는 씽크패드라 많이 변했음.


지금은 개발셋팅이다 뭐다 바빠서 더 많은 내용을 작성하지 못해 아쉬움










Posted by 철냄비짱
,

    관련 문서

    목차

     

    개발단계에서 사용빈도가 높은 어노테이션 위주로 정리.

    목차에 없는 항목은 API 문서를 참고할 것. 구글링하는게속편한건함정

     

    @Component

    패키지: org.springframework.stereotype

    버전: spring 2.5

    설정 위치: 클래스 선언부 앞

    <context:component-scan> 태그를 설정파일에 추가하면 해당 어노테이션이 적용된 클래스를 빈으로 등록하게 된다. 범위는 디폴트로 singleton이며 @Scope를 사용하여 지정할 수 있다.

    사용하려면 XML 설정파일에 <context:component-scan>을 정의하고 적용할 기본  패키지를 base-package 속성으로 등록한다.

    context:annotation-config 태그는 어노테이션과 관련해서 다음의 BeanPostProcessor를 함께 등록 한다.

    • @Required(RequiedAnnotationBeanPostProcessor)
    • @Autowired(AutowiredAnnotationBeanPostProcessor)
    • @Resource, @PostConstruct, @PreDestory(CommonAnnotationBeanPostProcessor)
    • @Configuration(ConfigurationClassPostProcessor)
    • 그 외 Repository, Service, Controller 포함

    예를 들어 다음처럼 설정하면:

    <context:component-scan base-package="xxx"/>

    cs

    xxx 패키지 하위에 @Component로 선언된 클래스를 bean으로 자동 등록한다. bean의 이름은 해당 클래스명(첫글자는 소문자)이 사용된다.

    <context:component-scan /> 요소에는 scoped-proxy 속성이 존재 한다. scoped-proxy는 <aop:scoped-poxy/>처럼 WebApplicationContext 에서만 유효하며 "session", "globalSession", "request" 이외의 scope는 무시 되며 아래의 3가지 값을 설정 할 수 있다.

    • no: proxy를 생성하지 않는다.(기본값)
    • interfaces: JDK Dynamic Proxy를 이용한 Proxy 생성
    • targetClass: 클래스에 대해 프록시를 생성(CGLIB를 이용한 Proxy 생성)

    @Component

    @Scope("prototype")   // 생략하면 싱글톤

    public class Test {

           .....

    }

    Colored by Color Scripter

    cs

     

    CGLIB

    기존의 자바 클래스파일로부터 자바의 소스코드를 동적으로 생성하는 라이브러리(자바 소스 변경)

    http://sourceforge.net/projects/cglib/

     

    스캔 대상 클래스 범위 지정하기

    <context:include-filter> 태그와 <context:exclude-filter> 태그를 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 수 있다.

    <context:component-scan base-package="spring.demo" scoped-proxy="no">

       <context:include-filter type="regex" expression="*HibernateRepository"/>

       <context:exclude-filter type="aspectj" expression="..*IBatisRepository"/>

    </context:component-scan>

    Colored by Color Scripter

    cs

    위와 같이 <context:include-filter> 태그와 <context:exclude-filter> 태그는 각각 type 속성과 expresseion 속성을 갖는데, type 속성에 따라 expression 속성에 올 수 있는 값이 달라진다. type 속성에 입력가능한 값은 다음과 같다:

    • annotation: 클랙스에 지정한 어노테이션이 적용됐는지의 여부. expression 속성에서는 "org.example.SomeAnnotation"와 같은 어노테이션 이름을 입력한다.
    • assignable: 클래스가 지정한 타입으로 할당 가능한지의 여부.  expression 속성에는 "org.exampleSomeClass" 와 같은 타입 이름을 입력한다.
    • regex: 클래스 이름이 정규 표현식에 매칭되는 지의 여부.  expression 속성에는 "org\.example\.Default.*" 와 같이 정규표현식을 입력한다.
    • aspectj: 클래스 이름이 AspectJ 의 표현식에 매칭되는 지의 여부.  expression 속성에는 "org.example..*Service+" 와 같이 AspectJ 의 표현식을 입력한다.

     

    @Required

    패키지: org.springframework.beans.factory.annotation

    버전: spring 2.0

    설정 위치: setter 메서드 앞

    Required 어노테이션은 필수 프로퍼티임을 명시하는 것으로 필수 프로퍼티를 설정하지 않을 경우 빈 생성시 예외를 발생시킨다.

    import org.springframework.beans.factory.annotation.Required

     

    public class TestBean {

        @Required

        private TestDao testDao;

        

        public void setTestDao(TestDao testDao) {

            this.testDao = testDao;

        }

    }

    Colored by Color Scripter

    cs

    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanpostProcessor"/>

    <bean name="testBean"  class="han.test.TestBean">

        <property name="testDao" ref="testDao"/>  

        <!-- @Required 어노테이션을 적용하였으므로 설정하지 않으면 예외를 발생시킨다. -->

    </bean>

    Colored by Color Scripter

    cs

    RequiredAnnotationBeanPostProcessor 클래스는 스프링 컨테이너에 등록된 bean 객체를 조사하여 @Required 어노테이션으로 설정되어 있는 프로퍼티의 값이 설정되어 있는지 검사한다.

    사용하려면 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" /> 클래스를 빈으로 등록시켜줘야 하지만 이를 대신하여 <context:annotation-config> 태그를 사용해도 된다:

    <beans xmlns="http://www.springframework.org/schema/beans"

              xmlns:context="http://www.springframework.org/schema/context"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

              xsi:schemaLocation="http://www.springframework.org/schema/beans

                 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

                 http://www.springframework.org/schema/context

                 http://www.springframework.org/schema/context/spring-context-3.1.xsd">

        <context:annotation-config/>

    </beans>

    Colored by Color Scripter

    cs

     

    @Autowired

    패키지: org.springframework.beans.factory.annotation

    버전: spring 2.5

    설정 위치: 생성자, 필드, 메서드(setter메서드가 아니여도 된다) 앞

    의존관계를 자동설정할 때 사용하며 타입을 이용하여 의존하는 객체를 삽입해 준다. 그러므로 해당 타입의 빈객체가 존재하지 않거나 또는 2개 이상 존재할 경우 스프링은 예외를 발생시키게 된다.

    options:

    • required: Autowired 어노테이션을 적용한 프로퍼티 중 반드시 설정할 필요가 없는 경우에 false값을 주어 프로퍼티가 존재하지 않더라도 스프링이 예외를 발생하지 않도록 한다. 기본값은 TRUE. ex) @Autowired(required=false)

    사용하려면 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /> 클래스를 빈으로 등록시켜줘야 한다. 해당 설정 대신에 <context:annotation-config> 태그를 사용해도 된다.

    @Autowired를 적용할 때 같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는데, Autowired도 이러한 문제가 발생한다. 이럴 때 @Qualifier를 사용하면 동일한 타입의 빈 중 특정 빈을 사용하도록 하여 문제를 해결할 수 있다.

    @Autowired

    @Qualifier("test")        

    private Test test;

    cs

     

    @Qualifier

    패키지: org.springframework.beans.factory.annotation

    버전: spring 2.5

    설정 위치: @Autowired 어노테이션과 함께 사용된다.

    qualifier 어노테이션은 @Autowired의 목적에서 동일 타입의 빈객체가 존재시 특정빈을 삽입할 수 있게 설정한다. @Qualifier("mainBean")의 형태로 @Autowired와 같이 사용하며 해당 <bean>태그에 <qualifire value="mainBean" /> 태그를 선언해주어야 한다. 메서드에서 두개이상의 파라미터를 사용할 경우는 파라미터 앞에 선언해야한다.

    options:

    • name: alias명

    사용하려면 동일타입의 빈객체 설정에서 <qualifier value="[alias명]" />를 추가해 준다.

    <bean id="user2" class="com.sp4.UserImpl">

        <property name="name" value="스프링"/>

        <property name="age" value="20"/>

        <property name="tel" value="000-0000-0000"/>

    </bean>

     

    <bean id="userService1" class="com.sp4.UserService"/>

    cs

    public class UserService {

        @Autowired

        @Qualifier("user2")

        private User user;

     

        public String result() {

            return user.getData();

        }

    }

    cs

     

    @Resource

    자바 6 및 JEE5에 추가된 것으로 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용 한다. 스프링 2.5 부터 지원하는 어노테이션으로 스프링에서는 의존하는 빈 객체를 전달할 때 사용한다.

    @Autowired와 흡사하지만 @Autowired는 타입으로(by type), @Resource는 이름으로(by name)으로 연결한다는 점이 다르다.

    options:

    • name: 자동으로 연결될 빈객체의 이름을 입력한다. ex) @Resource(name="testDao")

    사용하려면 <bean class="org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor"/> 클래스를 빈으로 등록시켜줘야 한다. 해당 설정 대신에 <context:annotation-config> 태그를 사용해도 된다.

    <beans

        <!-- 기타 설정 생략 -->

        <context:annotation-config/>

        

        <bean id="user2" class="com.test.UserImpl" p:data="65536"/>

    </beans>

    Colored by Color Scripter

    cs

    public class UserService {

        @Resource(name="user2")

        private User user;  

        //UserImpl user2 = new UserImpl();

        //User user = user2;

     

        public void setUser(User user) {                          

            this.user = user;

        }

        public String result() {

            return user.getData();

        }

    }

    Colored by Color Scripter

    cs

     

    @Scope

    패키지: org.springframework.beans.factory.annotation

    설정: prototype, singleton, request, session, globalSession

    스프링은 기본적으로 빈의 범위를 "singleton" 으로 설정한다. "singleton" 이 아닌 다른범위를 지정하고 싶다면 @Scope 어노테이션을 이용하여 범위를 지정한다.

    @Component

    @Scope(value="prototype")

    public class Worker { }

    cs

    @Component

    @Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)

    public class Worker { }

    Colored by Color Scripter

    cs

     

    @PostConstruct

    패키지: javax.annotation

    버전: jdk1.6, spring 2.5

    설정 위치: 초기화 작업 수행 메서드 앞

    의존하는 객체를 설정한 이후에 초기화 작업을 수행하기 위해 사용한다.

    사용하려면 CommonAnnotationBeanPostProcessor 클래스를 빈으로 등록시켜줘야 한다. <context:annotation-config> 태그로 대신할 수 있다.

    @PostConstruct

    public void init() {

        System.out.println("객체 생성 후 내가 먼저 실행된다.");

    }

    Colored by Color Scripter

    cs

     

    @PreDestroy

    패키지: javax.annotation

    버전: jdk1.6, spring 2.5

    설정 위치: 해당 작업 메서드 앞

    컨테이너에서 객체를 제거하기 전에 해야할 작업을 수행하기 위해 사용한다.

    사용하려면 CommonAnnotationBeanPostProcessor 클래스를 빈으로 등록시켜줘야 한다. <context:annotation-config> 태그로 대신할 수 있다.

     

    @Inject

    SR-330 표준 Annotation으로 Spring 3 부터 지원하는 Annotation이다. 특정 Framework에 종속되지 않은 어플리케이션을 구성하기 위해서는 @Inject를 사용할 것을 권장한다. @Inject를 사용하기 위해서는 클래스 패스 내에 JSR-330 라이브러리인 javax.inject-x.x.x.jar 파일이 추가되어야 함에 유의해야 한다. 

     

    @Service

    @Service를 적용한 Class는 비지니스 로직이 들어가는 Service로 등록이 된다. Controller에 있는 @Autowired는 @Service("xxxService")에 등록된 xxxService와 변수명이 같아야 하며 Service에 있는 @Autowired는 @Repository("xxxDao")에 등록된 xxDao와 변수명이 같아야 한다.

    @Service("helloService")

    public class HelloServiceImpl implements HelloService {

        @Autowired

        private HelloDao helloDao;

     

        public void hello() {

            System.out.println("HelloServiceImpl :: hello()");

            helloDao.selectHello();

        }

    }

    Colored by Color Scripter

    cs

    helloDao.selectHello(); 와 같이 @Autowired를 이용한 객체를 이용하여 Dao 객체를 호출한다:

    @Service("test2.testService"

    //괄호 속 문자열은 식별자를 의미한다.

    //괄호를 생략할 경우 클래스명 그대로 사용한다. 

    //따라서 ,같은 클래스명이 존재 할 시 같은 식별자가 생성되기때문에 에러가 발생한다.

    public class TestService {

        public String result(int num1, int num2, String oper) {

            String str = null;

            

            if (oper.equals("+")) {

                //...

                return str;

            }

        }

    }

    Colored by Color Scripter

    cs

    @Resouce로 연결

    @Resource(name="test2.testService"

    //name에 필요한 것은 @Service("test2.testService") <- 여기서 괄호 속 문자열, 즉 식별자

     

    private TestService service; 

    //TestService service = new TestService(); 라고 하는것과 같은 식

        

    @RequestMapping(value="/test2/oper.action", method={RequestMethod.GET})

    public String form() throws Exception {

        return "test2/write";

    }

    Colored by Color Scripter

    cs

     

    @Repository

    패키지: org.springframework.stereotype

    버전: spring 2.0

    @Repository는 일반적으로 DAO에 사용되며 DB Exception을 DataAccessException으로 변환한다.

    @Repository("bbs.boardDAO")

    public class BoardDAO {

        private SqlSession sqlSession;

        

        public int insertBoard(Board dto) throws Exception {

            ...

        }

    }

    Colored by Color Scripter

    cs

    public class BoardServiceImpl implements BoardService {

        @Resource(name="bbs.boardDAO")

        private BoardDAO dao;

     

        public int insertBoard(Board dto){}

    }

    Colored by Color Scripter

    cs

     

    @Controller

    http://noritersand.tistory.com/474

     

    @RequestMapping

    http://noritersand.tistory.com/475

     

    @RequestParam

    http://noritersand.tistory.com/357

     

    @SessionAttributes

    SessionAttribute annotation은 세션상에서 model의 정보를 유지하고 싶을 경우 사용한다.

    @Controller

    @SessionAttributes("blog")

    public class BlogController {

        // 중간생략

     

        @RequestMapping("/createBlog")

        public ModelMap createBlogHandler() {

            blog = new Blog();

            blog.setRegDate(new Date());

            return new ModelMap(blog);

        }

     

        // 중간생략

    }

    Colored by Color Scripter

    cs

     

    @ModelAttribute

    http://noritersand.tistory.com/365

     

    @RequestBody

    @RequestBody 어노테이션이 적용된 파라미터는 HTTP Request body의 내용이 전달된다.

    참고: http://java.ihoney.pe.kr/283

    @RequestMapping(value="/test")

    public void penaltyInfoDtlUpdate(@RequestBody String body,

            HttpServletRequest req, HttpServletResponse res,

            Model model, HttpSession session) throws Exception  {

     

        System.out.println(body);    

    }

    Colored by Color Scripter

    cs

     

    @ResponseBody

    참고: http://ismydream.tistory.com/140

    클라이언트에 JSON 형식의 값을 응답할 때 유용하다. 메서드에 @ResponseBody를 적용한 후 문자열을 리턴하면 그 값은 HTTP response header가 아니라 HTTP response body에 쓰여진다. 객체를 넘길경우 스프링에 내장된 JACKSON에 의해 문자열로 변환될 것이다.

    또한 @ResponseBody가 적용된 컨트롤러는 context에 설정된 resolver를 무시한다.

    @RequestMapping("/getVocTypeList")

    @ResponseBody

    public ArrayList<Object> getVocTypeList() throws Exception {

        HashMap<String, Object> vocData = gvocInf.searchVocTypeList();

        return (ArrayList<Object>) vocData.get("data");

    }

    Colored by Color Scripter

    cs

     

    @PathVariable

    URL의 일부를 파라미터 혹은 변수로 사용한다.

    package com.sp.ex;

     

    @Controller("ex.exController")

    public class ExController{

        @RequestMapping(value="/blog/{userId}/main.action", method=RequestMethod.GET)

        public String main(HttpServletRequest req

                           , @PathVariable String userId) throws Exception    {

     

            req.setAttribute("userId", userId);

            return "restful/result";

        }

    }

    Colored by Color Scripter

    cs


Posted by 철냄비짱
,

윈도우 7에서 그란디아 2 동영상이 나오지 않을경우 해결하는 팁 (모두에게 통용되는 팁은 아님)

 

1. indeo 코덱을 설치

 

2. 실행 -> CMD 실행 (관리자 권한으로 실행) 

  (명령 프롬프트(Cmd) 관리자 실행은 '시작 -> 모든 프로그램 -> 보조 프로그램' 에 있음)

 

3. 경로  c:\windows\system32 (윈도우7 32비트) 에서  regsvr32 ir50_32.dll 입력

  -> 성공했을경우 등록 되었다는 창이 뜸

 

  -> 실패시 : "모듈 "ir50_32.dll"을(를) 로드하지 못했습니다." 메시지가 뜸

                    윈도우 64비트 라면  c:\windows\system32 가 아닌

                    C:\Windows\SysWOW64 로 들어가서  regsvr32 ir50_32.dll 입력

                 (저 폴더가 없다면 c:\\windows\\syswow32 일수도 있음)

 

4. GmConfig 실행 -> 해상도 설정에서 1024*768*16 으로 설정

   (마지막 숫자 32가 아닌 16으로 설정 )

 

5. Grandia2.exe 속성 클릭 -> 호환모드를 Window XP (서비스팩 2)로 설정

 

6. 게임 실행 ㄱㄱㄱ

 

( 참고 사이트 : http://luibit.tistory.com/61 )

 

 

출처: <https://m.blog.naver.com/PostView.nhn?blogId=godonn&logNo=10162971985&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F>

 


Posted by 철냄비짱
,

OS X - OS 업데이트 후 git 등 오류 발생 시 솔루션

최근 macOS Sierra 업데이트가 있었다.

과거 OS X El Capitan 업데이트도 포함됨

언제나 처럼 먼저 업데이트하면 골치아픈 일이 많이 생기네요 ㅠ

그러던 중에 Xcode Command Line Tools 의존성 이슈가 발생하는 경우가 생겼다. git을 실행시키는데 아래와 같은 오류와 함께 실행이 되지 않는 케이스이다.

 

$ git --version
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

 

XCode를 재설치하면 해결되나 나와 같은 전체설치가 필요하지 않는 경우에는 Xcode Command Line Tools만 설치할 수 있다.

 

$ xcode-select --install

 

설치 후 2343 최신버전으로 확인된다.

 

$ xcode-select -v
xcode-select version 2343.

Posted by 철냄비짱
,




 

맥을 쓰면 좋은 점은 바로 ~



 

소리가 아닐까 싶습니다만.



 

주변 사람들을 흠칫! 하고 쳐다보게 만드는 소리...



 

민망하기도 합니다.



 



 

소리를 없애고자, 공공장소에서 예의를 지키고자,



 

진행합니다.



 

부팅시 소리 없애기!



 



 



 



 



 



 

1. 터미널을 찾아서 실행!



 



 

一 心 O 0



 



 



 



 

2. 터미널에서 아래 명령어를 입력합니다!



 

sudo nvram SystemAudioVolume="%00"



 

00 말그대로 수치입니다. 수치를 조금 키우면 소리를 작게 만들 있습니다!



 

하지만 저는 아예 소거 시키길 원해서 00 줬습니다.



 

입력 , 패스워드를 넣어주면 !



 

* 패스워드 입력시, 아무 문자도 나타나지 않지만, 입력은 되고 있으니 자연스럽게 입력하세요!!



 



 

moonyeonsu 
— -bash — 80x24 
Last login: Sat Mar 19 12:55:45 on console 
moonyeonsu$ sudo nvram 
http://pabit.tistory.com



 



 



 



 



 



 



 



 



 



 



 

이렇게 하면 부팅 소리 없애기 끝입니다!



 



 

하지만, 다시 부활을 시키고 싶다면



 

아래 명령어를 터미널에 써줘서 부활 시키면 됩니다!!



 



 

sudo nvram -d SystemAudioVolume



 

출처http://palpit.tistory.com/859 [palpit's log-b]



 

출처http://palpit.tistory.com/859 [palpit's log-b]



 

출처http://palpit.tistory.com/859 [palpit's log-b]



 

출처http://palpit.tistory.com/859 [palpit's log-b]


 


 


Posted by 철냄비짱
,

For some reason mysql on OS X gets the locations of the required socket file a bit wrong, but thankfully the solution is as simple as setting up a symbolic link.

You may have a socket (appearing as a zero length file) as /tmp/mysql.sock or /var/mysql/mysql.sock but 1 or more apps is looking in the other location for it.

Rather than move the socket and have to edit config files and remember to keep edited files local and away from servers where the paths are correct, simply create a symbolic link so your mac finds the required socket, even when it's looking in the wrong place!

If you have /tmp/mysql.sock but no /var/mysql/mysql.sock then...

cd /var
sudo mkdir mysql
sudo chmod
755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock

If you have /var/mysql/mysql.sock but no /tmp/mysql.sock then

cd /tmp
ln -s /
var/mysql/mysql.sock mysql.sock

You will need permissions to create the directory and link, so just prefix the commands above with sudo if necessary.

Hope this helps. It has sorted this exact issue for me on 3 macs so far.

Posted by 철냄비짱
,

갤럭시 탭 S3

Person/Favorite 2017. 8. 23. 16:56

LTE 버전
Total 69만원에 구매.
1. SKT 데이터 나눠 쓰기 요금제. 기본료 없음.
2. 배터리 검색용도 十 영화1편 十 게임 잠깐 하루 버팀.
3. S펜 꽤나 쓸만함.
Posted by 철냄비짱
,