오늘은 AI 기초 내용, SW엔지니어링과 AI 엔지니어링, 그리고 쉘에 대해 배웠다.
conda create -n 환경이름 python=3.12 -c conda-forge
conda env list # 현재 존재하는 가상환경 출력
conda install 패키지명=버전 # 라이브러리 설치
conda install -c conda-forge 패키지명=버전 # conda에서 안되면 이걸로
conda activate 환경이름 # 가상환경 활성화
conda create -n 환경이름 python=3.12 -c conda-forge # 원하는 파이썬 버전으로 새 환경 생성 conda로만 안되면 conda-forge사용
conda env remove -n 환경이름 # 가상환경 삭제
conda list # 현재 환경에서 설치된 패키지 확인
conda update 패키지명 # 패키지 최신 업데이트. 패키지명 대신 --all을쓰면 다 업데이트
conda update conda # conda 업데이트
고품질의 소프트웨어를 체계적이고 효율적으로 개발하고 유지보수하기 위한 공학적 접근 방식
SW 개발 lifecycle
계획 - 요구조건 분석 - 설계 - 구현 - 테스트 - 유지보수 반복
좋은 소프트웨어 설계?
모듈성 : sw를 독립적인 기능 단위로 나누는 것. 재사용성과 유지보수 용이
응집도 : 모듈 내
구성요소가 얼마나 기능적으로 밀접하게 관련되어있나. 객체 지향적 사고방식. 높을수록 가독성과 신뢰성이 좋다.
결합도 : 모듈 간
상호의존성. 낮을수록 복잡성 감소하고 유연성이 증가해 좋다.
테스트과정과 문서화도 중요!
SW 서비스에서 AI 모델이 동작할 수 있도록 개발하는 것
SW 엔지니어링의 일부분이다.
AI는 전체 SW에서 일부분에 불과하다.
데이터, 모델(ML, DL등), 코드(API개발), 인프라(서버,GPU)
이미지, 텍스트 분류, 번역, 추천시스템, 이미지 생성, LLM 등.
무료 오픈소스 OS라서 서버에서 주로 사용
버전이 많아서 원하는 버전에 맞게 custom해서 사용가능
Ubuntu, debian, redhat, centOS 등의 버전이 있다.
유저가 문자를 입력해 컴퓨터에 명령할 수 있는 프로그램
터미널(콘솔) : 쉘을 실행하기 위해서 문자를 입력받아 컴퓨터에 전달하고 결과를 출력
서버, docker, crontab 등을 사용할때 쉘을 많이 사용한다.
jupyter notebook에선 !를 붙이면 쉘 커맨드 사용 가능
mkdir 폴더명 : Make Directory. 폴더 생성
ls : List Segment. 뒤에 아무것도 안붙이면 현재 폴더 기준으로 파일 출력
ls -a : 전체 파일 출력
ls -l : 퍼미션, 소유자, 만든날짜, 용량까지 출력
ls -h : 용량을 사람이 읽기 쉽게 gb,mb 단위로 출력
ls *.txt : 특정 패턴의 파일 출력
pwd : print working directory. 현재 폴더 경로를 절대경로로 보여줌
cd 폴더명: change directory. 폴더 이동
cd만 쓰면 홈 디렉토리로 가고, cd ..
을 쓰면 상위 디렉토리, cd -
는 이전 디렉토리로 간다.
echo : 터미널에 텍스트 출력. `쉘커맨드` 처럼 백틱으로 감싸면 커맨드의 결과값 출력
cp 1 2: copy. 파일 or 폴더 복사. 1을 2에 복사. -f를 쓰면 강제로 적용
bash 파일명.sh: .sh 파일(쉘스크립트 파일) 실행
sudo 명령어 : 관리자 권한으로 실행하고싶을 때 커맨드 앞에 붙임
mv : 파일, 폴더 이동하기
clear : 터미널 창 깨끗하게
history : 최근에 입력한 쉘 커맨드 history 출력. !숫자 입력하면 그 열의 커맨드 재활용
vi 편집기 모드
i: 삽입모드
esc : 명령모드
:wq : 저장후 종료 :q만쓰면 그냥 종료
export: 환경변수 설정. 띄어쓰기하면안됨. 터미널 꺼지면 사라짐
export password="asdf1234" 한 뒤 echo $password 하면 asdf1234출력.
alias : 별칭 목록. alias ll2='ls -l'
하고 설정하면 ll2만 쳐도 뒤에꺼 실행
mkdir teset123
ls
pwd
cd datafolder
cd ..
cp source_file destination_file
clear
tree -L 숫자 : 디렉토리를 트리구조로 숫자레벨까지 보여준다.
(sudo) apt-get install tree 를 하면 설치된다.
head -n 숫자 파일명 : 파일 앞의 숫자줄만큼 볼 수 있다. tail을 쓰면 뒤에서부터
파일 내용을 출력하거나 연결(concat)해 출력 할 때 사용한다.
ctrl+D
를 입력하면 새파일에 텍스트 작성grep 옵션 패턴 파일명
: 패턴과 매칭되는 라인 검색
옵션에서 -i는 대소문자구분없이, -w는 정확히 그 단어, -E는 정규식
cut : 파일에서 특정 필드를 추출. -d는 구분자, -f는 자를 필드 지정
cut -d , -f 2,5
awk '패턴 { 액션 }' 파일 : 파일의 패턴에 맞는 행에대해 action을 수행하는 코드
awk '$3 > 100 { print $1, $3 }' filename
# 3번째 열의 값이 100보다 큰 행에 대해 첫번째와 세번째 열을 출력
awk -F ":" '{ print $1, $3 }' /etc/passwd
# 구분자 : 로 나눠진 파일에서 첫번째와 세번째 열을 출력
유닉스에서 사용되는 프로세스와 OS간의 입출력 통로
표준 입력 stdin
0으로 표현되는 입력. 키보드를 통해 유저가 입력한다. 파이프 |
나 파일 리다이렉션 <
을 통해 입력 데이터를 받을 수도 있다.
표준 출력 stdout
1로 표현되는 출력. 터미널에 출력되는 값. 리다이렉션 >
을 통해 파일로 출력 가능
echo "Hello, world!" > output.txt # output.txt 파일로 표준 출력을 리다이렉트
stderr
2>
를 통해 파일로 출력 가능>
, >>
python test.py > log_file 2>&1 &
# 표준에러(2)를 표준출력(1)으로 리다이렉트해서 에러도 log_file에 같이 저장되게.
# 마지막 &는 백그라운드에서 실행
|
ls | grep "log" # 현재 디렉토리에서 "log"가 포함된 파일 이름을 찾을 때
cat data.txt | sort # data.txt 파일을 정렬할 때
ps : Process Status. 현재 실행중인 프로세스(PID) 출력
curl : Client URL. 웹서버 구현 시 Request(요청)를 테스트하는 명령어
df -h : Disk Free. 현재 사용중인 디스크 용량 확인
ssh 옵션 user@hostname
: 암호화 원격 서버 접속 프로토콜.
user는 사용자명, hostname은 서버의 ip주소나 도메인 이름
옵션 -p는 포트 지정, -i는 ssh키파일 사용, -L은 터널링(포트포워딩), -q는 배너메세지 무시
ssh john@192.168.1.100 # john으로 해당 ip서버에 접속
ssh -p 2222 john@192.168.1.100 # 기본적으로 22번포트 사용하지만 -p로 다른 포트 지정 가능
ssh -i ~/.ssh/id_rsa john@192.168.1.100 # 키파일 경로를 지정해 그 키파일로 접속
ssh john@192.168.1.100 'ls -l /home/john' # 접속하지않고 특정 명령만 실행 후 종료
ssh -o ServerAliveInterval=60 user@hostname # SSH 접속 유지. 60초마다 재연결
ssh -L 8080:localhost:80 john@192.168.1.100 # 로컬의 8080포트를 원격의 80번 포트에 연결
# ~/.ssh/config 예시
Host myserver
HostName 192.168.1.100
User john
Port 2222
IdentityFile ~/.ssh/id_rsa
scp myfile.txt john@192.168.1.100:/home/john/ #로컬의 myfile을 원격서버로 복사
scp -r /my/local/folder john@192.168.1.100:/home/john/ #로컬 폴더를 원격 서버로 복사
scp john@192.168.1.100:/home/john/myfile.txt /local/directory/
# 원격의 파일을 로컬 경로로 복사
nohup python3 app.py & : 백그라운드에서 터미널 종료 후에도 계속 작업 실행
permission이 755여야 nohup으로 실행 가능. 로그는 nohup.out에 저장된다.
ps ef | grep app.py
후 pid 찾아서 kill -9 pid값
으로 nohup 종료.
chmod 옵션 모드 대상파일 : change mode. 파일이나 디렉토리의 권한 변경
읽기(r)는 4, 쓰기(w)는 2, 실행(x)는 1. 다 되면 7, 읽쓰면 6, 읽실은 5 등..
숫자는 사용자 / 그룹 / 기타사용자 순이다.
옵션 -R은 재귀적으로 하위 폴더나 파일에도 적용, -v는 권한 변경된 항목 출력
chmod 755 file.txt # 사용자: 읽기, 쓰기, 실행 / 그룹: 읽기, 실행 / 다른 사용자: 읽기, 실행
chmod 644 file.txt # 사용자: 읽기, 쓰기 / 그룹: 읽기 / 다른 사용자: 읽기
chmod 700 script.sh # 사용자: 읽기, 쓰기, 실행 / 그룹: 권한 없음 / 다른 사용자: 권한 없음
쉘 커맨드를 모아 파일로 저장한 스크립트. 여러 명령어를 자동화하기 위해 작성된다.
.sh파일을 생성해 그 안에 쉘 커맨드를 추가한다. if while case문 사용가능
bash 파일명.sh로 실행 가능하다.
첫줄 Shebang은 어떤 쉘에서 실행될 지 지정한다.
#!/bin/bash은 Bash쉘에서 실행하도록, #!/bin/sh는 기본 쉘에서 실행하도록 한다.
$1, $2 를 사용해 첫번째, 두번째 변수를 사용할 수 있고, $@를 쓰면 모든 변수에 접근한다.