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를 정리하여, 메모리 누수..
[Spring] 의존성 주입(Dependency Injection, DI)
·
Java
개발을 하다 보면 여러 클래스들이 서로 얽혀있는 복잡한 구조를 만나게 된다. 이때 Spring의 의존성 주입은 이런 복잡함을 깔끔하게 정리해주는 핵심 기술이다. ❓ 정의의존성 주입(DI)은 클래스가 필요로 하는 의존 객체를 직접 생성하지 않고, 외부에서 주입받아 사용하는 설계 패턴이다. Spring Framework에서는 IoC 컨테이너가 이 역할을 담당하여 객체의 생성과 의존성 관리를 자동으로 처리해준다. 쉽게 말해, 클래스 A가 클래스 B를 사용해야 할 때 A가 직접 B를 new로 생성하는 것이 아니라, Spring이 알아서 B 객체를 만들어서 A에게 전달해주는 방식이다. 예를 들면 음식점에서 요리사가 직접 재료를 구하러 다니는 것이 아니라, 누군가가 필요한 재료를 미리 준비해서 가져다주는 것과 같다..
배럴(barrel) 패턴
·
기타
프론트엔드 개발을 하다 보면 수많은 컴포넌트와 유틸리티 함수를 import하느라 코드 최상단이 길어지는 경험을 하게 된다. 그래서 이런 문제를 해결할 수 있는 '배럴(barrel) 패턴'에 대해 알게 되어 정리해보려고 한다!❓ 정의- 배럴 패턴은 여러 개의 모듈을 하나의 파일(주로 index.ts 또는 index.js)에서 재정의해 단일 진입점으로 관리하는 패턴이다. - 이 패턴은 마치 와인이나 위스키를 담는 배럴(통)처럼 여러 모듈을 하나로 담아 제공한다고 해서 붙여진 이름이다. - 복잡한 import 경로를 간결하게 만들어 코드의 가독성과 유지보수성을 크게 향상시킨다. - 특히 컴포넌트, 훅, 유틸리티 함수 등을 그룹으로 관리할 때 매우 유용하게 활용된다. - 자바스크립트 기반의 프론트엔드(React..