• 주요 주제

    1. tomcat 9 (2017 예정 java 9과 함께)
    2. Spirng 5.0 (2016.11 예정)
      1. 4.3 은 6월에 나왔음
  • Spring F/W 5

    1. 발표자
      1. 이창제
    2. 주요 업그레이드 항목
      1. JDK 8 +
      2. Servlet 3.1 +
      3. JMS 2.0
      4. JPA 2.1
      5. JUnit 5

    3. 특징
      1. JDK8
        1. 람다, 스트림 >> 언어의 패러다임 이 바뀌고 있다. (적응하자)
        2. JDK 6,7 은 사용 불가할것 (그만쓰자)
      2. Core Container
        1. Bean 디텍션, 생성 강화
          1. 기존 싱글쓰레드의 Bean 검색 > 멀티쓰레드 방식으로 바뀜 (빌드가 빨라질거다)
      3. Java9
        1. JigSaw (직쏘?) 알아볼것
        2. String Compact 개선
        3. GC 개선
    4. 마이크로 서비스화에 대해
      1. 전통적 스케일 방식이 바뀐다.
      2. 멀티쓰레드 > 프로세싱 > 레이턴시 확장
      3. 쓰레드풀 방식의 쓰레드 관리의 한계점
      4. Application Handling
      5. 부하에는 로드밸런싱 방식의 해결이 더 적합하다고 판단
      6. 부하에는 클라우드 서버의 레이턴시를 확장함으로 해결 (컨테이너 방식  ex.도커)
  • Spring Boot 1.4

    1. 발표자 
      1. pivotal 부장
    2. 써야하는 이유
      1. 웹 어플리케이션을 만들기 위해 했던 많은 수작업을 자동으로 수행해 준다.
        1. 수작업 - 웹어플리케이션 어노테이션 설정 (~ProjectWebApplicationConfig.java 등), 서버 관련 설정 등
        2. 자동 - 어노테이션 기반 (찾아보자.)
    3. 1.4 의 달라진점
      1. 테스트가 강화 되었다. '@SpringBootTest 어노테이션. '@SpringRunner | '@WebMVCTest (도메인마다 어노테이션 이름이 달라짐), 
      2. '@EnableCache('캐쉬명') Caffein 프로젝트 기반 캐시 라이브러리 제공, 쉽게 쓸 수 있다.
      3. 이스터에그? - web 리소스 최상단에 banner.jpg or png 를 넣으면 ASCII 코드 방식으로 바꿔서 콘솔에 출력해 준다.
      4. build_info 라는 곳에 빌드 정보를 자동 생성 할 수 있다. 
  • React Program. with Spring

    1. Reactive program
      1. 비슷한 패러다임 - RxJava (Netflix) Akka
      2. 기존에는 다중 처리방식에는 thread 기반으로 처리했다.
      3. 쓰레드풀 방식에는 한계가 있다. 
      4. 비동기 방식으로 해결 하자. (Async)
      5. Pool 방식에서 Data 방식으로 해결을 해보자 라는 관점에서 출발
      6. Publisher < back pressure > Subscriber
        1. 뒷단이 받을 수 있을 만큼만 보낸다.
      7. ex1) Flux . '[0..N] 끊임없는 데이터
        1. account 정보를 Alert 라는 객체로 기대하며 id 를 보냈을때 완료 시 bodyStream 에 보낸다. 라는 정도의 이해.
      8. ex2) Mono. '[0..1] 이거나 아니거나
        1. error 일경우 , 비었을 경우 등의 처리를 callback 방식으로 처리 하는 것 을 볼 수 있다.



    2. 프로그램의 관점이 바뀐다.
      1.  Pull -> Push
        1. 데이터를 당겨 온다는 개념 > 데이터를 밀어준다는 개념 (참조하고있는곳에)
        2. 데이터의 흐름과 변화를 전달하는 하나의 개념
      2. 기존에는 있지 않았나? ex. future 메소드
        1. future.get() >> 이 자체도 비동기 방식이다.
      3. Stream방식의 데이터 처리 방식에 따라 관점이 바뀌게 되었다.
      4. 싱글쓰레드로 잘쓰는게 멀티쓰레드 보다 빠르다.
      5. 퍼포먼스를 중히 여기는 프로그래머는 기계?에 동점심을 가져야 한다.
      6. Non Blocking Event Driven
      7. 콜렉션 단위의 처리에 좋을 듯 하다.
    3. 데이터 흐름의 방식
      1. 기존 - return rep.findOne(id);
      2. 변경1 - Future<User> findOne(id);
      3. 변경2 - ComPletableFuture<Void> save(user).callBack(~).onError(~).onComplete(~); 
    4. 장점
      1. 응답성 / 장애대응 / 확장성 / 메시지 기반
    5. 필요한 인식 
      1. Circuit Breaker 디자인 패턴 
        1. 한 서비스를 호출하는데 시간이 허용 범위 이상으로 많이 걸릴 경우 끊어서 장애 대응
        2. 처리하지 못하는데 쓰레드만 쌓일 경우 처리하는 방식
        3. ex. 코레일 예매시스템. 
    6. 확인 필요
      1. LMAX 방식( 림구조) - 버퍼를 만들어서 바로 사용 
        1. 싱글쓰레드 방식의 처리
      2. log4j2가 LMAX방식으로 사용한다.
    7. 생각해봐야 할점
      1. 프로그램의 끝은 어떻게?
        1. 어떤 방식으로 끝내든 마지막에 신청한 사용자는 받지 못하게 될 것이다. 이 경우 끝은 어떻게 낼까?


    8. Q&A
      1.  왜 node js 를 안쓰나?
        1. 그럴거면 node js 세미나를 가던지... 우리는 문제를 스프링 기반으로 해결하고자 하는 방향의 관점에서 본다. 

  • try {
    BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);
    BeanUtils.copyProperties(target, source);
    } catch (Exception e) {
    log.error("Create exception. cause : ", e);
    }


    소스를 내려 받아 작업 진행 중 이클립스 작업중 서버가 톰캣에 붙지 않고 


    did not find a matching property.

    정보: No Spring WebApplicationInitializer types detected on classpath


    같은 에러를 뿜을 때


    Properties > Deployment Assembly > Add > Folder > WebContent

    로 Spring Initial folder를 지정해 주면된다.

    ** webapp 같은 다른 기본 folder가 지정되어 있을경우 우선 순위에 따라 webapp가 기본 폴더가 되니 반드시 지워주고 추가하자 (Remove , Add)






    'spring' 카테고리의 다른 글

    SpringOne Platform re:Cap 후기 2016.09.07  (0) 2016.09.08
    BeansUtil copyProperties 사용, date exception 회피  (0) 2015.12.28
    Spring Task 관리.  (0) 2013.05.10
    AOP 란  (0) 2013.05.10
    Spring이란? (Key word로 설명하는 Spring이란)  (0) 2013.05.07

    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장.

    정의

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


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

    개발자 : 로드 존슨 (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장 스프링이란 무엇인가?

    @Controller 설정

    @RequestMapping - 홈 주소에 추가되는 경로 및 MethodType

    @RequestParam 에 값을 넣어 조정

    @ResponseBody - 돌아오는 값이 있을경우 Body에 실어보냄


     - param을 받아 처리후 return 시 body에 내용이 담겨 돌아감.

    ex)


    @Controller - 주소를 받아 처리하는 Controller임을 알림

    @Autowired - 추상클래스 managerBiz 를 BizImpl과 autowire 시켜줌을 알림

    @RequestMapping - 호스트 뒤에 붙는 해당 주소요청에 맞는 RequestMethodType이 왔을때 수행. 위의 경우 String형태의 param값을 managerBiz.get(~) 처리하여 반환값을 돌려줌

    @ResponseBody - 처리결과를 Body에 실어 보냄 사용자는 웹화면의 Body응답값을 볼수 있다.

    + Recent posts