전체 글 33

[부하 테스트 - 배포환경] CPU 사용률 70% 테스트, 부하 분산을 위한 서버 확장의 필요성

테스트 개요1. 목표:이중 서버 환경에서 CPU 부하율 및 TPS 처리 검증대량의 트래픽이 발생하는 환경에서 서버 이중화(Scale Out)가 성능에 미치는 영향을 검증서버 2대를 사용하여 부하를 분산하고, CPU 사용률과 TPS 변화를 분석서버 1대와 2대의 환경을 비교하여, 트래픽 증가에 따른 부하 분산 효과를 확인2. 목적CPU 사용률 70% 유지 목표 : 서버의 안정적인 운영을 위해 적정 부하 수준을 설정하고 성능 평가TPS 분석 : 서버 확장 전후의 트랜잭션 처리량 변화를 측정하여 성능 개선 여부 확인확장 전략 수립 : 서버 한 대 기준으로 적절한 사용량을 유지하는지 확인하고, 예상 운영 가능 범위를 정의3. 테스트 환경:서버 및 인프라 환경항목사양로드밸런서 유형Application Load B..

[부하 테스트 및 확장성 테스트 - 배포환경] 단일 서버 vs 이중 서버 성능 차이

테스트 개요1. 목표:부하 테스트 및 서버 확장성 테스트 (Load Test & Scalability Test)Redis 기반 캐싱을 적용한 상태에서 단일 서버 vs 이중 서버 성능 차이 측정부하 테스트(Load Test) 수행 후 트랜잭션 처리 속도(TPS) 분석서버 확장성 Scaling에 따른 성능 변화 분석정확한 서버의 성능 분석을 위해 극한의 상황으로 테스트2. 테스트 환경부하 테스트 도구: JMeter성능 측정 방식: TPS(Transactions Per Second) 분석테스트 조건:Number of Threads (users) : 200명Ramp-up period (seconds) : 20초Loop Count: 3000비교환경단일 서버 환경 (EC2 인스턴스 1개)이중 서버 환경 (EC2 인..

[트러블 슈팅] JPA 심화 개인과제

1. @DynamicInsert 사용1)개요DynamicInsert를 통해 DB의 기본값을 적용하려고 했지만, ItemEntity 테스트 코드를 작성 했을 때 nullable = false의 조건을 확인하는 과정에서 테스트 코드가 정상적으로 동작하지 않는 문제 발생 2)문제상황기본 값 설정을 @PrePersist를 사용해 처리하는 방식으로 수정을 했는데, 테스트 환경에서 DB에 직접적인 기본값 적용 확인이 어려워 DynamicInsert와 중복으로 인하여 여전히 동작하지 않는 문제 발생 DynamicInsert는 SQL INSERT 문을 생성할 때 null 필드를 제외시켜 DB의 기본값을 적용하지만, 코드에서 설정된 값과 충돌하거나 테스트에서 null 처리가 누락이 되면 동작하지 않는 문제 발생 3)해결..

[TIL] 배달 앱 아웃소싱 프로젝트

프로젝트 명 : 오늘은 뭐먹지?(What The Eat)소개한 줄 정리 : 오늘은 뭐먹지? 매일 선택의 순간에 놓인 당신을 위한 한 끼 추천 서비스진행 날짜 : 2024.12.03 ~ 2024.12.09 프로젝트 요약1. 프로젝트 목적Spring Boot + JPA를 활용한 도메인 설계 및 연관관계 매핑Soft Delete 기법을 통한 데이터 관리 방식 이해예외 처리 및 공통 응답 적용을 통한 안정적인 API 설계Enum을 활용한 상태 관리와 비즈니스 로직 캡슐화팀 내 코드 리뷰 및 리팩토링을 통한 유지보수 향상2. 프로젝트 구현회원 관리 : 회원가입, 로그인, 회원 탈퇴가게 관리 : 사장님이 가게 등록, 수정, 조회, 폐업 가능메뉴 관리 : 사장님이 메뉴 추가, 수정, 삭제주문 관리 : 고객이 주문 생..

[트러블 슈팅] 아웃소싱 프로젝트

1. 코드 구현 전 원활하고 구체적인 의사소통 필요1) 개요프로젝트 진행이 아직 미숙하여 초기에 팀원 간의 충분한 의사소통이 이루어지지 않아 프로젝트 진행 중에 기본 구조 및 코딩 규칙 등이 통일 되지 않았다. 이로 인해 코드 merge 후 여러 문제점 발생 2) 문제 상황기본 구조와 의존성 정의 X문제팀원이 각각 다른 방식으로 프로젝트의 기본 구조를 설계BaseEntity를 포함한 예외 처리 방식, 의존성 추가 등에 대한 사전 합의가 부족결과중복된 의존성이 추가됨 (ex. spring-boot-starter-validation 중복 추가)예외 처리가 전역 예외처리와 Service 계층에서 각각 처리되어 일관성 부족 및 혼란용어 정의 및 타입 불일치문제가게 주인과 관련된 용어를 각각 다르게 정의(Owne..

[TIL] HTTP 상태 코드 설계

1. 주제 선택팀원들과 프로젝트 S.A 설계를 완료한 후, 설계가 적합한지 확인하기 위해 튜터님께 피드백을 받았다. 이 과정에서 API 설계의 응답(response) 부분을 성공과 실패로 나눠 상태코드로 표현한 부분에 대해 긍정적인 평가를 받았고, 동시에 에러 상태를 조금 더 구체화하면 좋겠다는 제안과 함께 HTTP 상태코드 설계와 RESTful 여부에 대한 논의가 이루어졌다.피드백 후, 프로젝트 마감 기한이 짧아 팀원들과 깊이 논의할 시간이 충분하지 않아 혼자 고민해보고 정리하고자 이 주제를 선택하게 되었다. 2. 고민한 내용왜 RESTful한 상태 코드를 사용해야 하는가?RESTful하지 않은 설계는 어떤 상황에서 사용하는가?상태코드를 설계할 때 클라이언트를 고려한 방식은 어떤 것인가?만약 RESTf..

[TIL] 고객과 통화 연관관계로 환전요청 만들기

진행 날짜 : 2024.11.26 ~ 2024.11.29 프로젝트 요약 1. 프로젝트 목적RESTful API 설계 : Spring Boot와 JPA를 사용하여 CRUD API를 설계하고 구현데이터 검증 : Validation을 활용하여 입력값 검증 및 데이터 무결성 보장비즈니스 로직 분리 : 계층별 역할 분리를 통해 유지보수성 향상예외처리 : GlobalExceptionHandler를 통해 예외 처리 방식 학습JPQL 활용 : 데이터 조회 및 요약을 위한 JPQL 사용법 학습2. 프로젝트 구현 단계Lv0 : 프로젝트 설계API 명세서 작성 : postman 사용ERD 작성 SQL 작성Lv1 : 고객(User)과 통화(Currency) 복잡한 연관관계환전 요청 중간 테이블 생성필드 : 고객 고유 식별자,..

[트러블 슈팅] Spring 심화 개인과제

- 어떤 현상을 발견했는가?1. @RequestParam으로 Enum 값 처리 postman 오류 2. @NotNull과 Bean Validation이 작동하지 않음 3. @PostMapping 어노테이션 사용 불가 오류 4. Project JDK is not defined 이런 장애가 생길 수 있다는 것을 인지1. @RequestParam으로 Enum 값 처리 postman 오류-@RequestParam이 enum 타입 값을 처리하지 못하거나 올바르게 매핑되지 않으면 400 Bad Request 오류가 발생한다는 것을 인지-클라이언트가 enum 문자열 값을 정확히 전달하지 않거나, 서버가 enum을 변환하지 못할 시에 발생 2. @NotNull과 Bean Validation이 작동하지 않음-Dto에서 ..

[TIL] 뉴스피드 프로젝트

프로젝트 명 : 자주 취하지 않고 자취합니다.소개한 줄 정리 : 자취생들을 위한 꿀팁 모음집내용 : 자취생들의 생활에서 여러가지 꿀팁들을 공유하는 사이트진행 날짜 : 2024.11.19 ~ 2024.11.25 프로젝트 요약1. 프로젝트 목적협업 도구(Git & Github)를 사용하여 컨벤션 준수의 중요성 체득RESTful API 설계 및 JPA 기반 CRUD 구현Spring Boot와 JPA를 활용한 데이터 검증 및 인증/인가 로직 구현Cookie/Session을 활용한 인증 및 사용자 데이터 유효성 검증유지보수성이 높은 코드를 위한 비즈니스 로직 분리 및 예외처리2. 프로젝트 구현프로필 관리 : 사용자 프로필 CRUD, 비밀번호 변경, 본인확인 로직뉴스피드 게시물 관리 : 게시물 CRUD, 조회 시 ..

[트러블 슈팅] Spring 뉴스 피드 프로젝트

1. Git 충돌 해결1) 개요develop 브랜치에서 동시에 작업을 진행하면서 push, pull 하는 과정에서 다른 팀원이 작성한 내용을 pull로 가져올 때, 현재 작업하고 있던 내용과 충돌이 발생 2) 문제상황-모든 작업을 develop 브랜치에서 직접 진행을 하면서 문제가 생김-작업 중 서로 다른 파일을 수정하면서 충돌이 발생 3) 해결-작업을 개별 브랜치 feature에서 진행하도록 변경-작업 완료 후, 로컬에서 develop 브랜치로 병합하고, 충돌이 있다면 로컬에서 해결한 후에 git push-develop이 최신화되면 브랜치를 pull 받아 최신으로 유지하고 다시 feature에서 개발1. feature 브랜치 생성git checkout -b feature/2. 로컬에서 작업 후 병합gi..