반응형 전체 글7 [백엔드]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. [아노 1800 리뷰 1편] 6년 묵은 게임이 현역을 씹어 먹는 이유? (그래픽, UI, 시스템) 안녕하세요! 오랜만에 게임 리뷰로 찾아뵙는 것 같네요. 오늘 이야기할 게임은 제 플레이타임을 무한정으로 집어삼키고 있는 악마의 게임, 바로 '아노 1800(Anno 1800)' 입니다.사실 저도 '고인물 게임'이라는 편견이 있어서 입문을 좀 망설였는데요. 막상 시작하고 보니 왜 '갓겜' 소리를 듣는지 바로 알겠더군요. 2019년에 나온 게임이 어떻게 2025년 최신 게임들과 비빌 수 있는지, 그 중독성의 비밀을 파헤쳐 보겠습니다. 1. 눈뽕 제대로 맞는 그래픽, "이게 2019년 게임이라고?"솔직히 말해서, 저 비주얼에 끌려서 시작한 거 맞습니다.😅 최신 게임들 그래픽 좋다는 거 다 해봤지만, 아노 1800의 디테일은 정말 '변태'같다고 할 수 있습니다. 그냥 건물이 예쁜 수준이 아니에요. 카메라를 쭉.. 2025. 7. 5. 워썬더 700시간 플레이 후기 어렸을 때부터 탱크를 좋아해서 워썬더 전차 디테일 반해 가벼운 마음으로 시작했지만 어느덧 700시간 넘겼습니다. 밸런스 및 이모저모 이슈도 많은 게임이지만 전차를 외적으로 좋아하면 이만한 게임은 없는것 같습니다. 하지만 저는 탱크의 실제 세부 스펙이나 전차 성능에 대한 관심은 없는 편입니다.😅이글에서는 워썬더 현재 표준 리얼리스틱 전투 방식에서 제가 플레이한 국가에 대한 후기 만 써보려고 합니다. 보통 게임을 플레이하면 지갑전사 영향이 크지만 워썬더는 지갑전사의 효율성이 정말 좋지 못해 유료 전차 차량으로 남들보다 2배로 실버라이온(게임머니) 와 전차 연구(전차 해금 포인트)를 얻어 꾸준히 플레이 하는 방식이 권장됩니다. 참고사항으로 워썬더는 무료 게임이지만 만약 워썬더가 재미있다면 필수 불가결로 .. 2025. 2. 24. 캡슐화는 무엇인가? 캡슐화는 자바와 같은 객체지향 언어를 처음 배우게 되면 객체지향의 장점으로 정의되는 이론 중 하나이다. 하지만 많은 개발 입문자들이 메소드에 왜 코드를 숨겨야 하는지 이론적으로만 알고 넘어가는 이유가 다수다. 그리고 언어를 배울 때 필요성이 직접적으로 느껴지지 않기 때문에 개념만을 살피게 된다. 물론, 교육을 받을 시간 동안 이러한 추상적인 이론에 붙잡혀 있을 여유가 없을 것이라고 생각한다. 나도 그랬다. 하지만 개발자는 변화에 대응해야 하고 객체지향 언어에서 핵심은 캡슐화와 인터페이스에 있다는 것이었다. 이글은 오브젝트의 저자 조영호님의 책을 바탕으로 정리한 글입니다. 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. 이전 1 2 다음