전체 글 146

JVM & 클래스 로더란?

JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. JRE (Java Runtime Environment): JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판. JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다. 개발 관련 도구는 포함하지 않는다. (그건 JDK에서 제공) JDK (Java Development Kit): JRE + 개발 툴 JRE + 개발에 필요할 툴 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적. 오라클은 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다...

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 3장(시스템 설계 면접 공략법)

효과적인 면접을 위한 4단계 접근법 책에서 제시하는 효과적인 면접을 위한 4단계 접근법이 있다. 해당 내용은 면접에도 유용하게 사용될 수 있지만, 문제 해결이나, 토론, 회의 등에도 유용하게 사용할 수 있는 방법론인 것 같다. 1단계 문제 이해 및 설계 범위 확정 먼저 시스템을 구축 OR 어떤 질문에 대한 답을 하기 전에, 구체적인 요구사항을 질문하는 것이 좋다. 아래는 몇가지 예시이다. 구체적으로 어떤 기능을 만들어야하는지? 사용자 수는 얼마나 되는지 회사 규모는? 기한은 언제까지인지? 회사가 주로 사용하는 기술 스택은 무엇이고, 어떤 모듈들을 사용중에 있는지? 2단계 개략적인 설계안 제시 및 동의 구하기 해당 단계에서 초점을 맞추어야 할 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다. ..

개발자가 반드시 알아야하는 데이터베이스 - MYSQL IS NULL 조건문 쿼리 최적화 하기

개요저번 글에서 스카우터를 활용하여 API의 성능을 측정할 수 있는 Summary 기능을 소개했었다.https://code-killer.tistory.com/190해당 기능을 이용하여 slow 쿼리를 발견하였는데, 아래와 같았다.select * from temp t where t.col is null단순한 구문이라, 인덱스을 활용하여 쿼리 성능을 높이려고 했다.근데, 문득 null 값을 허용하는 컬럼도 인덱스 성능의 효과가 있을까? 라는 의문이 들어, 관련 내용을 찾아보고, 실험도 직접 해봤다.먼저 DB 환경에 따라 달라진다.오라클오라클은 인덱스에 null 값을 저장하지 않는다고 한다.즉 아래와 같은 null을 이용한 쿼리에 인덱스를 타지 않고, Full Scan을 진행한다.select * from te..

직렬화 매개변수로 ArrayList는 되고, List는 안되는 이유

개요 프로젝트를 진행하면서, 직렬화 된 객체를 매개변수로 받는 메서드를 만들었다. public void putData(String key, Serializable data) { data.put(key, data); } 해당 메서드를 사용하는데, List 타입으로 직렬화 변수를 넣으면 컴파일 에러가 발생하였고, ArrayList 타입을 넣었을 때는 정상적으로 동작한다. // 정상동작 ArrayList newData = new ArrayList(); newData.putData(key, newData); // Type 컴파일 에러 발생 List newData = new ArrayList(); newData.putData(key, newData); 선언은 다르지만 어쨋든 new ArrayList()을 할당 했..

ELK - 엘라스틱 서치에 L4 붙일 때 문제점

개요 로그 수집 용도로 ELK를 사용하고 있었는데, 원래 보안 용도로 클라이언트에서 서버를 거쳐 로그를 수집하고 있었다. 로그 양이 많아지니, 서버의 부하가 몰려 성능 이슈가 발생할 수도 있었다. 방지를 위해, 클라에서 ELK로 바로 쏘도록 구조를 변경할 필요성을 느꼈고, VIP와 L4을 추가하도록 하였다. 원래 Elasticsearch는 자체 로드밸런싱 기능이 있어서, 1개의 머신으로 보내도 로드밸런싱을 하지만, 트래픽 양이 많을 때도, 제대로 작동할 지 몰라, 앞단에 로드밸런스를 놓기로 하였다. 문제 사내에서 ELK 구조는 머신 6대를 클러스터로 구성하여 사용하고 있다. 또한, 사용하는 L4 방식이 proxy 방식이다. 아래는 elasticsearch.yml의 일부 내용이다. bootstrap.mem..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 2장(개략적인 규모 추정)

2의 제곱수 모든 프로그래머가 알아야 하는 응답지연 값 메모리는 빠르지만 디스크는 아직도 느리다. 디스크 탐색은 가능한 피하라 단순한 압축 알고리즘은 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라 데이터 센터는 보통 여러지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는데에 시간이 걸린다. 통신할 때, 데이터를 압축하거나, 용량을 줄이는 것에 대해는 와닿는다. 예를 들어, 이미지를 저장하는데, 클라 -> 서버 -> 이미지서버라면, 2번의 통신에 용량이 큰 이미지가 들어갈 것이다. 용량이 큰 이미지는 클라이언트에서 바로 이미지 서버로 전송하는 것이 더 효율적일 것이다. 가용성에 관계된 수치들 고가용성(High availability)는 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될..

스카우터를 활용한 서비스 성능 최적화

개요 우리팀에서는 APM 툴 스카우터을 사용하고 있다. 특히 스카우터의 XLog 기능과 알람 기능을 유용하게 사용하고 있다. 어느날, 오래된 프로젝트에서 deprecated 된 API들을 정리하는 일을 하는데, 존재하는 API가 500개가 넘어가고, 여기서 현재 사용중인 API을 체크하는일은 생각만 해도 막막했다. 쉽게 하는 방법이 없을까? 생각하다가 스카우터의 Summary 기능을 알게되어 사용해보았다. 사용법 먼저 스카우터에 접속한다. 전체 머신 기준으로 보려면 위 이미지 기준 Real에서 오른쪽 클릭을 한다. 주로 보는건 Service , SQL, API CALL이다. 스카우터 설정에 따라 다를수도 있지만 아마 대부분 아래와 같을 것이다. Service : 현재 프로젝트에서 호출하고 있는 API S..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 1장 (사용자 수에 따른 규모 확장성)

단일서버 모든 컴포넌트가 서버(머신,인스턴스) 1대에서 실행되는 경우이다. 여기서 컴포넌트란 웹, 앱, 데이터베이스, 캐시를 뜻한다. 1. 사용자는 도메인 이름을 이용하여 웹사이트에 접속 (이름 서비스는 DNS 서버에서 IP로 변경) 2. IP 주소로 HTTP 요청 전달 3. 요청을 받은 웹서버에서 HTML 페이지나 JSON 형태의 응답 데이터베이스 사용자가 늘면, 컴포넌트를 분리하기 시작한다. 대표적으로 데이터베이스 서버와 웹서버를 분리한다. - 데이터베이스 서버는 용량 및 처리량이 크기 때문에 서버 분리 우선대상 어떤 데이터베이스를 사용할 것인가? 전통적으로 관계형 데이터베이스와 비관계형 데이터베이스로 나눠진다. 워낙 많이 들어본 내용이기 때문에 간단하게 정리하고 넘어간다. (자세한 내용은 https..

Git 원격 저장소 성능 유지하기 (feat - Git 크라켄 성능 최적화)

개요 협업을 하면 가장 많이 사용할 git 명령어 중 pull, push의 속도가 현저히 느려짐을 체감했다. 아무래도, 여러 게임들이 하나의 프로젝트에 들어가기도 했고, 브랜치를 머지 후에 삭제하는 옵션을 적용안시켰기 때문에, 사용하지 않은 브랜치가 계속 쌓이고 있었다. 원격 저장소 뿐만 아니라, 사용하고 있는 Git 크라켄의 최적화에 대해서도 정리하였다. 1. git gc 명령어를 이용한다. garbage collect을 이용하여, 저장소를 효율적으로 관리한다. 자세한 설명은 아래 링크 참조 https://git-scm.com/docs/git-gc (깃 공식 Doc) ## 깃 크라켄 내 터미널에서는 사용 불가 -> git bash 이용 추천 GC 하려는 폴더로 이동 git gc 명령어 또는 git gc..

개발자가 반드시 알아야하는 데이터베이스 - NOSQL vs RDBMS 간단 정리 feat Redis

개요사내에서 분산환경에서 데이터 저장소 선택과 활용이라는 강의를 들었는데, 굉장히 유용한 강의였고, 블로그거리가 많아서 좋았다 ㅋㅋ해당 강의에 대한 요약을 앞으로 2편정도 더 올릴 생각이다.오늘은 강의 초반내용인 RDBMS와 NOSQL의 특징 및 차이에 대해서 아주 간단하게 다뤄본다.RDBMS장점Relation 기반 높은 신뢰성 비교적 높은 성능 비교적 다양한 기능 관리편의성단점비용이 높음Schema 변경 어려움커질수록 느려진다확장성 부족 (처음 시작은 단일 장비 기준으로 만들어짐)NOSQL장점관계없는 데이터 처리에 최적화높은 확장성을 가지는 경우 많음Schemaless단점제한적인 일관성Join, Transaction 미지원관리비용이 큰 경우 있음NOSQL에 대해 자세히확장성/가용성모든 데이터의 신뢰성이..

728x90