라벨이 tag인 게시물 표시

Kbernetes kubectl을 이용하여 Pods를 업데이트 하기

이미지
  해당 pods에 사용되는 이미지를 다른 이미지로 바꿔야 하는 경우가 있습니다. 이때도 변경된 이미지를 Pull받아야 합니다. 해당 글은 아래 gitHub repository를 이용하여 작성했습니다. gitHubLink : https://github.com/Alex-Choi0/kubernetes_create_one_pod.git 기존 코드와 다르게 '<h2>Update ver 1</h2>'를 추가하였습니다. 이는 배포된 pod에 없는 테그 이므로 같은 이미지를 사용하는 컨테이너를 다시 배포를 해야 합니다.  const express = require ( 'express' ); const app = express (); app . get ( '/' , ( req , res ) => { res . send ( ` <h1>Test for minikube</h1> <h2>Update ver 1</h2> <p>/ : Open the site</p> <p>/err : process top (get error)</p> ` ); }); app . get ( '/err' , ( req , res ) => { process . exit ( 1 ); }); app . listen ( 8080 ); 1. 이미지 Create하고 Push 하기(경로는 도커파일이 존재하는곳) $ docker build -t [image name]:[tag] . copy 이제 해당 이미지를 컨테이너에 다시 배포해야 한다. minikube dashboard를 확인하면 컨테이너의 이름을 확인할수 있다. 아래 사진으로는 'first-pods' 이다. 이미지는 'alexchoi1/first-pods:latest'를 사용하지만 위의...

SQL Postgres의 다중 tag검색하기 Many to Many

이미지
  위 사진처럼 커피(coffees)와 향(flavor) 테이블 사이에 Join 테이블이 있습니다. 해당 Join테이블은 한개의 row에 하나의 flavor만 조회가 가능합니다. 만약 2개 이상의 향이 있는 커피를 찾는다면 아래 쿼리문을 사용해야 합니다. -- SQL Query1  SELECT DISTINCT title   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'; Query1을 사용하면 Join, OR문을 이용하여 choco 또는 banana가 있는 레코드를 조회합니다. 문제는 choco는 있지만 banana가 없거나 반대의 경우도 모두 조회를 한다는 것입니다. 이를 위해서 GROUP BY를 사용하며 해당 갯수를 count해서 조회해야 합니다. -- SQL Query2   SELECT DISTINCT title, COUNT(*) as count   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'  GROUP BY title  HAVING flavor.count = 2; Query2를 사용하면 구할려고 하는 해당 title을 조회할수 있습니다.

docker 도커허브(docker hub)에 이미지 받기(Pull)

이미지
 이제 이미지를 'docker hub'에서 받도록 하겠습니다. 'docker hub'에 이미지 올리는 법(Public)에 대해서 알고 싶으시면 아래 링크를 참고해 주시기 바랍니다. 링크1 : docker 도커허브(docker hub)에 이미지 올리기(Push) 사진1) 도커허브에서 참고해야 할 사항 docker hub에 올려져 있는 레파지토리 이미지를 받습니다. $ docker pull [REPOSITORY_NAME]:[TAG OPTIONAL] copy 사진2) 이미지를 도커 허브에서 받음 사진2에서 도커허브로부터 이미지를 받을것을 확인할수 있습니다. 이제 이 이미지로 컨테이너를 생성해서 사용하시면 됩니다. 컨테이너 생성에 대해서는 아래 링크를 확인해 주시기 바랍니다. 링크2: docker 도커를 이용하여 컨테이너(CONTAINER) 생성하기 : NestJS 사용 해당 이미지는 Public 이미지 이기 때문에 누구든지 받으실수 있습니다. 개발자 디스코드 서버 링크

docker 도커허브(docker hub)에 이미지 올리기(Push)

이미지
  사진1) 도커허브 웹사이트 GitHub와 마찬가지로 도커허브(docker hub)또한 해당 이미지를 올리거나 내릴수 있습니다. 하지만 지금은 이미지를 올리는 것에 이 글을 작성하도록 하겠습니다. 만약 도커의 이미지와 컨테이너를 생성하는 방법에 대해서 모르시면 아래 링크를 참고해 주시기 바랍니다. 링크1: docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용 링크2: docker 도커를 이용하여 컨테이너(CONTAINER) 생성하기 : NestJS 사용 사진2) 도커 레파지토리 페이지 사진2에 해당되는 페이지에서 'Create Repository'를 선택해 줍니다. 사진3) 레파지토리 생성 docker hub 사이트에서 이미지를 저장할 레파지토리를 생성합니다. 이때 'Public'와 'Private'이 있습니다. 말 그대로 'Public'는 다른 개발자한테 열려있는 이미지 입니다. 'Private'는 해당 계정만 사용할수 있는 이미지 입니다. 지금은 Public로 진행하겠습니다. 사진4) 레파지토리 생성 생성이 완료되면 해당 레파지토리로 이미지를 올릴수 있습니다.  사진5) 이미지 생성 Local에서 해당 이미지를 생성하는데 주의할 점이 있습니다. 이미지의 Name이 docker hub에서 해당 레파지토리의 Name과 일치해야 합니다. 사진3에서 'alexchoi1/firstdockerhub'가 레파지토리 Name입니다. 그러면 Local의 이미지 또한 'alexchoi1/firstdockerhub'가 되어야 합니다.  $ docker push [REPOSITORY_NAME]:[TAG OPTIONAL] copy 사진6) docker hub로 이미지 push 이제 해당 이미지를 docker hub로 일어줍니다. 사진7) docker hub로 이미지 push 모든것이 정상적으로 올라가면 사진7과 같이 해당 레파지토리...

docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용

이미지
 안녕하세요. 알렉스 입니다. 이번에는 도커를 이용하여 이미지를 생성하도록 하겠습니다. 도커에서 이미지는 일종의 설계도면이라고 보시면 됩니다. 실질적으로 컨테이너를 만들기 위해서는 이미지가 필요합니다. 따라서 이미지를 어떻게 만드냐에 따라 컨테이너의 성능도 달라질수 있습니다. 사진1) 도커파일 생성(Dockerfile) 일단 도커파일을 생성합니다. 이 도커파일(Dockerfile)은 이미지를 어떤 절차로 실행할지를 알려주는 문서라고 보면 됩니다. # Base 이미지를 사용합니다. (여기서는 node 16버전을 사용합니다) FROM node : 16 # /Dockerfile # 작업 폴더를 설정합니다. 도커내의 폴더를 지정합니다. WORKDIR /app/nestjs # 해당 package.json 파일을 도커의 /app/nestjs폴더로 옮깁니다. COPY package.json /app/nestjs # 해당 package-lock.json 파일을 도커의 /app/nestjs폴더로 옮깁니다. COPY package-lock.json /app/nestjs # 'npm install'을 터미널로 실행합니다. RUN npm install # 복사하지 않은 모든 것을 도커의 /app/nestjs으로 옮깁니다. COPY . /app/nestjs # 'npm run build'을 터미널로 실행합니다. RUN npm run build # 도커 내부에 3000포트를 노출 시킵니다. EXPOSE 3000 # 컨테이너 실행시 'node dist/main'을 터미널로 실행합니다. CMD [ "node" , "dist/main" ] 위 코드는 제가 작성한 도커 파일 입니다. 이 상태로 바로 이미지를 생성할수 있습니다. 하지만 각 단계가 어떻게 진행되는지 알아야 하기 때문에 한줄씩 설명 드리도록 하겠습니다 (주석 참고 가능) - FROM 'FROM'...

HTML에 CSS 추가하기

이미지
  기존의 HTML 코드에 css파일을 추가하여 디자인을 변경하도록 하겠습니다. HTML 파일명은 'index.html'로 하고 경로는 './public/index.html'로 합니다. 코드는 위의 방법으로 작성하고 저장을 합니다. CSS가 적용되지 않은 상태는 위와 같은 페이지가 출력됩니다.  css또한 폴더를 생성(./public/css)하고 style.css파일을 저장합니다. (파일, 폴더, 경로는 자유롭게 생성 가능) background : 뒷 배경 color : 글자 색 일단 위 글은 css에 대한 설명이 아니기 때문에 위의 css에 대한 설명만 적겠습니다. <! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < link rel = "stylesheet" href = "css/style.css" > <!-- CSS파일을 HTML에 삽입 --> > < title > My HomePage </ title > </ head > < body > < h1 > My HomePage </ h1 > < p > 테스트 홈페이지. </ p > < p > 테스트 홈페이지. </ p > </ body ...

Hash Table의 구조와 원리

이미지
 안녕하세요. 알렉스 입니다. 이번에는 Hash Table에 대해서 설명을 드리도록 하겠습니다.  일단 사과(apple)상자를 어느 구역에 넣을건지를 결정해야 합니다. 물론 표를 만들어 기록하고 넣을수도 있지만 여기서는 Hash Table 방법으로 두기로 하겠습니다.  중요한 점은 apple와 구역사이에 작업이 있어야 합니다. 즉 apple와 구역이 어떻게든 연관이 되어 있다는 뜻입니다.  일단 알파벳(소문자)을 숫자로 치환한 표입니다. 이 표는 ASCII코드표중 소문자 부분만 참고했습니다. 따라서 소문자 알파벳 뿐만 아니라 넓게 숫자, 특수문자 등도 표를 확장할수 있습니다. 하지만 여기서는 Hash Tag의 원리를 파악하는 것이므로 소문자 알파벳으로 제한하겠습니다.  위 사진은 본격적으로 apple을 숫자로 변환하는 방법을 보여주고 있습니다. 각 알파벳에 대응하는 숫자를 더한 총합을 구역의 갯수, 여기서는 4를 나눈 나머지값의 구역에 넣으면 됩니다.  사실 apple외 숫자로 변환할수 있는 어떠한 문자가 들어와도 4로 나누면 0,1,2,3 요 4개중에 하나로 들어갑니다. 이유는 4로 나눌때 나머지는 4보다 같거나 클수 없기 때문입니다. 4보다 크면 또 나누면 되기 때문입니다. 이제 저는 숫자 2를 갖고 2구역으로 사과 상자를 들고 갑니다. 이제 사과 상자 뿐만 아니라 멜론, 망고, 토마토, 바나나 상자들도 Hash Tag 계산 방법을 이용해서 넣을수 있습니다.   그런데 50년이 흐른후 제가 사과상자를 찾으려고 했는데 기억이 나지 않았습니다. 제가 갖고 있는것은 '알파벳 기호 표'입니다.   50년전에 사과상자의 Hash Tag를 계산한 방법과 같이 똑같이 계산해서 사과상자가 있는 구역을 파악합니다.  물론 Hash Tag방법을 이용하여 같은 구역에 다른 과일이 있을수 있습니다. 여기서도 검색을 해야하지만 다른 주제이므로 넘어가도록 하겠습니다. 아래는 JavaSc...

Remove Element Child(자식엘리먼트 제거)_removeChild_JavaScript

이미지
 안녕하세요. 알렉스 입니다. 저번에는 부모 엘리먼트(parent element)에 자식 엘리먼트(child element)를 추가하는 방법에 대해서 알았습니다. 이번에는 제거를 하는 방법에 대해서 알려 드리겠습니다. 이전 글의 코드를 바탕으로 짰으니 참고 부탁드립니다. appendChild를 이용하여 li 늘리기 1번 appendChild를 이용하여 li 늘리기 2번 이전 코드에서 test()함수 안에 2줄만 존재합니다. 엘리먼트를 가져오는 'listID'와 제거하기 위한 '.removeChild'입니다. 여기서 ( )안에 'listID.children[0]'이 있는데 '[0]'은 #List에 자식 엘리먼트 0번째 <li>를 말하는 것입니다.  이전에 작성한 HTML문서를 보면 '<li>List1</li>'부분이 첫번째 리스트 입니다. 따라서 버튼을 누르면 1개가 삭제가 되는데 리스트의 첫번째 부분이 삭제 된다는 이야기 입니다. 물론 인덱스를 이용하여 2번째 것도 제거할수 있습니다.

appendChild를 이용하여
  • 늘리기_insertBefore_JavaScript_3번

    이미지
     안녕하세요. 알렉스 입니다. 저번에는 <li></li>리스트를 추가할때 가장 아래쪽부터 추가가 됬었습니다. 이번에는 앞쪽에서 부터 리스트를 넣도록 하겠습니다.   HTML파일은 저번에 작성한 글(링크) 과 동일합니다. 다만 전에는 <li>List2</li> 아래쪽에 생성이 됬다면 이번에는 <li>List1</li>와 <ul id = "List">사이에 생성하는 것입니다.  순서도는 이전 글과 같습니다. 다만 2개의 문장이 추가되고 1개의 문장(appendChild)은 삭제되어 있습니다.   추가된 'element'는 'list_temp'입니다. 다음 사진에서 'insertBefore'를 사용하기 위해 'child element'의 인덱스로 사용됩니다.  이제 insertBefore를 이용하여 'liElement'를 삽입합니다. 이때 'list_temp.childNode[0]'에서 '[0]'은 기존 <li>List1</li>를 말합니다. 이 위쪽에 <li>ABC</li>를 삽입하는 것입니다.  JavaScript 코드