전체 글 318

Docker & Kubernetes

1. 도커의 개념 1) 컨테이너 서비스 : 서비스하고자 하는 애플리케이션 코드와 프로세스를 격리가능하게 한다. 컨테이너 서비스는 기본 환경과 다르게 애플리케이션 실행에 필요한 바이너리, 라이브러리 및 구성파일 등을 패키지로 묶어 배포하는 방식으로 논리적 패키징 매커니즘을 제공한다. 호스트 운영체제를 공유하고 애플리케이션에 필요한 환경을 패키징 하는 것을 운영체제 레벨 가상화라고 한다. (vs. 하드웨어 레벨 가상화 : 하이퍼바이저 등을 이용한 가상머신 방식) 컨테이너 동작에 필요한 모든 내용을 사전에 코드로 작성하여 Ansible고 같은 인프라 프로비저닝도구로 자동화하게 되면 기업이 필요할 때 마다 애플리케이션 및 서버 환경을 적은 비용으로 빠르게 개발, 배포, 확장할 수 있다. 이를 IaC(Infras..

DevOps 2023.01.29

Java Wrapper class

1. Wrapper class 기본타입의 데이터를 객체로 취급해야 하는 경우 자바에서 제공하는 Wrapper class를 이용한다. 예를 들어 어떤 메소드의 파라미터가 객체타입만 가능하다면, 기본타입을 그대로 사용할 수 없기 때문에 래퍼클래스를 한 번 거쳐 객체로 변환후 메소드를 호출하는 것. * primitice type, reference type 원시 타입은 쉽게 말해, 정수, 실수, 문자, 논리 리터럴등의 실제 데이터 값을 저장하는 타입이고, 참조 타입은 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다. 2. 오토박싱, 오토 언박싱 Integer number = new Integer(200); // 박싱 int n = number.int..

Java Optional, Stream

1. Optional Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다. Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하된다. 그렇기 때문에 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다. 즉, Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용되어야 한다. 2.Optional 메소드 1) Optional.emptuy() : 값이 Null인 경우 2) Optional.of() ..

Jenkins, Packer, Ansible의 역할

1. 프로비저닝이란? 사용자의 요구에 맞게 서버를 설정해 두었다가 필요시 서버를 즉시 사용할 수 있는 상태로 미리 준비해 두는 것. ex) ec2 인스턴스에 JDK를 설치해 두거나 MySQL을 설치하고 DB를 생성해두는 작업 등 2. Jenkins, Packer, Ansible Jenkins에서 AMI 빌드 JOB을 실행하는 과정 1) Jenkins 서버에서 GIT에 코드레벨로 관리되는 Packer와 Ansible 코드를 pull 받고 2) Jenkins 서버에서 Packer가 인스턴스를 셋업한다. 3) Ansible을 이용해 셋업된 인스턴스에 프로비저닝 작업을 진행하고 4) Packer가 프로비저닝 완료된 인스턴스를 복사해 AMI를 생성한다. 3. Ansible Ansible은 프로비저닝, 애플리케이션..

리눅스 파일시스템 및 명령어

1. 리눅스 파일시스템 쉘 -> 운영체제 제어 1) / 루트 2) /home/ : 윈도우의 사용자 홈디렉토리와 동일한 기능, 사용자계정별로 3) /bin/ : 윈도우의 system(공통파일, 실행파일 두는 곳) 4) /mnt/ : 과거에 다른 것과 엮어서 쓰기위해 mnt라는 폴더를 뒀었는데 현재는 /media에 두고 쓴다 5) /usr/ 프로그램 열어서 설치할 때 program파일 설치해두는 곳 6) /etc : 윈도우에서 registry 리눅스 폴더 구조 https://webdir.tistory.com/101 리눅스 디렉토리 구조 리눅스의 디렉토리 혹은 파일 시스템 구조는 윈도우와는 조금 다른 구조를 가지고 있습니다. 기본적으로 디렉토리를 구분하는 '/'(슬래시)는 리눅스에서 사용하고 윈도우는 반대인 ..

AWS EC2 + Docker + AWS ECS를 통한 orchestration

컨테이너의 생성과 종료, 자동 배치 및 복제, 로드밸런싱, 클러스터링, 장애 복구, 스케쥴링 등 1. AWS ECS 란? (엘라스틱 컨테이너 서비스) 아마존 ECS란 AWS 클라우드의 완전 관리형 서비스로 안정적으로 확장가능하며 배포 속도가 빠르다. ECS는 크게 두가지 호스팅 방법을 갖는다. 첫 번째는 서버를 두지 않고 클라우드 인프라에서 애플리케이션을 호스팅하는 파게이트 서버리스방식, 두 번째는 관리용이하게 하기 위해 EC2인스턴스를 서버로 구성한 도커 기반 서비스 인프라를 호스팅 하는방식이 있다. 2. AWS 기반의 이미지 저장소 ECR * 컨테이너 오케스트리에션 도구 1) 구글 쿠버네티스 2) 도커, 스웜 3) 아파치, 메소스 4) 하시코프, 노마드 5) AWS, 엘라스틱 컨테이너 서비스(ECS)..

DevOps 2023.01.23

Docker와 Vmware, Virtualbox 차이점

1. 하이퍼 바이저란 ?(VMware, VirtualBox) 하이퍼바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있는 소프트웨어이다. 많이 사용하는 VM 구조는 기존 OS 위에서 하이퍼 바이저를 사용하는 방식이다. 예를 들어 윈도우 PC에서 VMware 설치한 후 거기에서 ubuntu OS를 설치하는 구조. https://devlog-wjdrbs96.tistory.com/279 [Docker] Docker와 기존 가상화 기술의 차이 알아보기 Docker와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해하기 가상화 기술 나오기 전 한대의 서버를 하나의 용도로만 사용 남는 서버 공간 그대로 방치 하나의 서버에 하나의 운영체제, 하나 devlog-wjdrbs96.tistory.com 2. 가상화..

JPA Insert vs. Update

0. interface public interface UserRepository extends JpaRepository { @EntityGraph(attributePaths = "authorities") Optional findOneWithAuthoritiesByEmail(String username); User findByEmail(String email); } Repository의 save(T Object)를 통해 Entity를 저장 or update한다. 1. Insert 새로운 인스턴스 생성 후 setter or 생성자를 통해 객체 생성 후 객체 넘길 때 2. update 새로운 인스턴스를 생성하는 게 아닌 select해온 후 결과 객체에 setter 혹은 생성자를 통해 객체를 생성하고 save에..

Spring Filter, Interceptor의 범위 및 SpringSecurity FilterChain와의 관계

0. Servlet Filter VS. HandlerInterceptor 아래 그림에서와 같이 Filter는 DispatcherSevlet 앞에서 먼저 동작한다. Interceptor는 Dispatcher Servlet에서 Controller(Handler)사이에서 동작한다. 1) 필터 웹 어플리케이션의 Context 역할 스프링 기능을 활용하기 어려움 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등을 구현 2) 인터셉터 스프링의 Spring Context의 기능이며 일종의 빈 스프링 컨테이너여서 다른 빈을 주입하여 활용성이 좋다. 다른빈을 활용할 수 있어 보통 인증, 권한 등 구현함 1. JwtFilter에서 OncePerRequestFilter 상속 VS GenericFilterBea..