전체 글72 『Java』 Java Virtual Machine & Runtime Data Areas JVM (Java Virtual Machine)JVM은 자바 애플리케이션을 실행하기 위한 가상 머신이다. 자바 소스 코드로 부터 컴파일 과정을 거쳐 바이트 코드(.class)를 실행한다. 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작 가능하다. Java는 플랫폼 종속적이지 않다.컴파일된 바이트 코드로 어떤 JVM에서도 동작 시킬 수 있다.JVM은 플랫폼 종속적이다.리눅스의 JVM과 윈도우의 JVM은 서로 다르다. Java Application 실행 과정 자바로 개발된 애플리케이션을 실행하면 JVM은 OS로부터 메모리를 할당한다.자바 컴파일러(javac)가 자바 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일한다.클래스 로더를 통해 JVM Runtime Data Area로 로.. 2024. 10. 23. 『Network』 L4 / L7 Load Balancer 차이점 Load BalancerLoad Balancer는 트래픽을 받아서 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어다.L4 부터 Port를 다룰 수 있기 때문에 부하 분산에 L4 Load Balancer와 L7 Load Balancer가 많이 사용된다.Load Balancer는 한 대 서버의 각각의 포트에 여러 개의 서비스들을 운영할 수 있도록 한다. L4와 L7 Load Balancer는 각각 다른 계층에서 동작하며, 트래픽 분산 방식과 제공하는 기능이 다르다. L4 Load Balancer는 Transport 계층에서 동작하며 IP, Port 를 기반으로 트래픽을 분배한다.L7 Load Balancer는 Application 계층에서 동작하며 URI, Payload, Http Header, C.. 2024. 10. 22. 『Java』 Lombok은 어떤 원리로 동작할까? Lombok은 컴파일 과정의 Annotation Processing 단계에 개입하여,소스 코드에 대한 AST(Abstract Syntax Tree, 추상 구문 트리)를 수정하거나 필요한 코드를 자동 추가한다. 동작 구조는 다음과 같다. 단계핵심설명1단계javac의 컴파일 과정자바 소스 파일을 읽고, AST(Abstract Syntax Tree)로 변환.2단계Lombok의 역할Lombok이 컴파일 중 어노테이션을 처리하고 AST(Abstract Syntax Tree)에 필요한 코드 추가.3단계바이트 코드 생성수정된 AST를 기반으로 바이트 코드(.class 파일) 생성.4단계컴파일 단계와 Annotation ProcessingLombok이 AST를 수정하며, 필요 시 컴파일 재시작 가능. 자주 사용하는.. 2024. 10. 21. 『Java』 오랜만에 Java 문법 오랜만에 자바 기본 문법을 복습해 보았는데 반가웠다. 허허특별히 어려운 건 없었고 강의를 수강하면서 리마인드 하면 좋을 만한 내용들을 정리해보려 한다. 스코프변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류된다. 지역 변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다.멤버 변수(클래스 변수, 인스턴스 변수)는 클래스 내부에 선언된 변수로, 다시 클래스 변수와 인스턴스 변수로 나뉜다.클래스 변수 (static 변수)인스턴스 변수static 키워드가 붙은 변수로, 클래스 로더가 클래스를 메모리에 로드할 때 초기화된다. 모든 객체가 해당 변수를 공유한다.객체마다 독립적으로 존재하는 변수로, 객체가 생성될 때마다 초기화된다. 변수의 접근 가능한 범.. 2024. 10. 20. 『Go』 4개의 region에 존재하는 5000개의 서버 경고 알림을 어떻게 실시간으로 수집할까? 문제 상황각 서버에서 발생하는 Alert 데이터를 수집하기 위해서는 자체적으로 Agent를 개발하는 방법과 상용 솔루션을 사용하는 방법이 존재했다. 기존 업무 환경은 약 5000개의 서버 중 80%에 해당되는 서버에 Zabbix가 설치되어 있었고 이를 바탕으로 데이터 수집을 고려했다. 데이터 수집을 위해 아래의 이미지와 접근 방법을 구상했다.각 Region 내의 개별 서버에 Zabbix를 설치하고 발생한 Alert을 하나의 Slack Workspace로 전송한다. 운영팀과 협의해 각 Region과 유의미하게 분류해야 되는 서버들은 별도의 Slack Channel로 분류해서 메시지를 관리했다.22개의 Slack Channel을 통해 각 서버에서 발생되는 Alert을 JSON 타입의 Original Mess.. 2024. 9. 17. 『DataBase』 대용량 데이터를 마이그레이션 할 때 무엇을 고려해야 할까 1️⃣편 Multi Column Index다중 컬럼 인덱스는 데이터 조회 시 함께 사용되는 컬럼들의 조회 성능을 최적화하기 위해 사용된다.각 컬럼에 개별 인덱스를 설정하는 것과 다중 컬럼 인덱스를 사용하는 것에는 차이점이 존재하는데 아래와 같다. 개별 인덱스를 각 컬럼에 설정한 경우, 데이터베이스는 쿼리 실행 시 어느 인덱스를 우선 사용할 것인지 판단한 후, 선택된 인덱스에 따라 순차적으로 검색을 진행한다. 이 과정에서 필요한 경우 여러 인덱스를 결합하여 사용할 수 있지만 추가적인 비용이 발생할 수 있다. 반면, 다중 컬럼 인덱스는 상위 컬럼의 인덱스 값에 대해 하위 컬럼의 값을 함께 저장한다. 따라서 쿼리 실행 시 어떤 인덱스를 먼저 사용할지를 판단하는 과정이 생략되고, 상위 인덱스에 의해 이미 필터링된 결과 .. 2024. 8. 20. 『Network』 Network System Overview of Network SystemsChoosing a Network Topology네트워크상의 노드 구성은 토폴로지(Topology)라고 한다. 네트워크의 토폴로지는 두 노드 간의 단일 연결처럼 단순하거나, 또는 노드가 데이터를 교환할 수 있는 노드의 레이아웃처럼 복잡할 수 있다. 네트워크 토폴로지의 유형은 점대점 연결형, 데이터 체인형, 버스형, 링형, 스타형과 그물형의 6가지 기본 범주로 나뉜다. 가장 단순한 형태의 네트워크인 점대점(Point-to-Point) 연결은 두 노드가 하나의 연결을 공유한다. 이러한 유형의 네트워크 연결은 드물지만, 두 노드 간에 직접 통신이 필요할 때 유용하다. 일렬의 점대점 연결을 데이터 체인(Data Chain)이라고 한다. 데이터 체인에서 트래.. 2024. 8. 16. 『Go』 고루틴 Race Condition 해결 과정 장애 상황Escalation 기능의 백엔드 로직 성능을 개선하기 위해 jiraEscalation 함수와 slackEscalation 함수를 각각 비동기 방식으로 구현하려고 했다. 하지만 두 함수가 동시에 실행되어 Incident 객체에 대해 읽기 및 쓰기 작업을 수행하는 경우, 동일한 객체를 동시에 수정하려고 시도하면서 Race Condition 오류가 발생했다. 위와 같은 jiraEscalation 함수와 slackEscalation 함수를 비동기로 실행시키기 위해 최초에는 두 메서드를 고루틴으로 실행하고 고루틴 내부에서 Incident의 값을 업데이트하도록 로직을 수정했다. 그 결과, 두 개의 고루틴이 동시에 실행되면서 incident.IssueId를 수정하고 있다.jiraEscalation과 sla.. 2024. 8. 13. 『Go』 FFmpeg 라이브러리로 구현하는 동영상 처리 모듈: 문제 해결 전략 및 분석 기능 요구 사항 정의동영상 업로드`명령` 동영상 컷 편집 (Trim)`명령` 동영상 이어 붙이기 (Concat)`명령` 작업 수행최종 동영상 다운로드동영상 및 작업 조회위와 같은 6가지의 기능 요구 사항이 주어졌다. 주목해서 살펴본 점은 `명령` 관련 요구사항이다.모든 `명령`은 즉각적으로 ffmpeg command를 실행하여 연산을 수행하지 않습니다.별도의 `명령 작업 수행`이 있어야 concat, trim 등의 연산을 수행합니다. `명령 작업 수행`은 Queue 개념과 유사하다고 판단했는데 그 근거는 다음과 같다. 여러 개의 동영상 처리 작업을 순차적 또는 동시에 실행하는 프로세스이며, 작업이 완료될 때까지 대기하거나, 작업이 실패했을 때의 상태 관리 등이 Queue 시스템과 유사하다. Queue 개.. 2024. 8. 11. 이전 1 ··· 4 5 6 7 8 다음