Computer Science
JVM 메모리 구조 (JVM Memory structure)
JVM 메모리 구조 (JVM Memory structure) JAVA Source : 사용자가 작성한 JAVA 코드JAVA Compiler : JAVA 코드를 Byte Code로 변환시켜주는 기능Class Loader : Class파일을 메모리(Runtime Data Area)에 적재하는 기능Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간 Runtime Data AreaMethod AreaMethod Area, Class Area, Code Area, Static Area 로 불리어짐JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(St..
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성
Transaction데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 영구성(Durability)을 보장어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 부름 ACID데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질원자성(Atomicity)트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력일관성(Consistency)트랜잭션이 실행을 성공적으로 완..
OOP(객체 지향 프로그래밍) 5원칙 및 특성
SOLID로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것애자일 소프트웨어 개발 전반적 전략의 일부 두문자 약어 개념 S SRP 단일 책임 원칙 (Single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. O OCP 개방-폐쇄 원칙 (Open/closed principle) 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. L LSP 리스코프 치환 원칙 (Liskov substitution principle) 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. I ISP 인터페이스 분리 원칙 (Interface segrega..
Java 자료구조 비교
여러가지 자료구조에 대한 비교를 해본다. Array (배열)같은 데이터 타입에 대해 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다. 1차원배열과 다차원 배열이 존재장점간단하게 사용 가능인덱스 통해 빠르게 데이터 접근 가능단점저장 공간이 제한적동적 할당을 통해 새롭게 정의 가능하지만 데이터 이동을 또 해야함 Iterable이름 그대로 반복할 수 있는지 확인하는 인터페이스다음과 같은 abstract method를 갖음 boolean hasNext () // 요소가 더 많은 경우 true를 반환합니다. E next () // 제네릭 타입 E의 다음 원소를 반환합니다. void remove () // 반복자가 반환 한 마지막 요소를 제거합니다. Collection모든 콜렉션의 상위 인터..
TCP vs UDP
TCP (Transmission Control Protocol)인터넷에서 많이 사용되는 socket 통신 방법보내야 하는 data를 네트워크가 허용하는 packet의 크기에 맞춰 자동으로 나눠서 보내는 것잘 보내졌는지 에러 없는지 체크하면서 packet을 잃어버리거나 잘못되지 않도록 검사함네트워크의 bandwidth에 부하가 생기지 않도록 자동으로 조절되면서 데이타가 보내지고, 주고 받는 데이타의 신뢰도를 보장전송 속도가 느림신뢰도 확보가 중요하거나 용량이 큰 데이타를 네트워크를 통해 전달해야 할 때, 실시간일 필요는 없을 때 활용하기 적합 UDP (User Datagram Protocol)UDP는 data의 빠른 전송이 특징packet이 잘 전달되었고 에러가 없는지를 매번 검사하지 않음오버헤드를 최소화..
TCP 3 Way-Handshake & 4 Way-Handshake
TCP 3-way hand shakingTCP/IP프로토콜 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 세션을 수립하는 과정Client > Server : TCP SYN Server : LISTEN, Client : SYN_SENTServer > Client : TCP SYN+ACKServer : SYN_RECEIVEDClient > Server : TCP ACK Server, Client : ESTABLISHED SYN : 'synchronize sequence numbers' ACK : 'acknowledgment' 출처 : [1] https://notes.shichao.io/unp/ch2/ TCP 4-way Handshaking세션을 종류하기 위해 수행되는..
OSI 7 계층 (OSI 7 Layer)
Open System Interconnection 7 Layer 국제표준화기구(ISO :International Organization for Standardization)에서 개발한 모델 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층을 나누어 설명 더 이상 산업 표준으로 추천하지는 않음 OSI 모델이 현존하는 유일 네트워크 모델이 아님 많은 사람들이 TCP/IP 모델로 알려진 미국방성 (DoD) 모델을 더 선호 (이미지 출처 : http://www.escotal.com/osilayer.html) 1계층 물리 계층(Physical Layer) 비트 스트림 (전기적 충격, 빛 또는 무선 신호)을 전기적 및 기계적 수준에서 네트워크를 통해 전달 케이블, 카드 및 물리적 측면 정의를 포함하여 캐리어에서 데이터..
프로세스와 스레드(Process vs Thread)
프로세스 (Process)개념 : 리눅스 등의 멀티 프로세싱 운영체제에서 실행 중인 프로그램에 대한 인스턴스자원 : 자신만의 고유 공간과 자원을 할당받아 사용코드, 데이터, 스택, 힙 영역을 고유하게 가짐 스레드 (Thread)개념 : 한 프로세스 내에서 동작되는 여러 실행의 흐름자원 : 다른 스레드와 공간과 자원을 공유하여 사용코드, 데이터, 힙 영역을 공유 장점시스템의 throughput이 향상프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.전역 변수를 이용하여 규현프로그램의 응답 시간이 단축시스템의 자원 소모가 줄어듬단점미묘한 시간 차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있음프로그램 디버깅이 어려움단일 프로세서 시스템에서는 효과를 기대하기 어려움 컨텐스트 스위칭 (C..
64비트와 32비트의 차이
64비트와 32비트의 차이 CPU가 사용하는 데이터인 레지스터의 크기 차이32비트는 4 기가바이트까지64비트는 16엑사바이트까지 32 Bit 컴퓨터 CPU 레지스터 처리값 32 Bit64 Bit 컴퓨터 CPU 레지스터 처리값 64 Bit 레지스터(Register)CPU가 사용하는 데이터를 담는 그릇CPU는 레지스터를 이용해서 데이터를 처리컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리최신 프로세서에..
퀵 정렬, 퀵 소트(Quick Sort)
퀵 정렬, 퀵 소트(Quick Sort) QuickSort.javaimport java.util.Arrays; import java.util.Random; /** * QuickSort * Time Complecty: O (n log(n)) * @author atin84 * */ public class QuickSort { public void sort(int[] data, int left, int right) { // 1. pivot은 중간값을 지정 int pivot = data[(left + right) / 2]; // 내부 사용 변수 설정 int leftIndex = left; int rightIndex = right; int temp = 0; // 2. leftIndex와 rightIndex가 만날..