-
디버깅
디버깅이란?
- 오류나 버그를 찾고 수정하는 과정
- 시간이 오래 걸리지만 소프트웨어 개발에서 제일 중요함
- 디버깅을 통해 문제를 해결해 정상화
- 버그가 생기는 이유
- 사람의 실수: 문법, 로직 잘못 작성
- 실행 환경: os, 가상환경, Docker 컨테이너, 네트워크 상태 등
- 의존성: 라이브러리에서 사용하는 다른 라이브러리의 버그로 인한 이슈
- 복잡성: 소프트웨어가 복잡해질 수록 버그 가능성 높아짐
- 커뮤니케이션 과정의 실수
디버깅 Process
출처: 네이버 커넥트 재단
- 문제 인식: 무엇이 문제인지 아는 것이 중요
- 실행 환경: OS, 가상환경, 라이브러리 버전
- 재현 가능하도록 준비
- 오류 메시지 자세히 읽기
- 해결책 찾기
- 과거에 경험한 문제면 오답노트 참고, 아니라면 구글에 영어로 검색
- ChatGPT에 물어보기, 다른 사람에게 질문하기
- 오픈소스의 이슈면 코드 직접 확인
- 오픈소스 코드 확인
- 오답노트
- 기록하는 것이 매우 중요
- 한번 발생한 오류는 미래에도 발생할 수 있다
- 문제상황 - 오류 메시지 - 해결방법
암묵지를 정리하고 본인만의 Process 만들기
서버 관리
- AI, ML 엔지니어가 만든 모델은 대부분 서버에서 동작
- 서버 관리의 목적: 서버를 안정적으로 운영해서 장애를 발생시키지 않기 위함
- Linux 파일 시스템 구성
- 파일 시스템과 디스크
- 'Error: No space left on device': 머신에 남은 공간이 부족할 때
- 'Error:...No such file or directory': 찾으려고 하는 파일이나 경로가 없을 때
- df: 파티션 단위로 용량 확인
- du: 폴더, 파일 단위로 용량 확인
- 네트워크
- IP: 네트워크에 연결된 다른 컴퓨터의 주소 (IP 주소는 어려우니 도메인을 구매해서 설정)
- DNS: 사람이 읽을 수 있는 도메인 이름을 IP 주소로 변환
- Port: PC에 접속할 수 있는 통로, 포트를 개방해야 사용할 수 있음
- 방화벽: OS에 특정 IP, Port(ACL, White list)만 접속할 수 있도록 설정
- ping: 서버가 연결되어 있는지, 얼마나 빠른 속도로 데이터가 전송되는지 테스트
- nslookup: 특정 도메인을 찾을 수 있는지 확인 가능 (DNS 서버에 연결 가능한지 확인)
- netstat: 현재 연결된 포트 정보들을 확인
- 특정 포트만 확인하려면: netstat -tlnp | grep 3000
- 성능 모니터링
- GPU, CPU, Memory의 성능을 확인학 ㅗ싶은 경우
- top 명령어로 CPU, Memory 성능 확인
- 순간의 정보 확인 '-b'
- top 실행 주기 설정 '-n'
- us: 유저 레벨의 cpu 사용량
- sy: 시스템 레벨의 cpu 사용량
- PID: 프로세스
- glances, nvidia-smi로 GPU 성능 확인
- glances: CPU, GPU, Docker까지 모니터링, 더 직관적으로 성능 확인 가능
- nvidia-smi: GPU 코어 별로 각 상태, 사용량 확인