TEST 단계 – 개발 및 배포 단계별 테스트

뭐라고 해야할까 고민이 있었는데
테스트 전략 보다는 단계가 맞는 것 같다

서버 환경의 설정 종류

  • workstation – 개발머신에서의 구동환경
    • 로깅레벨 DEBUG, TRACE
  • server
    • 로깅레벨 INFO, WARN
    • 모니터링ON

git branch

  • devel
  • master

Phase

재구동시간 30분

  • dev – 자동으로 계속 배포되는 환경. 개발툴에서 빌드시 배포되는 툴도 많이 있고서도 배포가 가능해야한다고 보는데
    workstation, server
    근무시간 on
  • sit – 인티그레이션 테스트, 소스셋이 완성되면 자동으로 배포 및 연동테스트
    테스트시에 구축 후 구동 temporal
    workstation, server
  • uat – user acceptance testing 기획 및 프로덕트 관계자 사용성 테스트
    근무시간 on??
    server
  • stg – production 데이터를 복제해서 테스트, 이게 완벽하게 가능하려면 IaC 필수
    server
  • prd – 완전 개발환경
    server

source set

  • check – 수동 기능체크, 항목이 다 존재하는지 체크해야하는 부분.. 의존성, 설정파일 등
  • manual – 메인소스코드, 외부 API등은 유닛테스트에 포함시킬 수 없으니
  • unit test – mock, gradle unit-test, git commit, git merge devel CI
  • integration test – gradle integration-test, scenario test, testcontainer 이용, git merge devel CI
    이 단계는 develop

소스이외 관리코드

  • scenario test – testcontainer, git merge, helm 활용
  • load test – http dsl 활용, 시나리오와 유사
  • healthcheck – ping pong, curl, log
  • seed
    • init – DB schema,
    • dev – faker data
    • replica – prd -> stg 민감정보 제거

single module project

tree

multi module project

tree

REST API 주소구조

  • /board
    get – list
    post – write
    • /{id}
      get – read one
      put – modify one
      delete – remove one
    • /search
      post – search list -보통은 list에 포함
    • /batch
      get – read by ids
      post – write write write
      put – modify by ids? 일괄로 변경 할 일이…
      delete – remove by ids
route(Constants.URI_COMMENT_BASE) {
    get { }
    post { }
    route("/{id}") {
        get { }
        put { }
        delete { }
    }
    get("/search") { }
    route("/batch") {
        get { }
        put { }
        delete { }
    }
}

어떻게 할까 맨날 고민하는데 위는 표준구조로 잡아놓은 형태

rest가 되지 않는 경우는 과감히 포기

ex) 입금관련기능

  • /deposit/apply
  • /deposit/cancel
  • /deposit/confirm
  • /deposit/status

특정 도메인 영역이 있는 경우 rest API에 맞추기 힘들다

주소에 집착하지말자

  • /deposit/apply POST
  • /deposit/cancel POST
  • /deposit/confirm POST
  • /deposit/status GET

Docker – local mirror

Dockerhub 제한 발표

https://www.docker.com/pricing/resource-consumption-updates

  • 안쓰는 리포지터리 삭제
  • 다운로드 제한

클라우드를 사용하는 경우에는 aws, gcp에서 클라우드 제공하는 미러 사용
앞으로는 어떻게든 mirror가 자동으로 잡히는 방향으로 설정이 잡히겠지만
아직까지는 수동으로 설정을 해 줘야한다.

dns를 잡아서 자동으로 처리 해 버릴수도 있지만 마음대로 그렇게 했다가 오류가 발생할 가능성도 있으니
개별 서버는 개별적으로 mirror 설정을 잡아줘야 한다

로컬 proxy registry 설치

https://github.com/docker/distribution

도커 소스코드가 생각보다 잘 관리되지 않고 있는 것 같다. 의존성 때문인지
https://github.com/docker/engine
이게 도커 메인코드인데 여기도 registry가 있는데 이걸 안쓰고 위의 리포를 사용해야한다.
그리고 moby는 뭘까

보통 받는이미지를 받고 또받고 하는데 이 과정에서 서버 부하가 과도하게 가니까 이걸 로컬 프록시로 처리 해 준다. 또 컨테이너 업로드는 dockerhub, quay, ecr, 개별설치 뭐가 됐건 레지스트리를 지정하고 할테니까
PROXY가 중요

도커 커맨드라인 실행

https://maelvls.dev/docker-proxy-registry-kind/

docker run -d --name docker-proxy-registry --restart=always -p 5000:5000 -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2

docker compose

https://docs.docker.com/registry/deploying/

registry:
  restart: always
  image: registry:2
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - /path/data:/var/lib/registry
    - /path/certs:/certs
    - /path/auth:/auth

도커 데몬에 mirror에서 다운받도록 설정

도커 설정파일

  • /lib/systemd/system/docker.service 서비스실행시
  • /etc/docker/daemon.json 원래파일
  • /etc/systemd/system/docker.service.d 환경변수형태로
    https://docs.docker.com/config/daemon/systemd/

접속테스트 daemon.json, 윈도우 맥에서는 태스크아이콘에서 설정파일 편집

https서버인 경우

{
    "insecure-registries" : [
    ],
    "registry-mirrors": ["https://dockerhub-mirrror-addr.kr/"],
    "debug" : true,
    "experimental" : false
}

로컬 http로 실행하는 경우

{
  "insecure-registries": [
    "127.0.0.1:5000"
  ],
  "registry-mirrors": [
    "http://127.0.0.1:5000"
  ],
  "debug": true,
  "experimental": false
}

실행시킨 도커 로그를 켜놓은 다음
docker pull ubuntu를 해보면
로그에서 해당 서버를 통해 다운받는걸 확인할 수 있다

quay나 aws쓰는 경우에도
개발시에 자동으로 도커 이미지 받다보면
서버를 엄청 긁어댈 수도 있는데 그럴경우 속도도 더 빠르고 좋다.

Tinker Edge T 구매후기

Tinker Edge T

미니컴퓨터?? 중에서 Edge 머신러닝에 특화된 디바이스
로봇같은데다 달아놓고 쓰는용도.. 일듯?

구글 coral edge tpu 계열의 보드
https://github.com/google-coral/edgetpu
카메라 등등도 이쪽에 호환

최근 유행하는 로컬배달, 매장배달 로봇 개발 및 테스트에 사용될 수 있을까
– NAVERLABS, 배민, 트위니(유튜브 이과장 채널에서 봤었는데대전에 있는 회사..) 등등 여기저기서 만들고 있다.

이 기술이 자율주행 배송의 endpoint가 될건데
기술개발이 다른부분에 비해 쉽고 결과물이 몇년안에 나올 수 있을 것 같다.
자율주행 및 로봇기술을 검증하기 유용한 분야

NAVERLABS는 로봇의 모든 동작 데이터를 5G로 클라우드로 보낸다는 것 같은데… 세부적인 전략은 모르겠지만…. 아예 네이버클라우드로 보내는건 아니고 Edge 처리장비를 사용하겠지??
아니면 설계를 다시 해야될거고
어쨌든 확실한건 각각의 로봇에는 처리장치가 없는 것 같다. 있다면 TinkerEdge정도가 들어가면 되려나… 로봇당 단가가 30만원이 올라가는건 좀 무리이려나
이렇게 개발 로봇에 처리장치가 없는걸 뭐라고 했는데…. 대가리스(헤드리스)?

TinkerEdgeT로 얼마만큼의 데이터를 처리할 수 있을지는 안써봐서 모르겠고
CCTV관제 정도는 가능할 것 같다. 카메라를 사서 테스트 해 볼 예정

설치방법

링크들

  • https://www.asus.com/Networking-IoT-Servers/AIoT-Industrial-Solution/All-series/Tinker-Edge-T/
  • https://www.asus.com/Networking-IoT-Servers/AIoT-Industrial-Solution/All-series/Tinker-Edge-T/HelpDesk_Download/
  • https://github.com/TinkerEdgeT

기본설치순서

메뉴얼 PDF에 나오는대로 하면 되는데
옛날 안드로이드 연결할 때 했던 삽질을 또 해버렸다.
윈도우 업데이트를 해 줘야한다는것.. 드라이버 선택해서 설치 안해주면 안깔린다.

  1. https://dlcdnets.asus.com/pub/ASUS/mb/Embedded_IPC/Tinker_Edge_T/Tinker_Edge_T-Mendel-Day-V2.0.2-20200701.zip
  2. 스윗치 설정 기본값 – OXXX
  3. USBC연결
  4. HDMI연결
  5. 키보드 연결
  6. 마우스 연결
  7. 랜선연결
  8. 전원연결 노트북용 45w, 15~19v,
  9. 노트북파워 전원on
  10. 윈도우에서 띠ㅂㄹ 소리
  11. 윈도우 업데이트 – 선택적 업데이트 ASUS,Tinker 어쩌고 한거 설치
  12. flash.cmd 실행

설치하고 나면 HDMI에 화면이 표시되는데…
로딩이 끝나고
터미널 실행시키는 기능밖에 없는 좆같은 화면이 뜨는데…
키보드로 터미널을 실행시킬 수 없다
남는 마우스가 있어서 다행이다
남는 키보드도 필요하다

Mendel GNU/Linux – debian 계열

sudo apt update && sudo apt upgrade -y

8기가 플래시가 달려서 나온다
아무것도 못할 용량이라 micro-sd 카드를 추가 해 줘야할 것 같은데
속도문제는 어떨지 모르겠다

sudo shutdown -h now

심화설치순서

  1. $ sudo blkid
  2. $ sudo mkfs.ext4 /dev/mmcblk1p1
  3. $ sudo vi /etc/fstab
  4. /dev/mmcblk1p1 /data ext4 noatime,sync,defaults 0 2
  5. $ sudo mount -a

후기

  • 쉽게 쓰려면 남들이 많이 쓰는 Coral Board 쓰자
  • 아직 OS 설치밖에 안해봐서…