[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] - 1
·
독서
2장 - 느려진 서비스, 어디부터 봐야 할까TPS(초당 트랜잭션 수)로 처리량을 나타낼 수 있다.TPS를 높여 응답 시간을 줄이려면 서버가 동시에 처리할 수 있는 요청 수를 늘려 대기 시간을 줄이는 방법과, 처리 시간 자체를 줄여 대기 시간 줄이는 방법이 있다.현재 서버의 TPS와 응답 시간을 알아야 목표를 세우고 효과적인 성능 개선안을 도출해낼 수 있다.만약 트래픽이 증가하면서 성능 문제가 발생하면, 먼저 그 문제가 발생하는 지점을 찾는다. 이를 빠르게 해결하는 방법은 수직 확장을 하는 것이다. 수직 확장은 CPU, 메모리, 디스크 등의 자원을 증가시키는 것을 말한다.대신 수직 확장은 비용 문제가 크기 때문에, 수평 확장을 하는 방법도 고려해야한다. 수평 확장은 서버를 추가로 투입해 TPS를 높이는 방..
[SpringBoot] Comment 도메인 리팩토링 사항 기록
·
트러블 슈팅&리팩토링
1. 숨어있던 N+1 문제 해결[문제가 된 코드]public interface CommentMapper { // CommentEntity 리스트 -> CommentResDTO default CommentResDTO toCommentResDTO(List commentEntities, Long postId, Long issueId, CommentLikeService commentLikeService, Long currentMemberId) { if (commentEntities == null || commentEntities.isEmpty()) { return new Comm..
Spring Security와 ThreadLocal
·
Java
도입Spirng Security는 기본적으로 ThreadLocal을 사용한다. ThreadLocal이 무엇인지, 왜 사용하는지 좀 더 자세히 알아보고자 한다.ThreadLocal이란?각 스레드마다 독립적인 변수 공간을 제공하는 Java 클래스이다.HTTP 요청당 하나의 스레드가 할당되어 요청 처리 동안 인증 정보를 유지할 수 있다.따라서 같은 스레드 내에서만 SecurityContext에 접근 가능하다.Spring Security Context가 ThreadLocal 기반인 이유웹 애플리케이션의 멀티스레드 환경 특성과 보안 요구사항 때문!스레드별 컨텍스트 분리각 HTTP 요청은 별도의 스레드에 의해 처리된다. SecurityContext는 각 요청의 인증정보를 담고 있기 때문에 각 스레드별로 다른 정보를..
[React] Redux와 Redux Toolkit
·
React
React 프로젝트를 진행하다 보면 컴포넌트 간 상태 공유가 복잡해지는 순간이 온다. props drilling으로 인한 코드의 복잡성, 여러 컴포넌트에서 동일한 상태를 사용해야 하는 상황들이 늘어나면서 전역 상태 관리의 필요성을 느끼게 된다. 이런 문제를 해결하기 위해 등장한 것이 전역 상태 관리 라이브러리이고, 그 중 하나가 Redux이다. 그리고 Redux의 복잡함을 개선한 것이 Redux Toolkit이다. ❓ Redux- Redux는 JavaScript 애플리케이션을 위한 예측 가능한 상태 관리 라이브러리다. React와 함께 사용되는 경우가 많지만, 실제로는 React에 종속되지 않는 독립적인 라이브러리다. Redux는 애플리케이션의 모든 상태를 하나의 중앙 저장소(Store)에서 관리하며, ..
[Prisma] Prisma Raw SQL
·
Node.js
개발을 하다 보면 ORM의 편리함에 익숙해지지만, 때로는 복잡한 쿼리나 성능 최적화가 필요한 순간이 찾아온다. Prisma Raw SQL은 ORM의 추상화 레벨을 벗어나 직접 SQL을 작성할 수 있게 해주는 강력한 기능을 한다. 특히 복잡한 조인이나 집계 함수, 데이터베이스 특화 기능을 사용해야 할 때 유용하다. ❓ Prisma Raw SQL- Prisma Raw SQL은 Prisma Client에서 제공하는 기능으로, 개발자가 직접 SQL 쿼리를 작성하여 데이터베이스에 전송할 수 있게 해준다. 일반적인 Prisma Client API로는 표현하기 어려운 복잡한 쿼리나 성능 최적화가 필요한 경우에 사용한다.Prisma 5.19.0부터는 TypedSQL이라는 새로운 방식이 도입되어 타입 안전성까지 보장하면..
[React] useEffect의 클린업 함수
·
React
React 개발을 할 땐 컴포넌트가 언마운트될 때의 메모리 누수나 성능 문제를 고려해야 한다. 특히 타이머나 이벤트 리스너를 사용할 때 이런 문제들이 자주 발생한다. 이런 상황에서 useEffect의 클린업 함수는 정말 중요한 역할을 한다. 오늘은 이 클린업 함수가 무엇인지, 왜 필요한지, 그리고 어떻게 효과적으로 사용할 수 있는지 알아보려고 한다.❓ useEffect의 클린업 함수 - useEffect의 클린업 함수는 컴포넌트가 언마운트되거나 의존성 배열의 값이 변경되기 직전에 실행되는 함수다. - 이 함수는 useEffect 내에서 return 문을 통해 정의되며, 이전에 설정한 구독, 타이머, 이벤트 리스너 등을 정리하는 역할을 담당한다. - 요약하면 side effect를 정리하여, 메모리 누수..