Posts
Posting
15 posts
post
0 comments
0 votes
csv 파일을 pandas의 데이터프레임으로 변환할 때는 pandas의 read_csv 함수를 사용하면 변환할 수 있습니다. 그런데, 다음과 확장자가 없는 파일도 read_csv 함수로 읽을 수 있습니다. ![txt파일](https://i.esdrop.com/d/f/KaciQbeuKZ/NRnwXYQWzR.png) 이 문서는 단어 사이가 tab으로 구분되어 있습니다. 따라서, delimiter(구분자)를 `\t`으로 설정해줘야 합니다. ``` import pandas as pd file = pd.read_csv('test', delimiter = '\t') print(file) ``` 데이터프레임으로 잘 변환된 것을 확인할 수 있습니다. ![데이터프레임](https://i.esdrop.com/d/f/KaciQbeuKZ/6HR6Pc1uvh.png)
Kyohoon Sim posted at 2023-04-18 11:00:26
post
0 comments
0 votes
vscode에서도 Remote - SSH 익스텐션을 활용하면 쉽게 ssh 접속이 가능합니다. 1) 먼저, remote - ssh 익스텐션을 설치하세요. 2) 그 다음에는 F1 키를 누른 다음 검색창에 ssh를 입력하면 나오는 `Remote-SSH: Open SSH Configuration File...`을 클릭합니다. 3) 접속하고자 하는 원격 서버 정보를 입력합니다. ``` Host [alias] HostName [ip 주소] User [유저명] Port [포트번호] IdentityFile [pem키 위치] ``` ![ssh-remote1](https://i.esdrop.com/d/f/KaciQbeuKZ/ULv0VNKV0g.png) 4) Remote Explorer를 클릭한 후 원격 서버 IP 주소에 마우스 커서를 올리면 나오는 화살표 버튼 또는 새창 버튼을 클릭하면 해당 서버에 SSH 연결이 됩니다. ![ssh-remote2](https://i.esdrop.com/d/f/KaciQbeuKZ/rkDsNHnswI.png) 이제 신나게 개발을 하시면 됩니다.
Kyohoon Sim posted at 2023-04-17 16:41:31
post
0 comments
0 votes
API 서버에 어떤 것을 요청하면 보통 JSON의 형태로 응답을 받습니다. 오늘은 JSON 내 배열에서 특정 키의 값으로 배열을 만드는 방법에 대해 살펴보도록 하겠습니다. ## JSON 내 배열에서 특정 키의 값으로 배열 만드는 방법 우선 다음과 같은 JSON 데이터가 있다고 가정하겠습니다. ``` var a = { "page_views":[ {"date":"2023-04-10", "views":2050}, {"date":"2023-04-11", "views":3123}, {"date":"2023-04-12", "views":4321}, {"date":"2023-04-13", "views":918}, {"date":"2023-04-14", "views":5444} ] }; ``` 여기서 page_views 내 date 값들로만 배열을 만들려면 다음과 같이 코드를 작성하면 됩니다. ``` var date = a.page_views.map(function(e) {return e.date;}); ``` ![date](https://i.esdrop.com/d/f/KaciQbeuKZ/F6sQHnvIcR.png) 이번에는 views 값들로만 배열을 만들어보겠습니다. ``` var views = a.page_views.map(function(e) {return e.views;}); ``` ![views](https://i.esdrop.com/d/f/KaciQbeuKZ/M0A4irqPKh.png) chart.js 등으로 각종 chart를 그릴 때 이런 식으로 변환할 일들이 있어서 정리해봤습니다.
Kyohoon Sim posted at 2023-04-17 09:04:32
post
0 comments
0 votes
javascript에서 문자열 중 일부만 잘라서 선택하고 싶을 때는 `slice()` 메소드를 사용할 수 있습니다. "심교훈입니다"라는 문자열이 있다고 가정하겠습니다. 이 중 "심교훈"만 잘라내고 싶다면, 다음과 같이 0, 3을 인수로 넣어주면 됩니다. 첫번째 인수는 begin 인덱스를 두번째 인수는 end 인덱스(end 미포함)를 뜻합니다. ![slice](https://i.esdrop.com/d/f/KaciQbeuKZ/jPVPNJgjZY.png) 위 예시들을 통해 `slice()` 메소드를 어떻게 사용하는지 충분히 이해하셨을 것이라 생각합니다. ### 참고자료 [1] [https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/slice](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/slice)
Kyohoon Sim posted at 2023-04-16 22:51:54
post
0 comments
0 votes
javascript에서 숫자를 소수점 아래 두번째 자리까지 반올림하고 싶다면, toFixed() 메소드를 사용할 수 있습니다. ``` 숫자.toFixed(2) ``` ![toFixed](https://i.esdrop.com/d/f/KaciQbeuKZ/GVMwWVbzDl.png) 주의할 것은 반올림한 결과는 문자열이라는 점입니다.
Kyohoon Sim posted at 2023-04-14 19:32:31
post
0 comments
0 votes
python의 pandas 데이터프레임을 활용하여 피어슨 상관계수를 구하는 방법에 대해 살펴보겠습니다. df라는 이름의 데이터프레임에 col1이라는 컬럼과 col2라는 컬럼이 있다고 할 때, 피어슨 상관계수는 다음과 같이 구할 수 있습니다. ``` corr = df['col1'].corr(df['col2'], method='pearson') ``` 참고로 상관계수는 절대값으로 1에 가까울 수록 두 변수 간에 상관성이 강한 것이고, 0에 가까울 수록 상관성이 약한 것입니다.
Kyohoon Sim posted at 2023-04-14 19:20:06
post
0 comments
0 votes
웹 사이트 또는 API 서버를 개발 중이라면, 이 사이트가 얼마나 많은 트래픽을 동시에 처리할 수 있는지 확인해보는 것이 좋습니다. 그래야 어느 정도의 트래픽을 감당할 수 있는지 예상을 할 수 있고, 그에 맞는 서버 스펙을 선정할 수 있기 때문입니다. 오늘은 wrk라는 툴로 부하 테스트하는 방법에 대해 살펴보겠습니다. wrk는 단일 멀티코어 CPU에서 실행할 때 상당한 부하를 생성할 수 있는 최신 HTTP 벤치마킹 도구입니다[1]. ## wrk 설치하기 먼저 wrk를 리눅스 서버에 설치하도록 하겠습니다. 다음 명령을 순차적으로 실행하세요. 1. sudo apt install make gcc unzip git libssl-dev 2. git clone https://github.com/wg/wrk.git 3. cd wrk 4. make 5. sudo cp wrk /usr/local/bin ## get 부하테스트 get 요청을 받을 수 있는 엔드포인트에 부하테스트를 해보겠습니다. 현재 여러분이 이용하고 계시는 asksim.co.kr에 해보겠습니다. 다음과 같은 명령을 실행하시면 됩니다. ``` wrk https://asksim.co.kr ``` ![wrk1](https://i.esdrop.com/d/f/KaciQbeuKZ/BZu3IxkilT.png) 이 엔드포인트는 초당 974개의 요청을 처리할 수 있음을 확인할 수 있습니다. 10초간 2개의 쓰레드, 10개의 connection을 연 상태로 테스트를 한 결과입니다. 테스트 시간과 사용할 쓰레드 개수와 열어둘 connection의 개수를 지정하고 싶다면, 다음과 같이 옵션을 추가해서 명령을 날리면 됩니다. 이번에는 로그인 엔드포인트에 부하테스트를 하겠습니다. 10 쓰레드, 100 connection, 30초 ``` wrk -t10 -c100 -d30s https://asksim.co.kr/auth/login ``` ![wrk2](https://i.esdrop.com/d/f/KaciQbeuKZ/SED8kjZxYj.png) wrk에서 사용할 수 있는 전체 옵션들은 다음과 같습니다[1]. ``` -c, --connections: total number of HTTP connections to keep open with each thread handling N = connections/threads -d, --duration: 테스트 기간, e.g. 2s, 2m, 2h -t, --threads: 사용할 쓰레드 총 개수 -s, --script: LuaJIT 스크립트 사용할 시 파일 경로 앞에 붙여줌 -H, --header: 요청에 붙일 HTTP 헤더, e.g. "User-Agent: wrk" --latency: 상세한 latency 통계 출력 --timeout: record a timeout if a response is not received within this amount of time. ``` ## post 부하테스트 이쯤이면 wrk로 post 요청을 받는 엔드포인트에 어떻게 부하테스트를 할 수 있을지 궁금하실 것입니다. lua라는 파일 확장자를 가진 파일(LuaJIT 스크립트)을 하나 작성해줘야 합니다. post.lua라는 스크립트를 하나 만들고(파일명은 post가 아닌 다른 거라도 상관없습니다), 그 안에 다음과 같은 내용을 작성합니다. 여러분의 상황에 맞는 내용을 담으시면 됩니다. ``` wrk.method = "POST" wrk.headers["content-type"] = "application/json" wrk.body = '{"key1": "value1", "key2": "value2"}' ``` 그 다음에 다음과 같은 명령을 수행하면 POST 요청으로 부하 테스트를 할 수 있습니다. ``` wrk -t10 -c100 -d30s http://localhost:8001/test -s post.lua ``` ### 참고자료 [1] [https://github.com/wg/wrk](https://github.com/wg/wrk)
Kyohoon Sim posted at 2023-04-04 09:17:08
post
0 comments
0 votes
마크다운을 html 요소에 적용하고 싶을 때 사용할 수 있는 자바스크립트 라이브러리 중에 제가 사용해본 것은 [marked.js](https://github.com/markedjs/marked), [simplemde.js](https://simplemde.com/)입니다. 현재 이 사이트에는 simplemde.js를 활용하여 마크다운을 적용했습니다. 오늘은 marked.js를 활용하여 마크다운을 html 요소에 적용하는 방법에 대해 살펴보도록 하겠습니다. ## marked.js 사용법 test라는 아이디를 가진 div 요소가 있다고 하면, 다음과 같이 html 문서를 작성하면 해당 요소에 마크다운이 적용됩니다. ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="test"></div> <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> <script> document.getElementById('test').innerHTML = marked.parse('# 제목\n\n안녕하세요. **bskyvision**입니다.\n\n[bskyvision](https://bskyvision.com)에 놀러오세요.\n\n```print("hello world")```'); </script> </body> </html> ``` `marked.min.js`를 임포트하여 marked.parse() 함수를 통해서 마크다운을 적용하였습니다. 결과적으로 다음과 같은 html 문서가 렌더링 됩니다. ![마크다운적용결과](https://i.esdrop.com/d/f/KaciQbeuKZ/jS6NKQkdi1.png)
Kyohoon Sim posted at 2023-03-31 21:08:46
post
0 comments
0 votes
유저의 비밀번호를 암호화할 때는 단방향 해시 함수를 많이 사용합니다. 단방향이기 때문에 암호화는 가능하지만 복호화는 불가능합니다. 단방향 해시 함수 중에 많이 사용하는 알고리즘이 `sha256`입니다. 1) sha은 `secure hash algorithm`의 약어입니다. 2) 256이 붙은 이유는 암호화된 결과가 256비트로 구성되기 때문입니다. 64자리의 16진수 문자열이 반환됩니다. 16진수 1자리는 4비트를 차지합니다. 이진수 0000부터 1111까지가 16진수로 0~F이기 때문입니다. 파이썬에서 sha256 알고리즘으로 암호화를 하고 싶을 때는 `hashlib` 모듈을 사용할 수 있습니다. 표준 라이브러리이기 때문에 별도의 설치가 필요하지 않습니다. test1234 라는 비밀번호를 sha256 알고리즘으로 암호화해보겠습니다. ``` import hashlib pw = b"test1234" m = hashlib.sha256() m.update(pw) hashed_pw = m.hexdigest() print(hashed_pw) ``` test1234라는 문자열은 결과적으로 다음과 같이 암호화됩니다. ``` 937e8d5fbb48bd4949536cd65b8d35c426b80d2f830c5c308e2cdec422ae2244 ```
Kyohoon Sim posted at 2023-03-31 13:52:42
post
0 comments
0 votes
# http 클라이언트 프로그램 httpie 사용법 정리 FastAPI, Flask 등으로 API 서버를 개발하고 있다면, 요청에 대해 API 서버가 어떻게 응답하는지 계속해서 테스트해야 합니다. 그때 사용할 수 있는 대표적인 CLI 프로그램에는 curl이 있습니다. 오늘은 저 개인적으로 curl보다 사용법이 간단하다고 생각되는 HTTPie를 소개해드리도록 하겠습니다. HTTPie는 보통 `에이치티티파이`라고 부릅니다. 우선 HTTPie를 pip로 설치하려면 다음 명령을 실행하시면 됩니다. ``` pip install httpie ``` ## get 요청 만약 get 요청을 날리면 pong을 응답해주는 `/ping`이라는 엔드포인트가 있다면, 다음과 같이 명령을 작성하시면 됩니다. ``` http -v GET localhost:5000/ping ``` 헤더에 Access Token을 담아서 요청을 해야한다면, 다음과 같이 Authorization 헤더를 추가해줘야 합니다. ``` http -v GET localhost:5000/ping Authorization: "Bearer accesstoken" ``` ## post 요청 id, password를 body에 담아서 post 요청을 던지면 회원가입을 수행하는 `/sign-up`이라는 엔드포인트가 있다고 가정한다면, 다음과 같이 명령을 작성하면 됩니다. ``` http -v POST localhost:5000/sign-up id=testid password=testpw1234 ``` ## 참고자료 [1] [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) [2] [https://bskyvision.com/entry/http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-httpie%EC%99%80-postman-%EC%86%8C%EA%B0%9C](https://bskyvision.com/entry/http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-httpie%EC%99%80-postman-%EC%86%8C%EA%B0%9C)
Kyohoon Sim posted at 2023-03-31 12:34:12
Copyright © AskSim. All rights reserved.