본문 바로가기

전체 글76

JMeter 성능 테스트 현재 진행중인 프로젝트는 대용량 트래픽과 데이터 처리가 목적이니 성능테스트가 필요하다. 테스트 도구 선정 기준 더보기 → GUI가 제공 되는가? → HTTP, WebSocket 프로토콜을 사용하기 때문에 2가지를 제공하는가? → 간단하게 설정을 할 수 있는가? → 참고할 수 있는 레퍼런스가 많은가? → 비용이 들지 않는가? → 어플리케이션과 데이터베이스 모두 테스트할 수 있는가? → 우리에게 친숙한 언어로 작성이 가능한가? JAVA or Groovy 위의 기준을 토대로 JMeter를 선정하게 되었다. 성능 테스트 더보기 현재 DB에 저장되어 있는 user의 수는 100,000 명 이다. 이를 기준으로 평상시의 접속자를 2~5%로 잡았고, 어느정도 까지 버틸 수 있는지 테스트 해보았다. 지표: https:.. 2023. 8. 15.
Java) Faker를 통한 더미데이터 생성 프로젝트에 쓰일 user 데이터가 필요했다. 현재 프로젝트는 대용량 트래픽, 대용량 데이터을 처리 해보는 목적을 갖고 있다. 그에 맞게 user 데이터가 10만 건이 필요했다. Mockaroo 더보기 더미데이터를 생성하는 웹 사이트이다. 총 170개의 타입을 지정할 수 있으며, 어떤 식으로 데이터가 생성 되는지 preview를 통해 빠르게 확인할 수 있다. 단 무료버전으로는 1000개의 행만 생성할 수 있었다. 10만 건의 데이터가 필요한 나는 다른 길을 알아봤다. 만약 생성해야 할 데이터가 1000개 이하라면 Mockaroo가 훨씬 직관적이고 편한 방법이다. Java Faker 더보기 Java Faker는 더미데이터를 생성할 수 있는 외부 라이브러리다. gradle에 의존성만 부여해 주면 더미데이터를 .. 2023. 8. 11.
Spring) 실시간 통신 방식 선정 WebSoket VS SSE(Server Sent Events) 실시간성이 높아야 하는 프로젝트의 특성상 Polling과 Long Polling 방식은 제외했다. WebSoket은 양방향 통신을 지원한다. 클라이언트가 서버로 요청을, 서버에서 클라이언트로 응답을 주고 받을 수 있다. 웹 소켓은 연결이 되면 웹소켓 프로토콜로 데이터를 주고 받는다. 사용자가 여러명일 경우 사용자의 수만큼 연결을 유지해야 하기 때문에 트래픽이 높을 수록 서버 자원을 많이 사용하게 된다. 반면에 SSE는 단방향 통신을 지원하며, 지속적인 연결을 유지하지 않아도 되므로 서버 자원을 효율적으로 사용할 수 있다. 웹소켓은 HTTP 프로토콜을 사용하지 않기 때문에 비교적 구현이 복잡하다. 현재 프로젝트에서는 단방향 통신이면 충분하고,.. 2023. 8. 8.
Spring) 비관적 락으로 인한 오류와 해결 문제 상황: Idea 테이블에 비관적 락을 걸고, 메서드 BidReservation과 findOneIdea를 실행하면 읽기 전용 트랙잭션에서는 SELECT FOR NO KEY UPDATE 명령을 실행할 수 없다고 뜬다. 하지만 똑같이 @Transaction(readOnly = true)가 걸려있는 전제 조회(findAllIdea)에선 정상적으로 실행 된다. 왜 이런 현상이 발생하는지 이유를 찾아보자!!!!! 문제가 일어난 이유: 현재 findById에 비관적 락을 걸어놨다. 비관적 락은 실행이 되면 DB레벨에서 해당 트랜잭션에 쓰기락을 걸어 다른 요청이 동시에 접근할 수 없고, 각 요청들이 동기방식으로 처리된다. 한마디로 findById를 사용한 로직에는 findById가 실행이 될 때 비관적 락이 걸리.. 2023. 8. 7.
Spring) 동시성 제어 동시성 제어 현재 프로젝트는 아이디어 경매라는 주제이다. 여기에서 입찰을 누르면 그 중 하나만 등록이 되어야 하기 때문에 동시에 입찰을 누르게 되면 문제가 발생한다. 이를 방지하고자 동시성 제어를 해주어야 한다. 동시성 제어 방안 크게 세가지로 분류할 수 있다. 1. synchronized를 활용하여 자바 내부에서 처리하기. 2. DB에 Lock을 걸어 해결하기. 3. Redis로 해결하기 Synchronized Synchronized는 한 스레드가 한개의 자원을 사용하고 있을 때 다른 스레드들이 접근하지 못하도록 막아주는 동기화 방식이다. 간단하고 직관적이게 데이터 무결성을 보장할 수 있지만, 단점이 크다. 입찰하는 기능은 여러 사용자가 동시에 접근하고 업데이트할 수 있는 공유 자원이다. 따라서 많은 .. 2023. 8. 6.
Spring) 테스트 코드 작성하기 테스트 코드는 왜 작성해야 하나? 더보기 Development: 개발 Unit Tests (단위 테스트): 개발자 테스트 QA Testing: 블랙박스 테스팅, 주로 QA팀이 Production 환경과 유사한 환경에서 테스팅 Production: 실 서비스 운영 환경 단위 테스트 더보기 단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법이다. 테스트 애노테이션 더보기 출력 값: 테스트 꾸미기 더보기 @DisplayName: 테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 수 있다. @Test @DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 수 있습니다.") void test1() { System.out.println("테스트의 수행 내용.. 2023. 8. 3.
실전 프로젝트) 주제 선정, 컨벤션 정립, ERD 작성, API 명세, MVP 목표 설정 항해99의 마지막 6주 실전 프로젝트가 시작 되었다. 직접 런칭할 서비스를 개발하는 서비스팀과 서비스의 성능을 개선하는 챌린지팀 이렇게 2가지의 팀이 있다. 나는 기술적으로 조금 더 이해하기 위해서 챌린지팀을 골랐고, 운이 좋게도 챌린지팀으로 선발되었다. 팀원들과 주제에 대해 얘기를 나눴다. 주제는 아이디어 경매로 선정 되었다. 프로젝트를 간단하게 설명하자면 누구나 쉽게 자신의 아이디어를 올리고 누구나 쉽게 그 아이디어를 경매하여 낙찰받을 수 있는 서비스다. 경매에 참여하는 사람들이 입찰경쟁을 할 때 발생하는 트래픽과 데이터가 대용량으로 발생할 것이기 때문에 대용량 트래픽, 데이터 처리에 경험을 쌓을 수 있을 것 같아 선정하게 되었다. 컨벤션 더보기 Branch main : 배포 환경 develop : .. 2023. 7. 30.
실전 프로젝트) DB 선정, 원격 저장소 선정 어느 데이터베이스를 선정할 것인가? 더보기 RDBMS vs NoSQL RDBMS (SQL 사용) RDBMS는 정해진 스키마에 따라 데이터를 저장하므로 구조화된 데이터 저장에 적합하며, 테이블간의 join이 가능하여 테이블 간 관계를 정의할 수 있다. 또한 데이터 무결성를 유지해주고, 트랜잭션을 사용할 수 있다. 트랜잭션 이란 DB의 상태를 변환시키는 하나의 논리적 기능 수행 단위이며, 원자성, 일관성, 독립성, 지속성의 성질을 갖고 있다. NoSQL (SQL 사용하지 않음) NoSQL은 비구조화된 데이터 또는 반구조화된 데이터 저장에 적합하다. 정해진 스키마가 없어 자요롭게 데이터를 저장할 수 있기에 수평 확장에 용이하며, 응답시간이 빠르다. 복잡도가 떨어지기에 RDBMS보다 훨씬 대용량의 데이터를 관리.. 2023. 7. 30.
한 주를 마치며.. 이번 주는 프론트와 처음으로 협업을 하게 되었다. 처음으로 HTTPS 배포도 해봤고, CI/CD구축, 백엔드끼리 git 사용, 프론트 엔드와 연결 등등 많은 것을 했다. 아쉬운 점은 HTTPS와 CI/CD 구축이 처음이다 보니 시간이 굉장히 많이 소요 됐다. 그로 인해서 API 구현이 늦어졌고, 프론트쪽에서 많은 기능을 대체할 수 있도록 구현해줬다. 로그인은 프론트쪽에서 세션 로그인으로 백엔드에 username을 전달 해주었고, 이미지도 S3 서버를 생성하여 프론트에서 저장하고 백엔드에 String으로 전달해 주었다. 물론 정석적으로는 백엔드 쪽에서 관리 해야 하지만 아무래도 기간안에 프로젝트를 완성하기 위해 신경 써주신 것 같다. 시간이 충분했다면 직접 이미지를 저장하는 경험을 겪을 수 있었을 텐데 아.. 2023. 7. 24.