Back-end

· Back-end
Execution engine은 JVM의 핵심 구성 요소 중 하나로, 바이트 코드를 운영체제에 맞게 해석해주는 역할을 수행합니다. 1. Interpreter 클래스 로더를 통해 메모리에 로드된 바이트 코드를 한줄 씩 실행시킵니다. 바이트코드를 하나씩 읽어와 즉시 실행하므로 여기서 속도 문제가 발생합니다. 바이트 코드 역시 기계어로 변환되어야하기 때문에 c, c++ 처럼 미리 컴파일을 통해 기계어로 변경되는 언어에 비해 속도가 느려집니다. Q. 자바는 컴파일 언어로 알고 있어. 그런데 왜 interpreter를 갖고있지? A. 자바는 사실 컴파일 언어와 인터프리터 언어의 특성을 모두 갖춘 언어입니다. 하지만 초기의 컴파일 과정과 바이트코드의 특성, 성능과 최적화 관련한 이유로 주로 컴파일 언어로 분류됩니다..
· Back-end
Runtime Data Area는 JVM이 프로그램을 수행하기 위해 운영체제로부터 할당 받는 메모리 영역입니다. 1. Method area 프로그램이 실행되면 모든 코드가 저장되어 있는 상태가 아닙니다. new 키워드를 통해 객체가 동적으로 생성되기 전에는 텍스트일 뿐입니다. 클래스 로더에 의해 로드된 클래스의 바이트코드와 메타데이터가 저장되는 곳이며 동적 메모리 관리 및 쓰레드 동기화와 같은 기능을 합니다. JVM당 하나 존재 모든 쓰레드가 공유하는 영역이므로 동시성 문제를 고려해야합니다. 해당 정보에 대한 요청이 오면 실제 물리 메모리주소로 변환해서 전달 인스턴스 생성을 위한 객체 구조, 생성자, 필드 저장 주로 영구적인 정보가 저장되는 영역이라 GC가 heap 영역보다 덜 시행됩니다. 주요 컴포넌트..
· Back-end
Java는 동적으로 클래스를 읽어오므로, 프로그램이 실행중인 런타임에서야 모든 코드가 JVM과 연결됩니다. 이 동적 로드를 담당하는 부분이 JVM 클래스 로더입니다. 즉, 런타임중에 JVM의 메소드 영역에 동적으로 .class를 로드하는 역할을 합니다. 1. 로딩 (Loading) Java에서의 로딩 및 링킹 과정은 전통적인 컴파일, 실행 환경과는 다르게 보안, 플랫폼 독립성, 동적 실행환경의 장점을 제공합니다. 여기서 동적 실행 환경이란 프로그램이 실행되는 중에 코드나 리소스를 로드 할 수 있게 됩니다. classpath 환경변수에 지정된 디렉토리나 jar파일, 네트워크 리소스가 포함된 미리 정의된 여러 위치를 검색합니다. 여러 종류의 클래스 로더를 사용하여 클래스들을 로드합니다. bootstrap c..
· Back-end
자바는 객체지향 언어로 전 세계에서, 특히 우리나라에서 굉장히 많이 사용되는 프로그래밍 언어입니다. 저도 spring boot 백엔드 개발자가 되기 위해 공부중인데 공부를 할 때 마다 과연 나는 자바의 기능을 최대한 활용하고 있는가, 그에 대한 툴들을 제대로 이해하고 있는가에 대한 의문이 생겼습니다. 자바의 다형성, 멀티쓰레드, JVM 등 장단점을 대략 알고는 있지만 특정 언어를 전문화하려고 한다면 동작 원리까지 세세하게 알아야 한다고 생각했습니다. 이번 포스팅에서는 .java 파일이 어떤 과정을 거쳐 .class 파일로 컴파일이 되는지 알아보겠습니다. 0. javac Main.java javac는 Java Development Ket에 포함되어 있는 자바 컴파일러 입니다. 1. Lexical analy..
이 글은 DDD 설계 단계 중 EventStorming을 마친 후, aggregate 추출 단계만을 위한 글입니다. 프로젝트 설계 방식을 DDD로 한번 해보자라는 다짐으로 조금조금씩 블로그 글들을 따라 해보았는데 전략적 설계에 Aggregate 추출 단계에서 굉장한 어려움을 겪었습니다. aggregate, 트랜잭션, 일관성, 낙관적 락 등 설계에 필요한 개념들과 제 프로젝트에는 어떻게 적용시켰는지 알아보겠습니다. # Aggregate란 무엇인가? 서로 관련이 있는 도메인 모델들의 집합이며 Aggregate Root, Entity, VO로 이루어져 있습니다. 여기서 외부 객체는 Aggregate Root를 통해서만 해당 aggregate에 접근할 수 있습니다. # Aggregate는 왜 필요한가? 1. 일..
# 메세지 큐란? 메시지 지향 미들웨어(Message Oriented Middleware)은 독립된 서비스간에 데이터를 주고받을 수 있는 형태의 미들웨어, 분산되어 있는 시스템간의 Connector 역할을 통해 결합성을 낮추고, 실시간으로 비동기식 데이터를 교환할 수 있도록 하는 소프트웨어입니다. MOM중에는 메세지 큐가 존재하며 이는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나입니다. 서버간 데이터를 주고받을때는 시스템 장애를 항상 고려해야하는데 이때 메세지 큐가 중요한 역할을 해줍니다. 메시지 큐 브로커(message queue broker)는 메시징 시스템 내에서 메시지의 생성자(프로듀서)와 소비자(컨슈머) 사이에서 메시지를 관리하고 전달하는 중간 역할을 하는 서비..
# JPA 연관관계의 필요성 RDB와 Java사이에는 패러다임의 차이가 존재합니다. 관계의 표현 - 객체는 상속, 구성, 집합 / RDB는 일대일, 일대다, 다대다 데이터의 표현 - 객체는 상태와 행동을 가짐 / RDB는 ROW와 COLUMN으로 구성 데이터의 지속성 - 객체는 메모리에 일시적으로 존재 / RDB는 디스크에 저장하고 검색 이러한 차이점 때문에 DB를 설계하고 Java에서 DB 데이터들을 객체로서 효율적으로 관리하기가 쉽지 않습니다. 이에 대한 해결책으로 JPA(ORM)가 개발되었고 이는 객체와 테이블 간의 매핑을 훨씬 쉽게 해줍니다. 그렇다면 JPA를 활용해서 어떻게 연관관계를 매핑하는지 알아보도록 하겠습니다. # JPA 연관관계 0. 배경 지식 DB는 FK 하나로 양쪽 테이블 JOIN이..
요즘 배포까지 진행하는 거의 모든 웹 서버들은 Docker를 사용합니다. 하지만 우리는 과연 Docker의 필요성을 잘 알고 있는 상태에서 이 기능을 채택했을까요? 그저 좋다고 알려져 있어서, 남들이 다 써서 쓰는건 아닐까요? 저의 경우, 되돌아 생각해보니 도커를 써본적은 있지만 꼭 써야했나? 라는 질문에 제대로 대답할 수 없었고 그저 VM을 새로 파기 싫어서 써왔던것 같네요. 이번 포스트에서는 컴퓨터에서 프로세스와 Docker, VM과의 관계, Docker와 VM의 차이와 장단점, 이것을 알아보면서 떠올랐던 저만의 궁금증들에 대해 알아보겠습니다. (궁금증은 조금 뜬금없어서 읽으시면서 논점이 흐려질수 있습니다. 1. 프로세스 1.1 프로세스란 컴퓨터에는 "프로그램"이라는 것이 존재합니다. 예시로 word..
whitem4rk
'Back-end' 카테고리의 글 목록 (2 Page)