간단한 계좌, 거래 기능에 관한 API를 만든 후 테스트 코드 작성, 성능테스트 등을 학습하고 <이펙티브 자바>, <도메인 주도 개발 시작하기> 등 서적에서 학습한 내용을 적용하여 코드를 작성했습니다.
./gradlwe build
cd build/libs
java -jar tess-0.0.1-SNAPSHOT.jar
build 파일 실행 후 localhost:8080/docs/index.html
Java 11
Spring Boot 2.7.2
MySQL 8.0
![tess_erd](https://private-user-images.githubusercontent.com/65644373/345758936-f6c849ea-573a-452c-a2ca-072c57f05d45.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNDU3NTg5MzYtZjZjODQ5ZWEtNTczYS00NTJjLWEyY2EtMDcyYzU3ZjA1ZDQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlNDhhZTAwMDllNDk3OTQ1NWNiYzhhOTY5NjE2Njg5NThiMDAxMGFkMzc3NDY1MTNlNjM3YWNlOWUzZmEwYzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.FH2_TBQ9FLZ6bABsefQEsUzvvjJKCcSvHVK6P7phjbU)
![테스트커버리지](https://private-user-images.githubusercontent.com/65644373/348517565-7e336176-c6a4-46f5-8b6d-6dc97c095fe1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNDg1MTc1NjUtN2UzMzYxNzYtYzZhNC00NmY1LThiNmQtNmRjOTdjMDk1ZmUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg0MTczNTNkZjhmYzQ5NmZjMzVlMDViZWQxYWU1NmM2M2QxOGE1MGVjNjdiNWJiNzU0ZDViYWY2ZmZiZDU1ZWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2t3PYVcuvY8wHy9BXF1nyHjumM_03KWlXMJ4SdPprBk)
100명, 1000명의 user가 동시접속 할 때를 가정하여 송금하기와 계좌전체조회하기 API에서 성능테스트를 진행했습니다. 계좌 전체조회하기에는 캐싱을 적용했습니다.
초기 테스트에서 100명일 때 5%, 1000명일 때 30%였던 실패율을 예외처리 후 0%로 감소시켰습니다.
![100명_성능테스트](https://private-user-images.githubusercontent.com/65644373/346315474-ebf74332-bd01-4702-9e77-8ea3f99b4b99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNDYzMTU0NzQtZWJmNzQzMzItYmQwMS00NzAyLTllNzctOGVhM2Y5OWI0Yjk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMwOTVmOTJmZGYyZWE3NTMxYTdmNDdmMTllN2ZhM2U3YWFiMzYxYWI4NmQ2MTIzZGNlNWJhNDQzMGUxMTMxMzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DVeE14P9E1q9ogpQStu98Vylh0_n53musEVOSSiYsxQ)
![1000명 성능테스트2](https://private-user-images.githubusercontent.com/65644373/346315390-80bdbcc2-82b2-4e8f-97be-7fdab61f0ba9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNDYzMTUzOTAtODBiZGJjYzItODJiMi00ZThmLTk3YmUtN2ZkYWI2MWYwYmE5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNiNGVjMmE5YTI1NzcwZTA5OWQzMDQ2MDFhYmZjZmNlMDRkMmI5OWM1MjQ0NWU0ZjZhZDY2M2U0ZDQwYzY3ZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.SfyqWn_zdrvmSFeEfuFnbEhcXpgGnXdA1xPFb4KZ-Ek)
![100명 성능](https://private-user-images.githubusercontent.com/65644373/352918781-130b4b83-9749-41f7-bf84-2d0c1ca0e7d4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNTI5MTg3ODEtMTMwYjRiODMtOTc0OS00MWY3LWJmODQtMmQwYzFjYTBlN2Q0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTExYWZhY2JjMjllZTA5Yzg2ZjkwNjRkOTBhNDk4ZDBmNmVmMWEwYjlhMGMyM2ZmMjAwMjI2YmM0YjU3NzMzZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.C2m7G4shG8mAMvqX_-SDBe0sV9p8LQ2FbBxo7qyYiL8)
초당 요청수(RPS)는 평균 약 33.9이고, 응답시간이 약 30ms 이하로 안정적으로 유지됩니다. 계좌 전체조회하기에 대한 캐싱이 적용 후, 테스트 API에 대한 95% 응답시간의 최대값이 87ms에서 20ms정도로 급격히 감소했습니다.
![240729 성능 1000명](https://private-user-images.githubusercontent.com/65644373/352920240-5e7f37ba-3d96-4a6d-b8f9-65e4db2bc363.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMjYzMTcsIm5iZiI6MTczOTIyNjAxNywicGF0aCI6Ii82NTY0NDM3My8zNTI5MjAyNDAtNWU3ZjM3YmEtM2Q5Ni00YTZkLWI4ZjktNjVlNGRiMmJjMzYzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDIyMjAxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY3ZjIxZjc1ODQ5MzI5NzhhNDllMGYxNzc1Mjk4MTViZTIyMGIyNmIyNGYwOTA2MmZiNDk1YTA3YTYxNjVkMTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IW-J3YSCWKLk4AGmWs_3My6cIsJcA2lDVANeZTwqwzw)
초당 요청수(RPS)는 평균적으로 약 304입니다. 평균 응답 시간은 100ms 이하로 유지됩니다.