[Docker] Docker Container OS와 VM | Docker Image Layer
·
DevOps/Docker
개요업무 관련해서 컨테이너, k8s 등 인프라 관련 발표를 진행할 일이 있었다. 이 업무를 맡으면서 컨테이너와 K8S라는 기술이 등장한 배경과 이점이 무엇인지에 대해 잘 이해했다고 생각했는데 뾰족한 질문들에 대한 답을 못했다.  질문 리스트는 다음과 같다.도커 OS와 가상환경 OS의 차이점. (왜 컨테이너 OS가 더 가벼운건지?)도커 이미지 생성 원리(도커 이미지 레이어)여러 컨테이너로 배포한다고 했을 때 port가 중복이 될텐데 그러한 문제는 발생하지 않는지?아무튼 질문에 대해 궁금하기도 하고, 확실히 알아야 할 것같아 이번 포스팅을 통해 정리해본다.  Host OS와 Guest OS 가상머신과 컨테이너의 차이점을 알기 위해서는 먼저 Host OS와 Guest OS란 무엇인가? 에 대한 이해가 필요하다..
[GCP] 인스턴스 접속 시 ssh key 접근 불가 해결 | ssh 없이 인스턴스 사용하기
·
DevOps/GCP
개요보통 서버에 SSH 접속 버튼을 눌러 접속하는데chmod 명령어로 ssh 키 관련 작업을 하고 서버에서 나간 이후....계속 아래와 같은 SSH 인증 관련 에러가 발생했다.    로그를 살펴보니까, Invalid ssh key entry 이런 오류가 발생했다.새로 키를 발급 받고 메타데이터에 추가하는 등 발버둥을 쳤지만 해결이 안돼서 다음과 같은 방법을 진행했다.  직렬 콘솔VM 인스턴스에서 직렬 콘솔에 연결을 설정하면 부팅 및 네트워킹 문제를 디버그하고 고장 난 인스턴스의 문제를 해결하는 등 여러 VM 인스턴스 관련 기타 문제 해결 작업을 수행할 수 있다. 실제로 포트를 연결하고 콘솔에 들어가보면 서버 상태와 관련한 로그들이 출력되므로, 문제 해결에 좋은 도구가 될 것같다.   직렬 콘솔을 사용한 ..
[git] Github 계정 여러 개 사용 SSH Key
·
Dev
ssh-add ~/.ssh/생성한 개인키 명개요소속을 다르게 해서 프로젝트를 하다보면 깃허브 계정도 다르게 쓰는 경우가 생긴다. 이번 프로젝트에서 다른 아이디를 생성하고 Bitbucket과 Source tree에서 작업을 했는데 ssh key 관련 문제가 계속 발생해서 이번 기회에 정리를 해보자..계속 permission denied가 나서 ssh key를 생성하고 등록해도 해결이 안되는 사람들에게 도움이 될 듯하다. 우선 기억해야 할 것은 프로젝트마다 다른 github 계정을 사용하는 경우라면 SSH Key를 따로 설정해주어야 한다.지금부터 그 과정에 대해 설명한다. SSH Key 생성1. SSH Key를 관리하는 디렉토리로 이동 후, SSH Key 목록을 확인해준다. 일반적으로 아래와 같은 경로에 저..
[GCP] Cloud Build & Cloud Run CI/CD, Docker, Bitbucket
·
DevOps/GCP
개요CI/CD 구축의 핵심 과정인 Google Cloud Build와 Cloud Run을 세팅하는 과정에 대해 알아보자.  1. Google Cloud Build 설정하기Google Cloud Build란?Google Cloud Build는 Google Cloud 인프라에서 빌드를 실행하는, 말 그대로 빌드 서비스다. 사용자가 세팅한 Trigger가 발생하면 Github, Cloud Storage 등등에서 소스 코드를 가져오고, 사양에 맞게 빌드를 실행한다. Docker Container나 Java Archive와 같은 도구를 통해 Artifact(빌드 결과물)를 빌드하도록 설정할 수 있다.  Cloud Build 동작 과정 1. Cloud Build의 빌드 트리거에 사용자가 설정한 코드 변경이 감지된다..
[GCP] Google Cloud SDK 설치 및 세팅
·
DevOps/GCP
개요Google Artifact Registry 구축기에 Google Cloud SDK 설치 및 세팅 관련 과정을 첨부해서 글을 작성했었는데 이를 따로 빼는 게 맞다고 판단하였다. GAR에만 쓰는 게 아니고 또 GAR 관련 포스팅 해야할 내용이 추가되었기 때문에.. 😆  1. Google Cloud SDK란?쉽게 말해서 Google Cloud 관련 툴을 다루기 위한 명령툴이다. 주의할 점필자는 서버 상에서 AR(Artifact Registry)에 접속해야 하므로 VM 인스턴스 서버에 설치를 했다.필요 하에 서버 자체에 설치를 할 수도 있지만 일반적인 경우라면 로컬에 설치하고, 편리하게 로컬 환경에서 접속할 수 있는 도구다.   2-1. Google Cloud SDK 패키지 경로 추가VM 인스턴스에 Go..
[GCP] Docker와 Artifact Registry
·
DevOps/GCP
개요GCP 환경에서 CI/CD를 구축하기 위해 도커 컨테이너 이미지가 저장될 저장소가 필요하다.처음에는 Docker Hub를 통해 이 저장소를 구축할 생각이었으나, private/public 저장 공간을 생각 못 했다.Docker Hub의 private version을 이용하려면 요금을 지불..해야한다..! 그런데 어차피 유료라면 Google의 Artifact Registry라는 저장소를 사용하는 게 낫다고 판단했다.Google Cloud에 종속성이 높지만, 보안적인 측면에서 더 강한 장점이 있는 Google Artifact Registry를 사용하기 위해 해당 문서를 작성한다. Artifact RegistryArtifact Registry란?컨테이너 이미지(docker)나 언어 패키지(Maven, np..
[Docker] Docker와 Docker Hub로 CI/CD 구축하기
·
DevOps/Docker
개요 로컬 환경의 소스 코드를 도커 이미지로 만들어 도커 허브로 푸쉬하고, Cloud Run을 통해 배포해보자!이 포스팅에서는 Cloud Run 전 단계의 Docker 설정을 해볼 것이다.포스팅에 앞서 로컬 환경에 다음 세팅이 모두 완료되었음을 가정하고, 이와 관련한 설명은 생략한다.Docker Local SettingDocker Installation on VM InstanceDocker Hub SettingGCP VM instance SettingBitbucket Repository, branch SettingSource Tree - Bitbucket - IntelliJ 연동1. Docker Image 생성애플리케이션 코드가 담긴 도커 이미지를 생성해준다. 왜 생성할까?도커 이미지를 원격 저장소인 도..
[JAVA] 익명 클래스(Anonymous Class), 람다식(Lambda)
·
언어/JAVA
개요Effective Java 7장에서 등장하는 개념을 공부하기 위한 포스팅이다.1-1) 익명 클래스(Anonymous Class)프로그램에서 일시적으로 한번만 사용되고 버려지는 객체다. 분명히 Java Spring을 공부할 때는 코드의 재사용성을 고려하며 프로그래밍을 해야 좋은 개발자라고 배웠다.그렇다면 재사용이 불가능하고 확장성도 좋지 않은 익명클래스를 왜 사용하는 걸까? 프로그램 내에서 일시적으로 사용되는 객체 처리에 사용한다.확장성을 활용하는 것이 유지보수에서 더 불리할 경우에 사용한다. 해당 블로그 에서 이를 이해하기 위한 아주 좋은 예시를 들고 있다.일부를 발췌해서 이해해보자. 1-2) 확장성이 필요없는 극단적인 예시 (출처)곤충이라는 부모클래를 상속받는 거미 구현 클래스가 있다. 거미는 전 ..
[GCP/Docker] GCP(Google Cloud Platform) Docker Setting
·
카테고리 없음
개요 Google Cloud Platform에 VM 인스턴스를 만들고 Docker를 설치하여 컨테이너화하려고 한다. 이번 포스팅에서는 VM 인스턴스에 Docker를 설치하는 과정을 정리한다. VM 인스턴스는 무료 버전(e2-micro)로 설정하고 부팅디스크는 20GB, http와 https 트래픽 접근을 허용해주었다. OS는 ubuntu 20.04 LTS로 세팅하였다. VM 인스턴스에 Docker 설치하기 VM 인스턴스를 조작하기 위해 os 접근 방법은 아래 콘솔 페이지에서 빨간 박스를 클릭하면 된다. SSH로 인스턴스에 접근을 해주면 다음과 같은 터미널 화면이 뜬다. 박스로 가린 내용은 서버 유저네임이다. 도커 설치를 위한 VM 인스턴스 기본 세팅 우선 루트권한을 얻기 위해 sudo su 명령어를 입력..
[spring] @Async와 SimpleAsyncTaskExecutor, TaskExecutor 그리고 thread pool
·
Dev/Spring & JPA
@AsyncAsynchronous excution을 지원하는 스프링 어노테이션이다.빈에 등록된 함수에 이 하지만 이러한 방식은 @Async 어노테이션을 적용하면 요청을 별도의 스레드(같은 Object data를 공유하는 스레드 중 하나)에서 실행한다. 이러한 Async 동작방식을 적용하여 호출자는 해당 메서드가 완료되는 것을 기다릴 필요가 없다. public interface EmailService { @Async void sendEmail(String template, Map properties);} → 위 예시에서 sendEmail 메소드는 별도의 스레드에서 실행된다.   Spring’s @Async annotation, indicating that it should run on a sep..
[백준/1015] 수열 정렬
·
PS/BOJ&Programmers
수열 정렬  Baekjoon Online JudgeBaekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.www.acmicpc.net  알고리즘입력된 배열 A의 오름차순을 새로운 배열에 저장하는 문제다.  일단 배열 A는 수열 P처럼 0부터 N-1까지의 수를 한 번씩 포함하는게 아니라 예시의 2 1 3 1 처럼 같은 숫자가 2번 이상 반복될 수 있기 때문에 가장 작은 값부터 큰 값까지 하나씩 차례대로 순서를 찾았다. 복잡도를 따졌을 때 이러한 방식으로 문제를 해결하더라도 N  같은 숫자를 어떻게 처리할 것이냐가 관건이었는데, k라는 변수를 하나 만들어서 indexing하도록 지정해주었다.  전체 코드import sys; input = sys.stdin.read..
[개발일지] 개발자가 가져야하는 습관, git pull
·
회고 & 후기/개발 일지
이슈한 Task가 끝나고 새로운 Task를 진행하려고 새로운 repo에 들어가서 작업시도했다. 그런데 아래 사진과 같이 어떤 파일이 없다는 error 아무리 해당 레포의 브랜치를 pull해도 해결이 안되었다.보안상 사진을 업로드할 순 없어서 글로 써보면 구조는 다음과 같다. 해결작성된 코드를 보면 repository의 내용들이 서로 연관되어있기에,위에서 없다고 알려주는 해당 레포(packge)에 가서 pull을 받아와야 한다. (너무 당연한데 작게 사이드 프로젝트만 했었다면 충분히 모를 수 있는 것같다..) 깨달음사실!이정도면 포스팅까지 하지않겠는데 작업할 때 항상 pull하는 습관을 들이는게 좋다는 걸 계속 깨닫고있다.다른 사람이 작업을 하고 커밋을 추가했는데 만약 소통이 안되었다면?(사실상 누군가가 ..
sebinChu
Studying IT with cobinding