JPEG 압축 알고리즘에 대하여 (Down sampling, DCT, Quantization, Huffman coding) -작성중

최근 본 면접에서 면접관님으로부터 들었던 질문이 있다. 긴장해서 정확히 기억이 나지는 않지만 대략 이런 질문이었다. "JPEG는 손실 압축 포맷인데, 어떤 방식으로 압축할까요?" JPEG는 손실, PNG는 비손실 압축이라는 상식 정도만 알고 있었어서 많이 당황했고 몇 가지 추측에 기반해서 답변할 수 밖에 없었다. 면접을 마치고 JPEG 손실 압축 방법을 찾아보았다. 생각했던 것 보다 훨씬 영리하고 신박해서 놀라웠다. JPEG 이미지 압축의 아이디어에는 몇 가지 핵심적인 아이디어가 내재되어 있었다. 0. 사진 특성상의 인접한 픽셀간의 데이터는 유사한 수치의 데이터인 경우가 많다. (Cosine transform시 low frequency 값이 많다.) 1. 사람의 눈으로 이미지를 인식할때 색차보다 밝기에 ..

카테고리 없음 2022.01.07 0

쿠키 / 세션 / JWT / 보안 이슈

인증과 보안에 많이 사용되는 상기 개념들을 정리하는 목적의 포스팅입니다. 포스팅내용 1. 쿠키 / 세션 2. JWT 3. 보안이슈 HTTP 쿠키 HTTP는 요청은 Stateless하다는 특징을 가지고 있다. 쉽게 말해 상태관리가 안된다는 말이다. 각각의 요청은 독립적이고 서버 입장에서는 클라이언트를 식별한다거나, 이전 요청에 대해 연관지어 응답하지 않는다. 이러한 특징을 보완해주는 것이 쿠키이다. 클라이언트 요청헤더에 쿠키가 담겨서 서버로 전송되고, 서버는 쿠키의 정보를 참고한다. 주로 3가지 용도로 사용된다. 세션 관리(Session management) - 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리 개인화(Personalization) - 사용자 선호, 테마 등의 세팅 트래킹..

카테고리 없음 2022.01.07 0

이미지 관련 (애니메이션의 왜 랙걸릴까 & 이미지 용량을 줄이는 방향 2가지)

canvas에서 생명체의 이미지를 활용해 60FPS로 애니매이션을 그리는 과정에서 렉이 심하게 걸리는 현상이 있었다. 처음에는 단순히 이미지 용량이 큰 것이 원인이라고 아닐까 싶어서 프론트 개발자 동료에게 이미지 축소를 요청했다. 하지만 용량이 절반 이하가 되었지만 문제가 전혀 개선이 되지 않았다. 인터넷에서 단서를 얻을 수 있었다. 과거에 게임할때 렉이 걸리며 프레임이 끊기는 경우 해상도를 낮춰 해결한 경험도 생각났다. 각 프레임을 형성하는 이미지 내의 픽셀수를 줄여야 했다. 처음 용량을 줄인 경우는 픽셀수를 줄인 것이 아니라 비트 심도를 낮추는 방향으로 용량을 줄였다는 것도 알게 되었다. 1. 새롭게 알게된 부분은 프레임으로 표현되는 화면에서 프레임을 구성하는 픽셀수의 성능영향이 생각보다 크다는점과 ..

카테고리 없음 2021.12.10 0

node js (artillery)

**이 글에는 node.js artillery 부하테스트와 관련은 있지만 얻을만한 지식이 전혀 없습니다. **artillery 부하테스트를 위한 지식이 필요해서 검색을 통해 들어오신분이라면 뒤로가기를 눌러주세요. 현재 진행중인 프로젝트에서 Express기반 API 서버(5000포트)와 Socket.io 기반 소켓 서버(5001포트)로 돌아가는 서비스를 운영중이다. 채팅, 방, 검색, 이미지 업로드 그리고 이미지 리스트 뷰 등이 구현이 되어 있고 로컬환경은 물론이고 AWS환경에서도 구현한 기능에 한해서는 작동하는데 무리가 없는 상태이다. 소수의 사람들이 이용하면 문제는 없지만, 실제 서비스라면 다수의 사람들을 수용할 수 있어야한다. 이러한 부분이 대비가 되려면 트래픽이 존재하는 환경에서 서버가 어떻게 반응..

프로젝트 2021.11.29 0

나만의 무기만들기 중간회의

시간이 많이 남지 않았는데 해야할 일이 많았다. 오늘도 미팅을 했다. 서비스를 위해 꼭 구현되어야하는부분 / 인지하고 있는 버그 / 추가적으로 하면 좋을 것 같은 부분 3가지로 분류했고 모두 의견을 나눴다. 결론 validation check는 정말 중요하다 버그는 계속 생긴다. 인지하고 있는 버그를 먼저 해결해야한다. 인지하지 못하고 잇는 버그도 챙겨야한다. 구현해야 할 것은 많지만, 우선 버그를 잡고 필수적인 것을 구현하는게 우선이다. 그리고 하고 싶은 것을 한다. 구현 하고 싶은 것을 하기 위해 빨리 선행작업을 해야한다.

프로젝트 2021.11.26 0

간단한 채팅구현 Socket.io (Node js)

Socket.io를 이용해서 간단한 채팅을 구현했다. 우선 기본적인 로직으로 잘 동작하는 채팅을 구현하고 다양한 방법으로 부하 테스트해보고 문제가 생기면 개선하면 좋을 것 같다. 우선 Socket.io와 Websocket은 다르기 때문에 동일시하면 안된다. Socket.io는 기본적으로 아래와 같이 동작한다. 1. 우선 소켓서버와 연결이 먼저 맺어진다. 2. 연결 주체간의 소통한다. 3. 연결이 끊어지면 다시 연결한다. 2번에대해 부연을 해보겠다 socket함수는 보내는 형식, 받는 형식 쌍으로 이루어져 있다. 보내는 형식은 emit이라는 함수다. socket.emit( "XX", data) 받는 형식은 on이라는 함수이고 받은 데이터를 인자로 받는 콜백함수 실행이 가능하다. socket.emit("XX..

프로젝트 2021.11.22 0

AWS S3 Client side에서 이미지 업로드하기

진행중인 프로젝트에서 이미지 저장용으로 S3를 사용해보려고 한다. S3 뜻은 별거없다 Simple Storage Service. S가 3개라... S3.... 이미지 업로드에서 중점적으로 고민하고 있는 부분 중 하나는 서버에 I/O작업을 줄이고 최대한 부하를 덜어내는 방향을 우선적으로 채택하는 것이다. 현재 상황에서는 소켓통신과 실시간 위치계산 등으로 앞으로도 더 많은 resource가 서버에서 필요할 것 으로 예상되고 데이터 전송의 Cost도 만만치 않다. 그래서 이미지 관련해서는 Client browser에서 직접 S3로 업로드 하고 url 만 RDB에 저장하는 방식을 사용해보기로 했다. express 에서 multer를 사용하여 Client쪽에서 서버로 이미지를 먼저 보내고, 서버에서 S3로 업로드..

프로젝트 2021.11.17 0

로그인 기능 적용과 몇 일간의 뻘짓 (feat . CORS (Cross-Origin Resource Sharing) )

세션 로그인 구현후 프로젝트에 적용 과정에서 디버그를 잘 하지 못해서 많은 시간을 허비(?) 했다. 화가나서 스스로 욕을 좀 많이했는데, 문제가 해결된 지금상황에서 돌이켜 보면 헷갈릴만 했고 몇 가지 WEB의 정책적인 부분에 대한 이해가 필요했던 것 같다. 팀원 중 팀장형의 도움이 없었으면 더 오랜시간 헤맷을 것 같다. 디버그 방식은 다양하게 있겠지만 이번에 새롭게 배운점은 구현이 잘된 코드를 찾아본 후 내 코드와 대조하는 방식으로 디버그 하는 것도 효과적이라는 것을 깨달았다. 이번에 문제가 되었던 것들, 새롭게 알게된 부분과 참고한 자료들을 포스팅하였다. 현상 1. node js express 서버(5000)와 간이형식(index.html)을 사용하여 간단히 로그인 기능을 단독으로 구현했을때는 전혀 이..

프로젝트 2021.11.15 0

Synchronous / asynchronous / call back

웹에서 동기적은 순차적으로 작업 수행 비동기는 특정 작업이 수행요청을하고 대기하는동안 다른작업 수행하는 것 var fs = require('fs'); /* //readFileSync console.log('A'); var result = fs.readFileSync('syntax/sample.txt', 'utf8'); console.log(result); console.log('C'); */ console.log('A'); fs.readFile('syntax/sample.txt', 'utf8', function(err, result){ console.log(result); }); console.log('C'); 싱글스레드에서 비동기? 가능한가 ? 뭔 소리지 https://hudi.blog/async-ja..

프로젝트 2021.11.05 0

컴퓨터 시스템/OS [WIL] 컴퓨터 운영체제 ' File System' (pintos project 4) - 작성 중

pintos 마지막 주차다. 마지막 주차인데 구현할게 많은데 다른 주차에 대비해서 시간이 많지 않은 것 같다. 제대로 공부하고 배운내용을 잘 정리할 수 있을지 잘모르겠다 우선 의식의 흐름대로 배운걸 작성해야 할 것 같다. 오늘은 일단 시작 전에 테스트 케이스가 어떻게 돌아가는지 확인하고 수정해보려고 돌려봤는데.. 1 - 3주차까지 통과시켜놓았던 테스트 케이스가 다시 모두 fail 나는 것을 확인했다. 이 부분만 보면 파일시스템이 뭔가 제대로 작동하지 않고 있다는 추론이 가능했다. 파일시스템에 대해 자료를 찾아 공부하고 FAT 시스템이 작동하게끔 코드를 수정하니 기존에 pass하던 test case들이 통과됨을 확인했다. 돌아가다가 멈추는 경우와 애초에 안돌아가는 것을 디버그하는 것은 좀 느낌이 다른 것 ..

OS 2021.10.30 0

컴퓨터 시스템/OS [WIL] 컴퓨터 운영체제 ' Virtual memory ' (pintos project 3)

회고 및 잡설 Pintos 초기에는 어려운 난이도와 디버그의 빡침을 못참고 혼자 샤우팅을 하곤했다. 한달 정도 지나니 난이도에 어느정도 적응하고 무언가 잘 되지 않더라도 내면의 분노를 다스리는 것을 넘어서 이제는 감정에 무뎌진 나를 발견했다. 이번주차에 진행된 Pintos project는 Virtual memory에 대한 내용이다. 책으로 처음 접했을 때 와닿지 않았던 부분들을 이해할 수 있는 뜻깊은 시간이다. 1, 2주차와 마찬가지로 책에서 관련내용을 읽고 처음에 상황을 이해하는데 초반 몇 일을 소모했다. 많이 어려웠지만 늘 그랬듯이 시간을 갈아넣어서 그래도 많은 공부가된 것 같다. 아직도 배워야 할 것들이 너무 많기 때문에 핀토스 메뉴얼이나 개념 설명글을 작성하는데에 시간을 많이 쓰고 싶지 않다. 단..

OS 2021.10.28 2

11 - 13 주차 에세이 운영체제 (Pintos)

정글의 마지막 커리큘럼이 이제 마무리되어간다. 오늘부로 Pintos의 Thread / Userprogram / Virtual Memory 까지 마무리되었다. File system이 남았다. 핀토스는 CS에서 꽤 악명높은 수업이라고 들었는데, 어려운 만큼 배운 부분이 많았다. 핀토스를 하면서 들었던 생각인데, 컴퓨터 전공자도 OS를 책으로만 공부한 사람과 핀토스 프로젝트를 병행하여 학습한 학생의 운영체제에 대한 이해도 차이가 꽤 많이 나겠다는 생각이 들었다. OS를 책으로 읽어서 아는 것과 눈으로 보고 각종 테스트 케이스에 영혼까지 탈탈 털리면서 구현하고 이해해보는 것은 다르기 때문이다. 이러한 이점 때문에 많은 학교들에서 교육자료로 핀토스를 채택하는 것 같다. 짧은 후기를 남기자면, CS를 입문 단계에서..

A 2021.10.28 0

소수경로 (백준 파이썬 BFS , 문자열)

https://www.acmicpc.net/problem/1963 1963번: 소수 경로 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금 www.acmicpc.net 알고리즘을 너무 안 풀었더니 너무 오랜시간동안 붙잡고 풀었다. 소수판별하는 방법은 은근히 자주 보이는 것 같다. 제대로 숙지할 필요가 있어보인다. 애먹은 부분 문자열에서 특정 인덱스 변경하는 것은 C가 오히려 쉬운 것 같다. list( ) / join( ) 을 사용하는 방법과 slicing을 하는 두가지 방법이 있다. https://pythonexamples.org/python-string-replace-..

알고리즘 2021.10.20 0

[WIL] 컴퓨터 운영체제 'USER PROGRAMS' (pintos week2) - 작성 중

PINTOS week 2 수행과제 Pintos week2 수행 주제 - 'User program' 1주차까지 kernal thread만 다루었다. 이번 주차부터 user program 실행, 종료 및 주요 System call (system handler)등을 구현하며 시스템콜 작동 원리를 익힌다. 구현 과제 - argument passing / syscall handler / syscall / user memory access / denying writes executables WIL Key word Argument passing & x86-64 Calling Convention System call ( Syscall handler, Syscall, exception, register ) user mo..

OS 2021.10.14 0

[WIL] 컴퓨터 운영체제 'Thread' (pintos week1)

PINTOS 설명 및 수행과제 OS프로젝트는 PintOS의 코드를 직접 수정해가며 진행하는 프로젝트이다. PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제이다. 정글에서는 이를 기반으로 KAIST 권영진 교수님 주도 하에 만들어진 KAIST PintOS로 운영체제 학습을 시작했다. Pintos week1 수행 주제는 'Thread'이다. thread의 scheduling algorithm을 develop해가며 학습이 진행되었다. 처음에 기본으로 주어지는 pintos code는 정상적으로 작동하되 부분적으로 비효율적으로 구동하게끔 구성되어 있다. 비효율적으로 작동하는 부분들을 개선시키며 과제들을 PASS 시킨다. 총 3가지 문제로 구성되어 있으며 첫 번째 문제인 alarm clock문제를 해결..

OS 2021.10.04 0

C 입력 버퍼와 출력 버퍼 stdin, stdout

표준 입출력과 버퍼 개념에 대해 제대로 몰라서 어제밤에 코드 실행 결과를 이해하는데 조금 삽질을 했다. 코드의 특정 라인에서 printf("00")로 실행 했을 때와 printf("00\n")이 화면에 표시되는 출력타이밍이 달랐다. 기존에 이해하고 있던 내용은 printf 함수를 단순히 화면에 문자를 출력해주는 함수로이고, '\n'는 단지 줄을 바꿔주는 역할만 한다고 생각을 하고 있었다. 하지만 실제로는 \n은 버퍼를 비워주는 역할을 한다. printf, scanf 에서 사용되는 버퍼는 \n를 만나거나 프로그램이 종료시에 비워진다. 읽은 자료. https://shoark7.github.io/programming/knowledge/what-is-standard-stream 표준 스트림, 표준 입출력에 대해..

CSAPP 2021.09.24 0

[ CSAPP / ch11 ] tiny web server, web proxy

리눅스 환경에서 CSAPP교재 CH11 네트워크 프로그래밍 부분에 나와 있는 tiny web server와 web proxy server 코드.. 처음에는 책에 나와있는 대로 단순히 HTTP protocol 을 통해 데이터를 요청만 가능한 있는 tiny 서버를 만들어보았다. 그리고 ch12 장 동시성 프로그래밍에서 배운 내용을 토대로 pthread 함수를 사용하여 다중 쓰레딩도 가능한 서버를 만들어 보았다. 주석은 달았으나 다른거 공부하느라 시간이 없어서 포스팅내용은 추후에 디벨롭.... // Tiny web server #include "csapp.h" void doit(int fd); void read_requesthdrs(rio_t *rp); int parse_uri(char *uri, char *..

CSAPP 2021.09.27 0

웹 서버 기본 개념 정리(네트워크, TCP/IP , 소켓 프로그래밍) -작성중

이번주에는 웹 서버의 개념을 기초수준부터 정리하고 많이 사용되는 개념인 TCP/IP를 정리하고자 한다. 1. 클라이언트 - 서버 프로그래밍 모델 2. 네트워크 3. TCP/IP 프로토콜 1. 클라이언트 - 서버 프로그래밍 모델 거의 모든 네트워크들의 기본모델이다. 실제 세계에서 Client side에서 Server에 요청을하면 server에서 동적, 정적 컨텐츠를 보내줌. 서버는 리소스를 관리하고 리소스를 조작해서 클라이언트가 원하는 서비스를 제공함. 예를 들어, 1. 브라우저에서 특정 domain (서버 주소) 으로 접근하면 server에서 메인화면을 브라우저에 전송해준다. - 웹서버 2. 혹은, 다른 서버간의 파일 교환하는 소프트웨어 ex)파일질라 - FTP 클라이언트와 서버는 프로세스이며, 머신이나..

CSAPP 2021.09.20 1

동적 메모리 할당(Dynamic memory allocation), malloc 함수 구현 (malloc lab)

메모리는 한정된 자원이다. 기술이 많이 발전했지만, 아무리 메모리가 많아도 부족한 자원이라는 것도 사실인 듯 하다. 그래서 개발에 있어서 메모리 관리(Memory management)는 여러가지 핵심요소 중 하나다. 오늘은 동적메모리 할당에 대해 정리해보고, C를 통해 Malloc을 구현한 것을 정리하고자 한다. 대부분의 내용은 Computer system(Randal E. Bryant)에 있는 내용이다. (진짜 좋은 책인데 번역이 .... ) 정적 메모리 할당 (static memory allocation) 동적 메모리 할당에 앞서 대응되는 개념으로 정적 메모리 할당이라는 단어를 사용할 것 같았다. 찾아서 잠깐 간단히 설명... 프로그램이 실행되기 위해서는, 프로그램 구성 요소들 (코드와 다양한 변수등..

CSAPP 2021.09.14 0

JUNGLE 5주차를 마치고 (C, RB TREE)

오늘로서 4주차에 이어 5주차가 마무리 되었다. 이번주는 지난 4주보다 이론적으로 알게된 부분이 많았고 뜻 깊은 주였다. 이번 주 미션은 C언어를 통해 RBTREE라는 자료구조를 구현하는 것 이었다. 처음 시작할 때 여러가지 어려움이 있었고 걱정이 많이되었다. 첫째로, 사용하고 있는 랩탑이 M1이었는데 몇 가지 부분에서 개발환경 셋업에 어려움이 있었다. C가 디버깅이 잘 안된다거나, 필요한 라이브러리 설치가 안된다거나.... 이 문제는 한 주가 끝날때까지 나를 괴롭히고 많은 시간을 소모하게 만들었는데, 도대체 왜 안되는지 납득이 안되었는데, 알아가는 과정에서 몇 가지 알게된 개념들이 있었다. CPU 아키텍처, ENDIAN, 컴파일러 등에 대해 알게되었다. 둘째로, C언어의 개념이 너무 없었다. 처음에 구..

A 2021.09.10 0

이진 탐색 트리 (BST) / 레드 블랙 트리 (RED BLACK TREE) (1) 개념요약

이진 탐색 트리(Binary search tree ; 이하 BST)의 개념과 이진 탐색 트리의 일종인 레드블랙 트리(이하 RB트리로 명명)에 대한 설명입니다. 요약하면, RB트리는 BST의 한계를 개선한 트리이며 방대한 데이터를 다룰 때, 성능은 더 우수하고 기능적으로는 동일합니다. 이진탐색트리(BST)는 왜 나왔을까? BST, RBTREE 두 가지 모두 방대한 데이터를 효율적으로 관리하기 위한 자료구조 입니다. 여기서 말하는 관리란 탐색(searching), 수정(insert), 삭제(delete)를 의미하는데, 탐색 기능에는 이진 탐색(Binary Seach)이라는 방법을 사용합니다. 요약하자면, 전체 데이터에서 중앙값 기준으로 찾고자 하는 데이터가 왼쪽인지 오른쪽인지 비교판단을 반복하여 탐색 범위를..

알고리즘 2021.09.07 0

데이터 세그먼트 간단정리

데이터 세그먼트 프로그램이 실행시 램에 적재되는데, 메모리 위에 올라오는 프로그램의 내용을 코드 세그먼트 / 데이터 세그먼트로 분류 가능하다. 이 중 데이터 세그먼트의 구조는 아래와 같다. 일단 가장 먼저 주목할 부분은 읽기 전용(Read-Only) Data 부분 입니다. 이전에 상수와 리터럴에 대해서 이야기 할 때 등장하였는데 이 부분에 저장되는 데이터들은 값이 절대로 변경될 수 없습니다. 다시 말해 궁극적으로 보호 받는 부분 이죠. 텍스트 세그먼트라고도함 그다음으로그위에전역변수와정적변수가거처하는데이터영역이있습니다. 그위에바로 힙(Heap) 이라는 영역이 있는데 이 부분에 대해서는 나중에 설명하도록 합시다. 힙 맨 위를 보면 스택(Stack) 이 있습니다. 스택은 지역 변수가 거처하는 곳입니다. 스택의..

CSAPP 2021.09.06 0