Nov 19, 2020 - nginx: [emerg] bind()

예전,
2018년 5월 28일 네트워크 성능에 관한 글을 올린 적이 있습니다.

물론 해당 글은 TOAST 에 올라왔던 글을 서버에 검토하면서 체크했던 것이지만요.

[SSP-01:root]/root>#sysctl net.ipv4.tcp_mem
net.ipv4.tcp_mem = 756747	1008999	1513494
[SSP-01:root]/root>#sysctl net.ipv4.tcp_mem
net.ipv4.tcp_mem = 756747	1008999	1513494
[SSP-01:root]/root>#sysctl fs.file-nr
fs.file-nr = 3920	0	3209106
[SSP-01:root]/root>#

세 값은 각각 현재 열려 있는 파일의 수, 현재 열려 있으나 사용되지 않는 파일의 수, 열 수 있는 파일의 최대 개수를 뜻합니다.

라고 작성했던 적이 있습니다.

그렇기 때문에 2020-11-11 jamtter 테스트 시, 바로 커넥션 이슈로 추측했고,

cat /proc/sys/net/ipv4/ip_local_port_range

으로 최대 open file 갯수 요청을 할 수 있었습니다.

그런데 말입니다… 서비스 테스트 시에 장애를 발견하게 되었습니다.

인프라 구축 시, nginx 를 두고 내부에 어플리케이션을 여러개 두는 기능을 구현했습니다.
(무중단 배포 서비스 구축을 위해.. )

nginx[33832]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: address already in use)

nginx.conf 의

events {
    worker_connections 39000;
}
worker_rlimit_nofile 40000;

내부 worker의 커넥션과 rlimit_nofile 의 갯수를 증가시켰어야했었는데,
스트레스 테스트 시 500 에러가 나던 원인 마지막 퍼즐을 찾았습니다.

Nov 19, 2020 - Intermediate-Chain

인증서 적용 후, 기능 테스트는 정상적이었으나, 연동 시, 타 서비스 업체에서 문의가 왔습니다.

안드로이드 앱(모바일웹에서는 발생하지 않음)에서 호출 되면서 SSL 관련 문제가 발생하여 앱이 죽음.

웹상에서는 문제없이 동작하는데, 모바일 단말에서 서버 인증서의 발급자를 확인하지 못하는 경우가 많아 중개(체인) 인증서가 필요하다는 글을 보게 되어,
서버 인증서를 확인했습니다.

https://www.ssllabs.com/ssltest/analyze.html?d=주소

혹시 몰라 인증서 검사를 했는데,

This server's certificate chain is incomplete. Grade capped to B.

중개(체인) 인증서 문제로 확인되어, 결국 인증서 갱신!!!!

인증서 재발급 받고, 다시 테스트를 진행해야하겠네요.

ps . 인증서 재발급 받고 Chain issue 가 해결되었습니다.

이미지

Nov 18, 2020 - EditorConfig

이번 과제를 3개 정도 동시에 수행하면서,
회사 프로젝트의 코드컨밴션과 과제 한곳과 다른 부분 때문에 고생했습니다.

그런데, .editorconfig 라는 파일이 존재하는 것을 알게되어,
히스토리를 남깁니다.

Spring-boot editorconfig

root=true

[*.{groovy,java,kt,xml}]
indent_style = space
indent_size = 4
continuation_indent_size = 4

저는 “Tab vs Space, 2글자 vs 4글자” 에서, 현재 저는 2 Space 신봉자입니다.
(확실히 안이쁘긴 합니다.)

예전엔 8자리 띄워쓰기를 하는 경우도 있었지만,
지금은 보통 4자리 띄어쓰기가 기본으로 알고 있습니다.

2 space 를 선호하게 된 것은 인텔리J를 쓰게 되면서 줄당 평균 글자수를 지키고 싶었기 때문입니다.

물론, 4글자를 써서, 줄당 평균 글자수를 강제로 줄여주는 효과에 대해서도 고민해보았지만,
현업이란게, 저만 글자수를 줄인다고 해결되는 것이 아니니까요.

만약 모든 분들이 글자수를 강제로 줄이는 부분에 대해서 같이 고민하는 회사라면,
과감히 Tab 과 4 글자도 도전해보고 싶네요! 저도 많은 경험을 하게 되겠지요!

여하튼,

# top-most EditorConfig file
root = true

[*]
# [encoding-utf8]
charset = utf-8

# [newline-lf]
end_of_line = lf

# [newline-eof]
insert_final_newline = true

[*.bat]
end_of_line = crlf

[*.java]
# [indentation-tab]
indent_style = tab

# [4-spaces-tab]
indent_size = 4
tab_width = 4

# [no-trailing-spaces]
trim_trailing_whitespace = true

[line-length-120]
max_line_length = 120

과제중, Tab 과 4글자로 강제하는 과제가 있었습니다.
기존 프로젝트에 영향을 주는 과제였고,
또 다른 과제는 인텔리J의 기본 컨벤션을 사용하라는 과제였습니다.

그리고 회사에서는 2글자와 2space를 사용하고 있고요!!!

결국, .editorconfig 를 이용해서, 잘 해결했다고 생각합니다.
무언가 도전(?)한다는 것은 무언가를 얻을 확률이 높다는 걸 다시한번 경험합니다!