분류 전체보기51 [친절한 SQL 튜닝] 데이터 저장 구조 및 I/O 메커니즘 01. SQL이 느린 이유? 디스크 I/O, 디스크(ex 하드디스크)에서 읽기 또는 쓰기 요청 처리하는 시간의 백분율 디스크에서 데이터를 읽어야 할 땐 CPU를 OS에 반환하고 잠시 waiting 상태에서 I/O가 완료되기를 대기 I/O 작업이 많으면, 성능이 많은 영향을 준다. 02. 기본 단위, 블록 데이터 베이스에서 데이터를 읽고 쓰는 단위 = 블록(Block) (오라클 8KB) 데이터 I/O 단위가 블록이므로 특정 레코드 하나를 읽고 싶어도 해당 블록을 통째로 읽는다. 인덱스도 블록 단위로 데이터를 읽고 쓴다. 03. 테이블 블록을 액세스 하는 방식 시퀀스 엑세스 논리적 또는 물리적으로 연결된 순서에 따라 차례대로 블록을 읽는 방식 ex) 인덱스 리프 블록은 앞뒤를 가리키는 주소값을 통해 논리적으.. 2024. 2. 3. [AWS] 푸시 알림 기능 개발 (1) - AWS SNS와 SQS 생성 및 연동 소프트웨어 마에스트로 14기 때 "마이브러리"를 기획/개발하면서, 개발 능력 향상 뿐만 아니라 우리 팀의 목표는 직접 사용자에 대한 피드백으로 앱을 디벨롭하고 실사용자로부터 생기는 이슈를 해결하고자 했다. 그러한 과정에서 사용자가 자주 접속하는 앱을 만드는 것이 중요하다고 생각하고 푸시 알림 기능을 추가하기로 했다. AWS SNS와 SQS를 사용하게 된 이유 (기술 선택 이유) 푸시 알림 기능을 개발할 때, 가장 중요하게 생각했던 부분은 알림 서비스와 다른 서비스 간의 느슨한 결합과 비동기 처리였다. 알림 서비스는 기존에 존재하는 서비스에 부가적으로 더해지는 기능이기 때문에 알림 서비스로 인해 기존 핵심 기능의 성능이 떨어지면 안된다고 판단하여 비동기 처리가 중요하다고 생각했다. 알림 서비스가 구축됨으로.. 2024. 1. 24. Resilence4J 서킷 브레이커 개념 및 적용하기 작년 소프트웨어 마에스트로 14기에서 개발을 할 때, 내가 가장 많이 성장했던 시기라고 생각한다. 열정적인 동료(세무무 & 동구)와 쏘마의 지원 덕분이라고 생각이 든다. 그 중 클라우드 비용이 지원되었기 때문에 AWS의 여러 리소스를 학습하며 사용해보고, 기술적으로 MSA를 적용해면서 많이 배웠다. 현재는 그 전과 다른 기술을 바탕으로 일을 하고 있어, 이대로면 예전에 공부했던 내용을 다 잊어버릴까 시간이 날 때, 이전에 개발하고 공부했던 내용들을 기록하려고 한다. 먼저 MSA 환경에서 개발하면서, CircuitBreaker가 많이 신기하고 재밌게 개발한 기억이 있어, CircuitBreaker를 적용한 예시와 개념을 정리하려고 한다! 서킷브레이커 개념여러 서비스로 구성된 MSA 환경에서는 한 서비스에 .. 2024. 1. 23. [Spring] MyBatis 사용법 및 동적 쿼리 정리 지금까지 토이 프로젝트에서는 JPA와 QueryDSL을 활용하여 개발했지만, 이번에 입사하게 된 첫 회사에서는 MyBatis를 주로 사용하고 있었다. 처음에는 JPA와 QueryDSL을 사용하지 않아 조금 아쉬웠지만, "로마에서는 로마법을 따르라"라는 말과 같이 새로운 환경에 맞춰 공부하고 적응하는 것이 필요하다고 생각했다. 따라서 기본적인 MyBatis 사용법과 동적 쿼리 사용법을 기록하고자 한다. 1. MyBatis JdbcTemplate 보다 더 많은 기능 제공 SQL을 XML에 편리하게 작성하고 동적 쿼리를 매우 편하게 작성 가능 약간의 설정이 필요, Spring Boot를 사용하면 편하게 설정 가능 2. MyBatis 사용법 1) 마이바티스 매핑 XML을 호출해주는 Mapper Interface.. 2024. 1. 9. [Spring] @Cacheable를 통해 성능 개선하기 (캐시) 이제 중간 발표도 끝났겠다, 다시 열심히 블로그를 작성하려고 한다. "마이브러리" 프로젝트를 진행하면서 이슈도 많았고, 많은 것을 배우고 개발 중이었기 때문에 포스팅할 내용들이 너무 많다.. 다시 꾸준하게 블로그를 작성해봐야겠다.!! SWM에서 "마이브러리" 프로젝트를 진행하는 과정에 있어서 외부 API를 사용하여 도서의 정보를 가져오는 기능이 있었다. 매 사용자의 요청마다 외부 API를 호출하기 때문에 캐시를 적용하여, 외부 API 호출량도 줄이고 응답 속도도 줄일 것이라 기대하고 캐시를 도입하였다. 캐시를 도입한 이유 외부 API를 사용하기 때문에 외부 API 상태에 따라 응답 속도에 영향을 받는다. 길게는 2초 이상의 응답 속도가 걸린 적이 있다. 도서의 정보 데이터는 갱신이 자주 일어나지 않지만 .. 2023. 9. 4. [Spring] @Async를 사용하여 비동기 처리 (+ 쓰기, 읽기 서비스 분리) SWM 프로젝트를 진행하면서, 비동기 처리를 통해서 효율적으로 요청을 처리하고, 많은 도서 데이터의 확보를 위한 고민을 하였습니다. 따라서 해당 포스트에서는 Spring @Async에 대해서 정리하고, 실제 적용한 부분에 대해서 설명하고자 한다. 비동기 처리가 필요한 이유 도서 상세 페이지 조회 시, 도서 정보가 도서 DB에 저장되어 있지 않으면 알라딘 API를 호출하여 도서 상세 페이지 응답을 처리한다. 이때, 비동기 처리를 통해 알라딘 API를 통해 조회된 데이터를 도서 DB에 저장하는 작업을 수행한다. 도서 DB에 도서 데이터를 저장하고, 도서 상세 페이지를 보여줄 경우, 도서 DB에 병목이 있을 경우 도서 상세 페이지를 사용자에게 띄어주는 것에 영향을 줄 수 있다고 생각한다. 따라서 비동기 처리를.. 2023. 8. 12. 이전 1 2 3 4 5 6 7 ··· 9 다음