2021/01

애플리케이션 내 단일 컨테이너의 적정 비중 실제 운영에서는 애플리케이션을 컨테이너 안에 어떻게 배치하는지가 매우 중요하다. 컨테이너 하나가 맡을 수 있는 적정 수준의 책임은 어느 정도일까? 세세하게 역할을 나누다가 시스템 전체의 복잡도가 올라가지는 않을까? 단일 컨테이너의시스템 내 비중은 어떻게 결정해야하는지 알아보자. 컨테이너 1개 = 프로세스 1개? 애플리케이션 + 인프라 = 도커 컨테이너 결과부터 말하자면, 컨테이너 1개 = 프로세스 1개 원칙은 괜찮게 생각될 수 있으나 지나치게 복잡해질수도 있다. 예를 살펴보자 정기적으로 작업을 실행하는 애플리케이션 정기적으로 어떤 작업을 실행하는 컨테이너가 있다고 가정해보자. 스케줄러 + 작업이 합쳐진 애플리케이션을 만든다면 컨테이너 1개 = 프로세스 1개 원칙..
젠킨스를 Master/Slave로 보통 구성한다고 한다. (사실 실무에서는 사용해본적이 없지만, 많은 블로그나 책에서 이렇게 사용한다고 한다.) 도커 컴포즈를 연습해볼겸 젠킨스를 Master/Slave로 구축을 해보자, Master : 관리 기능 및 작업 실행 지시 Slave : 실제 작업 진행 Master 젠킨스 컨테이너 실행하기 1.docker-compose.yml 작성 version: "3" services: master: container_name: master image: jenkins/jenkins:lts ports: - 9900:8080 volumes: - ./master_jenkins_home:/var/jenkins_home volumes 항목은 호스트와 컨테이너 사이에 파일을 공유할 수 ..
MSA(MicroService Architecture)란? 내가 생각하기에 MSA를 이해하기 가장 쉬운 한줄 정의는 '하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처' 이다. 왜 이런 아키텍처가 나왔을까? 대부분의 어플리케이션은(현재 우리도 그렇다) 전통적인 아키텍처를 뜻하는 모놀리식(Monolithic)이다. 모놀리식 아키텍처는 소규모 프로젝트에서 합리적이고 간단한 아키텍처이지만, 일정 규모 이상의 서비스가 되면 아래와 같은 한계가 발생하게 된다. 시스템 구조 파악의 어려움 빌드, 테스트, 배포 시간이 기하급수적으로 늘어남 서비스를 부분적으로 Scale Out하기 어려움 부분의 장애가 전체 서비스로 이어지는 경우가 존재(일부 모듈 변경사항 때문에 전..
Scale Out 접속된 서버의 대수를 늘려 처리 능력을 향상시키는 것(수평확장) 비교적 단순하지만 다수의 처리를 병행적으로 실행해야 하는 경우 적합 Scale Up 서버 그 자체의 처리 능력을 향상 시키는 것(수직확장) 스케일 아웃으로 정합성 유지가 어려운 데이터베이스 서버에 적합(OLTP)
Blocking/Non-Blocking 블로킹/논블로킹은 호출되는 함수가 바로 리턴이 되는지 안되는지에 대한 관점이다. 호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 준 다면 NonBlocking 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기한다면 Blocking Synchronus/Asynchronous 동기/비동기는 호출되는 함수의 작업 완료 여부를 누가 신경쓰느냐에 대한 관점이다. 호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면 호출되는 함수가 전달받은 callback을 실행하고, 호출하는 함수의 작업 완료 여부를 신경쓰지 않는다면 Asynchronus 호출하는 ..
2020/12/19 - [프로그래밍 노트/JAVA] - [JAVA] JVM 가상머신 메모리 구조 가비지 컬렉터(GC) 애플리케이션이 생성한 객체의 생존 여부를 판단하여, 더 이상 참조되지 않거나 null인 객체의 메모리를 해제시키며 메모리를 반납한다. (Heap의 재사용) Minor GC New/Young 영역에서 일어나는 Garbage Collection 새로 생성된 객체(Instance)는 Eden 영역에 위치한다. Eden 영역에서 GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동된다. 이 과정을 반복하다가 계속해서 살아남아 있는 객체는 일정시간 참조되고 있다는 뜻이므로 Old영역으로 이동시킨다. Eden 영역에 객체가 가득차게 되면 GC 발생 Survivor0 영역에 ..
· Life/Life
집을 사고 싶다. 살수 있을까? 주택청약 지역별 예치금 현재 내가 살고 있는 주소지 기준으로 예치금이 달라짐 모집공고전일까지 돈을 예치해두기만하면 됨 주택청약 1순위 조건 지금까지 주택을 보유했던 기록이 없어야함 국민주택 수도권 : 가입기간 1년과 월 납입금 연체 없이 12회 납입 수도권 외 지역 : 가입기간 6개월과 월 납입금 연체 없이 6회 납입 but, 투기지구/투기과열지구/조정대상지역 은 가입기간 2년과 월 납입금 연체 없이 24회 납입 1순위 불가 대상 : 세대주가 아닌사람, 5년 이내에 다른 주택에 당첨된 자, 2주택 이상 소유한 세대 민영주택 수도권 : 가입기간 1년 수도권 외 지역 : 가입기간 6개월 but, 투기지구/투기과열지구/조정대상지역 은 가입기간 2년 1순위 불가 대상 : 5년 이..
리스트에서 해당 요소가 존재하는지 확인 private boolean isContainNumber(int ballNumber){ // return list.stream() .filter(ball -> ball.getNumber() == ballNumber).findFirst().isPresent(); // anyMatch로 찾으면 된다. return list.stream() .anyMatch(ball -> ball.getNumber() == ballNumber); }
서버 인증방식 종류에 대해 살펴보자. 더 불어 토큰인증방식에 사용되는 JWT도 간단하게 알아보자. 1. 세션/쿠키 인증방식 서버 측에서 사용자들의 정보를 기억한다. 사용자들의 정보를 기억하기 위해 세션을 사용한다. (메모리나 디스크 또는 데이터베이스 등을 이용. 보통 Redis를 많이 사용한다고 한다.) flow 사용자 로그인 서버에서 계정정보 검증 후 사용자의 고유한 ID값을 부여하여 세션 저장소에 저장 후 매핑되는 세션 ID를 발행 사용자는 서버에서 발급받은 세션 ID를 쿠키에 저장한 후, 요청을 보낼 때 같이 전송 서버에서는 쿠키를 받아 세션 저장소에서 데이터를 검증 후 대응되는 정보를 가져옴 특징 HTTP 요청 중 쿠키가 탈취당해도, 쿠키(세션 ID)는 의미가 있는 값이 아니기 때문에 보안상 안전..
작업이 아직 완료되지 않은 상태에서 다른 브랜치로 체크아웃을 하고싶다면, 결과물을 스테이시(stash)영역에 잠시 보관할 수 있다. 현재 진행중이던 내용들을 git stash로 저장해두고 다른 브랜치로 이동하여 작업한 뒤에 다시 돌아와 복구하여 작업진행이 가능하다. git stash : 스테이시로 보관 git stash list : 스테이시 목록 조회 git stash pop : 저장내용 복구 git stash apply : stash에 저장된 내용을 브랜치에 적용 git stash drop stash@{0}: stash에 저장된 내용을 삭제 git stash pop vs git stash apply git stash pop은 저장내용을 현재 브랜치에 적용 후 stash 목록에서 drop 한다. git ..
깡냉쓰
'2021/01 글 목록