전체 글 10

PostgreSQL vs MySQL, 어떻게 선택해

기술 인터뷰를 참여하면 가끔 듣는 질문이 있다.왜 그 프로젝트에서 PostgreSQL을 사용하셨나요? 처음에는 전혀 대답하지 못했다. 왜냐하면 입사했을 때부터 회사의 모든 프로젝트에서 PostgreSQL을 사용하고 있었고, 별다른 고민이나 의문을 갖지 않고 그대로 사용했기 때문이다. 그리고 몇 년뒤, 두번째로 질문을 받았을 때는 어설픈 지식으로 오답을 말했다.JSON 데이터타입을 쓰려구요. 면접관: MySQL도 JSON 타입 지원하는데요? 반성했다. 이전에 똑같이 받았던 질문을 왜 복기하지 않았을까? 아니 그 이전에 왜 아무런 기술적 고민 없이 DB를 사용하고 있었을까? 이 문제에 대해 좀 더 깊이있게 고민해봐야겠다 싶었다. 하지만 이 질문은 오랫동안 ToDo리스트에서 자고있었다. 첫째로 중간중간에 짤막..

Back-End 2023.09.23

파이썬의 GIL 이란

파이썬은 두 개 이상의 스레드가 바이트코드를 실행하는 것을 원하지 않는다. CPython의 메모리 관리 정책은 Thread Safe하지 않기 때문이다. 이러한 문제를 해결하고자 Python 바이트 코드를 실행하려면 인터프리터 잠금(GIL)을 획득해야 한다는 규칙을 추가했다. GIL [Global Interpreter Lock]이란 Python Object 접근을 제한하는 mutex이다. GIL은 한 번에 하나의 스레드만이 파이썬 바이트코드를 실행하도록 보장하기 위해 CPython 인터프리터가 사용하는 메커니즘이다. PyObject를 묵시적으로 Thread Safe 하도록 만들어서 CPython의 구현부를 단순하게 만든다. 다시 말해 로직 그 자체에 집중한 CPython 구현부를 작성하며 그 외 변수들의 ..

Back-End/Server 2022.09.05

프로세스와 스레드

프로세스(Process) 프로세스의 개념 프로세스란 실행 중인 프로그램을 뜻한다. 디스크에 있는 실행파일이 메모리에 올라가서 실행되기 시작하면 프로세스가 되며, CPU를 획득해 코드를 수행하거나 CPU를 반환하고 입출력 작업을 수행한다. 프로세스를 이해하기 위해서는 Context에 대해 알 필요가 있다. Context란 Context란 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확한 상태 관리를 위해 필요한 정보를 의미한다. 일반적으로 멀티 프로세싱 환경에서는 타이머 인터럽트에 의해 짧은 시간 동안 프로세스가 완료될 때까지 CPU 자원의 획득 / 반환 과정을 반복적으로 발생시키는 방식으로 CPU 자원 관리가 이루어진다. 따라서 CPU 자원을 다시 획득해 중단됐던 명령을 재개하기 위해서는 직전 수행 ..

HTTP 인증에 관한 개요

BASIC 인증 유저네임과 패스워드를 base64 의 형태로 인코딩하여 전송하고 서버는 이를 디코딩하여 인증을 확인한다. 형태는 다음과 같다. username = 'foo' password = 'supersecretpassword' credentials = `${username}:${password}` encoded = base64.encode(credentials) request.headers.Authorization = `Basic ${encoded}` 장점 HTTP 기본 인증 프로토콜로 대부분의 브라우저에서 지원 구현이 간단함 단점 base64로 인코딩 되기 때문에 패킷 탈취 시에 보안에 매우 취약함. (SSL 반드시 필요) DIGEST 인증 Basic 인증을 기반으로 보안을 강화한 인증방식. 서버..

Back-End/Server 2022.05.08

한영전환시 팝업창 뜨지 않게 하기

1. tweaks 설치 sudo apt install gnome-tweak-tool 2. tweaks 실행 3. Keyboard & Mouse -> additional layout options 4. Switching to another layout -> 한영전환키 나의경우 Alt-R 출처: https://askubuntu.com/questions/967364/ubuntu-17-10-and-later-cant-change-the-input-switching-shortcut-to-altshift Ubuntu 17.10 and later: can't change the input switching shortcut to alt+shift When I try to set the default combo for ..

Back-End/Linux 2020.05.24

무료 도메인(Free Domain) Freenom의 Not Available 문제.

유명 무료 도메인 공급 업체인 Freenom 에서 무료 도메인을 발급 받으려고 하는 경우에 어떤 도메인을 검색해도 모두 Not Available 로 비활성화되서 제대로 진행이 되지 않는 문제가 있다. 버그인지 의도인지는 모르겠지만 여러가지로 시도 중 해결할 수 있는 방법을 찾았다. 바로 마지막 최상위 도메인(TLD)까지 모두 입력하는 것이다. 무료의 경우 .tk / .ml / .ga / .cf / .gq 등의 무료 TLD 를 포함하는 전체 도메인을 입력하면 정상적으로 진행되는 것을 발견했다. 자동으로 선택되기 때문에 우측상단에 1 domain in cart가 확인 되었다면 checkout 버튼을 클릭하여 진행하면 된다. 이후에 진행하는 방법은 이미 많은 자료가 있기 때문에 생략한다. 끝. ex) 구글 혹..

Back-End/Server 2020.02.14

객체와 배열의 프로토타입

□ 객체의 리터럴 방식으로 생성한 객체의 프로토타입 Object.prototype▲Object □ 배열 형태로 생성한 객체의 프로토타입(자바스크립트에선 배열도 객체 타입) Object.prototype ▲Array.prototype ▲Array(object) 따라서 객체 리터럴 방식으로 생성된 객체는 array.prototype을 상속받지 않기 때문에 array.prototype의 push()나 pop() 메서드를 사용할 수 없다. 출처 : 인사이드 자바스크립트 p57~59(송현주, 고현주 / 한빛미디어)

Commit 동작 구조를 알아보자.

앞으로 Git과는 어떻게든 피할 수 없다면, Git에 대해 조금 더 알아보자. 1. 새로운 파일을 최초에 add하게 되면 Index파일과 [blob] Object 파일 2개가 생성된다. 2. Commit을 하게 되면 여러가지 메시지가 추가되는데 그 중에서 주의깊게 볼 것은 역시 Object 파일이다. Object파일의 종류는 크게 3가지 종류가 있는데, 1) blob - 파일의 내용을 압축하여 지니고 있는 Object ------------여기까지는 add시 생성 2) tree - tree는 폴더의 파일의 이름과 해당 파일의 내용에 해당하는 blob code를 담고 있다. 3) commit - tree와 parent 정보 / author와 committer 정보 / Commit Message (#pare..

기타/Git 2019.02.17

Linux Ubuntu 18.04 한영 전환 문제(feat.오른쪽 alt키)

처음 우분투를 설치하고 가장 당황했던 것이 한영전환 문제였다. 한영전환 버튼이 따로 없는 레오폴드 키보드를 이용하는 것이 문제였던 것 같은데, 우측 ALT키를 한영전환 버튼으로 이용하고 싶으나 기본 ALT키의 기능 또한 살아있기 때문에, 한영전환키로 설정을 하여도, ALT 기능이 우선순위를 갖게 되어 한영전환 기능이 작동을 안하는 것으로 보여진다. 이 때문에 반나절은 고생한 듯 하다. 이런저런 많은 정보 가운데 결국 이 문제를 해결해준 방법을 정리하였다. 1. 처음부터 영문 우분투 설치 추천 - 언어와 키보드를 한글로 설정하면, 또 키보드 삭제하고 다시 설정해야 되는 경우가 있다. 또, 언어를 한글로 설정할 시에 여러 경로가 한글로 설정되는 경우가 많아, 오히려 불편할 수가 있다. 따라서, 영문버전으로 ..

Back-End/Linux 2019.02.15