Computer Science

    [디자인 패턴] - Builder Pattern & @Builder

    Builder Pattern이란? Creational Pattern(생성 패턴) 중 하나로 복합 객체를 작게 나누어 조립하듯이 객체를 생성하는 패턴이다. 객체의 생성 과정과 표현 방법을 분리하여 같은 프로세를 통해 다른 결과를 만들어 낸다. 위 두 문장이 분리된 것처럼 Builder Pattern 또한 구현 방식이 2가지로 나뉜다. 생성자의 인자가 많아 인자에 어떤 값을 넣을 지 파악하기 어려운 경우(일반적으로 많이 사용, 메소드 체이닝 방식) - 이펙티브 자바의 빌더패턴(객체의 불변성 확보와 생성자의 매개변수가 많은 경우에 유리) 객체 생성 시 여러 단계의 순서를 통해 생성을 하고, 해당 순서를 결정한 다음 각 단계를 다양하게 구현하는 방식 (즉, 제품 생산 과정을 정해 두고 여러 재료를 가지고 다양한..

    트랜잭션과 무결성

    1. 트랜잭션 : 하나의 논리적 기능을 수행하기 위한 작업의 단위. 쉽게 생각해서 쿼리 여러개 묶어서 한 번에 실행하는 걸로 생각하면 편하다. 2. 트랜잭션의 특징 원자성(atomicity) - 트랜잭션 관련 수행은 모두 실행되거나 모두 실행되지 않아야 한다.(커밋/롤백, 무결성 보장) - 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 안된다. - 여러 트랜잭션 관련 메소드의 호출을 하나의 트랜잭션에 묶이도록하는 것이 트랜잭션 전파다.(ex : Spring @Transactional 애너테이션) 일관성(consistency) - 허용된 방식으로만 데이터를 변경해야 하는 것 - 트랜잭션 전후로 데이터베이스의 상태가 이전과 같이 유효해야 하는 것 격리성(isolation) - 한..

    ERD와 정규화

    1. ERD(Entity Relationship Diagram) : DB를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션간의 관계들을 정의한 것이다. 2. ERD의 중요성 : ERD는 시스템 요구사항을 기반으로 작성되며, DB는 ERD를 기반으로 구축된다. 또한 DB 구축 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 한다. 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현 할수는 없다. 3. 정규화 : 릴레이션 간의 잘못된 종속관계로 인해 데이터베이스 이상현상이 일어나서 이를 해결하거나, 저장공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 무손실 분해하는 과정(삽입,삭제,갱신 이상) 4. 반정규화 : ..

    데이터베이스의 기본

    1. 데이터베이스(DataBase) : 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음. 데이터베이스를 제어, 관리하는 통합시스템을 DBMS라고한다. 각 DBMS마다 정의된 쿼리 언어로 데이터들에 대한 CRUD등을 수행 할 수 있다. 2. 엔터티(Entity) : 사람, 장소, 물건, 사건, 개념 등 여러개의 속성을 지닌 명사를 의미. A가 B의 존재여부에 종속적이라면 A는 약한 엔터티, B는 강한 엔터티라고 할 수 있다. 3. 릴레이션(Relation) : DB에서 정보를 구분하여 저장하는 기본 단위이다. 엔터티에 관한 데이터를 릴레이션하나에 담아 관리. RDBMS에서는 테이블이라고 불리고, NoSQL DB에선 컬렉션이라 불린다. 4. 관계형, 비관계형데이터 베이스 종류 특징 예시 관..

    CPU 스케줄링 알고리즘

    1. CPU 스케줄링 정의 : 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업 종류 장기 스케줄링 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정해 준비상태 큐로 보내는작업 중기 스케줄링 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업 단기 스케줄링 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업 목적: 공정성, 처리율 증가, CPU 이용률 증가, 우선순위 제도 , 오버헤드 최소화, 응답시간 최소화, 반환시간 최소화, 대기시간 최소화, 균형있는 자원의 사용, 무한 연기 회피 등 2. CPU 스케줄링 알고리즘 : 어떤 프로그램에 CPU 소유권을 줄 것인지 결정. CPU 이용률은 높게, 시간당 많은 일을 수행하고, 준비 큐에 있는 프로세스는 ..

    프로세스와 스레드

    1. 프로세스 : 실행중인 프로그램 2. 스레드 : 프로세스 내 작업의 흐름 3. 프로세스와 컴파일 과정 전처리 : 소스코드의 주석을 제거 #include 등 헤더 파일을 병합하여 매크로를 치환 컴파일러 : 오류처리, 코드 최적화작업을 하며 어셈블리어로 변환한다. 어셈블러 : 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 언어 번역 프로그램. 기본 컴퓨터 명령어들을 컴퓨터 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환 링커 : 프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적코드를 결합해 실행파일을 만듬 정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식. 외부의존도 낮고, 메모리 효율성이 떨어짐. 동적 라이브러..