회사 업무 도중 데이터를 받아서 뿌려지는 일이 있었다이상하게도 받는 값을 그대로 뿌리는 로직인데 데이터를 쏘는 쪽의 viewer 하고 내가 담당하는 쪽의 viewer가 같은 값을 두고 다르게 보여주더라내쪽 viewer 로직을 차근차근 디버깅하면서 혹시나 값을 변형하는 로직이 있나 봤는데그런 건 없었고 결국은 데이터를 쏘는 쪽 담당하시는 분께 물어보니 값을 쏘는 부분엣서 offset 값이 있었다고 하시더라... 그 말을 듣고 생각해 보니 offset이라는 말을 자주 쓰긴 하는데 대충 아는 척만 할 수 있는 느낌이고 설명하기가 애매해서한번 정리해 보기로 했다. 영어 뜻은 아래와 같은 데.. 그다지 도움은 안된다Offset대표적인 사용 예시는메모리 주소에서의 Offset에 경우 메모리 주소가 A이고, 데이터가..
컴퓨팅 기술
서브넷 한 줄 정리 : 서브넷은 할당받은 네트워크 주소를 나눠 효율적이게 사용하기 위한 방법 서브넷 마스크는 네트워크를 잘 쓰기 위한 기술로 이름처럼 subnet, sub network을 의미하는데IP 주소를 서브넷으로 네트워크를 나눠서 성능을 최적화하는 기술이다=> 즉 네트워크를 쪼갬 이걸 쓰면 좋은 점브로드캐스트 도메인으로 전체 네트워크에 데이터를 쏠 때 도메인을 작게 유지하여 트래픽을 분산하고 효율성을 높일 수 있음서브넷팅으로 특정 네트워크를 분리하고 여기에 외부 접근을 별도로 제한하거나 보안 조치를 추가할 수 있음분리해서 관리하므로 서브넷에 문제가 발생 시 더 빨리 식별하고 해결네트워크를 작은 서브넷으로 줄여 IP 주소 낭비를 줄일 수 있다 IP 주소 클래스IP 주소를 나누는 데 사용하는 클래스입..
들어가기 한 달 동안 진행되었던 고랭 알고리즘 스터디가 팀원 분들이 시간이 안 되는 관계로 끝났다 4월에 다시 하자는 말이 있었는데 한다면 난 하면 할 것 같은데, 과연 다시 시작할지는 모르겠다 그동안 문제 풀고 그걸 블로그에 글로 추가함으로써 뭐 쓸지 고민 안 해도 돼서 편했는데 이제 주제를 다시 정해야 될 때가 와버렸다.. 주제 선정에 고민하다가 문뜩 GPT가 기억났다, 그래서 한번 물어봤는데 역시 대단한 친구라 그런지 여러 가지 답변을 줬는데 그중에서 눈에 들어온 친구가 있었다 오? GraphQL? 어디선가 많이 본 친구가 보였고 이김에 이거로 하기로 마음을 먹었고 관련해서 좀 알아보면 아래 세 개로 정의할 수 있다 API를 쿼리로 사용하는 언어이다 페이스북(Facebook)에 의해 2012년 내부..
Docker 도커란 컨테이너화 기술을 통해 애플리케이션을 패키징하여 사용하는 데 이 컨테이너 방식은 애플리케이션과 의존성을 함께 패키징함과 동시에 기존에 가상 머신을 사용하여 사용자 환경을 나누는 것과 비교하면 훨씬 가볍고 빠르게 구현으로 사용자 환경을 나눌 수 있습니다. 아래 이미지를 보면 왼쪽은 가상머신을 사용할 때의 상황을 가식화한거고 오른쪽 이미지는 컨테이너를 사용하는 방식입니다. 가상머신은 Guest OS까지 띄우고 진행해야 한다는 점에서 도커보다 무겁고 느릴 수밖에 없습니다. Docker Desktop 다운로드 Desktop에서 Docker를 관리하기 용이하게 해주는 Docker Desktop을 다운해줍시다. https://www.docker.com/products/docker-desktop/..
개요 웹 서비스를 한다면 크롤링을 알 수밖에 없을 것입니다. 자체적으로 API를 통해 공개하는 데이터 이외에도 아무 데이터나 긁어가 버리니 귀찮은 존재죠. Captch나 자체적으로 로그를 쌓아서 이를 체크해서 막는 방법 등 각자의 노하우로 여러 가지가 있을 겁니다. 물론 막는 법을 잘 아는 게 중요하지만 공격 쪽 입장에서의 생각도 알면 더 좋겠다는 생각으로 정리해 봤습니다. 번외로 요즘은 합법적으로 토렌트처럼 분산 요청을 통해 Captch도 뚫어버리는 서비스도 있는데 참 신기합니다 1. User Agent 가장 쉽고 편하게 해 볼 수 있는 방법입니다. Python + Selenium 기준으로 아래처럼 헤더라 User Agent를 추가하면 됩니다. headers = { "Accept": "text/html..
클라우드 컴퓨팅 개념 개념은 정말 간단하고 생각해 컴퓨팅와 관련된 모든 자원(PC를 포함한 하드웨어나 애플리케이션 등등)을 돈 주고 빌리는 것 Pay as you go Q : 근데 왜 구름(cloud )이야? 렌탈 컴퓨팅이라고 하면 편하잖아 A : 구름은 같이 언제든지 볼 수 있는 지만 구름의 내부까지 못 보는 것과 같이 사용자가 실제로 어떤 리소스를 사용하는지까지는 알 수 없다는 점이 구름과 비슷하고 크기가 항상 바뀌는 구름처럼 기존에 컴퓨팅에 유연성과 확장성을 추가한걸 설명하기 위함이야 즉 언제든지 크기를 키울 수도 줄일 수도 있고 원하는 기능을 추가할 수 도 있어 거기에 우리는 자그마한 부분의 리소스를 가져다가 쓰게 될 텐데 그게 꼭 전체 구름(전체 리소스)에서 필요한 구름만(필요한 리소스) 떼어내..
개요애플리케이션에서 다른 애플리케이션이 이용할 수 있는 데이터 패킷을 수신 애플리케이션이 준비가 되었을 때 발송해줌(네트워크나 수신 애플리케이션의 장애가 발생하더라도 메시지 큐는 보존됨) 흐름도Producer → 메시지(작업) 지시 → Queue(적재 & 반출) → 메시지(작업) 진행 → Consumer 적용 분야메시지 큐의 사용 목적은 큐에 적재한 작업이 언젠가 소비(실행) 될거라고 믿기 때문이다.일반적인 HTTP 요청일 경우 (Client ↔ Sever) 소비자는 응답을 기다려야 하므로 메시지 큐는 바람직하지 않다.아래 분야에 적용하기 적합블로그 포스팅 : 용량이 큰 이미지의 경우 업로드 시 이미지 최적화 서비스의 큐를 사용이메일 : 애플리케이션의 핵심 기능이 아닐 경우 메시지 큐를 통해 메일 발..
도커에서 아래와 같이 apm을 전부 정상적으로 설치했음에도 데이터베이스가 연결 안될 경우 아래 방법을 적용하면 됩니다., define( 'DB_NAME', 'myapp' ); /** MySQL database username */ define( 'DB_USER', 'root' ); /** MySQL database password */ define( 'DB_PASSWORD', 'secret' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8' ); /** The Database Collate t..
해싱(Hasing)의 개념 해시(Hash) 탐색키에 산술적인 연산을 통해 버킷 주소를 계산하는 해시 함수를 사용하여 데이터 배분 및 접근하는 기법 아래 이미지와 같다고 생각하시면 됩니다. 여기서 버킷(Bucket)이란 한 개 이상의 레코드를 저장할 수 있는 저장공간의 단위로, 일반적으로 디스크 블록의 크기와 일치한 크기를 지닌다. 해시의 구조 아래 이미지처럼 탐색키가 해시 함수를 거치면 어느 버킷에 저장되는지 정해지는 것 해시의 사용 그렇다면 어떻게 데이터를 꺼낼 수 있는가? 아래처럼 값을 입력하면 그에 상응하는 버킷을 알려줌 그렇다면 해시 함수의 역할은 자연스럽게, 여러 버킷에 균등하게 제공해야 한다, 만약 한 버킷에 모든 레코드를 저장하다면 해시의 성능이 확 떨어짐 => 실제 해시 인덱스에서는 완벽한..
인덱스의 이해 인덱스의 개념 인덱스(Index) : DBMS에서 요청된 레코드에 빠르게 접근할 수 있도록 지원하는 데이터와 부가적인 구조 인덱싱(Indexing) : 인덱스를 구성하고 생성하는 작업 => 인덱스의 탐색키를 이용하여 해당 레코드가 저장된 블럭에서 디스크 저장 장치 또는 메모리에서 파악하여 해당 블럭을 빠르게 적재할 수 있음 탐색키 : 파일에서 레코드를 찾는데 사용되는 컬럼이나 컬럼의 집합 인덱스 기반의 검색 과정 기존에는 디스크에서 메모리에 모든 컬럼을 올린다면 인덱스를 이용한다면 메모리에는 인덱스만을 올리고 필요할 때 추가 컬럼을 가져오는 방식을 이용 => 인덱스가 컬럼의 집합보다 크기가 작기 때문에 가능 인덱스의 종류 순서 인덱스 : 특정 값에 대해 정렬된 순서 구조 해시 인덱스 : 버..