분류 전체보기 136

@ConfigurationProperties 검증

@ConfigurationProperties 검증 최대 커넥션 숫자는 최소 1 최대 999라는 범위를 가져야 한다면 검증을 어떻게 할 수 있을까? 자바에는 자바 빈 검증기 (java bean validation) 이라는 표준 검증기가 제공됨 자바 빈 검증기를 사용하려면 spring-boot-starter-validation 이 필요함 @NotEmpty 어노테이션: 항상 값이 있어야 함 @Min(1) @Max(999) 어노테이션: 최소 1, 최대 999의 값을 허용 @DurationMin(seconds = 1) @DurationMin(seconds = 60) 어노테이션: 최소 1, 최대 60초를 허용 MyDataSourceConfigV3 생성 및 ExternalReadApplication.java 수정 m..

RAID의 정의와 종류

RAID의 정의와 종류 RAID 하드 디스크와 SSD를 사용하느 기술로, 데이터의 안전성 혹은 높은 성능을 위해 여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술을 의미함 RAID 종류 RAID 0 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식 데이터를 저장할 때 각 하드 디스크는 아래와 같이 번갈아 가며 데이터를 저장함 스트라입: 줄무늬처럼 분산되어 저장된 데이터 스트라이핑: 분산하여 저장 장점: 저장된 데이터를 읽고 쓰는 속도가 빠름 단점: 저장된 정보가 안전하지 않음, 디스크 중 하나에 문제가 생긴다면 다른 모든 하드 디스크의 정보를 읽는 데 문제가 생길 수 있음 RAID 1 복사본을 만드는 방식, 거울처럼 완전한 복사본을 만드는 구성이기에 미러..

다양한 보조기억장치

다양한 보조기억장치 하드 디스크 (자기 디스크) 자기적인 방식으로 데이터를 저장하는보조기억장치 하드 디스크는 CD나 LP와 비슷하게 동작함, 동그란 원판에 데이터를 저장하고, 그것을 회전시켜 뾰족한 리더기로 데이터를 읽는 점에서 비슷함 플래터: 하드 디스크에서 실질적으로 데이터가 저장되는 곳, 자기 물질로 덮여 있어 수많은 N (0)극와 S (1)극을 저장함 스핀들: 플래터를 회전시키는 구성 요소 RPM: 스필들이 플래터를 돌리는 속도 (분당 회전수) 헤드: 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소, 바늘 같이 생긴 부품 디스크 암: 원하는 위치로 헤드를 이동시킴 디스크는 훨씬 더 많은 양의 데이터를 저장해야 하므로 일반적으로 여러 겹의 플래터로 이루어져 있고 플래터 양면을 모두 사용할 수 있음,..

캐시 메모리

캐시 메모리 저장 장치 계층 구조 컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있음 위 계층으로 올라갈수록 CPU와 가깝고 용량은 작지만 빠른 저장 장치임. 아래 계층으로 내려갈수록 CPU와 멀고 용량은 크지만 느린 저장 장치임. 가격 또한 위 계층으로 올라갈수록 비싸고, 아래 계층으로 내려갈수록 저렴함 캐시 메모리 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반 저장 장치 캐시 메모리에 CPU가 필요로 하는 데이터가 있다면 필요한 데이터로의 접근 시간을 줄일 수 있음 캐시 메모리 종류 L1: 코어와 가장 가까운 캐시 메모리 L2: 그다음 가까운 캐시 메모리 L3: 그다음 가까운 캐시 메모리 참조 지역성 원리 캐시 ..

메모리의 주소 공간

메모리의 주소 공간 물리 주소와 논리 주소 물리 주소: 정보가 실제로 저장된 하드웨어상의 주소 논리 주소: 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소 현재 메모리에 메모장, 게임, 인터넷 브라우저 프로그램이 적재되어 있다고 가정해보면 메모리가 사용하는 주소는 하드웨어상의 실제 주소인 물리 주소이고, CPU와 실행 중인 프로그램이 사용하는 주소는 각각의 프로그램에 부여된 논리 주소임 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소간의 변환이 이루어져야 함 변환: 메모리 관리 장치 (MMU)에서 수행 MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환함 예를 들면 현재 베이스 레지스터에 15000이 저장되어 있고 CPU가 발생시킨 논리 ..

RAM의 특징과 종류

RAM의 특징과 종류 RAM의 특징 휘발성 저장 장치: 전원을 끄면 저장된 내용이 사라지는 저장 장치 비휘발성 저장 장치: 전원이 꺼져도 저장된 내용이 유지되는 저장 장치 RAM의 용량과 성능 RAM 용량이 크면 많은 프로그램들을 동시에 빠르게 실행하는 데 유리함, 하지만 프로그램 실행 속도는 비례하여 증가하지 않음 RAM의 종류 DRAM: Dynamic RAM 준말, 저장된 데이터가 동적으로 변하는 (사라지는) RAM을 의미, 소멸을 막기 위해 일정 주기로 데이터를 재활성화 (다시 저장)해야함 일반적으로 사용 소비 전력 ⬇️, 비용 ⬇️, 집적도 ⬆️, 대용량으로 설계하기 용이함 SRAM: Static RAM의 준말, 저장된 데이터가 변하지 않는 RAM 의미 시간이 지나도 사라지지 않음 (전원이 공급되..

CISC와 RISC

CISC와 RISC 명령어 집합 (명령어 집합 구조 (ISA)) CPU가 이해할 수 있는 명령어들의 모음 ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻 (어셈블리어도 달라짐) ISA는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속으로 볼 수 있음 CISC (Complex Instruction Set Computer) 복잡한 명령어 집합을 활용하는 컴퓨터 (CPU) 대표적인 CISC 기반 ISA: x86, x86-64 가변 길이 명령어를 활용 장점: 메모리 공간을 절약 할 수 있음 단점: 명령어의 크기와 실행되기까지의 시간이 일정하지 않음, 파이프라인이 효율적으로 명령어를 처리할 수 없음 RISC (Reduced Instruction Se..

외부설정사용 - @ConfigurationProperties 생성자

외부설정사용 - @ConfigurationProperties 생성자 @ConfigurationProperties는 생성자를 통해서 객체를 만드는 기능을 지원 생성자를 만들어 두면 생성자를 통해서 설정 정보를 주입함 @Getter 가 자동으로 getter를 만들어줌 @DefaultValue: 해당 값을 찾을 수 없는 경우 기본값을 사용 etc를 찾을 수 없는 경우: Etc 객체를 생성하고 내부에 들어가는 값을 비워둠 (null, 0) option 을 찾을 수 없는 경우: DEFAULT라는 이름의 값을 사용 실행 결과 application.properties 에 필요한 외부 설정을 추가하고, @ConfigurationProperties 의 생성자 주입을 통해서 값을 읽어들임, Setter 가 없으므로 개발자..

명령어 병렬 처리 기법

명령어 병렬 처리 기법 명령어 병렬 처리 기법 명령어 파이프라이닝 슈퍼스칼라 비순차적 명령어 처리 명령어 파이프라이닝: 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법 명령어 인출 명령어 해석 명력어 실행 결과 저장 CPU는 한 명령어를 '인출'하는 동안에 다른 명령어를 '실행'할 수 있고, 한 명령어가 '실행'되는 동안에 연산 결과를 '저장'할 수 있음 파이프라인 위험 데이터 위험: 명령어 간 '데이터 의존성'에 의해 발생 제어 위험: 분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생 구조적 위험 (자원 위험): 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 ㄷ긍고 같은 CPU 부품을 사용하려고 할 때 발생 슈퍼스칼라: CPU 내부에 여러 개의..

빠른 CPU를 위한 설계 기법

빠른 CPU를 위한 설계 기법 클럭 헤르츠 (Hz)단위로 측정, 클럭이 1초에 100번 반복되면 CPU 클럭속도는 100Hz 클럭은 실제로 일정하게 유지되지 않음, 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고, 그렇지 않을 때는 유연하게 클럭 속도를 낮추기도함. 최대 클럭 속도를 강제로 더 끌어올릴 수 있는데, 기법을 오버클럭킹이라고함 코어와 멀티코어 CPU = 코어 멀티코어 CPU (멀티코어 프로세서): 코어를 여러개 포함하고 있는 CPU 코어마다 처리할 명령어들을 얼마나 적절하게 분배하냐에 따라 연산 속도가 크게 달라짐 스레드와 멀티스레드 스레드: '실행 흐름의 단위' 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위 멀티스레드 프로세서 (멀티스레드 CPU): 여러 스레드를 지..