분류 전체보기 610

[Pro Git] 1-2. 시작하기: 짧게 보는 Git의 역사

Scott Chacon & Ben Straub 님의 "Pro Git" 책을 정리한 포스팅 입니다. 1. 짧게 보는 Git의 역사 Git 오픈소스 프로젝트인 Linux Kernel의 소스코드를 관리하기 위해 개발 역사 처음에는 BitKeeper 사의 상용 DVCS를 사용하여 관리하였습니다. BitKeeper의 상용화로 인해 Linux 개발 커뮤니티에서 자체 도구를 만들게 되었습니다. 창시자 리누스 토발즈 (리눅스 창시자) 목표 빠른 속도 단순한 구조 파일 시스템의 스냅샷과 작은 변경 사항을 기반으로 합니다. 비선형적인 개발 수천개의 브랜치를 동시에 관리할 수 있습니다. 브랜치 간의 전환, 병합, 리베이스 등이 용이합니다. 완벽한 분산 모든 클라이언트는 전체 코드베이스와 그 히스토리의 복사본을 로컬에 ..

Git 2024.01.13

[Pro Git] 1-1. 시작하기: 버전 관리란?

Scott Chacon & Ben Straub 님의 "Pro Git" 책을 정리한 포스팅 입니다. 1. 버전 관리란?시간의 흐름에 따라 파일 변화를 기록하고, 필요할 때 특정 시점의 버전으로 복원할 수 있는 시스템입니다.” 로컬 버전 관리간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리했습니다. RCS (Revision Control System)버전 관리 시스템의 초기 형태 중 하나 입니다.텍스트 파일의 변경 이력을 관리하기 위해 사용됩니다. Patch Set 파일 변경 내용을 담은 파일입니다. 효율적인 디스크 공간 사용 RCS는 Patch Set만 저장하여 디스크 공간을 효율적으로 사용합니다. 시점 되돌리기 일련의 Patch Set들을 적용해서 파일을 특정 시점으로 되돌릴 수 있습니다. 중앙집중..

Git 2024.01.13

[쉽게 배우는 운영체제] 2. 컴퓨터의 구조와 성능 향상

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다. 1. 컴퓨터의 기본 구성하드웨어 구성구성 요소설명CPU (중앙 처리 장치)- 명령어를 해석하여 실행하는 장치 - 외부에서 정보를 입력받고, 기억하고, 연산하고, 출력Memory (주기억장치)- 작업에 필요한 프로그램과 데이터를 저장 - 바이트 단위로 분할되며, 분할 공간마다 주소로 구분됨I/O Device (입출력 장치)- 외부 세계와의 데이터 전송 담당- 보조기억장치  - 자성 저장장치: 플로피 디스켓, 하드디스크  - 레이저 저장장치: CD, DVD, Blu-ray Disc  - 메모리 저장장치: USB flash drive, SD Card, SSDMain Board (메인보드)- 컴퓨터의 PCB- 시스템의 핵심 부품을 장착할 수 있는..

OS 2024.01.11

[자바 ORM 표준 JPA 프로그래밍] 8. 프록시와 연관관계 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 프록시엔티티를 조회할 때, 연관된 엔티티를 항상 사용하는 것은 아닙니다.모든 연관관계를 한꺼번에 가져오게 될 경우, 성능이 떨어질 수 있습니다. 프록시항목설명목적연관 엔티티를 실제 사용할 때까지 DB 조회를 지연(Lazy Loading)프록시 객체실제 클래스를 상속받아 만들어진 가짜 객체실제 객체의 참조를 보관- 프록시 객체의 메소드를 호출하면 실제 객체의 메소드를 호출 (데이터베이스 조회 지연 목적)초기화영속성 컨텍스트에 의해 초기화됨한 번만 초기화되고 재사용됨내부에 실제 객체(target) 참조식별자 활용프록시는 식별자(ID)만 저장된 상태로 생성됨식별자 접근은 초기화 없이 가능ex) 상세 정보가 필요 없는 경우 I..

[자바 ORM 표준 JPA 프로그래밍] 7. 고급 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 상속 관계 매핑데이터베이스의 슈퍼타입-서브타입 논리를 테이블로 구현 전략특징Joined StrategySingle Table StrategyTable Per Class Strategy테이블 구조부모와 자식 클래스 각각의 테이블모든 엔티티를 하나의 테이블에 저장자식 클래스마다 별도의 테이블을 생성쿼리 속도느림 (조인 필요)빠름 (조인 불필요)느림 (조인 필요)정규화✅ (테이블 정규화)❌ (모든 컬럼이 하나의 테이블에 포함)✅ (자식 테이블별로 별도 관리)테이블 크기작음큼중간컬럼 제약외래키로 관리자식 클래스마다 DTYPE 컬럼 사용모든 컬럼 nullable각 자식 테이블마다 not null 제약 가능외래키 제약✅ ❌❌ 어노..

[자바 ORM 표준 JPA 프로그래밍] 6. 다양한 연관관계 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 다대일 & 일대다구분다대일일대다다대일 + 일대다관계 방향단방향 (N → 1)단방향 (1 → N)양방향 (N → 1 + 1 → N)설명여러 개의 엔티티가 하나의 엔티티 참조하나의 엔티티가 여러 개의 엔티티 참조서로 참조 (객체 탐색 유리)외래 키 위치N쪽N쪽N쪽연관관계 주인N쪽N쪽N쪽장점구조가 단순하고 성능에 유리함구조가 단순하고 성능에 유리함객체 그래프 탐색 유리비즈니스 로직 구현 용이단점INSERT시 외래 키 직접 관리 필요INSERT시 외래 키 직접 관리 필요연관관계 주인 설정 필요객체간 참조 유지 필수사용 예단순 조회트랜잭션 설계가 명확한 경우복잡한 비즈니스 로직객체 탐색이 자주 필요한 경우복잡한 비즈니스 로직객체..

[자바 ORM 표준 JPA 프로그래밍] 5. 연관관계 매핑 기초

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 연관 관계 매핑구분설명방향성비고객체 연관 관계참조를 통해 연관관계 표현(참조에 의해 객체 그래프 탐색)단방향A → B (B는 A를 모름)객체 그래프 탐색 제한테이블 연관 관계외래키를 통해 연관관계 표현(조인을 통해 연관 테이블 조회)양방향A ↔ B (서로 참조)무한 루프 주의 어노테이션항목설명기본값@JoinColumn외래키 설정 (조인 시 사용)-- name외래키 컬럼 이름-- referencedColumnName외래키가 참조하는 컬럼명 (기본값: 참조하는 엔티티의 기본 키)-- foreignKey외래키 제약조건 (테이블 생성 시에만 적용됨)-@ManyToOne다대일 관계 설정-- optional관련 엔티티가 존재하는지..

[쉽게 배우는 운영체제] 1. 운영체제 개요

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다 1. 소개프로그래밍의 도입초기 컴퓨터는 설계된 대로만 사용할 수 있었습니다.사용자의 개입이나 프로그래밍 구현이 부족했습니다.프로그래밍을 통해원하는 프로그램을 추가하고 실행할 수 있게 되었습니다. 기능기능설명자원 관리- 프로그램이 사용하는 자원을 관리 - 자원 종류: 메모리, CPU 시간, 디스크 공간, 네트워크 대역폭 등사용자 인터페이스 제공- 사용자가 시스템과 상호작용할 수 있도록 지원 - 프로그램이 데이터를 처리하고 사용자에게 전달하는 방식 - GUI, CLI 등 다양한 인터페이스 제공동시성 관리- 병렬 처리를 통해 여러 작업을 동시에 실행할 수 있도록 지원 - 동시 실행에 필요한 자원 및 스케줄링 관리 2. 역사발전 과정특징ENIAC..

OS 2023.12.26

[Java의 정석] 13-3. 스레드: 실행 제어

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 8. 실행 제어 상태NEW스레드가 생성되고 아직 start()되지 않은 상태RUNNABLE실행중 또는 실행 가능한 상태BLOCKED동기화 블럭에 의해 일시정지된 상태WAITING,TIMED_WAITING일시정지 상태(작업이 종료되지 않음) 일시정지 시간이 지정된 경우TERMINATED작업이 종료된 상태  메서드sleep()지정된 시간동안 스레드를 정지시킵니다.지정한 시간이 지나고 나면 자동적으로 다시 실행대기 상태가 됩니다.join()다른 스레드의 작업이 끝날 때까지 대기하도록 만드는 메서드지정한 시간동안 실행되도록 합니다.지정한 시간이 지나거나 작업이 종료되면 join()을 호출한 스레드는 다시 돌아와 실행됩니다suspend()스레드를 일시..

Java 2023.11.30

[Java의 정석] 13-4. 스레드: 동기화

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 9. 동기화한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게 막는 것입니다.멀티스레드의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하므로 서로의 작업에 영향을 주게 됩니다.한 스레드가 특정 작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것이 필요합니다. 임계영역공유데이터를 사용하는 코드 영역입니다. Lock단 하나의 스레드만 공유데이터를 사용하도록 하는 매커니즘입니다.해당 공유데이터를 사용하는 스레드는 락을 획득합니다.임계영역의 모든 코드를 수행하고 나서 락을 반납하며, 다른 스레드가 반납된 락을 획득하여 임계영역에 접근할 수 있습니다. synchronizedsynchronized 키워드를 붙여 임계영역..

Java 2023.11.30