디버깅
디버깅이란?

- 어떻게 해야 할까?
- 바라는 상황과 실제 발생한 상황의 차이에서 발생
버그가 생기는 이유
- 사람의 실수 : 휴먼 오류
- 실행 환경 : OS, 가상 환경, 컨테이너, 하드 웨어
- 의존성 : 다른 라이브러리의 버그
- 복잡성 : 소프트웨어가 복잡해질 수록 버그 가능성 높아짐
- 커뮤니케이션 실수 : 요구가 사항이 명확하지 않거나, 서로 다르게 이해
디버깅 프로세스

문제 인식
- 무엇이 문제인지 아는 것이 중요
- 일단 환경을 확인해보자 (OS, 가상 환경, 버전)
- 재현 가능하도록 준비
- 이후 오류 메시지를 읽어보자
- 오픈소스 이름 + 오류 메시지로 검색
- 주로 Stackoverflow, 오픈 소스 Github Issue에 해답이 존재
- ChatGPT도 잘 알려줌 (100% 신뢰는 금물)
오답노트
- 오류는 보통 또 발생할 것
- 문제 상황, 오류 메세지, 해결한 방법을 작성
- 데이터화를 하자
정리
- 디버깅은 오류나 버그를 찾고 수정하는 과정
- 시간이 걸리는 것이 당연하다는 마음 가짐
- 의도적으로 여유로움을 챙기자
- 너만의 프로세스를 만들어보렴
서버 관리 Case Study
- AI, ML 엔지니어의 모델은 대부분 서버에서 동작
- 깊은 서버 관리가 아닌, 간단한 서버 관리를 다루어보자
서버
- 꼭 클라우드의 서버만 서버는 아님 (내 집 컴퓨터도 일종의 서버)
- 서버 관리는 장애를 발생시키지 않기 위함
파일 시스템

- 표준안이 존재

- 암기할 필요는 없고, 참고만 하자
디스크 문제
- 서버가 어느 환경에서 실행 중인지 확인 필요
- Cloud
- Host 머신에서 실행 여부
- Docker, 쿠버네티스와 같은 Container
- On Premise (IDC와 같은 물리적으로 접근 가능한 서버)
네트워크
- IP : 네트워크에 연결된 다른 컴퓨터의 주소
- IP 주소는 어려우니 도메인을 구매해서 설정
- DNS : 사람이 읽을 수 있는 도메인 이름 (192.0.2.44 를 www.amazon.com 으로 변환)
- Port : 포트 숫자는 Pc에 접속할 수 있는 통로
- 방화벽 : OS에 특정 IP, Port만 접속할 수 있도록 설정
ping
- 네트워크 진단시 사용
- 네트워크 상에서 서버에게 작은 패킷을보내고, 서버가 받았다는 신호로 동작
- ping + IP 주소, 도메인 이름을 입력
nslookup
- 네트워크 진단시 사용
- 특정 도메인을 찾을 수 있는지 확인 가능
nslookup google.com
- 서버에 DNS 연결이 잘 되어 있는지 1차적으로 확인 가능
netstat
- 연결된 포트 정보들을 확인
- 특정 포트만 확인할 때는, grep 명령어와 같이 활용
netstat -tlnp | grep 3000
Case study
- 서버에서 Jupyter Notebook을 실행했는데 웹에서 접속할 수 없음
해결 방법
- IP 주소를 잘 작성했는지 확인 : 내부용 IP, 외부용 IP 중 어떤 것을 사용했는지
- 네트워크 연결 확인 : ping이 정상적으로 가는지, netstat으로 포트 확인
- 방화벽확인:서버의 Port는 기본적으로 많이 차단되어있음(많이 열려있으면 해킹가능) 방화벽 설정에서 특정 Port 오픈을 해야 접근할 수 있음
- 로그 확인 : Jupyter Notebook을 실행한 터미널에서 접근 AccessLog가 남는지 확인(남지 않으면 잘못된 곳에 접근 하고 있을 확률이 존재)
성능 모니터링
top

glances

- CPU, Memory, Disk, GPU, Docker Container 상태까지 모니터링
- 웹 인터페이스도 존재, API 도 존재
- pip install glances[all]로 설치