Superseded by Akka HTTP

language/scala 2017.05.01 20:21 posted by dev.bistro

spary 팀이 akka-http 에 합류하더라도, spary는 계속 진행될 거다 라는 내용은.. 아마 https://github.com/sirthias의 글에서 본 걸로 기억이 난다. 당시만 해도 akka-http가 시작되는 정도였지만  spary는 거의 중단된채 akka쪽에 힘쓰는걸 보니, 말과는 다르게 접히겠구나 생각되었다.  

오늘 갑자기 생각나서 들어가보니  PRdocumentation 와는 다르게 Superseded by Akka HTTP 라는 내용으로 README.md가 대체되었다. 그리고 sparu 1.3.3 과 함께 고민을 하게 하면 akka-http는 experimental 에서 2.5.0 까지 나왔인줄 알았는데 현재 10.0.5 -_-;

akka에서 분리되어 독립 project가 생겼고,버전을 10으로 크게 올렸다.

akka: http://akka.io/docs

akka-http : http://doc.akka.io/docs/akka-http/current/scala.html



신고

'language > scala' 카테고리의 다른 글

SCALA TYPE ERASURE & TYPETAG  (0) 2017.06.30
SCALA UPPER/LOWER TYPE BOUND & VIEW BOUND  (0) 2017.06.28
Superseded by Akka HTTP  (0) 2017.05.01
FP 비엄격성  (1) 2015.05.18
scala package object  (0) 2014.11.05
scala의 lazy 비용  (0) 2014.10.21


spring 5.0 이후 RouterFunction을 이용하여 EndPoint를 구현 할 수 있다. 이 RouterFunction을 스프링 빈으로 만들면 기존의 @Controller와 동일한 포지션의 역할을 수행하는데 어떻게 스캐닝을 하는걸 까?


Springboot 2.0 은 아직 개발중이지만, 그 안에서 확인 할 수 있다.

링크 를 보면

@ConditionalOnMissingBean(RouterFunction.class)
@ConditionalOnBean(RouterFunction.class)

즉, RouterFunction의 스프링 존재 여부에 따라 분기를 타고 AnnotationConfig, FunctionalConfig 설정을 적용하게 된다. 

즉 현재 기본 설정으로는 RouterFunction Bean, Controller Bean을 동시에 스캐닝 해주지 않는다 ('기본설정'에서')


1. List<RouterFunction<T>> routerFunctions 을 파라미터로 주입받아 하나의 RouterFunction으로 재구성한다. 

2. 오더링 하고, 기본 DefaultHandlerStrategiesBuilder, ViewResolvers를 설정한다.

3. WebHandler를 구성한다. 실제 구현 클래스는 HttpWebHandlerAdapter 이다. (만약 기존의 방식이었다면, 새롭게 WebHandler 인터페이스를 상속받는 DispatcherHandler 가 처리하게 된다)

신고

tomcat 다시 보기

분류없음 2017.04.23 14:00 posted by dev.bistro

로그

https://tomcat.apache.org/tomcat-8.0-doc/logging.html
– Apache Commons Logging에서 포킹되어 개발된 tomcat-juli를 사용한다 (위치는 /bin에 존재한다)
– 기본 로그 설정은 conf/logging.properties

로그포맷
– java.util.logging 을 상속 SimpleFormatter(톰캣7 기본 포맷) , XMLFormatter ..
– OnelineFormatter ; JULI구현체이고 8.0.36의 기본 포맷

VersionLoggerListener
– server.xml 에 Listener 으로 등록이 되어 있다.
– 실행히 여러 환경 정보를 남긴다.
– https://goo.gl/eEyI9k 을 보면 별 내용없다.

Valve
– server.xml <Host>밑에 있고, 로그를 남길 수 있다
– 기본 구현체는 AccessLogValve
– checkExists 로그 기록전에 파일의 존재 유무를 체크. 기본false이므로 운영중 파일을 삭제하면 로그는 생성안됨
https://goo.gl/ynbTVI 을 보면 true로 하면 로깅 할때마다 synchroized로 파일 찾는걸 볼 수 있다.
– directory : 로그 저장하는 디렉토리 기본은 logs
– prefix : 기본 localhost_access_log, suffix : txt

그 외 Apr
– AprLifecycleListener :Apr이 사용가능한지 안한지 체크한다.
없으면 “The APR based Apache Tomcat Native library …” 로그 남는데 보기 싫으면 주석 처리 하면 됨
만약 인식을 한다면 Connector은 APR방식으로 자동 설정된다. ( https://goo.gl/zMSDuR)

 

 
운영

– setenv.sh : 각족 환경 변수를 정의하는 파일. catalina.sh가 알아서 호출한다.
(JAVA_OPTS, CATALINA_OPTS, LD_LIBRARY_PATH 등..)
– kill 명령은 프로세스에 여러 시그널을 보내는 명령어로 진화했다.예를 들어 3은 SIGQUIT고, Thread덤프를 위한 시글이다.
SIGKILL 9 은 SIGTERM에 비해 덜 안전하지만 빠르게 중지한다. ( 시그널은 man kill로 확인하자 )
– 덤프를 떳을때
tid : Thread의 메모리 address, nid: Native Thread Id
NEW : Thread를 생성했지만 아직 시작하지 않은 상태
RUNNABLE : 실행중
BLOCKED : 다른 Thread가 소유하고 있는 Monitor를 소유하기 위해 대기 중인 상태
WAITING : Object.wait(), Thread.join() 등의 메소드에 의해서 대기중인 상태
TIMED_WATING : WAITING처럼 대기중이지만, ‘최대 대기 시간’이 지정되어 있다.
TERMINATED : 실행을 종료했거나 Exception 이 발생한 상태
– 톰캣의 중단 http://goo.gl/QU2b4a
– 톰캣의 시작 http://goo.gl/TQeJ0p


tomcat port


– 톰캣이 사용하는 포트는 http, https, ajp, Shutdown 총 4개이다.
(사용안한다면 https, ajp, Shutdown은 각각 제외 할 수 있다)
– netstat -an | grep 8080 : 이 포트가 사용중인지 확인하는 명령
– 톰캣은 기본설정은 http/8080, shutdown/8005, ajp/8009 이고 https/8443은 주석처리(사용안함) 이다.
– 0 ~ 1023 포트는 예약 포트라 root가 아닌 유저로는 사용 불가 ( https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#cite_ref-2 )
tomcat Connector
– Shutdown을 제외한 https, http, ajp는 connector에 의해 관리된다.
– connector의 옵션들에 대한 설명 https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
– allowTrace : 디폴트false, 처리는 http://goo.gl/gk81DR
– enableLookups : req.getRemoteHost()는 DNS lookup을 통해 client 이름을 리턴하는데 disable이면 이 과정을 생략. 그렇게 되면 getRemoteHost, getRemoteAddr의 결과가 동일하게 IP로 나옴 http://goo.gl/nGGtKE
– maxPostSize : POST 최대 컨텐츠 크기 디폴트 2*1024^2(2MB), -1로 설정하면 무제한
– maxThreads : 최대 생성 Thread수 디폴트 200 http://goo.gl/2jJOIr 에서 ThreadPoolExecutor를 생성하는걸 확인 가능
– acceptCount : Thread Pool이 꽉 찬 경우에 queue에 대기하는데, 이 queue의 최대 수 설정
(즉 이게 크다면 많이 담을 수는 있지만 응답시간은 느리겠지?)
– maxConnections : 동시처리 가능한 Connection 수로 Connector구현에 따라 다르다.
BIO는 maxThreads값을 따른다. NIO는 10000 http://goo.gl/tuoS07
– URIEncoding : URI기본 인코딩으로 tomcat7은 ISO-8859-1, tomcat8은 UTF-8이다 (하지만 servelt 3.1표준은 ISO-8859-1이니 이건 참고만 하자)

tomcat protocol
– 톰캣8 에서는 Http11Protocol(blocking java connector)가 사라지고 nio가 기본이 되었네.
– tomcat7 bio : http://goo.gl/dNVbht , tomcat7 nio : http://goo.gl/CJB5vu
– 톰캣8에는 http-nio2를 prefix name으로 가지는 Http11Nio2가 생김 http://goo.gl/0E1JLP

http connector 의 속성
– maxKeepAliveRequests : -1은 무제한 , 1은 비 활성화
– keepAliveTimeout : 디폴트 connectionTimeout(20초) 이고 -1은 무제한 대기.
– disableKeepAlivePercentage : Thread가 maxThread대비 이 설정 퍼센트를 넘어갈때 keep-alive를 사용안함
– server : 응답 헤더의 server 속성에 노출 할 값 (기본은 Apache-Coyote…)

 

server.xml 

  • 1. Engine Namenode
    – defaultHost 속성 : Engine 하위의 Host 중에 하나이며, 어떤 Host도 처리하지 않는 요청을 처리한다.
    – 만약 2개 이상의 Host가 있다면 반드시 하나는 Engine의 defaultHost로 지정되어야한다.
  • 2. Host
    – 기본 구현은 https://goo.gl/5v7Jql (StandardHost.java)이며, 가상 호스트 기능을 제공한다.
    – appBase는 Host의 애플리케이션 디렉토리(디폴트 webapps)
    – xmlBase는 ContextXml(descript) 디렉토리. 기본은 Bconf/<Engine>/<Host> 디렉토리
    – autoDeploy : appBase, xmlBase내의 변경 사항을 주기적으로 확인하는 옵션
    – unpackWARs : WAR파일을 풀어서 사용할 지 여부
    – workDir : <host> 애플리케이션이 사용하는 Scratch 디렉토리를 설정
    – Scratch : JSP컴파일 결과 생성되는 java, class 파일등을 저장한다. 위치는 work/<Engine>/<Host>


신고
TAG tomcat, valve


티스토리 툴바