본문 바로가기

Programming181

우분투 포트 죽이기 (열린 포트 확인하기) 프로그램을 만들다 보면 포트가 겹쳐서 적절한 실행이 안되는 경우가 있습니다. 아래 에러가 발생할 때는 해당 포트를 종료해줘야 합니다. Error: serveHTTPGateway: manet.Listen(/ip4/127.0.0.1/tcp/8080) failed: listen tcp4 127.0.0.1:8080: bind: address already in use 이 때 사용하는 명령어가 netstat 입니다. 1. 특정 포트 조회하기 8000번 포트로 연결되어 있는 프로세스를 조회합니다. 현재 3000번 포트에 50154 프로세스 아이디를 가진 node가 실행중입니다. $ netstat -nap|grep 3000 tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 50154/node 2. .. 2022. 8. 8.
IPFS 우분투 20.04 LTS 설치 방법 IPFS(InterPlanetary File System)이란? IPFS는 P2P 파일 시스템으로 모든 컴퓨터를 연결하는 것을 넘어 행성을 연결하는 비전을 가진 차세대 파일 시스템입니다. IPFS는 기존 HTTPS Web 기반의 시스템 한계를 극복하기 위해 P2P 통신을 구현하고 빠른 속도와 안전한 네트워크를 실현하고 있습니다. IPFS는 용량이 큰 파일들을 효율적으로 전달하는 BitSwap과 파일의 중복을 알아채고 효율적으로 저장소를 사용할 수 있는 Merkle DAG, contents-addressed)를 구현하고 있습니다. 만약 특정 노드들이 공격을 받거나 종료되더라도 안정적인 생태계 유지가 가능합니다. IPFS에 기록된 파일들은 영원히 기록됩니다. 파일의 버전관리도 가능하고, 지키고 싶은 파일을 .. 2022. 8. 8.
[Docker] Docker Compose 사용법 (도커 네트워크 구성) Docker Compose 사용 이유 도커(Docker)에서 이미지를 가져와 컨테이너를 실행할 수 있습니다. 도커를 사용하는 근본적인 이유는 컨테이너별로 독립된 공간을 제공하고, 배포를 유연하게 도와주기 때문입니다. 또한 개발환경과 실행환경을 일치시키는데, 상당한 노력을 줄여주고 있습니다. 도커 컨테이너를 실행하면 개별적인 공간이 마련되는데, 만약 2개 이상의 컨테이너를 하나의 공간(Network)에서 실행해야 하는 경우가 있습니다. 이 때 사용하는 방법이 Docker Network와 Docker Compose 입니다. 예를 들어 웹 서비스를 배포하기 위해서는 Server와 Client 그리고 Database가 한번에 동작해야 합니다. 개별적으로 Nginx 이미지로 클라이언트 컨테이너를 만들고, Node.. 2022. 7. 28.
[Docker] OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown 해결방법 에러 발생 도커(Docker)에서 Image를 가져와 컨테이너를 실행했습니다. HTTP 기반 이미지를 가져와서 서버에 특정 파일을 올리는 작업을 하던 중 뭔가 작동이 이상한 듯 해서 컨테이너 내부에 접속을 시도합니다. $ sudo docker exec -it server bash server 컨테이너에 접속하려고 하니 에러가 발생합니다. OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown 에러 이유 에러가 발생하는 이유는 "bash" 실행파일을 찾지 못했기 때문입니다. 만약 사용하고자 하는 이미지가 Alpine 리눅스를 기반.. 2022. 7. 28.
[Docker] 도커(Docker) 이미지 만들기 2가지 방법 도커(Docker) 이미지? Docker Hub에서 필요한 이미지를 가져와 개발 환경을 구성할 수 있습니다. 하지만 해당 이미지에 원하는 모든 기능이 구현되어 있지 않은 경우에는 따로 이미지를 만들어서 사용해야 합니다. 로컬에 저장되어 있는 파일을 도커 이미지에 붙여서 새로운 이미지를 만들고 배포할 수 있습니다. 이미지를 만들어야 하는 상황을 예로 들면 웹 서버 이미지(httpd)를 받아왔지만 웹 서버 애플리케이션은 직접 작성한 경우 웹 서버 이미지에 기존 파일들을 붙여서 새로운 이미지를 만들고 배포해야 웹 서비스를 구현해낼 수 있습니다. 이미지를 새로 만드는 경우 서버에 문제가 발생할 때 웹 서버 애플리케이션과 웹 서버를 구분해서 디버깅 할 수 있게 됩니다. 도커 이미지와 로컬의 파일을 연결하는 방법은.. 2022. 7. 27.
[Docker] 도커(Docker) 사용법 도커(Docker)란? 도커(Docker)는 리눅스 컨테이너를 기반으로 소프트웨어의 격리성을 제공하고 배포를 유연하게 해주는 오픈소스 툴입니다. 도커를 사용하면 실행환경을 일치시킬 수 있고, 네트워크 충돌을 줄일 수 있습니다. 여기서 리눅스 컨테어너는 소프트웨어 개발에 필요한 라이브러리 + 애플리케이션들을 모아서 마치 별도의 서버처럼 작동하도록 구성한 것입니다. 리눅스 컨테이너 환경에서는 프로세스, 네트워크, 파일 시스템이 구분됩니다. 프로세스 특정 컨테이너에서 작동하는 프로세스는 컨테이너 내에서만 접근가능하며, 다른 컨테이너에서 작동하고 있는 프로세스에 영향을 미치지 않습니다. 네트워크 컨테이너들은 각각 개별적인 IP를 할당받습니다. 즉 독립적인 네트워크 환경을 구축할 수 있습니다. 파일 시스템 컨테이.. 2022. 7. 27.
[Hardware] L1, L2, L3 캐시 메모리(Cache Memory)란? 단순한 컴퓨터 컴퓨터란 극단적으로 설명하면 단순한 OP 명령을 인출(Fetch), 해석(Decode), 실행(Execute) 하는 전자 계산기 입니다. 단순히 명령어를 저장공간에서 가져와서 몇개 안되는 명령문을 실행하는데, 굉장히 빠른 속도로 처리 가능하므로, 현재 튜링 완전한 머신으로써 PC, 노트북이 등장했고, 인공지능, 머신러닝, 빅데이터 등의 수준높은 기술까지 구현하게 되었습니다. 여기서 프로세서는 컴퓨터의 핵심으로 실질적으로 명령문을 해석하고 실행하는 공간입니다. 모든 PC들은 프로세스를 내장하고 있고, 프로세서 내에 복수의 코어(Core)를 심어 병렬로 처리가능하도록 하고 있습니다. 프로세서가 명령을 실행하기 위해서는 저장공간에서 명령을 가져와야 하는데, 처리 속도가 빠른 프로세서에 비해 데이.. 2022. 7. 27.
컴퓨터 구조 (폰 노이만 아키텍처, 프로세서, 주기억 장치, 버스) 현재 우리가 사용하고 있는 컴퓨터는 IBM사에서 1981년 처음 판매한 IBM PC와 거의 유사한 형태를 가지고 있습니다. 30년이 지난 시점에도 기본적인 컴퓨터의 구조는 계속 이어져 오고 있습니다. 마치 자동차가 처음 등장한 이래 큰 변화를 가지지 않은 것과 마찬가지 입니다. 한가지 다른 점은 30년전과 비교해 훨씬 작고 가벼우며, 성능은 100만배 더 뛰어난 특징을 가지게 되었습니다. 폰 노이만 아키텍처란? 컴퓨터의 단순한 아키텍처는 프로세서, 주기억장치, 보조기억장치, IO 장치들, 그리고 이것들을 연결해 정보를 전달하는 버스로 구성됩니다. PC와 태블릿, 스마트폰 모두 이와 유사한 형태의 아키텍쳐를 가지고 있습니다. 차이점은 스마트폰에는 전화기능을 위한 통신모듈과 GPS 수신기 등의 추가 디바이스.. 2022. 7. 25.
[WebSocket] 웹 소켓(Web Socket) 이란? 웹 소켓(Web Socket)이란? Node.js에서는 웹 소켓 라이브러리 Socket.IO가 있습니다. 흔히 실시간 데이터를 주고 받기 위해서 사용되는 라이브러리 입니다. 웹 소켓(Web Socket)이란 HTML5에 적용된 스펙으로 실시간 데이터를 교환하기 위한 기술로, WS라는 프로토콜을 사용하고 있습니다. 즉, 브라우저와 서버거 WS 프로토콜을 지원하면 실시간 데이터 교환이 가능합니다. 웹 소켓이 적용되기 전 실시간 데이터 전송을 위해서는 폴링(polling)을 사용했습니다. HTTP가 client에서 server로 향하는 단방향 통신이기 때문에 클라이언트에서 주기적으로 서버에 새로운 업데이트가 있는지 확인한 후 데이터를 가져오는 단순한 방식을 사용했습니다. HTML5에 웹 소켓 기술이 적용되면서.. 2022. 7. 18.
[Node.js] PNG to webp Converter 구현하기 webp란? 이미지를 포맷하는 방식은 JPEG, JPG, PNG 등의 포맷방식을 사용합니다. JPEG는 손실 압출 방법으로 이미지가 어떤 연속된 바이트를 가지고 있는지를 규정하고 1677만 7216색을 표현합니다. 1992년에 최초 발표된 기술입니다. PNG는 무손실 압축 방법을 사용하며 32비트 트루컬러를 사용합니다. 1996년에 발표되었습니다. 현재 가장 많이 사용되는 이미지 포맷 방식이지만, 출시 년도가 30년이 다되어 갑니다. 지금은 새로운 이미지 포맷방식인 webp 방식을 사용할 때 입니다. webp는 2010년 구글에서 제작한 이미지 포맷으로 손실 압축방식과 무손실 압축방식 모두 지원합니다. 구글이 webp를 제작해 무료로 공급하는 이유는 트래픽으로 인한 서버 부담 최소화 때문입니다. 무거운 .. 2022. 6. 19.
[Security] CSRF란? 웹 애플리케이션에는 수많은 데이터가 움직입니다. 클라이언트와 서버가 주고 받는 데이터에는 분명 사용자에게 민감한 정보도 포함되어 있습니다. 예를 들어 주민번호, 전화번호, 계좌정보, 여권 정보등이 포함된 데이터가 공격자에 의해 탈취당한다면 어떻게 될까요? 웹 서비스의 신뢰도 추락은 물론, 사용자들은 경제적인 피해까지 입게 됩니다. 따라서 웹 개발에서 보안은 필수사항이라고 할 수 있습니다. 웹 서비스 공격자들이 가장 많이 사용하는 방법으로 알려져있는 방법으로는 크게 3가지가 있습니다. SQL Injection : 개발자가 의도하지 않은 SQL문을 임의로 삽입해 데이터를 탈취하는 공격 XSS : 의도하지 않은 자바스크립트문을 실행시켜 데이터를 탈취 CSRF : ? CSRF(Cross Site Request .. 2022. 6. 14.
[Database] sequelize node.js mysql example 간단 예제 ORM 이란? 웹 어플리케이션을 제작할 때 3-tier로 아키텍처를 구성합니다. 클라이언트 ~ 서버 ~ 데이터베이스 3개의 tier로 구성된 아키텍처를 범용적으로 사용하는 이유는 사용자가 민감한 정보가 담긴 DB에 접근이 안되도록 하면서 각 tier에서 업무 분담을 하기 위해서 입니다. 디자인 패턴이란 무엇일까요? 소프트웨어 공학에서 프로그램을 설계하는 패턴을 의미합니다. 대표적으로 MVC 디자인 패턴을 사용합니다. Model, View, Controller로 구성된 소프트웨어 방법론입니다. Model과 Controller 사이를 연결하는 역할을 담당하는것이 바로 ORM(Object Relational Mapping) 입니다. ORM을 이용하면 SQL문을 사용하지 않고 Model을 생성하고 DB에 접근해.. 2022. 6. 12.
[Docker] Node.js Dockerfile로 배포 하는 방법 Node.js 웹 어플리케이션 컨테이너화 Node.js express 모듈로 서버를 완성한 이 후 배포할 때 Docker를 사용합니다. Docker는 프로세스, 파일 시스템, 네트워크의 독립성을 보장해주고, Dockerfile 혹은 Docker-compose를 사용해 배포 과정을 단순화 할 수 있습니다. 또한 트래픽이 몰리는 상황에서 서버의 수평적 확장을 지원합니다. 도커에 대해 더 자세히 이해하고 싶다면 아래 글을 참고해주세요. [Docker] Ubuntu 우분투 20.04 LTS 도커 설치 방법 [Docker] 도커 사용하는 이유? Docker로 배포할 때는 프로젝트를 완성한 이후 Docker Image를 만들고 실행환경에서 Image를 사용해서 Container를 실행합니다. Docker를 사용하면.. 2022. 6. 12.
[Docker] 도커 사용하는 이유? 컨테이너 사용 배경? 부산항에서는 무역에 필요한 물동량을 컨테이너를 이용해 처리한다. 대형 트럭이 싣고 전국 구석구석 누비는 컨테이너가 존재하지 않는다면 재래식 방법으로 현재와 같은 많은 물동량을 처리하기 힘들것이다. 부산항 혹은 인천항에서 컨테이너들은 대형 화물선에 실려 해외로 수출하게 된다. 물동량 TEU? 여담이지만 전국 최대 물동량을 처리하는 대한민국 항구는 부산항이다. 1년에 2270만 TEU를 처리하고 있다. 여기서 TEU(Twenty Foot Equivalent Units)이란 20 ft (약 610cm) 사이즈이 표준 규격 컨테이너를 의미한다. 부산항에서는 1년에 이런 컨테이너를 2000만개 이상 처리한다. 지금이야 컨테이너를 사용해서 수출입 물동량을 처리하지만 과거 한국전쟁 당시만 해도 .. 2022. 6. 10.
[Docker] Ubuntu 우분투 20.04 LTS 도커 설치 방법 How to install Docker in Ubuntu 20.04 LTS? 도커(Docker) 설치방법 ① apt package update $ sudo apt-get update ② Install curl $ sudo apt-get install curl ③ Add Docker official GPG key Docker Engine을 설치하기 위해서는 먼저 Docker Repository를 생성해줘야 한다. /etc/apt/keyrings 폴더를 생성하고, 도커 GPG key를 추가한다. $ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc.. 2022. 6. 10.