개인 프로젝트 및 팀프로젝트를 하던 중 백엔드 서버와 DB 서버가 연결이 끊기거나 타임 아웃이 나는 경우가 종종 생겼다. 머리 한편으로는 커넥션풀의 문제겠거니하고 설정들에서 풀을 늘려주거나 시간을 늘리거나 하는등 임시방편으로 해결을 하였는데, 이번 기회로 커넥션풀의 개념과 설정 방법까지 정리해 보려고 한다. 해당 게시물을 유튜브 쉬운코드 님의 영상을 보고 정리한 글입니다. 들어가기 앞서 백엔드 서버와 DB의 통신은 네트워크를 공부해본 개발자라면 알고있는 TCP 연결을 기반으로 하고있다. 커넥션 open(연결)시에는 3-way handshaking이 일어나고, close(끊음)시엔 4-way handshaking을 한다. 즉 커넥션을 맺고, 끊는 과정에서 복잡한 일이 일어나고 비용도 크다는 의미이다. 이말..
개인 프로젝트, 팀프로젝트등을 진행하며 성능 테스트를 진행한 적이 있다. 처리량/지연시간에 대해서 두루뭉술하게 알고 있었어서 대충 빠르면 좋겠지~ 라는 단순한 생각만 했었던 것 같다. 그래서 이번 시간에는 모호한 기억과 개념을 한번 가볍게 정리해보고 가려고 한다. 그리고 앞으로 백엔드 개발자로서 성능/부하 테스트를 할 때 적절한 용어와 개념을 사용하여 진행할 수 있도록 해야겠다. 정의 노드(node)와 링크(link)가 서로 연결되어 있거나 연결되어 있지 않은 집합체를 의미 여기서 노드란 서버,라우터,스위치 등 네트워크 장치를 의미하고, 링크는 유무선 형태의 연결 수단을 의미 처리량과 지연 시간 네트워크를 구축할 때는 당연하게도 '좋은' 네트워크로 만드는 것이 중요하다 좋은 네트워크란 많은 처리량을 처리..
0. 들어가기 앞서 이전글에서 링크의 HTML 메타 데이터 파싱시에 Stream부터 ParallelStream, CompletableFuture까지 성능을 개선시켜 보았다. 이번엔 간단하게 Caffeine Cache를 도입하여 성능을 개선시킨 후기를 적어볼까 한다. 이전글을 꼭 읽어보고 오는걸 추천한다! Caffeine Cache 도입 CompletableFuture까지 적용시켜 성능을 개선했지만, 그냥 단순하게 생각해보니 캐싱 전략 같은건 우선 제외하고 링크의 주소들을 캐싱해두고 불러오면 일단 Latency를 줄어들지 않을까? 하는 생각이 들었다. 또한 보통 사용자가 아티클을 등록/수정을 하게되면 당연히 DB에 영향이 가게 된다. 하지만 내가 개선 시키려는 Latency는 DB와는 큰 연관이 없고, 캐..
0. 들어가기 앞서 평소 백엔드 성능 개선에 관심을 가지고 해당 프로젝트의 성능을 향상시키기 위해 다양한 방법을 시도하고 있다. 이번 글에서는 데이터 처리 속도를 개선하기 위해 몇가지 여정을 지나 CompletableFuture을 적용한 사례를 살펴보려고 한다. 사이드 프로젝트를 진행하고 있다. 주요 서비스는 내 아티클(링크,글귀,이미지)을 태그를 통해 분류하고 관리하는 것이다. 또한 공개여부를 통해 내 아티클을 공유할 수 있고, 등록된 나의 태그를 기반으로 다른 사용자들이 올려놓은 아티클들을 볼 수 있다. 여기서 특징적인 기능이 있다. 링크 타입의 아티클을 등록 및 조회가 될 경우에는 사용자가 링크 주소만을 보여주는 것이 어색하다고 판단했다. 보통 우리가 링크를 공유하거나 했을 땐 이렇게 썸네일, 해당..
들어가기 앞서 이번에는 리눅스 명령어인 find에 대하여 알아보려고 한다. 리눅스의 find 명령어는 리눅스 파일 시스템에서 파일을 검색하는데 사용되는 명령어이다. 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있다. ex1 : find {옵션}{경로} {표현식} ex2 : 현재 위치에서 log가 들어가는 파일 모두 찾기 -> find .-name "/log" 1. tail tail 명령어는 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력해주는 명령어이다. 기본값으로는 마지막 10줄을 출력한다. 주로 tail은 리눅스에서 오류나 로그 파일을 실시간으로 확인할 때 매우 유용하게 사용된다. -f 옵션은 실시간으로 계속 추적한다는 뜻이다. sudo tail -f log.out 2..
들어가기 앞서 apt 명령어를 사용하면 실행 파일을 직접 찾아서 실행할 필요가 없다. 현재 등록된 서비스들을 확인하기 위해서는 service --status-all 해당 명령어를 실행하면 등록된 서비스 리스트가 나온다. + : 실행중 - : 실행중이지 않음 이 두가지를 의미한다. Tomcat 종료하기 sudo service tomcat9 stop 하지만, Service 명령어보다는 systemctl 명령어를 사용하는게 좋다. systemctl 명령어 sudo systemctl list-unit-files : 서비스 전부 확인 sudo systemctl status '특정 서비스' : 특정 서비스 실행 상태 확인 sudo systemctl start '특정 서비스' : 특정 서비스 실행 sudo syste..
들어가기 앞서 알아두자! 파이프 라인 명령어1 | 명령어2 의 형태를 가지고 있는데, 여기서 '|' 기호가 기준이다. 명령어1의 처리 결과를 명령어2로 전달하는 것이다. apt list | grep tomcat -> apt list를 가져온 후, grep tomcat 이라는 명령어를 실행하라는 뜻 apt 명령어 1. 우분투 저장소에 무엇이 있는지 확인 apt-cache search 12 우분투 저장소 업데이트 apt update 만약 Permission denied 에러가 뜬다면? 그 이유는 root 권한으로만 가능한 역할을 현재 우분투 권한으로 실행하려고 하기 때문이다. 그럴 때 whoami 명령어를 통해 권한을 확인해보자. 이후 sudo 명령어를 통해 root 권한을 얻을 수 있다. sudo apt..
AWS를 이용하여 무중단 배포 학습을 해보려고 한다. 먼저 가장 기본적인 리눅스 명령어에 대해서 정리해보려고 한다. 리눅스 명령어는 기본적으로 Shell을 사용하여 OS(Ubuntu)에게 명령하면 OS가 번역하여 컴퓨터와 소통한다. 리눅스 명령어 기본적으로 모든 명령어는 명령어 뒤에 --help 옵션을 부여하면 자세한 사용방법이 나오게 된다. 예를들어 ls에 관련된 명령어는 ls -help라고 입력하면 된다. (깔끔한 터미널 테마등이 아니라면.. 그냥 구글링이나 Chat GPT한테 물어보는게 나을수도..! 0. pwd : 현재 위치 경로 1. ls (List Segments) : 현재 위치에 존재하는 파일 목록 조회 ls -l : 파일의 상세 정보 ls -a : 숨김 파일 표시 ls -t : 파일들을 생..