반응형

CS 12

[DB] index_merge 비활성화를 통한 Using Intersect 쿼리 효율 개선 일지

MySQL을 사용하고 있는 사이드프로젝트 모카콩에서 아래 Slow Query를 발견했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 select comment0_.comment_id as comment_1_2_, comment0_.created_time as created_2_2_, comment0_.modified_time as modified3_2_, comment0_.cafe_id as cafe_id6_2_, comment0_.content as content4_2_, comment0_.is_masked as is_maske5_2_, comment0_.member_id as member_i7_2_ from comment comment0_ left outer..

CS/Database 2023.07.28

[PostgreSQL] Mac M1 Postgres 실행 에러 해결_ Failure while executing; `/bin/launchctl bootstrap gui/501 /Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist` exited with 5.

오랜만에 아래 명령어로 PostgreSQL를 실행하려는데 아래 에러를 만났다. Postgresql 실행 시 brew services start postgresql@14 Bootstrap failed: 5: Input/output error Try re-running the command as root for richer errors. Error: Failure while executing; `/bin/launchctl bootstrap gui/501 /Users/kth990303/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist` exited with 5. psql 쉘 실행 시 혹시나 싶어 psql 쉘을 띄워보려 해도 아래 에러가 발생했다. psql pos..

CS/Database 2023.02.08

[PostgreSQL] Mac M1 homebrew로 PostgreSQL 설치 및 Datagrip 연동 (feat. postgresql 버전 별 차이 고민)

postgreSQL을 로컬에 설치할 일이 생겼다. 이왕 설치하는 거, 블로그에 기록해두면 이후에 두고두고 보기 좋을 것 같아서 포스팅해보려 한다. 설치환경은 Mac M1이며, 별도로 홈페이지 접속하여 설치하기 귀찮아서 homebrew로 설치하려 한다. DB IDE는 Datagrip을 이용할 것이며, 여기에 연동할 예정이다. DBeaver, PGAdmin 등 다양한 IDE가 있던데, PGAdmin은 비교적 느리고 일부 버그가 있다고 해서 DBeaver이랑 Datagrip 중에 고민했다. 그러던 중, https://medium.com/querypie/맘에-쏙-드는-database-ide를-찾아서-b38ee2d09103 글을 발견하여 최종적으론 Datagrip과 연동하기로 결정! 맘에 쏙 드는 Database..

CS/Database 2023.01.18

뮤텍스(Mutex), 스핀락(SpinLock), 세마포어(Semaphore)

다중프로그래밍으로 여러 작업을 동시에 실행가능한 환경이 됐다. 이러한 환경은 탁월한 성능 및 메모리를 자랑한다. 하지만, 그에 대한 대가로 공유자원을 여러 프로세스, 혹은 스레드에서 사용하게 되어 데드락(교착 상태)이 자주 발생하게 되는`동기화 문제`가 자주 발생하게 된다. OS에서의 데드락을 발생시키는 원인은 상호배제, 점유대기, 비선점, 순환대기가 있는데, 이 4가지가 모두 지켜지지 않으면 데드락이 발생한다. 이번에 포스팅할 뮤텍스, 스핀락, 세마포어 방식은 위 4가지 조건 중 상호배제를 준수하여 데드락이 발생되지 않도록 하는 방법이다. 뮤텍스(Mutex) 정의 자체는 여러 스레드를 실행하는 환경에서 자원 접근에 대한 제한을 위한 메커니즘이다. 하지만 이 정의로는 완벽하게 이해하기 어렵다. 아래 그림..

CS/운영체제 2022.10.19

[DB] 트랜잭션의 ACID 성질

트랜잭션 관리는 백엔드 개발자에게 있어서 매우 중요한 일 중 하나이다. 트랜잭션이란 데이터를 다루는 일련의 수행 작업 단위를 의미한다. 예를 들어 A라는 사람이 B라는 사람에게 10만원을 빼앗는 작업을 수행한다고 하자. 이 때 A의 자산은 10만원이 증가해야 되고 B의 자산은 10만원이 감소한 상태로 작업이 완료돼야 한다. 만약, 해당 과정 수행 중에 문제가 생겼다면 아예 작업이 수행되기 전 초기 상태로 되돌아가야 한다. A의 자산은 10만원이 증가됐는데, B의 자산은 그대로인 경우가 존재하면 안된다. 위와 같이 트랜잭션은 데이터를 다루는 작업을 의미하기 때문에 매우 신중하게 관리해야 한다. 그렇기 때문에 트랜잭션은 ACID 성질을 보장해야 한다. ACID 성질이란 무엇일까? 원자성(Atomicity) ..

CS/Database 2022.10.14

[Network] 프록시(Proxy)와 로드 밸런싱(Load Balancing)

HTTP를 HTTPS로 변환하는 과정을 진행하다보면 NGinx라는 것을 만나게 되고, NGinx는 리버스 프록시, 로드밸런싱 기능을 포함하고 있는 웹 서버 오픈소스임을 알게 된다. 리버스 프록시? 로드밸런싱? 이런 것들이 다 무엇일까? 이번 포스팅에선 이 내용들에 대해 기록해보려고 한다. 아마 컴퓨터공학과 전공 수업에서 잠깐 만났어서 익숙한 사람들도 꽤 있을 것 같다. 프록시 (Proxy) 흔히 포워딩 프록시(Forwarding Proxy)를 통상적으로 프록시라고 부른다. 프록시의 사전적 정의는 아래와 같다. 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수..

CS/Http, Network 2022.07.31

[매트 스터디] 5주차 HTTP 헤더2 - 캐시와 조건부 요청

우아한테크코스 레벨2 에서 매트가 주관한 스터디로, 인프런 김영한님의 강의 모든 개발자를 위한 HTTP 웹 기본 지식 스터디를 진행중이다. 이 포스팅에서는 스터디에 PR을 날릴 내용과 함께 스터디 시간에 얻어간 내용을 적을 예정이다. 캐시 기본 동작 HTTP 헤더의 cache-control에 캐시 유효기간(max-age)를 설정해줌으로써 캐시를 적용할 수 있다. 캐시 가능 시간동안 네트워크를 사용하지 않아도 브라우저 캐시에 존재한 요청은 요청 측의 메모리나 하드디스크에서 꺼내게 해 빠르게 응답해줄 수 있다. (like. Dynamic Programming) 캐시 가능 시간이 초과된 경우, 서버를 통해 다시 데이터를 조회하고 갱신하여 캐시가 없을 때와 동일하게 느려짐. 검증 헤더와 조건부 요청 1 캐시 가..

CS/Http, Network 2022.06.01

[매트 스터디] 4주차 HTTP 헤더 1 - 일반 헤더

우아한테크코스 레벨2 에서 매트가 주관한 스터디로, 인프런 김영한님의 강의 모든 개발자를 위한 HTTP 웹 기본 지식 스터디를 진행중이다. 이 포스팅에서는 스터디에 PR을 날릴 내용과 함께 스터디 시간에 얻어간 내용을 적을 예정이다. HTTP 헤더 개요 RFC2616 (과거) HTTP 헤더 General 헤더: 메시지 전체에 적용되는 정보 Request 헤더: 요청 정보 (요청 시에만 존재) Response 헤더: 응답 정보 (응답 시에만 존재) Entity 헤더: Entity 본문을 해석할 수 있는 정보 제공 HTTP 바디 Entity 헤더: Entity 본문을 해석할 수 있는 정보 제공 Entity 본문: 실제 전달할 데이터 메시지 본문에는 Entity 본문 내용이 포함돼있음. RFC7230 (최신)..

CS/Http, Network 2022.05.22

[매트 스터디] 3주차 HTTP 메서드 활용 & HTTP 상태코드

우아한테크코스 레벨2 에서 매트가 주관한 스터디로, 인프런 김영한님의 강의 모든 개발자를 위한 HTTP 웹 기본 지식 스터디를 진행중이다. 이 포스팅에서는 스터디에 PR을 날릴 내용과 함께 스터디 시간에 얻어간 내용을 적을 예정이다. 1. HTTP 메서드 활용 클라이언트에서 서버로 데이터 전송 쿼리 파라미터를 통해 전송할 때 주로 데이터를 조회할 때, 즉 GET Http method에서 쿼리 파라미터를 통해 전송하는 경우가 많다. 만약 쿼리 파라미터가 아닌 메시지 바디를 통해 데이터를 전송할 경우에도 크게 문제는 없긴 하다. 하지만 간단한 정적 데이터의 경우에도 메시지 바디를 통해 데이터를 전송하여 위처럼 난독화를 시킬 필요는 없다. 단순한 데이터 조회는 리소스 경로 혹은 쿼리파라미터에 전달하여 key-..

CS/Http, Network 2022.05.15

[매트 스터디] 2주차 HTTP 기본 & HTTP 메서드

우아한테크코스 레벨2 에서 매트가 주관한 스터디로, 인프런 김영한님의 강의 모든 개발자를 위한 HTTP 웹 기본 지식 스터디를 진행중이다. 이 포스팅에서는 스터디에 PR을 날릴 내용과 함께 스터디 시간에 얻어간 내용을 적을 예정이다. 1. HTTP 기본 우리는 대부분의 통신을 Http에 넣어서 통신하고 있다. Html, Text, Json, Xml 등. 데이터를 주고받을 때에 Http를 사용하기 때문에 개발자라면 Http 지식은 기본 교양으로 가지고 있어야 한다. 현재 우리가 가장 많이 사용하고 있는 것은 Http/1.1 버전이다. Http/2, Http/3 버전이 있음에도 Http/1.1 버전을 사용하는 이유는 우리가 필요로 하는 기본 스펙이 충분히 존재하기 때문이다. Http/2, Http/3 버전은..

CS/Http, Network 2022.05.09
반응형