2018년 8월 23일 목요일

안산시 대피소 정보

안양 살때는 근처 아파트 지하주차장이 2등급 방호 대피소였는데

이사온 안산은 주민자치센터 대피소도 3등급이다

사실 3등급은 그냥 대피정도 가능한 곳이고  방폭이 어느정도 가능한 지하시설이다

화생방이나 핵등의 방폭방화는 1등급에서 가능하다

안사에서 보면  신혼때 살았던 안산 사1동  주민자치센터가 1등급이다  아마도 지휘시설용으로 만들어 놓은듯

일단 문제가 발생하면

1차  이동 주민자치센터 (공공시설이다 방호등급 3)
1차 이동 푸르지오 2차 아파트 (지하공간이 넓다 방호등급 3)

상태가 심각하면

2차 사1동 주민자치센터(공공시설물에 방호 1등급) 로 튀면 되겠다


2018년 8월 18일 토요일

간만에 작정하고 덤비는 자동차 자가정비

2018년 8월 18일 토요일  10:00~13:00 3H

작업후 업데이트는.....언제쯤이나 할꺼나....

이젠몰 DIY샵 셀프정비
https://m.blog.naver.com/PostList.nhn?blogId=illangel
정비예약
https://booking.naver.com/booking/10/bizes/99636?area=bns

차종 : 카렌스 2000 1.8 LPG



1. 작업내용
미션케이블 부싱교환(완료)
마이너스접지(완료)
계기판 램프교환(완료)
리어휀다부식 처리 및 도색( 도색1회+클리어 남았음 )
실린더세척
엔진헤드커버(일명 짐바가스켓) 개스킷 교환
엔진플러싱, 오일교환, 팬 세척 실링
미션 오일교환, 팬 세척실링
캘리퍼 메인터넌스
리어 스테빌라이져 링크 와  부싱


2. 작업순서
플러그 제거 -> 실린더거품도포(10분)-펌핑 -> 석션 및 클리닝->
헤드커버탈거 -> 개스킷교환(청소.실링) -> 헤드커버조립(10mm  0.8~1.2kmg) ->
플러그 조립(1.5~2.3kgm) ->

엔진오일 석션 1리터 -> 클리너투입 -> 시동후 공회전 15분

시동 Off + 리프트업->
엔진오일 드레인(14mm  3~4.2kgm) -> 엔진오일 필터 제거 ->
엔진 오일팬 제거 ->
미션 오일 드레인  ->
미션 오일팬 제거(제거시 볼드 위치 마킹할 것 긴거 짧은거)  -> 팬 세척

엔진오일필터 장착
엔진오일팬 실링 장착(???mm  0.8~1.1kgm)
미션오일팬 실링 장착(???mm  0.8~1.1kgm)  8개 볼트 A형 B형 다름) -> 1시간 대기(다음작업진행)

스테빌라이져 링크,부싱 교환(??mm   4.4~6.2kgm) ->
리프트다운
타이어 분리(21mm   9~12kgm) ->
캘리퍼 분해, 구리스도포 (좌 프론트, 좌 리어) -> 타이어 장착

엔진오일.미션오일 주입 -> 주행테스트

==============
3. 구입내용

미션오일 현대모비스 순정 ATF-SP 3 4L  1개 : 2만원
엔진오일 S오일 7 RED1 5w30 4L  2개 : 2만3천원 (다음에도 쓰려고)
오일팬 가스킷(구입)  : 5천원
엔진오일 누유 방지제 (구입)  : 록타이트 스탑리크 1만5천원 (엔진 헤드도 소량 누유중)
엔진오일필터, 에어필터 세트 :  1만2천원
연소실 클리너(거품식) MX-5000 4개 :  2만원
발보린 플러싱오일 1L 2통 : 9천원
퍼머텍스 울트라카파 RTV 실리콘 가스켓 101BR 85g 1개 : 1만 6천원  (헤드커버게스킷용)
록타이트 실리콘 가스켓 5910 50ml 2개 : 1만 6천원 (오일팬 개스킷작업용)
LPG 연료필터 4개 : 11880원
링크 어셈플리컨트롤 좌우: 13200원  (스테빌라이져, 활대) -주행시 뒤쪽이 달달달
링크 부싱 2개 :  1100원

리프트 1시간 1만원 대여
오일받이 (샵)
깔대기  (샵)
셕선, 임팩드라이버, 기타 공구 (샵)

개인공구
드라이버, 복스알세트, 토크렌치
뺀치, 니퍼, 케이블타이
오일종이, 걸래 , 장갑, 실리콘 장갑 
철솔, 붓, 엔진룸세정액, 엔진크리너,알콜,부식제거제


4. 작업시 정보 (공구사이즈 및 체결토크)
엔진오일 드레인 볼트 14mm  3~4.2kgm
엔진오일 팬 볼트 10mm  0.8~1.1kgm
미션오일 드레인볼트 ????
미션 오일 팬 볼트 ???mm  0.8~1.1kgm

타이어 볼트 21mm   9~12kgm
스태빌라이져 컨트롤 링크  ??mm   4.4~6.2kgm

캘리퍼 프론트 (52-13)
락 볼트 4.6~6.9 (켈리퍼 고정볼트)
볼트 2.6~3.0  (동작부위)
캘리퍼 리어   17mm (52-17)
락 볼트 3~4 (켈리퍼 고정볼트)
볼트 4.6~6.8  (동작부위)

언더커버  10mm  1.4~1.6 kgm
실린더헤드커버  10mm  0.8~1.2kmg
점화플러그 1.5~2.3kgm
엔진오일필터 : 손으로장착 -> 렌치를이용하여 1과 1/6 (60도) 회전


5. 오일량 및 측정 기준

미션오일  : 5.2L 정량 그냥 빼면 2L 나오고 3L는 토크컨버터 안에 있음
엔진오일 : 3.6L 정량  (오일필터 200ml)

미션측정 :
기준 : 예열상태 +  P-1로 각 단계별 5초대기  2~3회 수행  HOT 구간 확인
HOT 측정 - 예열 + 시동ON +  P 상태에서 체크  (HOT 구간)
Cool측정 - 시동걸기전 Cool 구간

엔진오일 : 예열 + 시동OFF  상태에서 5분후 체크

2018년 7월 26일 목요일

JVM 까보기



리브레 오피스로 작성했더니...

이걸 PPT로 바꾸면 깨지고... html로 export해도 못쓰것고..

odp 파일을 google slide에서 읽어들이고 깨지는 부분 조금 수정한 후 저장

그리고  메뉴에서 "퍼블리쉬 투 더 웹" 메뉴 선택해서 "임베디드"선택하면 html 코드로 생성되고

그걸 블로그에서 HTML 편집기 상태에 붙여 넣는다....그럼 아래 같이 나온다...

젠장 졸 복잡하내


2018년 6월 29일 금요일

Nginx HTTP Proxy에서 Protocol 혼용에 따른 HTTP 502 발생 CASE 검토



1.server architect

client <-http-> nginx(proxy) <-http-> java was(tomcat, Armeria..etc)

(이 외에 tomcat AJP, weblogic,jboss등의 전용 proxy모듈등이 있을 수 있음, 케이스마다 다르다)

2. basic information
2.1 nginx의 proxy module을 사용하여  upstream(WAS등 여하의 뒷단 서비스)과 HTTP 통신시 프로토콜정보

porxy 모듈의 소스(메뉴얼에도 설명이 없다....)
 https://github.com/nginx/nginx/blob/68b50f71e193e58ee117ef36f25387cbaa75edf3/src/http/modules/ngx_http_proxy_module.c


2902 ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{....
3281 ngx_conf_merge_uint_value(conf->http_version, prev->http_version,
3282                              NGX_HTTP_VERSION_10);

- HTTP 1.0 지원
nginx의 proxy module의 기본 protocol은 http 1.0

- HTTP 1.1 지원
http 1.1로 동작시키기 위해서 keepalive 구문을 사용한다.

    upstream proxy_service {
        server 127.0.0.1:20080;
        keepalive 32;
    }

- HTTP 2.0 지원
일반적으로 우리는 revers proxy구조를 만들고 이때 Client와 upstream 사이에 정보확인 안되므로
프로토콜 업그레이드가 필요할 수 있다.이러한 경우 HTTP 2.0(websocket,SPDY)으로 동작시킬 수 있다 (1.3.13+)

http://nginx.org/en/docs/http/websocket.html

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

3. Case Study
3.1 HTTP 502
Client에서의 요청을 처리하던중 가끔 HTTP 502에러가 발생한다.????

3.1.1 WAS Restart, WAS Full GC
여하간의 문제로 upstream server가 nginx의 socket 생성 자체를 해주지 못한다면 502 (bad gateway)가 발생할 수 있다. (느리거나 용량문제로 발생하는 504와 다르다)
여기서는 이 문제를 다루지 않는다

3.1.2 proxy connection에 http 1.0, 1.1 혼용사용
HTTP 1.0은 keepalive를 지원하지 않는다
또한
HTTP 1.1도 keepalive를 off 할 수 있다. 다만 HTTP 1.1은 keep alive가 주요 목적이라고 감안하고 다음 이야기를 진행 한다.

client -> upstream 으로 접속시  keepalive를 켜는 경우와 끄는경우가 존재한다.
대부분 관리자의 취향(?)에 따르지만 이론적인 장단점은 다음과 같다 .

keepalive off(HTTP1.0) : 매 요청시 connection을 재 생성하여 upstream에 접속한다. 잘못된 요청에 의한 connection오염위험이 적으나 대량부하 사이트에서 다수의 socket자원이 생성된다
Keepalive on(HTTP1.1) : 일정수의 접속유지 connection을 생성하여 공유한다. connection이 오염되는경우 장애 위험이 있으나 proxy모듈과 upstream software적인 결함없이 안정적이라면 자원을 재활용하고 미리 생성해 놓을수 있으므로 안정적이고 속도가 빠르다

다음과 같이 설정하면 80으로 들어온 모든 요청은 keepalive로 접속하여 upstream으로 전달되고 32개의 connection은 지속적으로 재활용된다.


    upstream proxy_service {
        server 127.0.0.1:8080;
        keepalive 32;
    }


    server {
        listen 80;

        location / {
            proxy_pass http://proxy_service;

            proxy_http_version 1.1;
            proxy_connect_timeout 5;
.....
        }


문제는 다음과 같이 혼용되는 경우

    upstream proxy_service {
        server 127.0.0.1:8080;
        keepalive 32;
    }


    server {
        listen 80;
        #proxy_http_version 1.1; 지시자가 있으므로 1.1로 upstream으로 향한다.
        location / {
            proxy_pass http://proxy_service;

            proxy_http_version 1.1;
            proxy_connect_timeout 5;
.....
        }

        # 지시자가 없으므로 기본값인 1.0으로 upstream으로 향한다.
        location /statcheck {
            allow 127.0.0.1;
            deny all;
            proxy_pass http://proxy_service;
        }


모든 요청이 정상적으로 처리될 것 같으나

client가 /statcheck 를 호출하는 경우  http1.0 으로 upstream으로 요청이 넘어가고 upstream은 keepAlive off로 판단하여
기존의 KeepAlive로 생성된 해당 요청 Connection을 끊어버리게 된다.

client                                      upstream
1. A GET /index.html HTTP1.1 요청 전송 ->
2.                                          <- 응답 200 ok
3. B GET /statcheck HTTP1.0 요청 전송 ->
5.                                          <- 응답 200 ok
6.                                     <- Fin 전송
7. C GET /hello.html HTTP1.1 요청 전송 ->
8.                                     <- RST 전송

위의 경우 A 요청은 정상 처리가 되고 사용된 Connection정상
B 요청이 들어오면 1.0 이므로 정상처리후 해당 Connection을 끊는 동작시작
(HTTP Protocol의 정상 동작이나 추가 설명은 아래쪽에)
C요청을 전송하였으나 upstream에서 RST 전송으로 끊어지면서 HTTP 502오류 처리





3.1.3 upstream connection 구현체의 timeout (nginx proxy timeout 가 upstream보다 짧아야 문제가 없다. upstream으로 tomcat을 사용하는 경우 connectionTimeout에 지정된다.)
네트워크통신의 가장 일반적인 방법은 요청을 수행한 Client가 작업이 끝나면 Server쪽에 Connection을 끊는 요청을 하는 케이스다.
만약 Server쪽에서 끊어버리거나 중간의 방화벽, Porxy등에서 끊어지는현상이 있다면 의도한(과도한 자원잠식방지, 자원재활용, 보안정책)결과 일 수 있으나
간혹 nginx와 upstream간의 timeout문제로 connection이 끊어지면서 502 가 발생하는 경우가 있다

ex)
nginx proxy_timeout 10sec
tomcat connectionTimeout 5sec

인 경우 tomcat의 connection 관리자가 5초가 넘게 Idel인 Connection에 대하여 RST(reset)을 전송하여 요청을 끊어버릴 수 있다.
이런 경우 절묘한 타이밍에(?) 요청처리를 위해 connection을 사용중이였다면 완료되지 못하고 connection이 유실되고
해당 요청은 502처리된다.

client          upstream
1. A요청 전송 ->
2.              <- 응답
3.          5초 IDLE
4. <- Fin 전송
5. B요청 전송 ->
6. <- RST 전송

상기와 같이 Client에서 정상적으로 종료 요청을 해서 정리되는 케이스가 아니라면
upstream 에서 Fin 전송(끊기위해) 후 RST를 전송하기 전 까지 사이의 짧은 시간에 B 요청이 들어올 수 있고(낮은 확율로)
이 경우 사용자는 nginx log에서 HTTP 502에러를 보게 된다. 물론 WAS의 log에는 아무 내용이 없다.

대부분 이러한 케이스에 대하여
proxy_timeout (nginx proxy, AJP...etc)  == upstream timeout 을 권장하지만
WEB과 WAS가 같은 서버가 아닌경우 NTP로 동기화 한다고 하더라도 ms 수준의 차이가 발생할 수 있으므로

proxy_timeout (nginx proxy, AJP...etc)  < upstream timeout 로 설정 하는것이 권장된다.


4. WorkAround
상기의 타이밍 문제(Fin과 RST 사이의 짧은 시간에 요청이 들어오는)는 KeepAlive + http proxy모듈을 사용하는경우 다음사항이 검토되어야 한다.

4.1. upstream keepAlive OFF  (비권장)
KeepAlive를 끄면 모든 요청처리는 매번 새로운 Connection에서 처리되므로 상기 발생되는 문제를 회피할 수 있다
하지만
대량부하 사이트에서 proxy 처리를 하는 경우 다수의 socket자원이 생성되게 되며 자원관리를 위해 overhead가 필연적이므로 권장하지 않는다.

tomcat AJP, JBoss, Weblogic등의 경우 connection Pool을 사용하지 않는경우와 같아진다. 성능문제


4.2. upstream KeepAlive ON (권장)
Config시에 주의를 요한다
모든 요청은 KeepAlive로 upstream으로 전달 되도록 구성되어야 한다. 상기 3.1.2항의 프로토콜 혼용상태로 구성되면 문제가 발생한다.


5. 기타

그렇다면 tomcat mod_jk AJP, weblogic mod_wl, JBoss mod_cluster 등의 다른 proxy 모듈을 사용해도 이러한 제약 사항에 걸리는가?
그렇지는 않다
대표적인 AJP를 예를 들면 AJP는 별도의 프로토콜 stack을 구성하므로 상기와 같은 문제가 발생하지 않는다.
사용자의 http 요청이 web 으로 들어오면 AJP protocol로 wraping 되어 tomcat의 별도 AJP Port로 통신한다.
또한 keepalive의 지원여부가 AJP Connection의 생명주기와 무관하기 때문에 끊어지는 일은 없다.

다만 3.1.3항의 timeout 문제는 발생할 수 있으므로 주의가 필요하다 (이경우 AJP에 Cluster 설정이 없는 경우 502가 발생한다)


.이상

2018년 2월 20일 화요일

게스트하우스의 파티에 대한 기억


2012년 21코스 연결로

한창 올레길 붐이 일던 시기 도착한 제주



게하에 들어가 수더분한 형님과 인사하고

멍 때리며 시간을 보내던 중

랜트카에서 여자둘 남자둘의 한무리가 도착

양손 가득 봉지에는 술과 고기등 먹을 거리가 있었고

너무나 당연하다는양 저녁에 파티안하냐며...

쥔장 형님과 썩은 웃음을 교환하고

저녁에 불픠워주고 즈들끼리 먹게 그냥 방치



다음날은 조용조용한 남여 몇몇이 따로 따로 도착

저녁시간 형님이 냉동실에 짱박아둔 고기를 꺼내고

라면을 끓이고 이리저리 주섬주섬 모아 간소하지만

긴시간 서로 이야기를 나누며 시간을 보냈고

흥이 오른 누군가는 폰에서 나오는 노래에 바운스를 튕기던 ...



게스트 하우스의 주인은 호스트였다

게스트는 말 그대로 여행중 하루 쉬었다갈 손님이

씼고 먹고 정보를 교환하고 등대고 잘 공간만 제공하면 그만 이였다.

그래서 저렴했고 사람들끼리 맞으면 같이 가고 같이 먹고

아니면 조용히 자기의 시간을 가지던 개인적인 공간 이였다



올레길이 흥하면서 서비스의 질은 팬션에

가격은 싸게 지내고 싶은 사람들과

가벼운 주머니에 하루이틀 관광삼아 케리어를 끌고온 사람들이

이성을 만나서 술한잔 하는 재미를 찾기 시작했고

때마침

육지사람들의 엄청난 유입과 우우죽순 생겨난 게스트하우스에 의해

서비스 인플레이션이 심해지면서 1세대 게스트하우스 들은 적당한 가격에 돈을 벌고 빠져 버렸다

그 이후  아프X카, 산티X고 등등의 유명한 파티 게하들의 모델을 그대로 답습한 많은 숙소가 생겼고

가끔 썸이나 지분거림 정도로 끝나던 이성간의  충돌은 사고와 사건으로 커져 갔다




나처럼 배낭매고 땀에 절은 게스트가 도착해서

세탁기 돌리는데 눈치를 봐야하는곳이 생겼고
(오해말자 좋은곳도 많다.)

대화의 시간에 자신의 여행이야기 보다

족보 이야기 회사이야기 연애 이야기가 우선으로 오르내리게 되었다

1년에 한두번 정도 찾아가던 나는 가끔 조용하면서 나름의 기준으로 운영하던

많은 게스트하우스가 사라지는것을 보았고 안타까웠다

개인적으로 특히나 해오름게하...

북카페였던 사이게스트하우스와 한라산게스트하우스는 아쉬움으로 남는다
(인수 하시기도 했고 폐업하기도 했다.)



호스트가 주인인 게스트하우스의 파티를 본것이 오래된 것 같다

게스트들 끼리 모여 짝짓기 놀이 하듯 서로 호구조사를 하고

술을 주량넘어 벌컥대는 시간은 어느정도 없어 졌으면 좋겠다



전날 짱박아 뒸던 모든 소주와 맥주를 털어먹고

새벽까지 같이 달렸던 전우(?)들과

호스트형님이 끓여주던 해장라면을 먹던 시절이 그립다.