본문 바로가기

전체 글71

파이썬 에러 종류 파이썬에는 구문 에러(Syntax Error)와 실행 에러(Runtime Error) 또는 예외(Exception)가 존재한다. 구문 에러는 컴파일 시 발생하는 문법상 에러이고, 실행 에러는 프로그램 실행(run time) 도중에 나는 에러이다. 파이썬은 인터프리터 방식의 언어이므로 컴파일 에러라고 부르지 않고 구문 에러로 구분한다. 컴파일과 인터프리터의 차이? https://bentist.tistory.com/41 컴파일러, 인터프리터 차이 영문으로 쓰여진 프로그래밍 언어를 컴퓨터는 어떻게 이해할까? 컴퓨터는 0과 1의 이진수만 이해할 수 있다. 이진수로 이해한다는 것을 더 정확히 말하면 프로그램의 연산을 실행하고 처리하는 bentist.tistory.com 파이썬 인터프리터와 같은 인터프리터의 경우에.. 2022. 2. 11.
파일 입출력과 Context manager 이해 파이썬에서의 입출력 작업 프로그램과 사용자 사이의 입출력: 표준 입출력 함수 input(), print() 사용 프로그램과 파일 사이의 입출력: open() 함수로 파일 핸들 객체를 생성하여 파일에 저장된 내용을 읽고 씀 파일 입출력 파일의 내용을 읽으려면 먼저 파이썬에게 작업할 파일과 파일로 어떤 작업(r, w, a)을 할지 알려줘야 한다. 이 기능을 open() 함수가 수행한다. fhand = open('파일경로/파일명', 모드) fhand.close() open() 함수는 파일을 조작하는 파일 핸들 객체를 반환 파일 핸들은 파일에 접근할 수 있는 연결 통로로, 이 파일 객체로 갖고 원하는 작업을 수행한다. 파일로부터 데이터를 읽어와 파일 내용을 메모리에 적재하고 있는 상태다. 파일 입출력 작업이 다.. 2022. 2. 11.
Block/Non-block, 동기/비동기 많은 종류의 소프트웨어에서 동기 처리 방식이 Blocking이고, 비동기 처리 방식이 Non-Blocking이여서 동기와 Blocking, 비동기와 Non-block를 비슷한 개념으로 오해할 수 있다. 단지 일련의 작업들에 대해 순차적으로 하나씩 처리하고 완료하는 방식은 매 작업의 수행마다 Blocking하는 게 작업의 순서를 보장하기 쉬우며, 작업의 완료 상태를 신경쓰지 않고 여러 작업들을 번갈아 처리하는 구조에서는 한 작업을 수행하면서 Non-Blocking으로 다른 작업을 받아와서 처리하는 구조가 효율적이기 때문에 동기와 Block, 비동기와 Non-block이 자주 쓰이는 것이다. 그렇기 때문에 같은 개념으로 혼동하기 쉽지만, 이 두 가지 개념은 서로 다른 곳에 초점을 맞춘 개념이다. Block/.. 2022. 2. 10.
Nginx 웹 서버 포트 별로 Reverse Proxy 설정 Docker Compose에서 Nginx 웹 서버로 Reverse Proxy를 설정한 뒤, 외부에서 접근이 가능한 외부 포트 두 개를 오픈하고 각 포트로 클라이언트 요청이 오면 내부 서버(외부 포트에서 접근 불가)에서 결과를 가져오도록 테스트 진행 도커를 통해 총 3개의 웹 서버 컨테이너를 만들어서 테스트 1) proxy 역할을 하는 nginx 웹 서버를 생성하고, 호스트 PC에서 nginx 웹 서버로 접근 가능한 8080, 8081를 개방 2) 현재 호스트 PC인 EC2 서버 또한 외부에서 접근 가능하도록 1111, 9999 포트를 인바운드 규칙에 추가 3) proxy nginx 웹 서버 컨테이너는 8080, 8081 포트가 열린 상태이며, 외부로부터 요청(1111, 9999 포트에서 들어온 요청)이 .. 2022. 2. 4.
apache, nginx 차이 웹 서버는 HTTP를 통해 '웹 클라이언트'가 '요청한 데이터'를 제공(serve)해주는 즉, 요청에 응답하는 프로그램이다. 개발자는 서버에 Apache나 Nginx 같은 웹 서버 프로그램을 이용하여 사용자의 HTTP 요청에 응답하게 된다. 위키피디아 웹 서버(web server)는 다음의 두 가지 뜻 가운데 하나이다. 웹 서버: 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 (ex. Apache, NGINX) 웹 서버(하드웨어): 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터 (ex. EC2, 내 컴퓨터) Apache 아파치 HTTP 서버(Apache HTTP Server)는 아파치 소프트웨어 재단에서 관리하는.. 2022. 1. 30.
도커 데이터 관리(volume, mount) 도커 컨테이너는 컨테이너마다 기본적으로 독립적인 저장소를 가지고 있다. 하나의 이미지로 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨(하나의 파일 시스템을 갖춘 접근 가능한 저장 공간)이 할당되고, 컨테이너가 삭제되면 해당 볼륨 또한 삭제된다. 문제는 컨테이너 내부에 저장된 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다. 그래서 도커에서는 데이터의 영속성을 보장하기 위하여 볼륨과 바인드 마운트를 이용한다. 볼륨과 바인드 마운트는 영속성을 보장하며 파일 시스템과 컨테이너를 분리하여 관리한다. 즉 컨테이너를 지웠다가 다시 실행해도 도커 볼륨과 연결한다면 데이터는 그대로 유지된다. 마운트(Mount) 물리적인 장치를 특정한 디렉토리 위치에 연결시켜 주는 과정 리눅스에서는 하드디스크의 파티션, C.. 2022. 1. 28.
컨테이너와 컨테이너 연결 주피터 노트북 컨테이너에 mysql 컨테이너 연결 1) MYSQL 도커 파일 작성 $ vi Dockerfile_MYSQL # Dockerfile_MYSQL FROM mysql:5.7 ENV MYSQL_ROOT_PASSWORD=1004 ENV MYSQL_DATABASE=ben_db 2) 도커 파일 이미지 작성 $ docker build --tag mysqldb -f Dockerfile_MYSQL . 도커의 build 명령어는 현재 디렉토리의 Dockerfile 이라는 이름을 가진 파일을 읽어서 이미지로 만든다. --tag는 이미지 이름을 직접 설정하는 옵션, 작성을 안하면 디폴트로 latest가 태그로 부여진다. -f는 도커 파일명을 지정하는 옵션, 작성을 안하면 디폴트로 Dockerfile 이름 파일이 .. 2022. 1. 28.
Docker Network 네트워크 네트워크는 두 대 이상의 컴퓨터가 서로 연결되어 있는 것을 의미한다. 도커 또한 컨테이너 관점에서는 마치 독립적인 환경을 가진 가상 머신이기 때문에 컨테이너가 다른 컨테이너 또는 컨테이너를 외부와 연결시키기 위해 각각의 컨테이너를 식별할 수 있는 IP주소가 필요하고, 도커에서는 이를 미리 가상 네트워크로 설정해놓았다. 도커는 호스트 컴퓨터(서버)의 물리적 네트워크와 도커의 가상 네트워크 두 가지로 네트워크가 이루어져 있다. 호스트 NIC와 컨테이너의 연결 통로, docker0(가상 브릿지) Linux는 Docker를 설치하면 docker0라는 가상의 네트워크 인터페이스(연결 통로)가 자동으로 생성되는데, 가상 브리지(bridge)라고 부른다. 그림 맨 아래의 eth0은 호스트 서버의 물리 NIC.. 2022. 1. 27.
도커 컴포즈(Docker Compose) 도커 컴포즈(Docker Compose) 도커 컨테이너로 시스템을 구축하면 하나 이상의 컨테이너가 서로 통신해야 할 때, 그 사이에 의존 관계가 생긴다. 예를 들어 웹 서비스에서 데이터 베이스와 백엔드 서버는 서로 연결되어 동작해야 하는데 각각을 컨테이너로 작성하여 따로 실행하게 되면 관리하기가 힘들다. 이때 필요한 것이 Docker Compose이다. Docker Compose는 여러 개의 도커 컨테이너를 정의하여 한번에 많은 컨테이너를 실행하고 관리할 수 있는 툴이다. docker-compose.yml이라는 파일로 여러 컨테이너에 대한 옵션을 작성하면, docker-compose up이라는 한 번의 명령어로 서비스를 시작할 수 있다. 참고로 docker-compose.yml 파일은 YAML 형식으로 .. 2022. 1. 26.
직렬화, XML, JSON, YAML 직렬화(Serialization) 직렬화는 컴퓨터의 데이터 객체를 저장 매체에 저장할 수 있는 형식, 또는 네트워크를 통해 전송할 수 있는 것으로 변환하는 것을 뜻한다. 저장장치에 저장되는 데이터 또는 네트워크를 타고 다니는 데이터는 결국은 0과 1로 이루어진 디지털 데이터의 연속이다. 따라서 프로그래밍 언어에서 사용하는 변수, 구조체, 객체와 같은 데이터들을 저장장치에 저장하거나 네트워크로 전송할 때에는 여기에 적합한 형식으로 만들어 줘야 한다. 직렬화의 방식은 크게 두 가지가 있다. 1) 컴퓨터가 쉽게 이해할 수 있는 0과 1의 디지털 형식으로 된 이진(binary) 방식 2) 사람이 쉽게 읽을 수 읽는 형태로 직렬화하는 텍스트 방식 XML, JSON, YAML 같은 형식은 텍스트 형식 직렬화이고, .. 2022. 1. 26.
가상화, 도커 의미(이미지와 컨테이너) 도커가 필요한 이유는 무엇인가? 내가 만든 파워포인트 문서를 다른 컴퓨터에서 열었을 때, 글꼴이 다르게 나오거나 한글파일의 버전이 달라서 글꼴이 깨져서 나온 경험을 해봤을 것이다. 이처럼 다른 하드웨어나 운영체제에서도 내가 만든 파일이나 프로그램을 제대로 실행시키려면 내 컴퓨터와 동일한 환경을 갖추어야 한다. 가상화 기술인 도커를 사용하면 내 컴퓨터의 작업 환경과 버전 정보 전체를 다른 컴퓨터 환경에 복제하여 어떤 컴퓨터 환경에서도 애플리케이션을 안정적으로 실행할 수 있다. 가상화 가상화는 물리적인 하드웨어(HW) 장치를 논리적인 객체로 추상화하는 것을 의미한다. 즉, 하나의 하드웨어를 여러 대처럼 동작시키거나 반대로 여러 대의 장치를 묶어 하나의 장치인 것처럼 사용자에게 공유자원으로 제공하는 기술이다... 2022. 1. 21.
AWS EC2에서의 IP 사용 AWS에서 처음 EC2 인스턴스를 만들면, 퍼블릭 IPv4 주소와 프라이빗 IPv4 주소가 할당된다. 퍼블릭 IP 네트워크 외부와 통신하는데 사용되는 IP 주소로, Public IP 주소는 ISP(Internet Service Provider)에서 할당하고, 외부에 공개되어 있는 IP 주소다. 전 세계에서 유일한 IP 주소를 갖고, 외부에 공개되어 있기 때문에 인터넷에 연결된 다른 PC에서 접속이 가능하다. 프라이빗 IP Private IP는 동일한 네트워크 내에서 사용되는 IP 주소로, 외부 사용자가 직접 접속할 수 없으며 라우터에 의해 로컬 네트워크 상의 PC나 장치에 할당된다. 즉, 같은 네트워크 망 내에서만 private IP로 접근이 가능하다. 그래서 DB 같은 서버는 외부에서 접속이 불가능하도.. 2022. 1. 20.