JAVA Instrumentation API

Instrumentation API와 Application Performance Monitoring 최근 굉장히 많은 APM(Application Performance Monitoring) 툴이 생겨나고 있습니다. 오픈소스를 비롯하여 많은 상용소스들이 java application의 performance monitoring 정확히는 application의 실행 상태를 확인하기 위해 stack profiling을 가능 하게 해주고 있습니다. 여기서는 datadog, pinpoint, scouter 과 같은 오픈소스들에서 사용한 핵심 기술인 Instrumentation API에 대해서 알아보고 예제 코드를 통해 어떻게 구현되어 있는지 테스트 … Read more

Garbage Collection – 2부

1. GC 발생 시나리오 객체가 생성되면 Eden 영역에 위치 하게 된다. Eden영역이 가득차게 되면 Minor GC가 발생하여 참조가 없는 객체는 삭제되고, 참조 중인 객체는 Suvvivor 영역으로 이동한다. Survivor영역이 가득차게 되면 Minor GC가 발생하고 참조가 없는 객체는 삭제되고, 참조 중인 객체는 다른 Suvvivor 영역으로 이동한다. Survivor영역에서의 GC과정을 반복 하며, 계속 참조 중인 객체는 OLD 영역으로 이동한다. … Read more

Garbage Collection – 1부

1. GC(Garbage Collection) 응용 프로그램의 메모리 부족을 방지하려면 더 이상 필요하지 않은 Java 힙의 개체를 회수해야 합니다. 이 프로세스를 가비지 수집 (GC)이라고 합니다. 일반적으로 GC 프로세스의 첫 번째 단계는 연결할 수 있는 개체를 표시 하는 것인데, 이는 개체가 여전히 사용 중임을 의미합니다. 다음 단계는 표시되지 않은 개체를 제거하여 메모리를 회수하는 것입니다 . 마지막 단계는 힙이 … Read more

Clean Code

클린 코드란? 수많은 프로그래머들이 정의한 클린 코드란 무엇일까요? 프로그래머들이 인터뷰를 할 때 좋은 코드가 읽기도 쉽다고 말합니다. 하지만 코드를 쉽게 읽을 수 있는 것만으로 코드가 깨끗하고 올바르게 설계되었다고 말하기에는 충분하지 않습니다. 클린코드는 다음과 같은 특성이 있어야 합니다. 모든 테스트 실행. 중복제거. 프로그래머 의도 표현. 클래스와 메서드 수를 최소화. * 코드는 안정적이고, 예측 가능하며, 안전하고, 신뢰할 … Read more

Load balancers

1. load balancing 로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시키는 프로세스입니다. 이렇게 하면 단일 서버에 너무 많은 수요가 발생하지 않습니다. 작업을 고르게 분산함으로써 로드 밸런싱은 애플리케이션 응답성을 향상시킵니다. 또한 사용자를 위한 응용 프로그램 및 웹 사이트의 가용성을 높입니다. No load Balancing load Balancing 로드 밸런싱은 네트워크 트래픽을 여러 서버에 분산시키는 프로세스. 단일 서버에 너무 많은 … Read more

Test-Driven Development

1. TDD의 이해 XP(eXtreme Programming) 창시자 중 한 명이며, TDD를 주도한 켄트 벡은 TDD를 소개한 자신의 책에서 “프로그램을 작성하기 전에 테스트를 먼저 작성하는 것” 이라고 테스트 주도 개발을 정의했습니다. 최초에는 테스트 우선개발이라고 불렸으나 지금은 테스트 주도개발 이라고 불리고 있습니다. TDD는 아래와 같은 차이로 이해할 수 있습니다. “문서로 만들어 머리로 생각하고 눈으로 확인할 것인가?“ “예상 결과를 … Read more

Domain Driven Design – 2부 (Tactical Design)

2부. Tactical Design Tactical Design Tool 들은 세부적인 사항을 구현하는 것을 위해 필요하며, 주로 Bounded Context 내의 구성 요소들을 관리합니다. 이것은 개발상의 실제적인 표준을 제공하는데 services, entities, repositories, factories 와 같은 소프트웨어 디렉토리 구조들에 익숙한 개발자들이 많을 것인데, 이 모든 것은 전부 DDD에서 나온 개념입니다. 이러한 Tactical Design은 Strategic Design과 달리 개발을 진행하는 과정에서 계속해서 … Read more

Domain Driven Design – 1부 (Strategic Design)

Domain Driven Design 도메인 주도 디자인이란 도메인이 중심이 되는 개발 방식을 말하며, 요구 사항을 모으는 것부터 low_level 디자인까지 소프트웨어 개발의 라이프사이클 전체를 포함하는 방법론 이라고 할 수 있습니다. DDD의 목적은 소프트웨어의 연관된 부분들을 연결하여 계속 해서 진화하는 모델을 만들어 나가 복잡한 어플리케이션을 쉽게 만들어 가는 것에 있습니다. 즉, Loose Coupling과 High Cohesion으로 보다 가벼운 설계로 … Read more

AWS Route 53을 이용한 도메인 적용

1. DNS(Domain Name Server) DNS는 사람이 읽을 수 있는 도메인 이름(예:www.haru.com)을 컴퓨터나 스마트폰 등 다양한 디바이스에서 읽을 수 있는 IP주소(예:192.168.x.x)로 변환하는 역할을 한다. DNS는 도메인 이름을 -> IP 주소로 변환하는 역할 인터넷 상의 모든 컴퓨터는 IP Address라는 숫자를 사용해 서로를 찾고 통신한다. DNS가 없었다면 웹 사이트에 접속하기 위해 웹 서버의 IP Address를 알아야만 웹 페이지에 … Read more

VS Code로 Python 코드 원격 디버깅하기

디버깅을 편리하게 수행하기 위해 보통 Visual Studio Code와 같은 코드 에디터를 사용합니다. 하지만 코드를 원격 서버에 배포한 후에는 어떻게 디버깅을 해야 할까요? 원격 서버에 VS Code와 같은 에디터가 설치되어 있지 않아도 디버깅 할 수 있는 방법은 없을까요? 이번 글에서는 매우 많은 사람들이 이용하는 VS Code에서 원격 서버에 있는 Python 코드를 디버깅하는 방법을 알아보려고 합니다. 원격 … Read more