- 방문자수
전체 방문자
오늘 방문자
어제 방문자
인기 길
-
[Server] netstat 명령어 - 네트워크 통계 정보
netstat이란 network statistics의 약자 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구 netstat 옵션 -a : 현재 다른 PC와 연결(Established)되어 있거나 대기(Listening) 중인 상태 -l (listen) : 연결 가능한 상태 -t (tcp) : tcp -u (udp) : udp -p : 프로그램 이름 / PID -n (number port) : 포트 넘버 netstat field 정보 $ netstat -antplF Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - - Pro..
-
[DOCKER] Docker restart 옵션
linux 서버에 docker를 설치하고 실행하면 docker daemon을 stop 하거나 종료할 일이 거의 없지만 만약, local PC에서 docker desktop을 사용한다면 pc를 재부팅할 때마다 docker daemon을 종료할 경우도 생긴다. 이러한 경우 다시 docker daemon을 재시작하는 경우 내부에 docker container의 start 관련 동작을 설정할 수 있다. restart option docker run -d --restart {option} redis no Don't automatically restart the container (default) on-failure[:max-retries] container가 정상적으로 종료되지 않은 경우(exit code가 0이..
-
[NGINX] client ip설정 (proxy_set_header, remote_addr, http_x_forwarded_for, proxy_add_x_forwarded_for)
location 하위 블록에 proxy_set_header를 통해서 X-Forwarded-For, X-Real_IP와 같은 header를 세팅한다. 그러면 Tomcat과 같은 WAS Layer에서 해당 설정을 읽어서 IP 정보를 사용하게 된다. user nginx; worker_processes 2; ... http { include mime.types; upstream back-server { server 127.0.0.1:3000; keepalive 32; } ... server { ... location / { proxy_pass http://back-server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP..
-
[Tomcat] connection, thread, keep-alive 설정 살펴보기
외장 Tomcat을 이용하여서 운영하던 서비스를 Spring Boot에서 제공하는 내장 Tomcat으로 전환하기로 하였다. 그 과정에서 Tomcat server.xml 설정의 Connector 내용을 spring boot 설정으로 옮기게 되었다. 각 설정들의 값들 중에 connection, thread에 해당하는 값들을 살펴보도록 하자. Thread server.tomcat.threads.max: 200 server.tomcat.threads.min-spare: 10 해당 값들은 application.yml에 "server.tomcat.." 설정을 하지 않았을 때의 default값들이다. ( https://docs.spring.io/spring-boot/docs/current/reference/html/..
-
[Nginx] nginx keepalive 설정(client-nginx-tomcat)
keepalive란 서버와 클라이언트가 맺은 연결을 유지하는 방식을 의미 HTTP 트랜잭션이 완료된 후에도 클라이언트와 서버 간의 TCP 연결을 열어둔다. 클라이언트가 다른 HTTP 트랜잭션을 수행해야 하는 경우 새 TCP 연결을 만드는 대신 유휴 Keepalive 연결을 사용한다. 장점 3-way handshacking overhead 줄임 단점 메모리 사용 증가 - connection을 열고 대기 server - keepalive 설정 https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout 하위에 해당하는 server 블록에 keepalive-timeout 설정 기본값 75s 해당 값에 0을 설정하면 keepalive 기능..
최신 글
-
비관적 락 데드락 발생 내역 (Pessimistic Lock and DeadLock)
기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
-
[MySQL] 5장 트랜잭션과 잠금
잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.잠금동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 트랜잭션데이터의 정합성을 보장하기 위한 기능 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다. MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨, MySQL 엔진 레벨로 나눌 수 있다. (https://kkang-joo.tistory.com/163)MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 ..
-
[Timeout] Timeout 종류 정리(connection, socket, read..)
서비스를 개발하며 외부 API를 호출하는 경우가 많이 존재한다.외부 API를 호출할 때 발생하는 timeout 내역들을 정리해 놓고, 다음에 이슈가 발생했을 때 쉽게 기억을 떠올리기 위해서 정리해 두자.Connection Timeout 클라이언트가 서버와 통신을 요청하기 전에 서로 Connection을 맺는 과정을 TCP 통신에서 3 way handshake이라 한다.이 과정에서 일정 시간이 지나 connection을 맺지 못하는 경우에 발생할 수 있는 Timeout이다.Caused by: java.net.SocketTimeoutException: Connect timed out Socket Timeout ~= Read Timeout클라이언트와 서버가 Connection을 맺은 이후에 발생할 수 있다. ..
-
sync/async, blocking/non-blocking
4개의 용어, 개념이 헷갈리는데 Spring의 WebClient를 쓰기 위해서 개념을 공부하다 보니 정리해두고 싶어졌다.찾아본 내역들을 다음에 봐도 바로 떠오를 수 있도록 해보자. 우선 blocking, non-blocking이 좀 더 직관적으로 이해하기 쉬웠다. blocking/non-blocking제어권의 반환을 기준으로 생각하자 blocking - 진행하던 작업에서 다른 작업을 호출하면 제어권이 넘어가 버린다.제어권이 돌아올 때까지 기다려야 한다. non-blocking - 진행하던 작업에서 다른 작업을 호출해도 제어권을 넘기지는 않는다.계속 내가 진행하던 작업을 진행할 수 있다. sync/async작업 완료 여부에 관심, 결괏값의 전달 개념을 이해하는데 도움이 되는지는 모르겠지만,단어 자체만의..
-
[Java] Java Optional
Spring Data JPA를 사용하면 select의 리턴값으로 Optional 을 준다.그러다 보니 Optional을 사용할 기회가 생기게 되었고, 사용하다 보니 알아두면 좋은 메서드들이 있어서 정리하면서 추후에도 유용하게 쓸 수 있도록 학습해보자. Optional.ifPresentOrElse() Optional token = tokenService.selectToken(dto.id()); if (token.isEmpty()) { tokenService.insertToken(dto); } else { tokenService.updateToken(dto, token.get()); } 위의 같이 결과가 존재하는 경우 ..