목록분류 전체보기 (88)
생각해보기
Java는 처음 부터 다중 스레드 환경을 지원하도록 설계되었습니다. 자바에서 가장 처음 동시성을 제어하기 위해 사용된 구조는 가본적인 ‘synchronized’ 키워드와 wait-notify 메커니즘입니다. 추후에 복잡한 동시성을 제어하기 위해 더 많은 기능들이 생겨났습니다. 주요한 동시성 요소를 가볍게 살펴보고, synchronized의 lock 범위를 중점적으로 설명하겠습니다. (이후의 내용은 추후에 다루겠습니다) java 주요 동시성 요소 스레드 등장 : java 1.0 java의 기본적은 동시성 단위입니다. 쓰레드는 프로세스 내에서 실행되는 독립적인 실행 경로입니다. 각 스레드는 자신만의 스택을 가지지만, 힙 메모리는 공유됩니다. 스레드는 java.lang.Thread 클래스나 java.lang...

예전에 JVM에 동작방식에 대해 공부를 했지만. 잘 기억이 나질 않았습니다. 이번에 다시 공부하면서, 관련된 내용을 요약 및 정리를 했습니다. JVM의 동작 방식, 메모리 구조 부터, 변경 사항을 정리한 글입니다. JVM 동작 방식 자바 컴파일러(javac)가 자바 소스코드(.java)를 바이트코드(.class)로 컴파일 합니다. 클래스 로드를 통해서 다음과 같은 과정을 거칩니다 로딩 : 클래스를 읽어오는 과정 .class 파일을 가져와서 jvm의 메서드 영역에 배치합니다. 이 영역에는 코드, 메타 데이터, static 변수등이 포함되어 있습니다. 링크 : 레퍼런스를 읽는 과정 검증, 준비, 해석의 세부 단계로 나뉩니다 검증 : 바이트 코드가 안전한지 확인합니다 준비: 클래스 또는 인터페이스에 필요한 메..

클라우드 네이티브 환경에서는 스케일을 쉽게 변경할 수 있는 것이 장점입니다. 이러한 환경에서 리소스를 쉽게 컨트롤할 수 있어야 합니다. 동시에 수십개, 수백개의 컨테이너를 배포하고 관리하는 상황에서 아래의 어려움를 해결해야 합니다 1. 배포 관리 : 호스트의 리소스에 맞춰 어떤 컨테이너를 할당해야 하나, 배포 상태를 최소한의 변경으로 유지할 수 있는가? 2. 제어와 모니터링 : 구동 중인 컨테이너 상태를 어떻게 유지하고 관리할 것인가 3. 스케일링 : 쉽게 자원을 줄이고 늘릴 수 있는가 4. 네트워킹 : 운영되는 컨테이너간의 통신은 어떻게 할 것인가? 위의 4가지 어려움을 쉽게해결해주는 것이 컨테이너 오케스트레이션입니다. 이 중 하나가 저희가 아는 쿠버네티스입니다. 쿠버네티스 특징은 기능단위의 모듈화, ..

쿠버네티스는 쿠버네티스 마스터(Control Plane)와 쿠버네티스 노드로 구성되어 있습니다. 쿠버네티스 마스터는 클러스터를 관리를 담당하는 노드 입니다. 그 외에 쿠버네티스 노드는 실제로 컨테이너를 실행하는 노드 입니다. 쿠버네티스 클러스터를 관리하려면 kubectl 명령어, yaml 형식이나 json 형식으로 작성된 매니페스트 파일을 이용하여 쿠버네티스 마스터가 가진 API를 통해 마스터에 '리소스'를 등록합니다. 마스터 컴포넌트 etcd : 고가용성을 제공하는 키-벨류 저장소 입니다. 쿠버네티스에서 필요한 모든 데이터를 저장하는 실질적인 데이터베이스입니다. etcd가 장애가 날 경우 etcd에 쓰기를 할 수 없으므로, 쿠버네티스의 설정을 바꿀 수 없습니다. 따라서 마스터를 여러개 두어 fail-o..

모놀리스(Monolith)와 마이크로서비스 비교 전통적인 모노리스의 구조는 하나의 단위로 개발되는 일체식 애플리케이션입니다. 일반적으로 사용자 인터페이스와 데이터베이스, 서버 쪽 애플리케이션의 3개 부분으로 구성되빈다. 서버 측에서 어플리케이션이 일체가 되어 있기 때문에 작은 변화에도, 새로운 버전으로 전체 빌드해서 배포해야 합니다. 확장이 필요한 경우에는 특정 기능만 확장할 수 없고 전체(서버)를 동시에 확장해야 합니다. 모노리스가 여러 인스턴스로 떠 있는 경우에 변경에 취약해집니다. 여러개의 인스턴스를 모두 재 빌드 배포 과정을 거치기 때문입니다. 또한 확장시에는 어플리케이션 전체가 확장 되어야 하기 때문에 확장 대비 효율성이 떨어집니다. 반면에 마이크로서비스는 서버 측이 여러 개의 조각으로 구성돼 ..
이 글은 11번가 spring cloud 기반 msa로의 전환을 보고 개인적인 느낀점을 적은 글입니다 동영상은 https://www.youtube.com/watch?v=J-VP0WFEQsY 에서 볼 수 있습니다 "나쁜 시스템이 나쁜 개발 문화를 만든다" 라는 말이 가장 인상 깊었습니다. 11번가는 모놀리식 기반에서 MSA로 전환하는 과정을 거쳤습니다. 기존의 문제점은 서비스에도 악영향을 미칠 뿐만 아니라 개발 문화에도 영향을 주었습니다. 기존 시스템은 모놀리식 구조 였기 때문에 많은 개발 팀들이 코드를 한번에 배포해야 했고 이로 인해 일어나는 문제점이 생겼습니다. 한 개발자의 잘못이 전체 배포과정에 있어 영향을 주게 되었고, 개발자들이 새로운 기술에 도입에 있어 기존의 모듈의 의존관계 때문에 적극적으로 ..