좋은 소프트웨어 설계를 위해 알아야 하는 개념
- 모듈성
모듈 : 고유한 목적, 기능을 가지는 단위
- 응집도
응집도 : 시스템의 모듈 구성 요소가 목적을 달성하기 위해 관련된 정도
- 결합도
모듈들의 상호 의존성
높은 응집도와 낮은 결합도
버저닝(Version)
- CalVer (Calendar Versioning)날짜 기반 시스템을 이용해 버전 번호 할당 (ex.Ubuntu 20.04 )
- SemVer (Semantic Versioning)마침표로 주 번호, 부 번호, 패치 번호 구분
주 번호 : 이전 버전과 호환되지 않은 변경이 있으면 주 번호 증가
부 번호 : 이전 버전과는 호환되며 새로운 기능이 추가된다면 부 번호 증가
패치 번호 : 이전 버전의 버그 수정 - 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가 실행될 것
참고 블로그 :
docker :: 도커파일(Dockerfile) 의 개념, 작성 방법/문법, 작성 예시
1. 도커파일(Dockerfile) 이란? 도커파일은 docker 에서 이미지를 생성하기 위한 용도로 작성하는 파일이다. 만들 이미지에 대한 정보를 기술해 둔 템플릿(template) 이라고 보면 된다. 도커 이미지를 만
toramko.tistory.com
감사합니다 !

'부스트캠프 > day 정리' 카테고리의 다른 글
[week 3 - day 5] AutoEncoder & VAE 이해하기 (0) | 2023.03.23 |
---|---|
[week 3 - day 3] Transformer 이해하기 (0) | 2023.03.22 |
[week 3 - day 2] CNN / modern CNN (0) | 2023.03.21 |
[week 1 - day 5] cnn, rnn (0) | 2023.03.10 |
[week 1 - day 4] 딥러닝 ~ 베이즈 통계학 (0) | 2023.03.10 |