728x90
반응형

https://www.youtube.com/watch?v=2vISYUk0_3M 

 

이 문제에 대한 정부에 해결책을 나는 줄수있다.

기업에 출퇴근 유연근무제를 강제하는 것이다

자유롭게 출퇴근 시간을 정할 수 있도록 좆소기업들도 강제해야 이러한 상황이 해결될 수 있다.

그리고 이러한 정책을 마련해도 회사 눈치보여서 실행할 수 없다면

그러한 꼰대들을 마음데로 해고시킬수 있는 법안도 발의해야 한다

정책을 마련하면 뭐하냐고 

꼰대들이 회사를 다니고 있는데 말이다

제발 꼰대들좀 회사에서 제거시켜라

 

728x90
반응형
728x90
반응형

집착, 강박의 괴로움은 언제나 더 아름답고 더 좋고 더 나은 것들을 향한 욕망때문이다.

집착의 괴로움에서 벗어나는 지혜로운 길이 있다.

의존적이고 상대적인 기준을 해체하는 것이다.

판단하지 않는것이다.

당신은 당신의 존재 그 자체로 하나의 완전한 우주다.

이 사실을 늘 명심하라.

무엇도 판단하지 마라.

 

배우자나 자녀, 부모, 상사 등 누군가를 이해하려고 애쓰지마라.

득히 어떤 기대가 무너졌을 때는 있는 그대로를 허락 하는 연습이 필요하다.

긴장을 풀고 내려놓고 허락하고 알아차려라.

 

당신안에 무엇이 있는지 냉철하게 파악할 수 있는 기회다.

그러니 그 기회를 당신 삶의 좋은 행운과 기운으로 받아들여라.

이는 당신이 진정한 변화를 얻을 수 있는 절호의 기회다.

 

삶은 두가지 중 하나다.

당신이 통제할 수 있는 일이거나 그렇지 않은 일이거나 통제할 수 있으면 통제권을 쥐어라.

그렇지 않으면 내버려두라.

우리에게 필요한 삶의 기술은 관심을 쏟는 법이 아니라, 제대로 외면하는 법이다.

 

로프트를 사랑하라

한계 너머에 무엇이 있는지 아무도 알 수 없다.

그러니 언제나 끝까지 가야한다.

언제나 높은 곳을 오르고 있는 자신의 모습을 발견할 때 당신은 비로소 한계를 넘어가고 있는 중이다.


우리의 영혼을 가로막는 3가지가 있다.

첫째, 부정적인 감정에 먹이를 주는 것이다.

둘째, 미리 판단해버리고 마는 것이다.

셋째, 어린가에 기댐으로써 균형을 무너뜨리는 것이다.

이 3가지에서 벗어나고자 노력과 훈련, 이것이 삶의 전부이다.

 

0을 향해 가라

좋은 삶은 결국 무로 돌아가는 것이다.

지금부터 마음에 잔뜩 달라붙은 것들을 하나씩 내려 놓아라.

가장 가벼운 사람이 가장 빨리 정상에 오른다.

 

삶의 성공은 당신의 믿음이 얼마나 멀리까지 당신을 데려갈 수 있는지의 싸움에서 결정됩니다.

기적같은 일이나 예상을 훨씬 뛰어넘는 결과는 그것을 이루는데 필요한 무엇인가가 내면에 확실히 존재한다는 믿음을 통해 결정된다.

마음의 힘에 대한 믿음이 삶의 중요한 것들을 결정한다.

당신보다 먼저 성공하고 먼저 뭔가를 이루고 먼저 뭔가를 발견한 사람들은 늘 이렇게 답한다.

해낼 수 있다는 믿음을 잃지 않았기 때문입니다.

당신의 믿음을 의심하지 말라

 

728x90
반응형
728x90
반응형

cli.c
0.00MB
srv.c
0.00MB

 

 

TCP Keepalive HOWTO (tldp.org)

 

TCP의 경우, connection oriented protocol이지만, 송수신 중, 상대방 프로세스가 종료되는 등 정상적인 상황이 아닌 경우에는 세션의 종료여부를 감지할 수 없다. 

다시말해, LAN 케이블이 뽑힌다든지, 기타 비정상적인 종료가 있을 경우, 상대측에서 감지할 수 없다는 것이다.

 

1. TCP_KEEPIDLE

- 연결 활성화 상태를 유지하는 시간

- The time(in seconds) the connection needs to remain idle before TCP starts sending keepalive probes.

flags = 10;
setsockopt(sfd, SOL_TCP, TCP_KEEPIDLE, (void *)&flags, sizeof(flags)));

 

2. TCP_KEEPCNT

- 연결을 종료하기 전에 연결 유효성을 검사하는 횟수

- The maximum number of keepalive probes TCP should send before dropping the connection.

flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPCNT, (void *)&flags, sizeof(flags))) 

 

3. TCP_KEEPINTVL

- The time (in seconds) between individual keepalive probes.
flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPINTVL, (void *)&flags, sizeof(flags)));

 

4. SO_KEEPALIVE

flags =1;
setsockopt(rfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&flags, sizeof(flags)))

SO_KEEPALIVE 옵션은 TCP 소켓에 적용된다. 이 옵션을 1로 설정하면 일정 시간(통상 2시간)동안 해당 소켓을 통해 어떤 자료도 송수신되지 않을 때, 커널에서 상대방의 상태를 확인하는 패킷을 전송한다. 이 패킷에 대해 상대방이 정상적이면 ACK 패킷을 전송한다.

  ACK 패킷으로 정상이라고 응답하는 경우 응용 프로그램에는 어떠한 통보도 하지 않고 커널 간의 확인만으로 상대방이 살아 있음을 확인하고 마무리한다. 상대방으로부터 아무런 응답이 없거나 RST 응답을 받으면 소켓을 자동으로 종료한다.

  기본적으로 SO_KEEPALIVE 옵션은 서버측 소켓에 설정되어 상대방 시스템의 고장이나 정전, 네트워크 연결이 끊기는 등 통신이 불가능한 상황을 탐지해 준다. 상대방 시스템이 고장난 경우 ETIMEOUT 오류를, 상대방 시스템까지 네트워크 연결이 불가능한 경우 EHOSTUNREACH 오류를 반환한다. 응용 프로그램에서는 해당 오류에 따라 처리하면 된다. 시스템이나 네트워크 문제가 아닌 응용 프로그램 문제라면 응용 프로그램이 종료될 때 상대방 커널에서 FIN 패킷을 보내 연결 종료를 시작하기 때문에 응용 프로그램에서는 EOF에 대한 처리를 하면 된다.

  만약 SO_KEEPALIVE 옵션이 설정되지 않은 상태에서 상대방 시스템이 고장이거나 네트워크 연결 등에 장시간 문제가 발생하면 응용 프로그램은 아무런 상황을 모른 체로 계속해서 상대방의 응답을 기다려야 하는 상황이 발생한다.

  SO_KEEPALIVE 옵션은 자료의 송수신이 일정 시간 동안 없을 경우 응용 프로그램이 아닌 커널에서 상대방의 상태를 파악하기 위해서 패킷을 보내는 옵션임을 알았다. 그런데 여기서 일정 시간은 보통 2시간 정도이고, 커널 변수로 관리된다. 따라서 커널 변수를 수정해서 시간을 조정할 수 있지만, 이런 경우 다른 모든 소켓에도 적용되기 때문에 전체 성능에 영향을 준다. 때문에 신중을 기해야 한다.

 

 

* test 결과

tcpdump

15:12:53.465155 IP (tos 0x0, ttl 128, id 31112, offset 0, flags [DF], proto TCP (6), length 52) 
    210.217.178.185.55596 > host117.cslistener: Flags [S], cksum 0x4158 (correct), seq 1438701007, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 ==> (SYN)
15:12:53.465179 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    host117.cslistener > 210.217.178.185.55596: Flags [S.], cksum 0x0b09 (incorrect -> 0x5897), seq 567562173, ack 1438701008, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 ==> (SYN ACK)
15:12:53.465849 IP (tos 0x0, ttl 128, id 31113, offset 0, flags [DF], proto TCP (6), length 40)
    210.217.178.185.55596 > host117.cslistener: Flags [.], cksum 0xeb65 (correct), seq 1, ack 1, win 8212, length 0 ==> (ACK)

15:13:03.467762 IP (tos 0x0, ttl 64, id 50768, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0

TCP_KEEPIDLE defines the heartbeat frequency

This means the interval between the last data packet sent (simple ACKs are not considered data) and the first keepalive probe; after the connection is marked to need keepalive, this counter is not used any further

flags = 10; // 10 seconds
setsockopt(sfd, SOL_TCP, TCP_KEEPIDLE, (void *)&flags, sizeof(flags));

 

15:13:08.475715 IP (tos 0x0, ttl 64, id 50769, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:13.483723 IP (tos 0x0, ttl 64, id 50770, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:18.492715 IP (tos 0x0, ttl 64, id 50771, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:23.499762 IP (tos 0x0, ttl 64, id 50772, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:28.507734 IP (tos 0x0, ttl 64, id 50773, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [R.], cksum 0x0afd (incorrect -> 0x0a91), seq 1, ack 1, win 229, length 0

TCP_KEEPINTVL defines the heartbeat frequency when there is no answer from the other side;

TCP_KEEPCNT dictates how many unanswered heartbeat will indicate a dropped connection;

flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPCNT, (void *)&flags, sizeof(flags));
flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPINTVL, (void *)&flags, sizeof(flags));

 

결론: [15:13:28] read() ends

 

Holmes He

 

setsockopt, SO_KEEPALIVE and Heartbeats

There are two end purposes for sending heartbeats through a persistent connection. For a back-end application, heartbeats are generally used to detect an absent client, so as to drop a connection and

holmeshe.me

 

728x90
반응형
728x90
반응형

목이아파 병원에 왔다.

일자목 거북목 그게 뭔데 어쩌라고 하면서 살아온 댓가인가?

너무 아프다.

mri 촬영을 해야하는데 가격이 마침 25만원이란다.

실비처리로 받을수 있는지 모르겠다.

좋은 실비보험 하나 들어놓을걸..

그냥 싼걸로 아무거나 선택해서 들어놓은 실비보험이 효자노릇을 해줄지 모르겠다.

부디 목디스크가 아니길..

목디스크여도 수술까지는 가지않아야한다. 

mri찍는데 20분이나 걸린다고 한다. 처음 알았다.

어쨌든 미국이 아닌걸 감사해야하나?

어쨌든 수술만은 피하길 간절히 기도하면서 mri 촬영을 기다려본다

728x90
반응형
728x90
반응형

1. 지방소득세

지방자치단체의 구성원인 주민을 대상으로 과세되는 지방세로 소득의 크기에 따라 과세되는 소득분(특별징수,종합소득세분,양도소득세분,법인세분)으로 구분됩니다.

 

2. 특별징수하는 지방소득세

그 과세표준이 되는 소득에 대하여 소득세, 법인세를 원천징수하는 때 

* 원천징수: 소득이나 수익을 지급하는 쪽에서 세금의 일부를 거두어들이는 방법

 

3. 지방소비세

지방소비세는 지방재정 확충의 일환으로 국세인 부가가치세액의 5%를 지방세로 이양

 

4. 납세의무자

납세의무자란 지방세법에 따라 지방세를 납부할 의무가 있는자

 

5. 납세자

납세자란 납세의무자(연대납세의무자와 제2차 납세의무자 및 보증인을 포함)와 지방세를 특별징수하여 납부할 의무를 지니는자를 말한다.

 

6. 교부청구란

관세관청이 체납자의 재산을 압류 등을 하기 전에 다른 기관에서 체납처분, 강제집행을 하는 경우 체납자 재산 환가대금에 대하여 배당을 받기 위하여 교부를 청구하는 것

 

7. 법정기일

부가세나 소득세처럼 신고로서 납세의무가 확정되는 경우에는 납세자의 신고일을 법정기일로 보아 국세 우선권을 적용한다. 

728x90
반응형
728x90
반응형

종합부동산세란 과세기준일(매년 6월 1일) 현재 국내에 소재한 재산세 과세 대상인 주택 및 토지를 유형별로 구분하여 인별로 합산한 결과, 그 공시가격 합계액이 각 유형별로 공제금액을 초과하는 경우 그 초과분에 대하여 과세되는 세금

 

개인이 보유하고 있는 전국의 주택과 토지를 합산한 금액이 과세 기준금액을 초과하는 경우 과세하는 세금

즉, 재산세와는 별도로 고액의 부동산에 대하여 추가로 부과하는 세금

부동산 과다 보유를 억제하고 부동산 시장을 안정화 하는데 목적

 

728x90
반응형
728x90
반응형

양도가액
- 필요경비

---------------

양도차익

- 장기보유특별공제

---------------

양도소득금액

- 양도소득기본공제

---------------

양도소득과세표준

x 세율

---------------

양도소득산출세액

+ 가산세

- 감면 및 공제새액

- 기납부세액

---------------

납부할세액

728x90
반응형
728x90
반응형

1. install : virtualbox + centos

[CentOS 7] Virutal Box에 CentOS 7 설치하기 (tistory.com)

 

[CentOS 7] Virutal Box에 CentOS 7 설치하기

안녕하세요. 리습입니다. Linux 환경을 만드는 방법은 다양합니다. Local PC에 직접 설치하는 방법도 있으며, Docker를 이용해 환경을 만드는 방법도 있습니다. 하지만, 테스트 환경으로써 가장 간단

programfrall.tistory.com

- 위 내용을 따라 설치하였기 때문에 virtualbox는 6.1로 설치

- GUI 사용을 위하여 gnome desktop 을 체크하고 설치

 

2. Network 설정

VirtualBox에 CentOS 7 설치 (enp0s3) - 제타위키 (zetawiki.com)

 

VirtualBox에 CentOS 7 설치 (enp0s3) - 제타위키

  다른 뜻에 대해서는 VirtualBox에 CentOS 7 설치 문서를 참조하십시오. VirtualBox에 CentOS 7 설치하기 1 사전 작업[ | ] 2 VM 생성[ | ] VirtualBox 실행 [새로 만들기(N)] 클릭 (가상 머신 만들기)[1] --- 이름: Cent

zetawiki.com

- 기본 설정인 NAT로 설정

- 위 내용과 같이 ifup enp0s3 를 실행했을 때 인터넷이 동작함

- 위 내용에서 eth0 설정까지 따라해야 재부팅 후에도 인터넷이 동작함

 

3. pc에서 ssh 접속을 위한 port forwarding

[VirtualBox] Linux 네트워크 설정 방법 (tistory.com)

 

4. virtualbox 화면 크기 조절

마무: virtualbox 화면 크기 조정 자세히! (mamu2830.blogspot.com)

728x90
반응형
728x90
반응형

1. Epoll?

Epoll은 리눅스에서 select의 단점을 보완하여 사용할 수 있도록 만든 I/O통지 모델이다.

파일 디스크립터를 사용자가 아닌 커널이 관리를 하며, 그만큼 CPU는 계속해서 파일 디스크립터의 상태 변화를 감시할 필요가 없다.

즉, select처럼 어느 파일 디스크립터에 이벤트가 발생하였는지 찾기 위해 전체 파일디스크립터에 대해서 순차검색을 위한 FD_ISSET 루프를 돌려야 하지만, Epoll의 경우 이벤트가 발생한 파일 디스크립터들만 구조체 배열을 통해 넘겨주므로 메모리 카피에 대한 비용이 줄어든다.

 

#incude <sys/epoll.h>

int epoll_create(int size)

   

fd들의 입출력 이벤트 저장을 위한 공간을 만들어야 하는데, epoll_create는 size만큼의 입출력 이벤트를 저장할 공간을 만든다. 그러나 리눅스 2.6.8 이후부터 size 인자는 사용되지 않지만 0보다는 큰 값으로 설정을 해 주어야 한다. 커널은 필요한 데이터 구조의 크기를 동적으로 조정하기 때문에 0보다 큰 값만 입력하면 된다.

    

반환 값으로는 정수형 데이터가 반환이 되는데, 이를 일반적으로 epoll fd라하며 이 fd를 통해 앞으로 epoll에 등록 된 fd들을 조작하게 된다. 


int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)

epoll_ctl은 epoll에 fd들을 등록/수정/삭제를 하는 함수인데 일반적으로 epoll이 관심을 가져주길 바라는 fd와 그 fd에서 발생하는 관심있는 사건의 종류를 등록하는 인터페이스로 설명된다.

 

* epfd : epoll fd 값

* op : 관심가질 fd를 등록할지, 등록되어 있는 fd의 설정을 변경할지, 등록되어 있는 fd를 관심 목록에서 제거할지에 대한 옵션값

* fd : epfd에 등록할 관심있는 파일 디스크립터 값

* event : epfd에 등록할 관심있는 fd가 어떤 이벤트가 발생할 때 관심을 가질지에 대한 구조체. 관찰 대상의 관찰 이벤트 유형


int  epoll_wait(int  epfd,  struct epoll_event * events, int maxevents, int timeout)

epoll_wait는 관심있는 fd들에 무슨일이 일어났는지 조사한다. 다만 그 결과는 select나 poll과는 차이가 있다. 사건들의 리스트를 (epoll_event).events[] 의 배열로 전달한다. 리턴값은 발생한 사건들의 갯수가 리턴된다.

* events : 이벤트가 발생된 fd들을 모아놓은 구조체 배열.

* maxevents : 실제 동시접속수와 상관없이 maxevents 파라미터로 최대 몇개까지의 event만 처리할 것임을 지정해 주도록 하고 있다. 만약 현재 접속수가 1만이라면 최악의 경우 1만개의 연결에서 사건이 발생할 가능성도 있기 때문에 1만개의 events[] 배열을 위해 메모리를 확보해 놓아야 하지만, 이 maxevents 파라미터를 통해 한번에 처리하길 희망하는 숫자를 제한할 수 있다.

* timeout : epoll_wait의 동작특성을 지정해주는 중요한 요소인데, 밀리세컨드 단위로 지정해주도록 되어 있다. 이 시간만큼 사건발생을 기다리라는 의미이며 기다리는 도중에 사건이 발생하면 즉시 리턴된다.

-> timeout(-1)로 지정해주면 영원히 사건을 기다리는 blocking상태가 된다.

-> timeout(0)로 지정해주면 사건이 있건 없건 조사만 하고 즉시 리턴하는 상태가 된다.


Edge Trigger(ET)

 

특정 상태가 변화하는 시점에서만 감지.

 

특정 디지털 신호 000 111 000 111 000 111 일 경우 신호가 0에서 1로 변하는 시점에서만 이벤트가 발생한다.

소켓 버퍼에 대응하면, 한번에 읽을 수 있는 데이터 버퍼가 600인데, 데이터가 1000바이트가 도착했다면, 600바이트만 읽고 나머지 400바이트는 읽지 않은 상태에서 더 이상의 이벤트는 발생하지 않는다.

읽은 시점을 기준으로 보면 더이상의 상태 변화가 없기 때문이다.

따라서 한번에 읽을 수 있는 바이트 이상의 데이터가 오게 된다면 추가적인 작업을 따로 해주어야 한다.

 

ET로 작동하게 하려면 Non-blocking 소켓으로 생성해 줘야 하며 epoll에 관심 FD로 등록 할 때 EPOLLET로 설정해 주어야 한다.

 

서버의 트리거 모드가 엣지 트리거인 경우, 한번에 전송 가능한 패킷 버퍼 사이즈보다 보내야 하는 데이터의 사이즈가 더 클 경우, 여러번에 걸쳐 write를 하게 되면 엣지 트리거의 특성상 정상적으로 데이터를 전부 읽어드릴 수 없는 경우가 생긴다.


Level Trigger(LT)

 

특정 상태가 유지되는 동안 감지.

 

특정 디지털 신호 000 111 000 111 000 111 에서 1에 대한 Trigger 라면 1이 유지되는 시간동안 횟수에 상관없이 이벤트가 발생한다.

소켓 버퍼에 대응하면, 한번에 읽을 수 있는 데이터 버퍼가 600인데, 데이터가 1000바이트 도착했다면, 600바이트를 읽고 소켓 버퍼에 아직 데이터가 유지되고 있는 1인 상태이기 때문에 한번 더 이벤트가 발생하여 나머지 400바이트를 읽게 된다. 즉, 소켓 버퍼가 비어지는(0이 되는) 순간까지 계속해서 이벤트가 발생이 된다.

 

LT는 기본으로 설정되어 있으며 select나 poll은 LT만 지원이 된다.

 

서버의 트리거 모드가 레벨 트리거인 경우, 입력 버퍼에 데이터가 수신된 상황에서 이를 빠르게 읽어들이지 않으면 epoll_wait() 함수를 호출할 때 마다 이벤트가 발생하게 된다. 이로인해 발생하는 이벤트의 수가 계속 누적되는데, 이를 현실적으로 감당하는건 불가능하다. 따라서, 정상적인 접속-접속종료 테스트에 대한 처리가 불가능해질 수 있다.



출처: https://rammuking.tistory.com/entry/Epoll의-기초-개념-및-사용-방법 [쥬리스티앙 죠르즁]

728x90
반응형
728x90
반응형

모든 과정이 동일한지 모르겠지만 내가 겪은 이야기를 하자면

나는 서류 합격후 전화면접을 약 30분간 진행했다.

질문은 나의 경력위주의 질문이었으며 그렇게 압박을 하는 질문은 없었다.

면접을 어떻게 해야 잘 보는 것인지 정답은 없겠으나, 그리고 나는 늦은 나이에 실무경험이 많은 사람이지만,

그래서 오히려 더 부담스럽고 그래서 더 긴장되었고 떨렸다.

나보다는 회사 경력이 적은 대리급이나 과장급의 사람들과 비교했을 때 나는 경쟁력이 있다고

생각하지 않기 때문에, 결국은 그것이 들통나지 않기를 바라는 마음때문에 나는 자신감이 없는 것 같다.

나의 회사 생활을 돌이켜보면 한편으로는 전력을 다하지 않았다는 부끄러움과

그럼에도 불구하고 내가 과연 회사에 내 모든것을 바쳐야 하는 것인가 하는 회의감,

그리고 내가 전력을 다해도 힘든 회사생활이라면 그곳은 나에게는 벅찬 곳이라는 생각이 여태까지 나를 괴롭혀 왔다.

그리고 우연한? 기회로 나는 지금은 백수가 되어 아주 곤란한 나이에 구직을 하고 있다.

소위 말하는 좆소기업을 가야하는지 아니면 이름있는 기업에 다시 들어가야 하는지 도통 모르겠다.

내가 이나이에 없는 실력으로 이름있는 기업에 다시 들어갈 수는 있는지.

그렇다고 이름없는 중소기업을 가자니 내 자존감이 많이 떨어지고.. 연봉도 떨어지고..

 

728x90
반응형

+ Recent posts