728x90
반응형
#!/bin/bash


# 원하는 시작 날짜
START=20211031


# 원하는 종료 날짜
END=20220522


CURRENT="$START"



while [ "$CURRENT" != "$END" ]; do

    hadoop fs -rm -r /user/table/mydb.db/mytable/pt=$CURRENT

    CURRENT=`date -d "$CURRENT 1 day" +"%Y%m%d"`

done
728x90
반응형
728x90
반응형

자꾸 까먹어서 정리

hdfs 파일 삭제

> hadoop fs -rm -skipTrash {경로}

 

hdfs 디렉터리 삭제

> hadoop fs- rm -r -skipTrash {경로}

 

-skipTrash를 써주면 휴지통 거치지 않고 바로 삭제됨

728x90
반응형
728x90
반응형

사내 스터디 세미나로 준비한 자료 정리

 

Go 언어를 활용한 마이크로서비스 개발

2장 좋은 API 디자인하기


api 규약 작성이 매우 중요하며 어려움

RESTful API

  • REpresentational State Transfer(표현적 상태 전송)
    • 컴포넌트(서비스 단위) 간 상호작용의 확장성, 범용적인 인터페이스, 컴포넌트의 독립적인 배포를 강조하며 응답 지연시간 감소, 보안 강화, 레거시 시스템의 캡슐화를 위한 중간 컴포넌트 역시 강조한다.

URI, URN, URL

  • RFC 3986
  • URI 형식 지정의 규칙
    • 슬래시(/)는 리소스 사이의 계층적 관계를 나타내는 데 사용
    • URI의 마지막에 슬래시가 포함되어서는 안된다.
    • 하이픈(-) 사용, _ 사용 x
    • 대소문자 구분하므로 소문자 사용 권장

URI 경로

표현설명비고

GET /cats 모든 고양이 컬렉션 명사로 명명
GET /cats/1 1번 고양이를 위한 하나의 문서 db의 행과 비슷. 하위 리소스를 가질 수 있음
GET /cats/1/kittens 1번 고양이의 모든 새끼 고양이들  
POST /cats/1/feed 1번 고양이에게 먹이 주기 컨트롤러: 하위 경로가 없는 URI의 마지막 부분, 동사 사용
POST /cats/1/feed?food=fish 1번 고양이에게 물고기를 먹이로 주기 컨트롤러의 매개변수
PUT /cats/2 2번 고양이 추가(새로운 URI 생성이 아닌 리소스 추가 저장) 컬렉션과 마찬가지로 명사로 명명

REST URI 디자인

  • DELETE /cats/1234: 좋은 예
  • GET /deleteCat/1234: 나쁜 예
  • POST /cats/1234/delete: 나쁜 예
  • HTTP 동사
    • GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS

응답코드

  • 요청의 성공이나 실패를 클라이언트에게 알려주기 위한 HTTP 응답 코드
  • 즉각적으로 요청의 상태를 알 수 있게 설계

나쁜 응답

POST /kittens RESPOSNE HTTP 200 OK { "status": 401, "statusMessage": "Bad Request" }

POST /kittens RESPOSNE HTTP 200 OK { "id": "123434jvjv4564", "name": "Fat Freddy's Cat" }

  • 좋은 응답은 HTTP 상태 코드를 문자 그대로 사용하는 것

실패 응답의 좋은 예

POST /kittens RESPONSE HTTP 400 BAD REQUEST { "errorMessage": "Name should be between 1 and 256 characters...." }

성공한 응답의 좋은 예:

POST /kittens RESPONSE HTTP 201 CREATED { "id": "123434jvjv4564", "name": "Fat Freddy's Cat" }

HTTP 상태 코드

  • 구글에 더 자세하게 나와있지만 간략하게 정리
  • 200 OK: 요청이 성공했음을 나타내는 일반적인 응답 코드
  • 201 Created(생성): 요청이 성공하고 새 엔티티가 생성된 경우의 응답
  • 204 No Content: 내용 없음. 클라이언트의 요청이 잘 처리되었지만 본문은 없음. DELETE 요청에 대한 응답이 될 수 있음
  • 3xx: 경로 재지정.
  • 4xx: 클라이언트 에러
    • 400 Bad Request / 401 Unauthorized / 404 Not Found / ...
  • 5xx: 서버 오류

mozilla 상태코드 참고 사이트

HTTP 헤더

  • 표준에 맞추면 모두에게 도움이 된다!
  • 표준 요청 헤더
    • 요청에 대한 메타 데이터 개념
    • 요청 및 API 응답에 대한 추가 정보 제공
  • Authorization - 문자열
    • 권한 부여: Authorization key 요청
    • 이런 표준 접근 방식을 따르면 클라이언트가 알아서 구현알 수 있다는데
    • 사실 이걸 어떻게 부여하는지는 잘 모르겠습니다!
  • Date
    • 요청의 타임스탬프
  • Accept - 콘텐츠 타입
    • application/xml
    • text/xml
    • application/json
  • Accept-Encoding - gzip, release
    • REST 엔드 포인트는 가능한 경우 gzip과 deflate 인코딩을 항상 지원해야 한다.
    • gzip 지원은 간단함: 표준 라이브러리의 일부인 compress/gzip 패키지 사용
    • 뉴욕타임즈 오픈소스
    • 비손실 압축을 위한 인코딩,,
  • 에러 리턴
    • API 사용자는 에러가 발생했을 때 여러 앤드 포인트에서 발생한 에러를 처리하는 하나의 코드를 작성할 수 있어야 하는데
    • 표준 에러 엔티티를 제공함으로써 클라이언트 또는 서버로 인한 에러가 발생할 때 클라이언트를 도와줄 수 있음
    • 마이크로소프트의 API 가이드라인 자료

API 버전 관리

  • 초기부텉 고려해야하는 사항, 피할 수 있으면 피하는 것이 좋다!
  • 버전 관리가 필요한 상황
    • 주요 변경 사항이 생기면 API 버전 번호를 증가시키는데 주요 변경사항은
      1. API나 API 매개 변수의 제거 또는 이름 변경
      2. API 매개 변수의 타입 변경(정수 -> 문자열)
      3. 응답 코드, 에러 코드 또는 실패 규약 변경
      4. 기존 API 의 동작 변경
  • 시맨틱 버전 관리
    • 메이저 버전과 마이너 버전: 1.0 에서 1은 메이저, .0은 마이너
    • 마이너의 변경은 클라이언트가 API와 상호작용하는 데 영향을 주지 않음
  • REST API의 버전 관리 형식

객체 타입 표준화

  • 클라이언트에서 객체를 쉽게 처리할 수 있도록 고려
  • JSON을 사용하는 경우 기본 타입으로 날짜 개념이 없다! --> ISO 표준을 사용하는 것이 도움이 된다
    • {"date": "2021-07-08T04:52:57Z"}
    • {"date": {"kind": "U", "value": 1625719977221}

API 문서화

  1. Swagger
  • YAML로 작성
  • 배책임님께서 이전에 소개해주신 API 문서 자동화 도구!
  1. API Blueprint
  • 마크다우능로 작성돼 중첩된 레이어를 다루는 것보다 좀 더 자연스럽게 문서 작성 가능
  1. RAML
  • RESTful API Modeling Language의 약자
  • YAML로 작성

API 문서 자동화 오픈소스(https://github.com/swaggo/swag)

여러가지 참고 링크

728x90
반응형
728x90
반응형

프로그래머스 level1 문자열 다루기 기본 golang 풀이

 

요즘에는 golang을 공부하고 있다. 간단하게 프로그래머스 쉬운 문제들을 풀어보고 있는데 syntax에 익숙하지 않으니 좀 어렵기도 하다.

 

제일 쉬워보이는 문제 풀면서 문자열 좀 익숙해 지려고 해봤다. 아래는 문제 캡쳐이고,

 

아래는 내가 아스키 코드 사용하여 풀이한 코드이다. 아스키 코드 모를 때는 직접 찍어보면 된다. 다른 모듈 Import한 것 없이 길이 확인하고 숫자만 있는지 확인하고 return해준다.

func solution(s string) bool {
    if len(s) == 4 || len(s) == 6{
        for i := 0; i < len(s); i++ {
            if 48 <= s[i] && s[i] <= 57 {
                continue
            } else{
                return false
            }
        }
    }else{
        return false
    }
    return true
}

 

아래는 다른 사람의 풀이인데 strconv라는 모듈을 Import 하여 풀었다. C언어에서도 많이 봤듯이 atoi 사용하여 string to int 해주었다. 그리고 err 변수 사용하여 에러 있는지도 받아주어 에러 메시지가 들어오면 return false해주고 아니라면 true 하여 간단하게 구현했다.

import "strconv"

func solution(s string) bool {
    _, err := strconv.Atoi(s)
    if err != nil || len(s) != 4 && len(s) != 6 {return false}
    return true
}

 

고랭은 어려워~.~

728x90
반응형
728x90
반응형

Disable tensorflow warning message

 

keras model을 로드하거나 tensorflow를 import 하고 코드를 실행할 때 warning message가 거슬리게 자꾸 터미널에 나타날 때가 있습니다.

코드가 실행이 안되는게 아니라 이런 워닝 메시지가 자꾸 뜹니다. 실행은 잘 되고...

 

거슬려도 참고 테스트 하다가 이걸 좀 처리를 해줘야겠다! 해서 첫 번째 아래 시도를 해 봤습니다.

import warnings

warnings.filterwarnings(action='ignore')

흠.. 주피터 노트북에서 실행할 때는 효과가 있는 듯했지만 역시나 tensrflow 워닝은 잡아주지 못하더군요..

그래서 silence_tensorflow 라는 모듈을 import 했습니다.

> pip install silence_tensorflow

먼저 install을 해주고, 아래와 같이 사용합니다.

from silence_tensorflow import silence_tensorflow
silence_tensorflow()

from keras.models import load_model

 

그랬더니 아주 깔끔하게 워닝 메시지는 출력하지 않습니다!

모델 하나 가져오려고 하니 워닝이 막막 엄청 많아...

 

그럼 이만 :-)

728x90
반응형
728x90
반응형

파이썬에서 파이썬 호출 인자 사용하기

 

파이썬 실행 파일을 호출할 때 인자를 넘겨줘야 할 때가 있습니다.

예를 들어 호출 하며 파일 경로를 달리해 저장 또는 읽을 파일 경로를 알려줄 수 있습니다.

 

이 때는 아래와 같이 사용하시면 됩니다.

import argparse

parser = argparse.ArgumentParser(description='Argparser')
# argument는 원하는 만큼 추가한다.
parser.add_argument('path1', type=int, help='first path')
parser.add_argument('path2', type=int, help='second path')

args = parser.parse_args()

path1 = args.path1
path2 = args.path2

 

우선 argparser를 import 하고

원하는 argument를 추가하여 호출 시

> python test.py 1 2

와 같이 호출하며 1과 2는 인자입니다. 위의 예시에서는 1(파일 이름) 경로와 2(파일 이름) 경로로 이해하시면 되겠습니다.

 

질문이 있으시다면 아래 댓글을 달아주세요 :)

728x90
반응형

+ Recent posts