본문 바로가기
반응형

개발5

[백엔드]Singleflight 디자인패턴 최근 회사에서 특정 API에 트래픽이 몰릴 때 서버가 뻗는 현상을 경험했습니다. 캐시를 도입했는데도 캐시가 만료되는 순간 동시에 들어온 수백 개의 요청이 모두 DB를 호출하면서 발생한 문제였죠. 결국 당장의 극약 처방으로 스케일인아웃으로 해결하긴했지만 백엔드 java 코드 설계상의 개선 필요성은 분명 했습니다.해당 문제를 개선하기위해 구글링을 하던와중 다른 언어에선 이런 사례를 어떻게 해결할까 , Go 언어의 singleflight 패키지와 이를 활용한 패턴을 발견했습니다.📌 문제의 시작: 캐시 Stampede 현상우리 서비스와 일치하는 건 아니지만 이해가 쉬운 예제로 인기 상품 정보를 조회하는 API가 있었습니다:@RestController@RequiredArgsConstructorpublic cla.. 2025. 7. 11.
[프론트엔드] useMemo와 useCallback 제대로 이해하기 최근 개발하면서 useMemo와 useCallback을 제대로 이해하지 못하고 사용했다가 문제를 겪었습니다. 오히려 성능이 나빠지거나 예상치 못한 버그가 발생하는 경험을 했습니다.📌 문제의 시작: 무작정 사용했던 최적화 훅들제가 작성했던 코드 형식의 간단예제입니다:// 내가 작성했던 코드function MyComponent({ data }) { // useMemo 사용 const processedData = useMemo(() => { return data.map(item => item.value); }, []); // 😱 의존성 배열에 data를 빼먹음 // "함수는 무조건 useCallback" 이라고 생각 const simpleHandler = useCallback(() => {.. 2025. 7. 11.
캡슐화는 무엇인가? 캡슐화는 자바와 같은 객체지향 언어를 처음 배우게 되면 객체지향의 장점으로 정의되는 이론 중 하나이다. 하지만 많은 개발 입문자들이 메소드에 왜 코드를 숨겨야 하는지 이론적으로만 알고 넘어가는 이유가 다수다. 그리고 언어를 배울 때 필요성이 직접적으로 느껴지지 않기 때문에 개념만을 살피게 된다. 물론, 교육을 받을 시간 동안 이러한 추상적인 이론에 붙잡혀 있을 여유가 없을 것이라고 생각한다. 나도 그랬다. 하지만 개발자는 변화에 대응해야 하고 객체지향 언어에서 핵심은 캡슐화와 인터페이스에 있다는 것이었다. 이글은 오브젝트의 저자 조영호님의 책을 바탕으로 정리한 글입니다. http://www.yes24.com/Product/Goods/74219491 코드를 숨기는 캡슐화의 장점 코드를 숨긴다는 것은 객체 .. 2023. 4. 28.
OCP 원칙을 지키지 못할 상황일때 OCP: 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. ocp는 로머트마틴이 정한 객체지향 SOLID 원칙에서 O 부분에 해당하는 5가지 중 핵심원칙이다. 객체지향 언어를 처음 배울 때 쉬운 예로 어떠한 클래스 객체를 사물에 대입시켜 그 사물에 큰 주제로 피라미드 형식으로 상속받아 뻗어 나가는 형태를 취하는 식으로 배운다. 예를 들어 TV라는 추상적 사물이 있다면 TV에 속한 스마트 TV, 아날로그 TV 등 TV라는 구상체에 존속되는 실질적인 구현체를 사용하게 된다. 여기서 Java 기준으로 TV가 추상화 클래스이라는 것을 알 수 있다. 추상화라는 개념을 아는 개발자는 이제 새로운 TV 제품의 기능을 설계할 때 TV 추상화 클래스를 상속하는 하위 클래스를 만들어 해당 하위 클래스에 .. 2023. 3. 22.
Bean scope Spring bean scope 스프링 빈(bean)에서의 scope(스코프)란 빈 이 생성되고 제거되는 생명주기라고 정의할 수 있다. 흔히 알고 스프링의 기본 빈은 싱글톤으로 생성되며 해당 빈의 스코프는 스프링의 컨테이너가 시작부터 종료까지 유지되는 가장 긴 생명주기를 가지고 있다. 주로 필드 주입, 기본 생성자 방식으로 DI 하는 클래스 나 인터페이스 객체들이 이 빈 스코프 생명 주기에 해당한다. 스프링 빈들의 스코프는 스프링 컨테이너가 관리를 하며 일반적으로 클라이언트가 관리하지 않는 스프링에 의존적인 빈 들이다. 하지만, 일반적인 스코프를 가지지 않는 빈들 또한 스프링에 존재한다. prototype scope: 이름 그대로 사용자 정의 빈 스코프이다. 빈의 생성과 DI만 스프링이 관여하고 빈을 제.. 2023. 3. 17.