전체 글 205

[운영체제] 1-2. 멀티 프로그래밍

Simple Batch System 일련의 프로그램을 순서대로 진행하는 시스템 Uni programming 하나의 프로그램에 대해서 모두 처리한 후에, 다른 프로그램을 실행하는 과정을 의미합니다. 지금부터 많은 예를 들 때, 은행 창구를 예로 들어보겠습니다. uni programming은 직원 한명에 의자가 딱 하나 있는 것입니다. 여기에서 직원은 CPU를 의미하고, 의자는 메인 메모리라고 생각해봅시다. 이렇게 되면 고객 한 명밖에 처리하지 못하는데, 고객이 어떤 서류를 작성해야한다면 그러한 순간에 직원은 고객이 모든 서류 작성을 마칠 때까지 기다리게됩니다. 이러한 순간은 굉장한 낭비가 됩니다. CPU가 일을 처리하는 시간보다 입출력을 기다리는 시간이 더 많은 비율을 차지하게 되기 때문이죠.(보통 입출력..

CS/OS 2023.09.10

[운영체제] 1-1. 운영체제 개요

운영체제의 개요에 대해서 설명하겠습니다. 운영체제 운영체제는 컴퓨터 응용 프로그램이 실행되는 과정에서 하드웨어를 제어하고, 응용 프로그램 실행 결과를 보일 수 있도록 컴퓨터 내부 동작을 관리하는 소프트웨어를 말합니다. 우측 그림을 보면, OS는 사용자가 사용하는 프로그램들과 하드웨어 사이의 중간다리 역할을 합니다. 운영체제의 역할 1. 컴퓨터를 부팅한다. - 부팅 : 컴퓨터를 킨 이후에 사용할 수 있도록 준비하는 과정. 보조기억장치에 있는 운영체제를 메인 메모리에 옮기는 등과 같은 것을 의미 2. Process Management등으로 여러 응용프로그램을 실행한다. 3. 여러 개의 프로그램을 제어한다. 4. 입출력을 받거나, 파일을 관리(read, write)를 한다. 5. 컴퓨터를 사용한 후, 안전하게..

CS/OS 2023.09.10

AttributeError: Can't get attribute

문제 졸업 프로젝트에서 노래와 광고를 분류하기 위해 텍스트 기반 분류기를 구현 중이다. 진행하다가 아래와 같은 오류를 만났다. 해결 찾아보니, 멀티 프로세싱..? 관련 문제라고 한다. 오류가 발생한 코드는 아래와 같은데 train_loader = DataLoader(train_data, batch_size=8, shuffle=True, num_workers=8) test_loader = DataLoader(test_data, batch_size=8, shuffle=True, num_workers=8) 여기서 num_workers 부분에서 오류가 나는 것이었다. 아래와 같이 간단히 오류가 나는 부분을 '제거'하고 다시 실행해보니 문제 없이 작동했다. train_loader = DataLoader(train..

Error Record 2023.09.08

[UTM] 로컬과 가상머신 파일 및 폴더 공유하기

운영체제에서 Virtual Box 툴을 사용하고, 나는 arm 환경이라 다른 툴을 사용해야했다.. 물론 쓸 수는 있지만 베타버전이기도 하고 실제로 해보니까 먹통인 부분이 많아서 arm 전용 툴인 UMT를 사용했다. 실제, 실습에서는 Virtual Box를 하다보니까 거기서 설정하는 것들을 UTM에 맞게 바꿔야하는데 잘 몰랐다.. 그 중에서, 내 로컬 환경에서 가상머신으로 파일을 전송하는 법을 알아보려고 한다. 우선 기본 전제는 UTM의 가상머신에 우분투가 설치되어 있어야한다. 참고로 아래에 사용하는 모든 명령어는 로컬에서 실행한다.(당연하겠지만..) 우선 로컬에서 가상머신으로 보내는 방법이다. $ scp [로컬 파일 경로] [원격 username]@[원격 ip]:~[원격에 저장할 경로] 이렇게 되면, 로..

CS/OS 2023.09.07

[도커/Docker] multi-stage build란??

나는 현재 진행하고 있는 두 개의 프로젝트에서 도커를 사용하고 있다.(당연하지만...ㅎ) 하지만, 도커를 사용하여 이미지를 만들면 환경설정이 따로 필요없이 구동할 수 있다는 매우 좋은 점이 있지만, 많은 기능들이 추가됨에 따라 이미지가 매우 무거워지는 것은 사실이다. 실제로, 2월 말부터 진행하는 졸업 프로젝트에서 만든 도커 이미지는 무려 4.5기가이다... 프로젝트 주제의 특성 때문에 인공지능 모델을 사용해야해서 그렇기도 하지만, 4.5기가면 무시할 수는 없는 수준이다. 심지어, 프로젝트에서 오디오 전처리를 해야하는데 오디오 전처리를 하다가 도중에 도커가 강제 종료되기도 한다.(메모리 부족으로 인해서 ㅠㅠ) 그래서 나는 이미지를 줄이는 작업을 많이 도전해왔다. 이미지를 줄이는 것만으로도 조금 더 쾌적하..

기타 2023.08.31

포트번호? 8080:8080 그게 뭐지??

도커 컴포즈 파일이나 도커를 작성할 때, 또는 흔히들 포트번호를 입력하여 통신을 한다. 나는 이걸 그냥 감으로만 캐치하여 사용하고 있었고, 본질적으로 포트번호 충돌이 일어나도, 대충 숫자만 바꾸는 식으로 진행했다. 그런데, 이번에 docker compose를 작성하면서, 포트번호에 대한 의문점이 생겼고 어떻게 사용하는지에 대해서 멘토(?)에게 자문해봤다. 그리고 이 글은, 그렇게 간단하게나마 포트번호에 대한 개념을 최소한의 데이터 통신의 지식으로 이해할 수 있도록 쓰였다. 우선 우리는 많은 서비스에서 API로 요청을 하거나, DB를 설정할 때, 프론트와 백의 소통에서 포트번호를 일치해줘야한다는 것을 알고 있다. 막상 쓸 때는 '숫자만 대충 맞으면 되지'라는 식으로 진행했지만, 직접 작성하려고 하니, 무슨..

CS/Network 2023.08.30

[Java/자바] 자바 프로젝트와 mysql을 docker-compose로 묶어보자

안녕하세요! 오늘은 제가 진행 중인 자바 프로젝트를 도커 이미지화 시킨 후에, docker compose로 묶어서 한번에 관리하는 과정을 기록해보려고 합니다. 모든 네이밍과 설정들이 제 프로젝트에 맞춰져있을 수 있지만, 참고만 한다고 생각하고 봐주시면 감사하겠습니다. 우선, 프로젝트를 도커 이미지화하기 위해서는 Dockerfile이 필요합니다. (Dockerfile 작성에 대한 간단한 글은 아래를 참고해주세요.) 2023.08.24 - [Python] - [파이썬/Python] 도커 이미지를 생성하고 배포해보자 Dockerfile의 가장 하단에 CMD나 ENTRYPOINT로 자바 파일을 실행하게 됩니다. 이 과정에서 우리는 .jar 파일이 필요하게 됩니다. 따라서 .jar를 먼저 만들어줍시다. gradl..

Java 2023.08.30

MySQL Workbench 튕김 현상 해결

문제 MySQL Worckbench에서 데이터를 조회하려고 하면 계속 튕겼다. 데이터 여러개가 들어가있는 것도 아닌데 왜이러는지.. 해결 MySQL Worckbench 버전을 바꿔주면 된다. 아래의 링크에서 버전 8.0.31을 다운받자. https://downloads.mysql.com/archives/workbench/ MySQL :: Download MySQL Workbench (Archived Versions) Please note that these are old versions. New releases will have recent bug fixes and features! To download the latest release of MySQL Workbench, please visit MySQ..

Error Record 2023.08.30

mysql error code: 1146. Table 'sys.*' doesn't exist

문제 MySQL workbench에서 테이블의 데이터를 조회하기 위해서 쿼리문을 작성했는데, 다음과 같은 오류가 떴다. mysql error code: 1146. Table 'sys.*' doesn't exist 해결 간단하다. 쿼리문 실행 이전에, 내가 사용할 데이터베이스 이름을 지정해주면 된다. 예를 들면 아래와 같다. use mydatabase; select * from menu; 데이터베이스를 지정 안하고 쿼리문을 작성하는 나는 하수...

Error Record 2023.08.30

java.sql.SQLException: Access denied for user

문제 Docker에서 MySQL을 받아와서, 내 프로젝트랑 같이 docker-compose.yml에 작성한 후에 실행시키니 아래와 같은 오류가 발생했다. java.sql.SQLException: Access denied for user 'username'@'~' (using password: YES) 해결 MySQL의 관리자 계정으로 사용자에게 접근 권한을 부여해야한다. 만약 도커로 MySQL을 다운했다면, 도커 허브에서 그렇지 않다면 MySQL bash에서 바로 진행할 수 있다. 우선 관리자 계정으로 mysql에 접속하자. mysql -u root -p 이후 패스워드를 입력한다. 이후, 관리자 계정으로 접근 권한을 부여하기 위해 아래와 같은 명령어를 실행하자. CREATE USER 'new_user'@..

Error Record 2023.08.30