전체 글(355)
-
[Java] 자바 컴파일 과정
이전에는 JVM 에 대해서 정리해보았다. JVM을 짤막하게 복습해보자면 원 소스 코드의 java file을 컴파일러를 통해 바이트 코드 class file로 변환하고, 여러 OS 환경과 플랫폼에서 실행될 수 있도록 지원해주는 자바 가상 머신이다. 그렇다면 초기에 개발자가 작성한 원 소스 코드 java file을 컴파일 해주는 작업이 우선적으로 선행이 되어야 하는데 어떻게 컴파일이 되어 바이트 코드로 변환이 되는 것일까? 자바 컴파일 순서 1. 개발자가 자바 소스 코드 작성 (java file) 2. 자바 컴파일러가 자바 소스 코드를 읽어 바이트 코드(class file)로 변환. # 바이트 코드는 아직 컴퓨터가 읽을 수 없는 JVM만이 읽을 수 있는 코드 3. 컴파일된 바이트 코드를 JVM 내부의 클래스..
2023.01.12 -
[Java] 제네릭 (Generic)
제네릭 (Generic) 제네릭은 데이터 형식에 얽매이지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법이다. 자바에서 ArrayList를 생성할 때 ArrayList arr1 = new ArrayList(); 이런 식으로 생성을 하곤 한다. 여기서 다이아 표기법으로 타입을 지정해준뒤 생성을 한다. 제네릭도 동일하게 안에 포괄적인 데이터 형식을 지정해준 뒤 생성을 한다. 제네릭 필요성 어떠한 기능을 구현하여 어떠한 데이터를 지원하게하여 배포하려고 한다면, String 타입, Integer 타입 등등 수많은 타입을 지원하고 싶다면 일반적으로 String 형식 생성, Integer 형식 생성 이렇게 타입에 따라 일일히 하나씩 만들 것이다. 이러한 방법은 간단한 프로젝트나 기능 구현에..
2023.01.11 -
[Java] JVM (Java Virtual Machine)
JVM 자바 가상 머신을 줄여서 JVM이라고 한다. JVM은 OS(운영체제)와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해준다. 자바 원 소스 코드(java file)을 자바 컴파일러를 통해서 자바 바이트 코드로 바꾼다.(class file) 이로 인해 자바 바이트 코드가 어떠한 플랫폼에서든 독립적으로 실행될 수 있게 된다. 즉, JVM 덕분에 OS 상관없이 어디서든 Java 애플리케이션을 실행할 수 있게 되는 것이다. JVM 구성 1. Class Loader (클래스 로더) JVM 내에서 바이트 코드 (class flie)을 Loading하고, Linking을 통하여 배치하는 작업을 수행하는 모듈이다. Runtime 시점에서 클래스를 로딩하..
2023.01.11 -
[DB] 영속성 컨텍스트 (EntityManager)
Spring 프로젝트에서 DB를 관리하고 운영하는 작업은 반드시 필요하다. JPA가 대표적인 인터페이스 중 하나인데, JPA 내부 동작 원리를 알려면 영속성 컨텍스트를 반드시 알아야 한다. 영속성 컨텍스트 엔티티(도메인, DB테이블)를 영구 저장하는 환경이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 혹은 논리적 개념이다. EntityManagerFactory에서 요청이 올 때마다 EntityManager를 생성한다. EntityManager는 Factory와 다르게 여러 스레드에서 접근하면 동시성 문제가 발생한다. 따라서, EntityManager 가 생성되면 영속성 컨텍스트가 1:1로 생성된다. EntityManager 를 통해서 영속성 컨텍스트에 접근한다. 엔티티 생명..
2023.01.10 -
[네트워크] TCP - 3 way handshake / 4 way handshake
네트워크 관련된 학습을 진행하다보면 가장 기본적인 대표적인 기술 혹은 과정이라고 생각하는 것이 바로 이 3 Way Handshake, 4 way handshake 이다. WebRTC, WebSocket 을 조금만 만져봤음에도 네트워크에 관해서도 학습을 해야할 필요가 있다고 느껴졌다. 따라서, 기본적인 3 Way Handshake, 4 way handshake를 먼저 정리해보자. TCP (Transmission Control Protocol) TCP란 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위한 프로토콜이다. (반대로 UDP의 경우 신뢰성이 없다. 비연결형 지향성이기 때문) 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향성 프로토콜이다. 데이터는 네트워크 경로를 통해 전달되..
2023.01.09 -
[DB] 트랜잭션 (Transaction) with 4가지 특성
트랜잭션(Transaction) 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능 (예 : Update, Delete)을 수행하기 위한 작업의 단위 혹은 일련의 연산들을 말한다. 트랜잭션 특성 1. 원자성(Atomicity) 트랜잭션의 연산은 데이터베이스에 전부 반영이 되어야하거나 전부 반영이 되지 않아야한다. 즉, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. 2. 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가..
2023.01.09