컴퓨터 공학

컴퓨터 공학

당신의 Go 코드의 nil 체크가 실패하는 이유(feat. interface)

* 몇 개월 전, 회사에서 문제 해결을 위해서 리팩터링이 있었고, 그 과정에서 에러가 발생했었는데, 그 경험을 공유하고자 이 글을 작성합니다.  저에게 하루 약 120만 건 이상의 요청이 들어오는 서버에 관한 태스크가 주어졌습니다. 서버에 새로운 파이프라인을 추가했고, 이에 대해서 개발환경에서 모든 테스트를 마치고, 실제 운영환경에 배포했습니다.  무사 배포를 기원했지만, 배포하자마자 서버는 죽었다 살아나기를 반복했고, 이 때문에 바로 서버를 롤백했습니다.  저는 매우 의아했습니다. 에러가 발생한 지점의 코드를 저는 고친 것이 없었고, 해당 지점에서 원래 에러가 발생하고 있지 않았기 때문이죠. 그렇게 한 시간 동안 원인을 찾기 위해 로그를 열심히 찾았고, 결국 문제의 원인을 찾아냅니다.    문제 발생의..

컴퓨터 공학/네트워크

(네트워크) gRPC로 가는길(1) / HTTP의 역사(1.0, 1.1, 2.0)

MSA에서 사용하는 기술, gRPC. 컴포넌트 간에 통신을 위해서 사용됩니다. 왜 REST를 사용하지 않고 gRPC를 사용해서 통신할까요? HTTP1.1을 사용하는 HTTP/REST와는 달리 gRPC는 HTTP 2.0을 사용하기 때문에 1.1 대비 빠른 속도를 가지고 있습니다. 그러니까 gRPC를 알기 위해서는 HTTP 2.0에 대해서 알아야 합니다. 2.0을 이해하기 위해서는 HTTP의 역사에 대해서 아는 게 도움이 되겠죠? 그러니 이 문서에서는 HTTP의 역사에 대해 다루겠습니다. ⚡️HTTP 0.9 - One line 프로토콜 HTTP 초기버전에는 버전 번호가 없었습니다. 그러니까 그때 당시에는 HTTP를 사용한다고 말했을 뿐, HTTP0.9를 사용한다고 말하지 않았다는 것입니다. HTTP 0.9가..

컴퓨터 공학

(디자인 패턴 복습 시리즈) 어댑터 패턴(Adapter pattern)

이번 시간에 복습할 패턴은 어댑터 패턴입니다. 어댑터 패턴은 싱글톤과 함께 어디선가 많이 들어본 패턴에 속합니다.(뇌피셜) 어댑터 하면 가장 쉽게 떠오르는게 220v를 110v로 변환해주는 어댑터입니다. 일본이나 중국, 영궁을 여행가면 각기 다른 어댑터를 챙겨가는 그런 상황을 생각해보자고요. 우리는 일본에서 충전기를 사용하기 위해 새로운 충전기를 가져가거나, 혹은 앞의 플러그 부분을 갈아끼우지 않습니다. 다만 110v용 어댑터를 챙겨가서 사용하죠. 객체지향에서도 마찬가지입니다. 기존의 시스템과 새로 도입해야하는 시스템이 있습니다. 하지만 기존의 시스템과 새로 도입해야하는 시스템이 상호호환이 잘 되지 않는 부분이 있습니다. 이런상황에서 우리는 기존의 시스템을 새로 작성하지 않고, 어댑터 패턴을 사용해서 기..

컴퓨터 공학

(Python) FastAPI MVC(1)

이 문서는 Fastpi-mvc를 번역한 글입니다. Why fastAPI-mvc? fastapi-mvc란? fastapi-mvc는 fastapi 웹 프레임워크의 개발자 생산성 툴입니다. 모든 개발자가 fast-api를 시작할 때 필요한 것을 바탕으로, fast-api 응용프로그램 개발을 더욱 쉽게 하기 위해서 만들어졌습니다. fastapi-mvc는 적은 코드로 더 많은 것을 달성할 수 있습니다. 특정 작업을 시작하는 데 필요한 모든 것을 생성하여 개발을 더욱 쉽게 만들 수 있도록 설계된 "Generator"라는 여러 스크립트가 함께 제공됩니다. fastapi-mvc는 독단적인 소프트웨어입니다. 일을 처리하는 최선의 방법이 있다고 가정하고, 그 방법을 장려하도록 설계되었지만 경우에 따라 대안을 방해하기도 합..

컴퓨터 공학

웹 서버 vs 웹 애플리케이션 서버(Web Server vs WAS)

이 문서에서는 웹 서버와 웹 애플리케이션 서버에 대해서 다룹니다. 많이들 혼동하는 것이 웹 서버와 웹 애플리케이션 서버입니다. 무엇이 다를까요? 웹 서버(Web Server) 웹 서버는 하드웨어, 소프트웨어 두 가지 특면에서 바라볼 수 있습니다. 하드웨어 측면에서 웹 서버는 소프트웨어와 웹 사이트의 컴포넌트 파일들을 저장하는 컴퓨터입니다. 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터를 주고 받을 수 있도록 합니다. 소프트웨어 측면에서 웹 서버는 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리합니다. 현대의 통신은 대부분 HTTP에 국한됩니다. 또한 웹 서버를 넓게 보자면 정적 리소스를 제공하고 기타 부가기능을 제공합니다. (정적 리소스는 단순 서빙) 대표적으로 Apache와 Ngi..

컴퓨터 공학/DB

(MySQL) MySQL에서 실시간 쿼리 로그 확인하기

스프링 프로젝트를 진행하다 보면 실제 쿼리가 어떻게 나가는지 궁금할 때가 있습니다. 기본적으로 spring: jpa: show-sql: true 이런 설정을 하게 되면 콘솔창에 쿼리 로그를 보여주기 때문에 웬만한 쿼리는 확인이 가능합니다. 하지만 대량의 쿼리나 JPA에서 변환되어 실제로 MySQL 쿼리로 변환되어 나가는 쿼리는 알지 못한다는 문제가 있습니다. 이때 실시간 로그 확인이 필요하고 함께 로그를 확인하는 방법을 알아보려 합니다. 🧐MySQL 로그 설정하기 실시간 쿼리 로그를 확인하기 위해서는 먼저 로그 설정이 필요합니다. 먼저 MySQL에 접속합니다. mysql -u root -p 그리고 로그 설정을 확인해봅니다. show variables like 'general_log%'; 그럼 아래와 같은..

컴퓨터 공학/DB

(MySQL) Docker + MySQL를 Datagrip에 연결하기

이전에는 Dokcer로 MySQL 서버를 띄우는 글을 작성한 적이 있습니다. (Docker) Mysql(PostgreSQL, mariaDB 등)을 도커로 실행시키기 mysql과 postgresql은 각각 3306, 5432 포트를 기본으로 사용하기 때문에 겹칠일이 없지만, mysql과 mariaDB같은 경우 둘다 3306 포트로 실행되는데다, 같은 로컬환경에 출돌이 일어나기 쉽상이다. 그래서 이 mirrorofcode.tistory.com 위 방법은 여전히 잘 실행되는데요, DB를 Datagrip이나 MySQL workbench 같은 툴에 연결하고 싶을 때가 있을 겁니다. (왜인지는 모르겠는데 root 계정은 연결이 안되더라고요.)(사실 안 찾아봄) 이때는 db를 생성해주고, 사용자를 만들어서 권한을 넘..

컴퓨터 공학/DB

(MySQL) MySQL 8.0의 메모리 할당 및 사용구조

일반적으로 메모리는 코드, 데이터, 힙, 스택 영역으로 나누어져 있습니다. 그렇다면 MySQL 서버는 메모리를 어떻게 사용할까요? 🧐글로벌 영역과 로컬 영역 MySQL 서버도 일반적인 메모리 구조를 크게 벗어나지 않습니다. 글로벌 영역은 힙 영역, 로컬 영역은 스택 영역과 대조할 수 있겠네요. MySQL의 메모리 할당 방식은 상당히 복잡하기 때문에 MySQL 서버가 상요하는 정확한 메모리의 양을 측정하는 것은 쉽지 않습니다. 그래서 단순하게 MySQL의 시스템 변수로 설정해 둔 만큼 운영체제로부터 메모리를 할당받는다고 생각해도 무방합니다. (실제로 이론적인 계산이 아무런 의미가 없고 경험 기반으로 판단해야 할 때가 더 많다고 한다.) 🧐글로벌 영역 글로벌 영역은 말 그대로 모든 스레드에 공유되는 메모리 ..

후;
'컴퓨터 공학' 카테고리의 글 목록