computer science (10) 썸네일형 리스트형 GC(Garbage Collection) GC(Garbage Collection)GC(Garbage Collection)란?자바에서는 C계열의 언어와 달리 메모리 관리를 개발자가 직접 하지 않습니다. Garbage Collector가 사용되지 않는 메모리에 대한 참조를 자동으로 해제하여 메모리 공간을 확보합니다.자바에서는 버전 업그레이드를 하면서 GC 알고리즘도 같이 향상시켜왔습니다. 처리 성능을 높이고, 애플리케이션이 중단되는 시간을 최대한 줄이기 위해서입니다. GC의 대상이 되는 메모리 영역은 JVM의 메모리 구조에서 heap 영역인데, 자바가 처음 출시되었을 때 사용하던 mark-and-sweep 알고리즘 이후부터는 generational 개념과 동시성(concurrent) 기반으로 작동하고 있습니다. generational 기반 GC의 .. Facade 패턴 Facade Patternstructural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classesrefactoring.guruProblem라이브러리나 프레임워크를 이용해 코드를 작성한다고 해보자. 이런 경우 보통은 객체를 직접 초기화하고, 객체의 의존성을 직접 관리하고, 호출 순서까지 신경써야 한다.이렇게 되면 내가 작성하려고 하는 비즈니스 로직이 3rd party 라이브러리와 강하게 결합되게 되고, 코드릴 이해하거나 유지보수하기 어렵게 만든다.SolutionFacade 패턴은 많은 구성 요소를 가진 subsystem에 간단한 인터페이스를 제공하는 클래스.. Flyweight 패턴 Flyweight Patternfit more objects into the available amount of RAM by sharing common parts of state between multiple objects instead of keeping all of the data in each objectrefactoring.guruhead first design patterns 서적Problem인스턴스가 매우 많이 생성될 때, 인스턴스 생성 비용이 높은(하지만 모든 인스턴스가 공유하는 uniqueState) 필드가 있다면, 해당 필드는 공유하고 반복되는 state는 cache를 하면 메모리 절약 가능위 예시에서는 20KB를 차지하는 sprite는 공유하고, 반복적으로 생성되어 각 인스턴스에 할당되.. Observer 패턴 Observer Patternnotify multiple objects about any events that happen to the object they're observingrefactoring guruhead first design patterns 서적UMLPublishersubscribers 리스트를 갖고 있고, subscribe() / unsubscribe() 메서드를 통해 관리상태가 변경되면 subscribers 각각에 대해 변경된 상태를 알려주는 notifySubscribers() 메서드를 가짐SubscriberSubscriber interface는 Publisher가 notifySubscribers() 메서드에서 호출할 update() 메서드를 선언ConcreteSubscribersSub.. Strangler 패턴 Strangler Pattern이 글은 다음 글(Micro service architecture for the legacy codebase)을 번역하였습니다. 새로운 기능과 기능이 도입되면 application의 복잡성이 극적으로 증가하고 코드를 유지보수하거나 새로운 기능을 추가하는 것이 더 어려워집니다. 이러한 application은 Big Ball of Mud가 됩니다. 팀은 이렇게 복잡한 application을 유지보수하기 위해서 계속해서 노력해야 하고, 누군가는 새로운 기술이나 hosting, 아키텍쳐 패턴으로 대체할 것을 제안하게 됩니다. 그런데 전체 솔루션을 대체하는 것은 매우 어렵습니다.업계에서는 microservice, serverless architecture라는 유행어가 있어 왔습니다... Cookie & Storage, 뭘 사용해야 할까? cookie, storage, session, session cookie, web storage, local storage.. 웹 클라이언트의 저장 공간을 이야기할 때 자주 혼용해서 사용하는 단어들이다. 최근에 지인과 cookie 관련된 내용을 이야기하였는데 알고 있다고 생각했지만 설명하려고 하니 잘 알고 있지 못하고 있다는 것을 깨달아 다시 한 번 정리해보기로 했다.웹 클라이언트에서 데이터를 저장하기 위해 사용하고 있는 공간은 크게 Cookie와 Web Storage 2개로 나뉜다. 만료 시점에 따라서 각 저장 공간은 다시 2가지로 나뉜다. Cookie는 session cookies/persistent cookies로 나뉘고, Web Storage는 session storage/local storag.. 비밀번호는 왜 해시 함수를 이용해 암호화를 할까?(feat. 디피 헬만 키 교환) 개요 어떤 사이트에 접속해서 아이디와 패스워드를 입력해 가입을 한 뒤 로그인을 한다고 가정해보자. 아이디와 비밀번호라는 개인정보가 모두 공개되지 않으면 좋겠지만, 아이디는 비교적 공개되어도 되는 데이터에 가깝다. 하지만 비밀번호는 절대 공개되어선 안되는 데이터다. 심지어 웹사이트를 관리하는 관리자조차도 비밀번호를 함부로 알아선 안된다. 그렇지만 사용자가 로그인을 하기 위해선 회원가입 시에 입력한 비밀번호의 값을 서버 저장소에 보관한 뒤, 로그인 시에 입력하는 비밀번호가 저장된 비밀번호와 일치하는지 확인하는 작업이 필요하다. 보통 비밀번호는 평문 자체를 저장하지 않고 암호화한 임의의 값을 저장한다. 여기에서 핵심은 다음과 같다. 데이터를 한방향으로만 흐르게 해야 한다. 임의의 값으로 암호화하는 작업은.. File Descriptor 제한 테스트(feat. ulimit, JMeter, VisualVM) 이전 글 테스팅 툴 - JMeter와 모니터링 툴 - VisualVM에서 어플리케이션을 테스트하고 어플리케이션이 사용하고 있는 자원을 모니터링하였다. JMeter 문서에 나오는 best practices에서 정확한 테스트를 위해 thread 수를 적절히 설정해야 할 필요가 있다고 나와 있었는데, 당시에는 그러면 얼마만큼의 thread 수가 적절한가? 하는 의문이 들었다. File Descriptor, ulimit을 공부하며 어떤 영향이 있는지 알 수 있는 테스트를 할 수 있었다. 이번 글은 그 테스트에 대한 글이다. Spring Boot Application Server SlowController를 하나 만들어 각 루트 요청이 Thread를 5초간 sleep 하도록 만들었다. @RestController.. 이전 1 2 다음