부스트캠프/day 정리

[week 8] AI 서비스 개발 기초 정리

요다다 2023. 4. 26. 00:37

좋은 소프트웨어 설계를 위해 알아야 하는 개념

  •  모듈성 

모듈 : 고유한 목적, 기능을 가지는 단위

  • 응집도

응집도 : 시스템의 모듈 구성 요소가 목적을 달성하기 위해 관련된 정도

  • 결합도 

모듈들의 상호 의존성

높은 응집도와 낮은 결합도

 

버저닝(Version)

  1. CalVer (Calendar Versioning)날짜 기반 시스템을 이용해 버전 번호 할당 (ex.Ubuntu 20.04 )
  2. SemVer (Semantic Versioning)마침표로 주 번호, 부 번호, 패치 번호 구분
    주 번호 : 이전 버전과 호환되지 않은 변경이 있으면 주 번호 증가
    부 번호 : 이전 버전과는 호환되며 새로운 기능이 추가된다면 부 번호 증가
    패치 번호 : 이전 버전의 버그 수정
  3. HashVer (Hash Versioning)
    모든 버전에 대해 고유한 식별자 생성 (ex. git commit 7e6d3fd)

리눅스

맨날 까먹어서 정리하는 커맨드 모음

1) vim command 

yy : 복사

dd : 삭제

p : 붙여넣기

U : 뒤로가기

 

2) shell command

sort : 행 단위 정렬 (-r : 내림차순)

ex) cat text.txt sort | uniq => 정렬 후 중복 제거 

* 주의할 점은 uniq만 하면 모든 중복이 제거되지 않는다. 연속적인 중복만 제거함. 그렇기에 sort와 같이 사용

grep : 파일 내에서 주어진 조건 내용찾기

-i : 대소문자 구분 없이 찾기 / -w : 정확히 그 단어만 찾기 / -E : 정규식

wc -l : 라인 수 세기

chmod : change mode

r: 4 / w:2 / x:1

 

3) shell script

시작은 항상 shebang으로

#!/bin/bash

 카카오톡 그룹 채팅방에서 특정 기간에 제일 메세지를 많이 보낸 사람 추출하기

맥OS가 아니라서 csv파일 생성 불가.. 아쉽지만, 쉘 스크립트를 생성하는데 의의를 얻기 위해

txt파일로 쉘 스크립트를 작성해보았다.

 

#아래와 같은 형태로 txt파일이 생성됐다.

2023. 3. 17. 오후 4:18, lyp : 안녕하세요
2023. 3. 17. 오후 4:19, kyw : 안녕하세요
2023. 3. 17. 오후 4:19, psh : 안녕하세요
2023. 3. 17. 오후 4:19, ldh : 안녕하세요
2023. 3. 17. 오후 4:19, lsm : 안녕하세요
#!/bin/bash
# -*- coding: utf-8 -*-
declare -A name_count 
while read line; do
    if echo "$line" | grep -q "2023. 3"; then
        total=$(echo $line | cut -d . -f 1,2,4)
        year=$(echo $total | cut -d . -f 1)
        month=$(echo $total | cut -d . -f 2)
        names=$(echo $total | awk -F ', ' '{print substr($2,0,3)}' | sort | uniq)
        for name in $names; do
            if [[ ${name_count[$name]} ]]; then
		#echo "a $name"
                name_count[$name]=$((${name_count[$name]}+1))
		#echo "b ${name_count[$name]}"
            else
                name_count[$name]=1
            fi
        done
    fi
done < talk.txt

for name in "${!name_count[@]}"; do
    echo "$name : ${name_count[$name]}"
done

쉘 스크립트는 다음과 같이 작성해주었다. 결과를 내기 위해서 작성했는데 뭔가 매우 비효율적인 듯.....

흐름을 설명하자면, 그냥 딕셔너리 형태를 이용해 key값(==name)이 존재하면 count를 1씩 더해주고, 없으면 선언해주는 것이다.

2023년도 전체를 하면 너무 오래 걸릴 것 같아서 (내 코드가 비효율적이라서.. 한 줄씩 읽어와서 오래 걸린다. 위 코드도 20분 걸린 것 같음...)

2023.3월을 기준으로 잡았다.

결과

한글이 깨져서 횟수를 제대로 카운트하지 못해서 영어로 바꿔준 뒤 진행하였다.

부캠 팀 톡방인데, 3월에 내가 제일 카톡 많이 했군..!😁

 

docker

에러 정리 : https://yodabe.tistory.com/48

docker는 이번 기회에 처음 접하게 되었다..! 열심히 배워서 다음 플젝에선 써봐야지😋

Docker Image란?

컨테이너를 실행할 때 필요한 모든 것을 포함한 템플릿

즉, 이를 이용해 어떤 호스트나 환경에서도 동일하게 실행할 수 있다.

 

Docker 실습

1) MySQL 다운받기

docker pull mysql:8 # mysql 8버전의 이미지 다운

2) MySQL run

다운받은 MySQL 이미지 기반으로 Docker container를 만들고 실행해준다

docker run --name mysql-tutorial -e MYSQL_ROOT_PASSWORD=1234 -d -p 9000:9000 my sql:8

기존에 깔아둔 MySQL에서 포트번호 3306을 사용하고 있어서 포트 error가 발생해서 그냥 9000으로 설정해주었다.

나중엔 기존꺼 포트번호 삭제해야 할 듯?

켜진 것을 확인할 수 있다.

 

3) MySQL 실행하기

docer exec -it mysql-tutorial /bin/bash

오옹 docker에서 MySQL 실행하기 완료 !

 

docker(2) : 직접 Docker Image를 만들어보자

Dockerfile 파일을 만들어주자.

Dockerfile이란? docker에서 이미지를 생성하기 위한 용도로 작성하는 파일이다. 만들 이미지에 대한 정보를 기술해둔 템플릿이라고 생각하면 된다.

도커 이미지를 만들 때, 

docker build [옵션] [dockerfile 경로]

위 명령어를 입력하면, 작성한 도커파일의 내용을 기반으로 이미지 빌드가 시작되는 것 !

 

1) 도커파일 Instructions(지시어) 종류

- FROM 

도커파일에서의 From은 base image를 지정하는 지시어이다.

예를 들어, `FROM ubuntu:18.04`은 우분투18.04 이미지를 다운로드하여 새로 만들 이미지의 기초로 구성하는 것이다.

흠.. import 모듈과 같은 의미...라고 이해했다

- RUN

뒤 커맨드를 실행해서 새 이미지에 포함시키는 역할. shell form과 exec form 가능

- CMD

컨테이너가 시작될 때 실행할 커맨드를 지정하는 지시어. 마찬가지로 shell, exec form 가능

- ENV 

환경변수를  설정하는 지시어

 

이제 기본 예제를 파악해보자 !

1. Dockerhub에 존재하는 파이토치 이미지를 사용하겠다

3. COPY . /app

현재 디렉토리에 존재하는 모든 파일을 컨테이너 내부 /app 디렉토리로 복사하겠다

4. WORKDIR /app

도커파일 지시어 run,cmd 등을 실행할 컨테이너 경로 지정.

즉, 이 라인 뒤에 등장하는 RUN, CMD는 모두 컨테이너 내부 /APP에서 실행되는 것

5,6. ENV

환경변수 설정

8. RUN command

실행할 리눅스 명령어를 적어준다. 

이전 라인에서 COPY와 WORKDIR를 통해 컨테이너 내에 requirements.txt가 존재함

9. CMD ['python','main.py'] 

exec form으로 적어준 듯. 즉, python main.py가 실행될 것


참고 블로그 : 

https://toramko.tistory.com/entry/docker-%EB%8F%84%EC%BB%A4%ED%8C%8C%EC%9D%BCDockerfile-%EC%9D%98-%EA%B0%9C%EB%85%90-%EC%9E%91%EC%84%B1-%EB%B0%A9%EB%B2%95%EB%AC%B8%EB%B2%95-%EC%9E%91%EC%84%B1-%EC%98%88%EC%8B%9C

 

docker :: 도커파일(Dockerfile) 의 개념, 작성 방법/문법, 작성 예시

1. 도커파일(Dockerfile) 이란? 도커파일은 docker 에서 이미지를 생성하기 위한 용도로 작성하는 파일이다. 만들 이미지에 대한 정보를 기술해 둔 템플릿(template) 이라고 보면 된다. 도커 이미지를 만

toramko.tistory.com

 

감사합니다 !