반응형

 

https://marketplace.visualstudio.com/items?itemName=donebd.rest-client-api

 

REST Client Api - Visual Studio Marketplace

Extension for Visual Studio Code - REST Client for Visual Studio Code

marketplace.visualstudio.com

 

Postman 처럼 Rest api 를 호출할수 있게 해주는 툴인데 응답에 대한 내용을 저장해서 사용할수 있어서 최근 자주 사용하고 있다. 기본 사용방법은 도큐먼트에 잘 나와있기 때문에 생략하고 그중에서 내가 자주 사용하는 기능만 기술해보겠다. 

  • 변수 할당
### Hello World
# @name hello-world
GET {{local_base_url}}
Content-Type: application/json


###
@hello_world_res={{hello-world.response.body.Hello}}

응답
HTTP/1.1 200 OK
date: Mon, 29 Apr 2024 07:18:44 GMT
server: uvicorn
content-length: 17
content-type: application/json
Connection: close

{
  "Hello": "World"
}

@local_base_url : @ 표시를 사용해서 변수를 할당 할수 있다. 그리고 사용시에는 {{}} 를 이용해서 사용한다.
### Hello World : 각각의 api 는 ### 으로 구분된다.
# @name hello-world : 응답을 저장할 경우 사용한다. hello-world 에 대한 응답을 접근 하려면 hello-world.response.body 로 접근을 해야 하며 그중 Hello 에 대한 값을 꺼내기 위해 {{hello-world.response.body.Hello}} 라고 정의를 해준다. 그렇게 되면 @hello_word_res 에는 World 라는 값이 할당되서 다른 api 에서 변수로 활용할 수 있다. 

  • Multipart/form-data 사용
@app.post("/upload-files")
def upload_files(files: list[UploadFile]):
    return {"files": list(files)}

### 업로드 
POST {{local_base_url}}/upload-files
Content-Type: multipart/form-data; boundary=----boundary

------boundary
Content-Disposition: form-data; name="files"; filename="test-01.png"
Content-Type: image/png

< C:/test-01.png
------boundary


응답
HTTP/1.1 200 OK
date: Mon, 29 Apr 2024 07:38:39 GMT
server: uvicorn
content-length: 357
content-type: application/json
Connection: close

{
  "files": [
    {
      "filename": "test-01.png",
      "file": {
        "_file": {},
        "_max_size": 1048576,
        "_rolled": false,
        "_TemporaryFileArgs": {
          "mode": "w+b",
          "buffering": -1,
          "suffix": null,
          "prefix": null,
          "encoding": null,
          "newline": null,
          "dir": null,
          "errors": null
        }
      },
      "size": 10821,
      "headers": {
        "content-disposition": "form-data; name=\"files\"; filename=\"test-01.png\"",
        "content-type": "image/png"
      }
    }
  ]
}

이 API 는 files 라는 항목으로 multipart/form-data 를 받고 있다. file 은 list 형태로 여러개를 넣을수 있게 되어있다.
Content-Desposition: 이 곳에 form-data 로 들어갈 files 와 filename 을 정의한다. 현재 form-data 의 key 는 files 로 api에서 정의했기 때문에 name 은 files, filename 은 실제 파일 이름을 정의해준다. 그리고 > 을 사용해서 실제 파일 경로를 정의해준다. 
만약 파일을 여러개 추가 하고 싶다면 boundary 아래에 동일하게 추가해주면 된다.

  • Curl 로 저장
    F1 키를 누른 후 > Rest Client: Copy Request As cURL 을 입력하면 실행했던 API 가 Curl 로 저장된다. 아래는 첫번째 Hello world 를 실행후 Copy 한 내용을 붙여넣은 것이다.
curl --request GET --url http://localhost:8000/ --header 'content-type: application/json' --header 'user-agent: vscode-restclient'

 

728x90
반응형
반응형

산지는 오래됐지만 이제서야 해보려고 DLC 를 설치하고 진행을 해보려고 했으나 왜인지 진행이 안됐다. 인터넷 검색 해봐도 DLC 시작을 하면 사일러스가 연락이 오고 메인 퀘스트가 시작된다고 하던데.. 대체 뭐가 잘못 된것인지...

1. 설치를 다시 해봤다.
그랬더니 게임 저장한것을 불러오니  DLC 가 설치 되었다는 창은 떴다. 그래도 사일러스에게는 감감 무소식
2. 기지로 이동.
혹시 몰라서 기지로 이동을 해봤다. 그랬더니 오~~ 드디어 사일러스한테 연락이 왔다. 

이것때문에 대체 몇시간 동안 삽질을 한건지.. ㅡ,.ㅡ;;;
결론 : DLC 설치후 진행이 안된다면 기지로 가보자!!!

728x90
반응형
반응형

Pycharm 을 사용할때 가끔 Find in Files 로 검색을 했을때 venv 폴더 하위의 내용까지 검색이 되서 불편함이 있었다. 어떻게 하면 제외 시킬수 있을지 찾다가 방법을 찾았다.

먼저 session 이란 키워드로 검색을 해봤다. 이 키워드는 많이 사용되는 키워드 이기 때문에 라이브러리 안에서도 많이 발견이 된다. 정작 내가 직접 작성한 코드에는 어떻게 되어있는지 찾기가 힘들다.

우선 첫번째 방법으로 .venv 폴더를 선택한후 나오는 콘텍스트 메뉴에서 Mark Directory As 메뉴로 가서 .venv 를 exclude 해준다.

그리고 나서 검색을 해보면 아래와 같이 내가 작성한 파일들에서만 검색이 된다.

두번째 방법으로는 Settings > Project > Project Structure 메뉴로 가서 exclude files 를 다음과 같이 설정해주면 된다.

만약 venv 환경이 여러개 있을 경우 첫번째 방법은 각각의 폴더에 대해서 설정을 해줘야 하지만 두번째 방법은 한번에 처리가 가능 하다. 

꼭 venv 말고도 다른 lock 파일들이 검색되는 것을 막고 싶다면 위와 동일한 방법으로 해주면 된다.

 

728x90
반응형
반응형

FastAPI 와 Pydantic 을 이용해서 API 작성을 하면서 request body로 들어오는 값의 존재 유무에 따라서 어떻게 세팅 되는지 확인이 필요했다.

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool | None = True
    address: str = "seoul"
    address1: str | None = None


@app.post("/items")
def insert_item(item: Item):
    return item

아주 간단한 API 이다. name 과 price 는 필수 값이고 is_offer 는 bool 타입으로 None 이 허용된다.

1. name, price 만 존재할 경우 -> 필드가 존재 하지 않을 경우 default 값으로 설정된다. 

 
{
    "name": "test",
    "price": 500.0,
    "is_offer": true,
    "address": "seoul",
    "address1": null
}

2. is_offer 에 null 이 들어간 경우 -> null 그대로 리턴 (None 을 허용했기 때문)

{
    "name": "test",
    "price": 500.0,
    "is_offer": null,
    "address": "seoul",
    "address1": null
}

3. address 에 null 이 들어간 경우 -> Error

{
    "detail": [
        {
            "type": "string_type",
            "loc": [
                "body",
                "address"
            ],
            "msg": "Input should be a valid string",
            "input": null,
        }
    ]
}

4. 결론
None 을 허용할 경우 값이 null 이 허용된다. 하지만 null 경우 default 값으로 값이 설정되지는 않는다. 그냥 null 로 설정된다.

 

728x90
반응형

'Development > Python' 카테고리의 다른 글

맥(Mac)에서 아나콘다(Anaconda) 제거하기  (0) 2023.08.11
머신러닝 관련 용어  (0) 2023.06.12
colab 에서 kaggle 설정  (0) 2023.06.07
Pandas 사용  (0) 2023.05.23
NumPy 사용  (0) 2023.05.09
반응형

리눅스에서 명령어를 사용하다 보면 결과 값을 다른 명령어로 전달하고 싶은 때가 있다. 내 경우에는 k8s pod 이름을 다른 명령어로 전달 하고 싶었다.

찾아보니 xargs 라는 명령어가 있었다.

xargs = eXtended ARGuments 
- 사용 방법 : xargs [options][command][arguments]
- 옵션 : 여러가지가 있는데 내가 사용해본 옵션만 적겠다.
  -i : 원하는 위치에 인자 입력하기  - 인자를 입력하고 싶은 위치에 {} 를 입력하여 지정할수 있다. 
  -v : 실행된 명령어 확인하기

 

k get pod -o=custom-columns='DATA:metadata.name' | grep test-[0-9] | xargs -i -t kubectl get po {}
kubectl get po test-67b7988799-j8gks
NAME                                        READY   STATUS    RESTARTS   AGE
test-67b7988799-j8gks   1/1     Running   0          17h

1. k get pod -o=custom-columns='DATA:metadata.name'  : k8s pod 이름을 검색한다.
2. grep test-[0-9] | : pod 이름중 "test-숫자" 라는 패턴의 pod 이름을 검색한다.
3. xargs -i -t kubectl get po {}검색한 pod 이름을 {} 에 넣어준다.
4. kubectl get po test-67b7988799-j8gks : -t 옵션에 의해서 실행된 명령어를 확인할 수 있다.

 

728x90
반응형
반응형

특정 브랜치에 있는 지정된 commit 내용을 가져오려고 할때 cherry pick 을 사용한다. 
내가 주로 사용하는 경우는 다음과 같은 경우이다.

1. 현재 메인 브랜치 : develop
2. 운영 태그 : release-tag-2024

보통 개발을 하면 develop 브랜치 기준으로 브랜치를 만들어서 feature 브랜치를 만들고 개발을 한다. 그런데 가끔 운영에 급히 반영을 하거나 버그 픽스를 해야 할 경우가 있다. 이때에 이런 순서로 작업을 했다.

1. 운영태그 기준으로 hotfix 브랜치 생성
2. hotfix 브랜치에서 수정을 한 후 운영에 반영
3. 운영 반영 후에 hotfix 브랜치에 있는 commit 내용들을 develop 브랜치로 이동 -----> 이때 cherry-pick 을 사용한다.

cherry pick 옵션들은 아래처럼 여러가지가 있다.

내가 주로 사용했던 옵션은 -m 옵션이었다. 이 옵션을 통해서  merge 커밋도 cherry pick 이 가능 해진다.

 

728x90
반응형

'Development > Git' 카테고리의 다른 글

Git Contribute 절차  (0) 2021.12.10
다른 브랜치에서 pull 하면 어떻게 될까???  (0) 2020.12.07
github page 에 테마 설치  (0) 2020.10.20
github 에 page 만들기  (0) 2020.10.15
Git local, remote branch 삭제  (0) 2020.09.08
반응형

우리는 가끔 소프트웨어를 개발만 잘 하면 된다라고 착각을 한다. 그래서 운영 이라는 거대한 산을 간과하는 경우가 많이 생긴다. 모든 소프트웨어는 운영에 들어가기 전에 많은 테스트와 검증을 거쳐서 실제 운영에 들어가게 된다. 그래서 이때에 개발할때는 생각하지 도 못했던 버그나 오류들이 발생하게 된다. 검사 방법과 환경에 따라서 다양한 상황들이 발생하기 때문에 어떻게 대처를 해야 하는지 방법을 한참 찾아봐야 할 때도 있다. 그런 면에서 이 책은 포괄적인 가이드라인을 제공 해주고 있다.

책 읽어보면 느끼겠지만 운영전 검증에 필요한 요소들이 다 들어있다. 그리고 사례들을 여러가지 예로 들어줘서 더 현실감이 느껴졌다.

우선 1부에서는 안정적인 어플리케이션을 위한 여러가지 패턴에 대해서 이야기 해준다. 4장에서 안티패턴을 먼저 알려주고 5장에서 적절한 패턴에 대해서 설명을 해준다. 

2부는 특히 내가 경험했던 일들과 연관들이 많아서 더 재미있었다. 부하, 보안, 로그, 모니터링등 개발을 하면서 많이 경험해봤던 내용들이 많이 있었다. 그리고 내가 몰랐던 내용들도 많이 알수 있었다.

3부에서는 배치와 버전관리에 대해서 나온다. 특히 버전관리는 설계시에는 그럴듯하게 만들어놓지만 점점 유명무실 해지는 상황을 많이 경험했는데 역시나 이렇게 하면 안된다는 것을 다시한번 느낄수 있었다. 

각각의 내용들은 챕터에 따라서 나눠져 있기 때문에 굳이 처음부터 읽을 필요는 없고 궁금하거나 관심있는 부분부터 읽어도 아무런 문제가 되지 않는다. 그래서 약간은 백과사전 같은 느낌으로 두고두고 읽어도 좋을 것 같다는 생각이 들었다.

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

챗GPT 가 요즘 핫하다는것은 많은 사람들이 알고 있다. 하지만 챗GPT가 어떻게 동작하고 있는지 알고 있는 사람은 많지 않다. 내용을 알기에는 알아야 하는 것들이 많다. 그리고 수학, 통계, 프로그래밍, 전문 용어들을 이해하는 단계가 필요해서 그저 사용성에만 관심을 기울이게 된다. 하지만 이 책을 읽고나면 챗GPT 의 동작을 이해하는데 좀더 수월해 질 수 있다. 

이 책은 총 200 페이지 정도 되지만 부록을 제외하면 130 페이지정도 된다. 두껍지 않기 때문에 출퇴근 시간을 이용해서 충분히 읽을수 있을 정도이다. 그리고 우선 수식이 많지 않아서 소설책 읽듯이 쭉 읽어내려가면된다. 특히 1장은 GPT 에 대한 이론적인 내용들을 자세히 담고 있다. 신경망과 임베딩, 트레이닝등 빠지면 안되는 내용들이 다 담겨있다. 그렇기 때문에 1장은 꼭 빠짐없이 읽기를 추천한다. 

2장과 부록을 통해서는 실습을 해볼 수있다. 물론 GPT 플러스를 사용해서 플러그인을 사용할 수 있어서 제약이 있긴 하지만 유료사용자가 아니라면 한번 참고 삼아 읽어보는것도 나쁘진 않을것 같다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

728x90
반응형
반응형

생성형 AI 에 대한 관심이 많아지고 이 분야를 공부하고 있었는데 마침 좋은 책이 리뷰도서 목록에 있어서 선택하게 되었다. 아무래도 분야가 넓고 수학, 통계, 프로그래밍 등이 섞여서 나오다 보니 무엇이 기초인지, 또는 무엇부터 공부를 해야 되는지 알기가 쉽지가 않았다. 그런데 다행히도 이번에 선택한 책을 보면서 전반적인 지식을 습득할 수 있게 되었다. 

이 책에는 이론도 나오고 프로그래밍에 대한 구현도 나온다. 그리고 수학 공식들도 나온다. 하지만 아래 그림처럼 자세한 설명을 해주고 있기 때문에 이론적인 내용을 이해하는데 큰 도움이 된다. 

파이썬 코드들도 중간중간 나오면서 따라 하면서 실습을 해볼 수 있다. 하지만 코드가 익숙하지 않더래도 코드부분은 생략하고 내용만 읽어간다면 기초 지식을 충분히 쌓을 수 있다.  

하지만 이 책을 가장 효율적으로 사용하는 방법은 실습과 병행하는 것이다. 이 책의 뒷부분으로 갈수록 코드도 길어지고 그래프와 공식들이 많이 나온다. 이런 부분들을 이해하기 위해서는 어느정도 파이썬 코드에 대한 이해가 필요하다. 

이 책은 많은 그림과 설명으로 독자들이 이해를 하는데 돕고 있는 책인것은 확실하다. 그리고 이 책을 이해하기 위해 독자가 갖추어야 하는 최소한의 지식으로는 파이썬 코드를 이해할수 있는 능력 정도가 될것 같다. 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형

+ Recent posts