본문 바로가기

분류 전체보기

cv2.resize의 [dsize]와 [fx,fy]의 관계(open-cv) import cv2 # 이미지 불러오기 image = cv2.imread("input_image.jpg", cv2.IMREAD_GRAYSCALE) # 가로x세로 = (1000,1000)이라고 가정 # 이미지의 크기를 반으로 줄이기 resized_image = cv2.resize(image, dsize=(0, 0), fx=0.5, fy=0.5) # 결과 이미지 출력 cv2.imshow("Resized Image", resized_image) cv2.waitKey(0) cv2.destroyAllWindows() 우선 결론을 먼저 말하자면 cv2.resize()를 통해 이미지의 크기를 조절하기 위해서는 dsize와 [fx,fy] 둘 중 하나만 사용해도 된다. dsize=(0,0)으로 설정을 할 경우, 이미지의.. 더보기
아나콘다(anadonda)를 사용하는 이유! 가상 환경은 마치 독립된 작업 공간을 만드는 것과 비슷합니다. 여러분이 여러 프로젝트를 진행하고 있는데, 각 프로젝트마다 필요한 패키지들이 서로 다를 수 있습니다. 이때 가상 환경을 사용하면, 각 프로젝트에 맞게 독립된 환경을 만들어 사용할 수 있습니다. 예를 들어, 프로젝트 A: 여기에서는 TensorFlow 2.0 버전을 사용해야 할 필요가 있습니다. 프로젝트 B: 반면에 여기에서는 TensorFlow 1.0 버전을 사용해야 하는 경우가 있을 수 있습니다. 이때, 가상 환경을 사용하면 다음과 같이 설정할 수 있습니다. 프로젝트 A를 위한 가상 환경: TensorFlow 2.0 버전을 설치하고, 필요한 다른 패키지들을 추가로 설치합니다. 프로젝트 B를 위한 다른 가상 환경: TensorFlow 1.0 .. 더보기
List vs Array(Numpy) List vs Array 데이터 타입이 한 종류이면 무조건 Nump의 ndarray()를 사용하자 Why?? 1. 속도 : 파이썬의 List는 여러 가지 데이터 타입의 요소를 포함할 수 있지만, 동시에 각 요소에 대한 타입 체크와 변환하는 작업 필요 2. 메모리 오버헤드 a) List는 각 요소의 [Meta Data](타입 정보 등)과 함께 저장이 된다. b) List는 [동적] 배열이다. -> 배열의 size가 변하면, 기존 크기의 list를 새롭게 [복사]하여 요소를 추가해야 한다. c) 파이썬 리스트의 인덱스 연산은 배열과는 다르게 유연하게 동작합니다. 음수 인덱스, 슬라이싱 등이 가능하지만, 이는 인덱스 연산 시에 추가적인 계산이 필요하게 만듭니다. Conclusion : 반면에 배열은 보통 정적.. 더보기
Netty의 멀티/싱글 쓰레드 동작 원리 이벤트 루프 이벤트 루프란 이벤트를 실행하기 위한 무한루프 스레드를 말합니다. 위의 그림과 같이 객체에서 발생한 이벤트는 이벤트 큐에 입력되고 이벤트 루프는 이벤트 큐에 입력된 이벤트가 있을 때 해당 이벤트를 꺼내서 이벤트를 실행합니다. 이것이 이벤트 루프의 기본 개념입니다. 이벤트 루프는 지원하는 스레드 종류에 따라서 단일 스레드 이벤트 루프와 다중 스레드 이벤트 루프로 나뉘고, 이벤트 루프가 처리한 이벤트의 결과를 돌려주는 방식에 따라서 콜백 패턴과 퓨처 패턴으로 나뉩니다. Netty는 이 두 가지 패턴을 모두 지원합니다. 단일 스레드 이벤트 루프 단일 스레드 이벤트 루프는 이벤트 를 처리하는 스레드가 하나인 상태를 말합니다. 이벤트 루프의 구현이 단순하고 예측 가능한 동작을 보장하게 되죠. 하나의 .. 더보기
MQ,MFQ 스케줄링 MQ Multilevel Queue Scheduling MQ알고리즘은 프로세스가 쉽게 다른 그룹으로 분류되는 환경을 위한 것이다. MQ partition은 여러개의 분할된 레디큐로 되어 있다. 각 큐에서 그들만의 스케줄링을 사용한다. 위 사진의 5개의 프로세스 집단에 각각 큐를 할당하여 각 큐에서 스케줄링을 한다. 단점으로 큐를 스케줄링하는 것이 필요하다는 것이 있다. 장점으로는 그룹화를 하여 CPU bound와 I/O bound가 섞여서 효율이 안 좋은 것을 막을 수 있다. 이 MQ의 단점을 해결하는 것이 MFQ이다. MFQ Mulrilevel Feedback Queue Scheduling MQ알고리즘은 스케줄링 오버헤드가 낮다는 장점이 있지만 융통성이 없다. 어떤 큐는 비어서 놀고 있고, 어떤 큐는 .. 더보기
SSL Protocol의 구체적 동작 방식 결론부터 말하면 SSL은 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용한다. ( 공개키는 사실 상당한 컴퓨팅 파워를 필요로 한다 고로, 공개키만을 사용하지 않고, 대칭키와 혼합을 하여 사용) 즉 클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화하고, 대칭키 방식으로 암호화된 실제 정보를 복호 화할 때사용할 대칭키는 공개키 방식으로 암호화해서 클라이언트와 서버가 주고 받는다. 이 설명만으로는 이해하기 어려울 것이다. 아래의 관계만 일단 머리속에 기억해두고 좀 더 구체적인 설명으로 넘어가자.(아래에서 자세히 설명함) 실제 데이터(비밀번호 등..) : 대칭키로 암호화를 해서 전송하고, 같은 대칭키로 복호화를 한다. (클라이언트, 서버는 대칭키를 공유하고 있어야 한다) 대칭키.. 더보기
SSL Protocol의 요약본 공개키 ; 클라이언트에게 넘겨서, 공개키를 가지고 [암호화]해라 비밀키 : 암호화된 데이터가 전송이 되면, 복호화(절대로 유출해서는x) SSL 인증서의 내용 및 역할 1. 서버의 공개키 2. 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인 등등) 3. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장한다. 4. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다 서버와 클라이언트 간의 SSL Protocol은 [핸드 쉐이킹] 과정에서 이루어 진다. 1 클라이언트는 [인증서]로부터 서버의 [공개키] 획득 2. 세션 단계에서 데이터를 암호화하기 위한 pre master key를 클라이언트가 생성 3. pre master key를 서버의 [공개키]로 암호화 하여, 서버에 전송 4. 서버는 비.. 더보기
SSL 인증서의 서비스 보증 방법 이번 절을 시작할 때 인증서의 첫번째 목적을 아래와 같이 언급했다. 어떤 메커니즘으로 인증서가 서버의 신뢰성을 보장하는지 알아보자. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장 웹 브라우저가 서버에 접속할 때 서버는 제일 먼저 인증서를 제공한다. 브라우저는 이 인증서를 발급한 CA가 자신이 내장한 CA의 리스트에 있는지를 확인한다. 확인 결과 서버를 통해서 다운받은 인증서가 내장된 CA 리스트에 포함되어 있다면 해당 CA의 공개키를 이용해서 인증서를 복호화 한다. CA의 공개키를 이용해서 인증서를 복호화 할 수 있다는 것은 이 인증서가 CA의 비공개키에 의해서 암호화 된 것을 의미한다. 해당 CA의 비공개 키를 가지고 있는 CA는 해당 CA 밖에는 없기 때문에 서버가 제공한 인증서가 CA에.. 더보기