진짜 개발자
본문 바로가기

Application Knowhow (총 9개)

ApplicationKnowhow/Server - 성능 개선기 3 (Jvm Heap 설정) Server의 Memory 공간은 충분해 !(?) 최초 테스트 시, 2CPU, 1GB Mem 의 자원으로 테스트를 진행했습니다. 또 테스트를 하는 동안 memory는 부족한 적이 없었습니다(그런줄로 믿고 있었습니다). 항상 htop으로 appServer의 cpu와, mem을 모니터링을 한 결과 memory는 사용률이 70%정도도 안되었기 때문에 memory가 부족하지는 않은 것으로 생각을 하고 CPU만을 scale up하여 테스트를 진행했었습니다. visualVM으로 Heap영역을 확인을 해보아도 maxHeap Size 250MB이며 usedHeap size는 30MB 정도로 아직 여분이 많이 남아있었기 때문에 더더욱 아닐 것이라고 생각을 했습니다. (저 그래프를 처음 볼 당시에는 현재 heap의 siz..
ApplicationKnowhow/Server - API 성능 개선기 2 (Query 개선) 이번에 테스트할 대상 API는 특정 영화의 당일 상영 목록을 반환하는 API입니다. 우선 어느정도의 성능이 측정 되는지 확인해보도록 하겠습니다. 약 평균 22 TPS, 660ms Latency 의 성능이 측정되었습니다. 이전 영화 목록 조회 API에 비해 더욱 성능이 감소되었음을 확인할 수 있습니다. 1차 개선(JPA 관련 성능 개선) 1. 원인 파악 Hibernate에 의해 발생하는 쿼리를 로그를 통해 확인해보니, seats에 대해서, N+1문제가 발생하는 것을 볼 수 있었습니다. 2. 개선 과정 좌석에 대해 fetch Join을 설정합니다. (추가로 MovieEntity에 대해서도 fetch Join을 합니다) 단 한번의 쿼리만 발생한 것을 확인할 수 있습니다. 바로 부하테스트를 다시 진행해보도록 하..
ApplicationKnowhow/Server - API 성능 개선기 1 (JPA 성능 개선(kotlin)) 이번 부하테스트 대상 API는 DB 참조가 포함된 API입니다. 최초 단순 문자열("OK")을 반환하는 API에 대해 부하테스트를 진행하여 900 TPS, 9ms Latency 정도의 성능을 내는것을 파악했습니다. DB 조회가 추가 되었을 때 어느 정도의 성능 저하가 발생하는지 확인을 위해 부하테스트를 진행해보겠습니다. 1. 원인 파악 TPS가 정말 급감하는 것을 볼 수 있습니다. 여러번의 테스트 결과 평균 195TPS, 76ms Latency 의 성능을 보였습니다. 병목 현상이 어느 곳에서 발생하는지를 관찰하기 위해 Thread Dump를 분석하기로 했습니다. 당연하겠지만, 실행중인 대부분의 thread 들은 위와 같이 SQL관련 메소드들을 실행중이었습니다. Thread Dump 분석 중 이상한 부분을..
ApplicationKnowhow/Server - 게시판 조회수 기능 성능 최적화 이번 포스팅에서는, 일반적인 조회수 기능의 성능 향상을 고려해보는 시간을 갖도록 하겠습니다. 1. 조회수 기능 살펴보기 조회수는 어떤 글을 몇명의 사용자가 보았는지를 알려주는 것입니다. 방문자 수 또한 크게 보면 조회수와 같습니다. 언뜻보면, 조회수는 상당히 간단한 기능이기 때문에, 최적화가 필요할까? 성능향상이 필요할까? 싶기도합니다. 하지만 아주 작은 리소스를 소모하는 부분들일지라도, 잘못된 설계를 했고, 수많은 사용자들이 이용하다보면 매우 큰 문제로 이어지기도 합니다. 또한, 이렇게 작은 부분부터 하나 둘씩 성능 고려를 해두면, 나중에 정말 비즈니스상 크리티컬한 성능 문제가 야기 되었을때, 많은 도움이 되지 않을까요? 1.1 조회수 성능 최적화가 필요한 이유 및 필요한 부분 데이터베이스 잠금 첫번째..
ApplicationKnowhow/Server - 사용자 입력 값 검증방법과 노하우 검증 서버를 개발하며 그 동안 값 검증을 하면서 의문이 드는 점과, 노하우라면 노하우라 할 수 있는 얕은 지식을 공유 하려고 합니다. 1. Front-end에서 값 검증을 해서 넘겨주는데 Back-end에서도 해야하나요? A. 둘다 해야합니다. 프론트에서 하는 검증은 사용자의 경험을 위해서 해야하며, 백엔드에서는 프론트에서 전달받은 값이 중간에 변형될 우려가 있어 해야합니다. 2. 값 검증을 어느 계층에서 수행해야 하나요?A. 값이 처음 들어오는 곳에서 해야합니다.값 검증은, 데이터가 처음 들어오는 곳에서 한번 수행합니다. Layered Architecture를 예로 들자면, 사용자가 값을 입력하는 Presentation 계층에서 값 검증을 수행합니다. 추가적으로, Repository에서 가져온 ..
ApplicationKnowhow/Server - 공인 IP없이 외부에서 접속 가능하게 만들기(Ngrok란?) ngrok 이번 포스팅에서는, 로컬 컴퓨터에 public dns를 부여하여, 외부에서 접근할수 있게 만드는 Ngrok 의 사용방법에 대해 알아보도록 하겠습니다. 외부에서 로컬 PC에 접근해보기ngrok에 대해서만 궁금하신 분은 이단원은 넘어가셔도 됩니다. 우선 외부에서 로컬 pc에 접근할수 있도록 하는 방법에 알아보기 이전 간단한 네트워크 개념들을 살펴보겠습니다. Ngrok를 알려드리기 위한 포스팅이므로, 네트워크에 대한 자세한 내용은 생략하며 설명드리겠습니다. IPip는 간단히 말씀드려, Network에 연결된 각각의 Device들을 구분하기 위한 고유한 주소 같은 것입니다. 예를 들어 한국 사람들을 고유하게 구분하기위해, 주민등록 번호가 사용되듯이, 정보를 고유의 컴퓨터로 지정하여 수신 또는 발신하기..
ApplicationKnowhow/Server - Image와 Json을 함께 서버에 업로드하는 대표적 3가지 방법 Server에 이미지를 업로드하는 3가지 대표적인 방법 이번 포스팅에서는 Server에 파일과 함께 정보를 업로드(POST)하는 3가지 방법에대해 알아보도록 하겠습니다. 이외에 더 많은 좋은 방법들이 있다면, 댓글로 부탁드립니다 ~ File과 Json을 함께 서버에 전송해야 하는 경우서버를 개발하다보면, file을 업로드 해야하는 경우가 발생합니다. x@Controllerpublic class TestController { // file upload 처리 핸들러 @ResponseBody @PostMapping("/file") public void upload(@RequestParam("file") MultipartFile file) { System.out.pr..