정리 49

RAID(레이드)란 무엇인가?

Redundant Array Independent Disks 복수 배열 독립 디스크 여러 디스크를 배열해서 가용성 및 고성능, 안정성 등을 위해 사용하는 기술 RAID의 장점 운용 가용성 및 안정성 증대 디스크 용량 증설 용이성 디스크 I/O 성능의 향상 종류와 구성 방식 RAID 0 Concatenate 방식, Stripe 방식으로 나뉨 Concatenate 두 개 이상의 디스크에 데이터를 순차적으로 쓰는 방식 디스크 기본 공간이 부족할 때 데이터는 보존하여 여분의 디스크를 볼륨에 포함하여 용량 증설이 가능 RAID 0의 특성 상 디스크에 하나라도 장애가 발생하면 복구가 어렵고 패리티 체크를 지원하지 않음 Stripe RAID 0의 일반적인 방식 두 개 이상의 디스크를 랜덤하게 쓰는 방식 데이터 사용 ..

GitHub에서의 Git 토큰 인증

맥북 세팅을 진행하면서 GitHub에 있는 학습용 repository를 로컬에 clone을 진행하려고 보니까 아래와 같은 문구를 내뿜었다. Cloning into 'Self-Study'... Username for 'https://github.com': Twinparadox Password for 'https://Twinparadox@github.com': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requir..

Java의 Stream에서 parallelStream은 stream보다 항상 빠를까?

결론부터 말하자면, 당연히 아니다. 병렬 처리라는 것이 단순히 작업을 쪼개서 수행하는 것에 그치는 게 아니라, 그것을 취합하는 과정도 있고 그 쪼개면서 발생하는 오버헤드, 컨텍스트 스위칭 등을 고려해야 하기 때문이다. ParallelStream Java8부터는 parallelStream(), parallel()만을 사용하고도 stream을 병렬 처리할 수 있게 한다. ForkJoinPool 관리 방식을 사용해서 복잡하던 스레드 관리 방식을 Fork와 Join을 통해서 작업들을 분할 정복(Divide and Conquer) 기법으로 처리한다. ParallelStream을 사용할 때 몇 가지 특징에 대해 알고 넘어가는 것이 좋다. 병렬 처리이기 때문에, 순서를 보장하지 않는다. 별도의 설정이 없으면 해당 어..

Garbage Collection in Python, 파이썬의 GC에 대해

Python에서의 GC 파이썬은 기본적으로 레퍼런스 카운팅(Reference Counting)을 바탕으로 GC를 수행하고 메모리를 관리한다. 레퍼런스 카운팅(Reference Counting)? 모든 객체는 참조 당할 때 이 레퍼런스 카운트를 증가시키고, 참조가 없어지면 이를 감소시킨다. 이 값이 0이 되면 객체가 메모리에서 해제된다. 해당 객체의 레퍼런스 카운트 값을 확인하는 코드는 다음과 같다. sys.getrefcount(obj) GC의 동작 원리 앞서 언급한 것처럼 GC는 레퍼런스 카운트를 기준으로 진행하는데, 좀 더 정확히 다루자면 세대와 그에 따른 임계값을 바탕으로 주기적으로 관리한다. 여기서 말하는 세대는 숫자가 클수록 오래된 객체이며, GC는 기본적으로 0세대, 즉, 비교적 최근에 생성된 ..

강화학습 Deep Q-Network(DQN)에 대한 정리

현재 학교 졸업 프로젝트로 강화 학습 관련 프로젝트를 진행하고 있다. 그러면서 DQN에 대한 차이를 설명하면서 여러 자료를 보게 됐고, 이를 좀 정리하기 위해 남겨 놓는다. Deep Q-Network Q-Learning에 Value Function Approximation(VFA)을 사용하는 것은, Weight Update 과정에서 샘플들 간의 상관관계와, Non-stationary Target으로 인해 수렴하지 않고 발산 가능성이 있다. 이러한 문제를 해결할 필요가 있는데 Deep Q-Learning(DQN)이 이 문제를 Experience Repaly와 Fixed Q-targets으로 해결을 시도하였다. State, Action을 Q-Table로 정의하기에 Table이 너무 방대해지는 경우(ex, 간..

URI, URL, URN 비교 및 정리

그냥 아무것도 모르고 URL, URL, URL이라고 떠들고 다녔는데, 여기저기 용어들이 섞이면서, 뭔가 다름을 직감하고 조사해봤더니, 명확한 차이가 있는 것 같아 정리해본다. 요약하자면 URI가 가장 상위 개념이고, URL과 URN을 포함한다. URL은 인터넷 상의 자원의 위치, URI는 자원을 식별하기 위한 문자열 구성이다. URI(Uniform Resource Identifier) 통합 자원 식별자 인터넷에 존재하는 자원을 나타내는 유일한 주소 인터넷에 요구되는 기본 조건으로, Internet Protocol에 항상 붙음 URL, URN은 URI의 하위개념 유일한 주소라는 점을 눈여겨 볼 필요가 있음 URL(Uniform Resource Locator) 자원을 의미함 URI와 URL을 혼동하는 이유는..

1세대 이동 통신부터 5세대(5G) 이동 통신까지 간략한 정리

1세대 미국에서는 AT&T가 셀룰러 개념을 도입한 AMPS(Advanced Mobile Phone System)을 개발, 1세대 이동통신 서비스 시작.4kHz 대역폭의 음성을 20kHz의 채널대역폭을 통해 전송FDMA(Frequency Division Multiple Access) 사용N(Narrow)-AMPS로 발전한국에서는 이 AMPS를 SKT의 전신인 한국이동통신이 이를 도입해서 서비스설계 방식의 한계로, 수용 용량/통화품질 등을 피할 수 없음유럽과 일본은 독자적인 서비스들을 개발해 서비스함 2세대 미국, 한국, 유럽 등이 디지털 음성, SMS를 제공하는 서비스 개발을 시도유럽에서는 GSM(Group Special Mobile)을 개발, 200kHz의 대역폭을 사용하며, 20ms 구간을 할당한 TD..

C, C++] stdafx.h와 C2065(선언되지 않은 식별자입니다.)

비주얼 스튜디오(Visual Studio)로 코딩을 입문한 사람들이 자주 마주하는 오류 중 하나가 바로 "stdafx.h", 프리 컴파일 문제일 것이다. 입문자들 입장에선 프리컴파일이나, "stdafx.h" 같은 것이 뭔지 전혀 모르는 상황에서 이것이 무엇이라고 설명하는 건 크게 의미가 없을 것 같고, 이 게시물에서는 저 오류를 만났을 때 해결하는 방법을 이야기해볼까 한다. 이 문제는 특히 stdio.h(printf, scanf)가 아니라 iostream(cin, cout)을 사용할 때 주로 발생하는 문제인데, 이는 기본적으로 stdafx.h에 stdio.h가 미리 컴파일할 헤더 파일로 포함되어 있기 때문이다. stdafx.h // stdafx.h : 자주 사용하지만 자주 변경되지는 않는 // 표준 시스..

C, C++] 조건부 컴파일

조건부 컴파일은 정해진 조건에 따라서 코드의 컴파일 여부를 제어하는 전처리기. WinAPI용 코드를 리눅스에서 사용 제한하게 하는 것처럼 특정 플랫폼이나 OS에 특화된 코드를 구분하는 경우.디버깅이나 테스트 코드 용도로 추가된 코드를 구분하는 경우. #ifdef or #if/#elif/#else, 그리고 #endif를 이용하여 조건부 컴파일을 사용할 수 있음. #ifdef 매크로/* 코드 */#elif defined 매크로/* 코드 */#else/* 코드 */#endif #if 값 or 식/* 코드 */#elif 식/* 코드 */#else/* 코드 */#endif #if defined 매크로/* 코드 */#endif defined를 사용하면, #if를 사용했을 때보다 복잡한 조건을 사용할 수 있으며, 가..

C++에서 구조체와 클래스 차이

최근까지 흔한 커리큘럼이 C를 배우고 C++로 넘어가는 과정이었다. 두 언어를 완전히 다르게 보는 시각에서 접근해서인지는 몰라도, C++에서 구조체와 클래스의 차이를 잘못 이해하고 있는 사람들이 여럿 있는 듯 하다. 특히 C에서의 struct를 가지고 와서 C++의 struct와 동일시하면서, C++에서는 struct는 무조건 금기시 되어야 하는 것으로 분류해 무조건 class를 쓰는 게 옳다고 생각하는 오개념을 가진 사람들도 있었다. C++에서의 struct와 class의 차이를 C의 struct와 C++의 class로 잘못 비교하고 있다는 것을 알지 못한 채로 개념이 굳어져 가는 사람들이 많은 것 같다. C++을 대하는 태도와 관심 정도에 따라 이럴 수 있다고 생각하기 때문에 이를 혼동한다고 해서 큰..