분류 전체보기

infra

[AWS] EC2에 CloudWatch agent 설치

EC2 내부의 자원 사용률을 보려면 직접 쉘스크립트를 작성해서 log를 찍어볼 수도 있지만, EC2에서 제공하는 CloudWatch를 사용하면 편하다. CloudWatch는 CPU Utilization의 경우 기본적으로 제공하지만 Memory 사용률을 측정하고싶다면 EC2 내부에 CloudWatch Agent를 설치하고 역할을 부여해주면 된다. 비용이 발생하긴 하지만 직접 쉘스크립트를 작성하는것보다 이 방법이 나은 것 같다. [ 참고자료 ] EC2에 CloudWatch Agent 사용하기 EC2에서 CloudWatch Agent를 설치하여 모니터링하는 것을 테스트해보겠습니다. medium.com

bootcamp

[최종프로젝트] 부하 테스트 시나리오

개요프로젝트 개발의 마무리 단계로 개발한 서비스에 대한 테스트를 진행하였다. 그동안 개발을 해오면서 JUnit과 Mockito를 이용한 통합 및 단위테스트는 많이 진행했지만 외부 도구를 사용해 실제 서버에 올라간 애플리케이션에 대한 테스트를 진행해본 경험이 없어 이번 기회에 테스트를 진행하고 그 과정을 정리해보고자 한다. 해당 글은 테스트를 위한 문서인 테스트 시나리오 작성에 대한 내용을 정리한 글이다.  테스트 시나리오 작성 관련 참고사항먼저 애플리케이션을 테스트할 수 있는 도구로 아파치에서 제공하는 Jmeter와 네이버에서 제공하는 nGrinder 중 한가지를 선정해야 했다. Jmeter의 경우 nGrinder보다 제공하는 기능이 많았기 때문에 더욱 세부적인 테스트가 가능할 것이라고 판단했지만, 테..

bootcamp

[최종프로젝트] 상품 검색 서비스 성능 개선

상품 검색 성능 문제 발견 및 테스트최종프로젝트에서 상품 검색 기능을 구현하고 프로젝트를 배포했을때, 아래와 같이 조회 속도가 매우 느린 문제가 발생했다. 포스트맨으로 응답 시간을 확인해 보았을때, 5000~6000ms의 비정상적인 응답시간을 반환하는것을 확인할 수 있었다. 클라이언트의 입장에서 2000ms를 초과하면 서비스를 제공하기 어렵다는 점을 기준으로 봤을때 확실히 개선이 필요한 부분이었다. 또한, 정확한 지표를 통한 성능 차이를 확인하기 위해 nGrinder로 부하테스트를 진행했다. 개선 전 TPS가 1.2, MTT는 8000ms로 매우 비정상적인 매트릭을 확인할 수 있었다. 반면, 메모리와 CPU 사용률은 안정적인 모습을 보여주고 있었는데 이를 통해 서버 외부의 문제일 가능성이 크다고 예측했다..

bootcamp

[최종프로젝트] WebSocket 실시간 채팅 서비스 개발

개요스포츠 경기 일정 및 결과를 제공하는 서비스인 최종프로젝트에서 스포츠 게임별로 사용자들이 실시간으로 소통할 수 있는 채팅 기능을 제공하고자 하였다. 네이버 스포츠, 아프리카TV 등과 같은 플랫폼에서 제공하는 실시간 채팅 기능을 모티브로하여 개발하였고 그 과정에서 기술 의사결정 및 개발 그리고 느낀점에 대한 회고를 기록하고자 글을 작성한다.  실시간 채팅 서비스 개발을 위한 기술 선정: 폴링과 웹소켓✅ Polliing 방식 사용 시 발생하는 서버 부하Polliing 방식은 지정한 인터벌마다 HTTP요청을 보내기 때문에 서버에 많은 부담을 줄 것으로 판단했다. WebScoket도 클라이언트와 연결을 유지하는데 비용이 발생하지만 HTTP도 Keep-Alive로 인해 일정시간 연결을 유지하는 비용이 발생한다..

spring, jpa

[Spring] nGrinder를 이용한 대용량 데이터 부하테스트

nGrinder 설치 및 실행 (로컬 환경) nGrinder를 로컬에서 구동하는 이유는 처음 Docker를 이용해 테스트하려고 했으나 M1 환경을 지원하는 nGrinder Docker 이미지가 존재하지 않고 JDK 설정 등 Docker로 할 경우 호환성 문제가 많아 로컬 환경에 controller와 agent를 다운로드 받아 진행했다. 아래 nGrinder 공식 깃헙에서 controller war 파일을 다운받아 실행한다. GitHub - naver/ngrinder: enterprise level performance testing solution enterprise level performance testing solution. Contribute to naver/ngrinder development..

spring, jpa

[JPA] JPA 지연로딩과 N+1 문제

JPA 즉시로딩과 지연로딩 즉시로딩: Entity를 불러올때 연관된 Entity를 즉시 fetch해서 함께 불러온다. 지연로딩: 연관된 Entity가 필요할때 fetch해서 불러온다. //default 로딩 전략은 FetchType.EAGER @ManyToOne(fetch = FetchType.LAZY) @OneToOne(fetch = FetchType.LAZY) Entity 1개 조회할때 @Test @Transactional void findOne() { //fetchType이 EAGER일때: findOne을 호출하면 team도 함께 1차 캐시에 올라온다. -> query 총 1번 //fetchType이 LAZY일때: //findOne을 호출하면 user를 가져오기 위한 query 1번이 실행되고 fe..

database

[Database] RDBMS 정규화

RDBMS에서 정규화란 테이블간의 중복 데이터를 최소화하는 전략을 말한다. 정규화는 중복 데이터를 별도의 테이블로 분리하는 1차 정규화, 복합키와 관련 칼럼을 종속 테이블로 분리하는 2차 정규화 등 여러 단계가 있는데 상황에 맞게 각 단계의 정규화 프로세스를 적용할 수 있다. 정규화를 수행하면 데이터의 중복성을 줄이고 무결성을 보장할 수 있지만, 그만큼 테이블간의 관계가 복잡해지기 때문에 적절한 정규화 단계를 적용하는것이 중요하다. 정규화와 대비되는 개념으로는 중복 데이터를 허용해 성능 향상을 기대하는 개념인 반정규화가 있다. 실제 현업에서도 성능을 고려해 중복데이터를 적절하게 허용한다고 한다.

database

[Database] RDBMS과 NoSQL

NoSQL과 RDBMS의 차이는 데이터의 저장 방식에 있다. NoSQL은 비관계형 데이터베이스 형식으로 Key-Value 형태의 데이터가 관계 없이 저장되고, RDBMS는 관계형 데이터베이스 형식으로 규격화된 테이블에 데이터가 저장되고 각 테이블은 연관관계를 가질 수 있다. NoSQL은 가볍고 빨라 대용량 데이터를 처리하는데 유리하다는 장점이 있지만, 단순한 구조로 복잡한 데이터를 저장할 수 없고 간단한 쿼리만 이용할 수 있다는 단점이 있다. 반면 RDBMS는 무거운만큼 데이터의 무결성, 보안, 복잡한 쿼리 처리가 가능하다는 장점이 있고, 규모 확장의 어려움과 유연성이 부족하다는 단점이 있다.

java

[Java] 메모리 구조

T 메모리 구조 JDK를 이용해 개발된 자바 애플리케이션이 JRE에 의해 JVM상에서 실행되면 OS는 JVM에 메모리를 할당한다. 이때, 자바 애플리케이션은 JVM이 OS로부터 할당받은 메모리를 사용하게 된다. 기계어를 포함한 모든 프로그래밍 언어의 공통된 메모리 사용 방식은 아래와 같은데 코드 실행 영역과 데이터 저장 영역으로 나누어진다. 코드 실행 영역은 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다. 자바 실행 파일(.java)를 컴파일러가 바이트 파일(.class)로 바꿔 JVM 메모리에 로드하는데 이때 바이트파일이 저장되는 곳이 코드 실행 영역이다. 데이터 저장 영역은 프로그램의 데이터가 저장되는 메모리 영역인데 OOP에서는 우리가 잘 아는 Static, Stack, Heap의..

Jisung Jung
'분류 전체보기' 카테고리의 글 목록 (3 Page)