bwbw-kim

상태 관리가 쉬워지는 State 패턴 구현 방법

State 패턴에 대해서 알아보자! State pattern 은 어떤 클래스가 여러가지의 상태를 가질때 사용하기 좋은 패턴이다! 내가 지금 글을 쓰고있는 태블릿의 상태를 클래스로 나타내어보자! 이 태블릿은 전원 버튼이 있다! 해당 전원 버튼을 누를때마다 꺼져있는 상태라면 켜지고 켜져있는 상태면 꺼지는 동작을 한번 아래처럼 구현해 보았다. clas...

MySQL 인덱스 설정으로 쿼리 속도 100배 빠르게 만들기

게시글에 들어갔을때 시간이 오래 걸린다! Cache 를 적용했는데! 게시글에 들어갔을떄 시간이 오래 걸린다.. 개발 서버에서는 분명 100ms 아래여서 기분이 너무 좋았는데 운영에 올렸더니 물론 기존보다 빨라지긴 했지만 아직 한참 느렸다. 무엇이 문제였는지 line by line 으로 따라가다보니 문제는 조회수 증가 로직이었다. 우리 조회수 증가...

반복자 패턴 소개: 객체 컬렉션을 효율적으로 순회하는 디자인 패턴

반복자 패턴이 뭘까? 반복자 패턴이란 내가 원하는 어떠한 class 들이 쫙 있다고 했을때 생성된 그 모든 친구들을 쫙 돌고 싶을때 사용 할 수 있는 패턴이다. 뭔가 전체적으로 추가하고싶은게 있다거나 전체적으로 특정 행동을 취하고 싶을때 사용하면 된다! 구현도 아주 쉽다! 예를 들면 아래와 같은 class 가 있다고 해보자! public clas...

Spring Boot 성능 개선: Ehcache와 Redis로 페이지 로딩 속도 향상하기

시스템이 느려졌다.. 우선 springboot web framework를 사용하여 개발중이기 때문에 backend 에서 모든 정보가 model 에 들어간 뒤에야 web 페이지 로딩이 시작된다 이 문제를 해결하기 위해서는 제일 먼저 backend 최적화였기에 여러가지 방법을 찾아봤다. 우선 당연히 2중 for문, 자료구조를 활용하여 최적화를 진행했지...

MAT으로 Java Heap Dump 분석하기 (Memory Leak 문제 해결기)

MAT란 뭘까? MAT은 Eclipse 기반의 Java 메모리 분석 도구이다. Java 프로그램의 메모리 사용량 및 성능을 분석하는 데 사용이 되는데 특히나 heap memory 분석을 하면 의심되는 것도 말해주고 아주 크게 도움이 될 것 같았기에 얼른 다운로드 받았다. HeapDump 가져오기 우선! 운영환경이 다시 메모리가 차오르기를 기다...

Java에서 홀수 확인 시 주의할 점! (홀수 판별 꿀팁과 주의사항)

Java 에서 홀수 확인할때 어떻게 하세요? 사실 대학시절 1학년 수업 때 배웠던 % (나머지) 연산을 활용 하면 너무 쉽다 우선 그보다 먼저 짝수일때는 어떻게 할까? n % 2 == 0 이렇게 2로 나누었을떄 나머지가 0인 정수면 당연히 짝수이다. 하지만! 홀수는? n % 2 == 1 이라고 생각했다면 오답이다!! 왜 오답이야!? py...

메멘토 패턴으로 객체 상태 저장과 복원 구현하기

메멘토 패턴이 뭘까?? 메멘토 패턴은 어떠한 class 의 상태를 계속해서 저장하고 원할때는 이전의 상태로 돌아 갈 수 있도록 하는 패턴을 말한다! 마치… 영화 메멘토에서 자신의 몸에 문신을 새겨 기억을 유지하는거 처럼 메멘토 패턴은 특정 class 에 자신의 예전 state 를 새겨 저장하고 원할때 돌아간다! OriginalClass 가 상태를...

VisualVM으로 Spring 애플리케이션의 CPU와 메모리 사용량 실시간 모니터링하기

Visual VM 으로 Spring Cpu, Memory 사용량 알아보기 최근에 아주 큰 이슈가 터졌다. 너무 충격적이게도 Heap 메모리가 계속 올라가다가 어느순간 OOM 이라는 Error log 와 함께 Q&A 플랫폼이 죽어버리는 아주 큰일이 발생하였다. 아무리 코드만 봐서는 알 수가 없었다.. 우선 빠르게 죽지는 않는다! kubern...

사용자 클릭 분석하기: Django와 JavaScript로 클릭 트래커 구축하기

Click Event 를 트래킹해보자 우리 사이트에서 사용자들이 어떤 곳을 많이 클릭하는지 확인해보고 싶었다. 사실 어떤 페이지에 들어갔는지는 쉽게 파악이 되지만 어디를 클릭했는지는 확인하고 있지 않았다. 따라서 tracker 를 하나 만들어서 넣기로 했다. tracker.js django 로 띄우기 우리 서비스와는 아예 별개로 만들어서 우리...

© 병욱. Some rights reserved.