본문 바로가기

알쓸코잡

(8)
JWT(JSON Web Token) 으로 3행시 해보겠습니다 JWT(JSON Web Token)으로 3행시 해보겠습니다 J : 제이슨 웹 토큰이 W : 왜 중요한지 모른다면 T : 토킹 어바웃 JWT(Json Web Token) 이란 인증에 필요한 정보들을 암호화시킨 JSON 토큰 JWT는 세 부분으로 구성되고 .(점)을 구분자로 나누어지는 세 가지 문자열의 조합 세 가지 문자열? Header Payload Signature Header Header는 일반적으로 두 가지 정보를 포함 Header는 Base64URL로 인코딩 되어 생성 alg : 사용되는 암호화 알고리즘(HMAC SHA256, RSA) typ : 토큰의 타입을 나타냄. 일반적으로 "JWT" { "alg": "HS256", "typ": "JWT" } Payload(Claims) 실제 전달하고자 하는 ..
Race Condition과 Thread.Lock (Feat. 파이썬) Race Condition과 Thread.Lock (Feat. 파이썬) NCP에서 Fast API관련한 서버가 계속 OOM이 발생해서 원인을 파악하던 도중.. 갑자기 딴 길로 샜다. Race Condition 동시성 프로그래밍에서 발생하는 상황으로, 두개 이상의 동시적인 연산(스레드나 프로세스에 의해 수행되는)이 자원에 접근하고 그 순서에 따라 결과가 달라지는 상황 예를 들어, 두 스레드가 동시에 같은 메모리 위치에 쓰기 작업을 수행하려고 할 때, 어느 스레드가 먼저 쓰기 작업을 수행하느냐에 따라 결과가 달라질 수 있음 따라서 동시성 프로그래밍을 할 때는 Race Condition을 방지하기 위한 동기화 메커니즘(뮤텍스, 세마포어)을 사용해서 한 번에 오직 하나의 연산만이 해당 자원에 접근할 수 있도록 ..
dict.fromkeys()에 관한 사실 dict.fromkeys()에 관한 사실 나는 파이썬 내장 함수인 dict.fromkeys()를 자주 사용하는 편인데, 처음 회사를 다닐 때 본 뒤로 자주 사용하는 것 같다. 사용하는 이유 간결성, 내장함수, 그리고 핵심이유는 "불변 객체를 사용한 초기화"가 유용해서 자주 사용한다. 하지만 오늘 아래와 같은 만행을 저질렀다. 간략한 예시를 들어보겠다. key = ['key1', 'key2', 'key3'] dict1 = dict.fromkeys(key, []) dict1['key1'].append('value1') print(dict1) 여기서 내가 예상한 기댓값은 아래였지만, {'key1': ['value1'], 'key2': [], 'key3': []} 실제 결과는 다음과 같았다. {'key1': [..
꼬리에 꼬리를 무는 Proxy 이야기 꼬리에 꼬리를 무는 Proxy 이야기 프록시란? 서버 클라이언트 사이에 중계기로써 대리로 통신을 수행하는 것 프록시 서버 그 중계기능을 하는 것(컴퓨터 시스템, 응용프로그램)을 프록시 서버라고 함 프록시를 왜 사용하는가? 대리로 통신을 수행하여 보안성, 성능, 안정성 향상 시키려고 다른 장점은? 프록시 서버 중 일부는 요청받은 내용들을 캐싱해서 저장해 둠 저장해서 뭐 하는가? 클라이언트 서버는 계속 통신하며 데이터를 전달하고 중복되는 데이터도 반복적으로 전달하게 됨 클라이언트가 캐시 내부에 존재하는 정보 요청 시, 프록시는 해당 데이터를 서버에서 가져 올필요 없이 가지고 있는 캐시에서 전달해 줌 이는 외부 트래픽이 줄어들어 네트워크 병목 현상 방지, 클라이언트는 빠른 속도 서비스 제공 가능 프록시 종류?..
[강좌] 개발자를 위한 ChatGPT 프롬프트 엔지니어링 - Andrew Ng 개발자를 위한 ChatGPT 프롬프트 엔지니어링 서론 앤드류 응 교수님과 OpenAI의 Cookbook 공식 가이드를 만드신 직원분이 1시간 정도 되는 짧은 강의랑 무료로 출시해서 바로 시청하게 되었다. 이번 포스팅은 해당 강의를 보고 간략하게 남겨본다. ChatGPT Prompt Engineering for Developers What you’ll learn in this course In ChatGPT Prompt Engineering for Developers, you will learn how to use a large language model (LLM) to quickly build new and powerful applications. Using the OpenAI API, you’ll.....
꼬리에 꼬리를 무는 웹 스크래핑/크롤링 이야기 꼬리에 꼬리를 무는 웹 스크래핑/크롤링 이야기 웹 스크래핑 vs 크롤링 차이점은 뭐지? 웹에서 데이터를 수집하는 기술로, 비슷한 개념이지만 목적과 수행 방식에서 차이가 있음 크롤링은 웹페이지 간의 링크를 자동으로 탐색하는 과정 스크래핑은 웹 페이지에서 특정 데이터를 추출하는 과정 웹 페이지 간의 링크를 따라 자동으로 탐색한다는 게 뭔가? 웹크롤러(또는 스파이더)가 웹 페이지에 있는 하이퍼링크를 사용해 페이지를 이동하면서 데이터를 수집하는 과정 수집된 웹 페이지들은 검색 엔진의 인덱싱 과정을 거쳐 검색 결과를 볼 수 있음 웹 페이지에 있는 하이퍼링크는 허곰의 코딩블로그 검색 엔진의 인덱싱 과정 수집한 웹 페이지 데이터를 분석 -> 저장 -> 정렬해서 사용자에게 적절한 검색 결과를 제공할 수 있는 구조로 만..
전혀 모르고 있다가 파이썬 3.12가 나왔다길래 읽어봤다는 내용 전혀 모르고 있다가 파이썬 3.12가 나왔다길래 읽어봤다는 내용 물론 7번째 알파 릴리즈 버전이었다. 오류메시지가 굉장히 친절해졌다 첫 번째, 아래 코드를 3.11과 3.12.0a7에서 동작시켜봄 class A: def __init__(self): self.blog = '허곰의 코딩블로그' def Blog(self): somethin = blog a = A() print(a.Blog()) NameError 3.11 버전 3.12 버전 그리고 이름이 살짝 틀린 모듈 임포트 from collections import chainmap ImportError 3.11 버전 3.12 버전 결론 친절함 폼 미쳤다..
왜 웹 브라우저 자동화 도구(Selenium, Pupeteer)는 로그인 상태가 유지되지 않는가? 왜 웹 브라우저 자동화 도구(Selenium, Pupeteer)는 로그인 상태가 유지되지 않는가? 때는 타오바오 중국 쇼핑몰 파싱 하던 도중, 타오바오 특징이 로그인을 안 하면 쇼핑 검색을 할 수가 없어서 로그인 부터 자동화를 시도했다. 로그인 과정에서 슬라이딩 캡차?가 존재하는데, 흠.. 헛짓거리의 흔적.. // 슬라이더 요소의 위치와 크기를 얻습니다. const sliderElement = await page.$('selector'); const sliderBox = await sliderElement.boundingBox(); ... // 슬라이더의 시작점으로 마우스를 이동합니다. const sliderStartX = sliderBox.x + sliderBox.width / 2; const slid..