본문 바로가기

반응형

전체 글

(41)
MySQL Replication에서 Binlog Format을 Statement로 사용할 경우 문제점 현상황 운영중이던 서버의 에러로그에 이전부터 지속적으로 다음과 같은 경고문구가 남는 것을 보았다. [Warning] Statement is not safe to log in statement format. Statement: 원인 해당 서버의 Binlog Format은 Statement로 설정되어 있기 때문에 발생하였다. 에러 로그에 기록된 SQL문을 보면 대부분 LIMIT 구문을 사용하고 있다. Statement 포맷에서 LIMIT 구문을 사용하면 마스터와 슬레이브에서 해당 SQL문을 동시에 실행한다 하더라도 100% 동일한 결과를 보장할 수 없기 때문에 데이터 정합성에 문제가 생길 수 있기 때문에 경고 메시지가 나왔다. 해결책 개발사 측에 Statement 포맷 사용시 안전하지 않은 SQL문을 사용하..
MySQL Aborted Connections 현상 운영중인 서버의 에러로그에 지속적으로 아래와 같은 경고 메시지가 남았다. [Warning] Aborted connection xxxxxxx to db: 'database' user: 'user' host: 'xxx.xxx.xxx.xxx' (Got an error reading communication packets) 원인 클라이언트가 정상적으로 연결되었지만 이후 부적절하게 또는 강제적으로 종료되었을 때 Aborted_clients 상태값의 카운트를 증가한 후 에러 로그에 남게 된다. 이때 에러 로그에 기록을 남기려면 --log-warnings 옵션을 활성화해야 한다. MySQL Client에서 Aborted_clients 상태값을 확인하니 다음과 같이 나왔..
Docker 이미지 용량을 줄이는 Tip FromLatest.io 사용하기 FromLatest에서 Dockerfile Lint를 하고, 이미지를 작게 할 수 있는 다양한 팁을 얻을 수 있다. https://www.fromlatest.io/#/ 더 작은 Base 이미지 사용하기 alpine 이미지를 사용하면 이미지 용량을 줄일 수 있다. DockerHub에서 이미지 태그에 alpine이 명시된 것들을 볼 수 있다. https://hub.docker.com/_/alpine/ Application De-Coupling 하기 하나의 컨테이너는 단 하나의 어플리케이션 / 용도로만 사용한다. (객체지향 원칙의 SRP와 같이) 한 이미지에 다수의 애플리케이션/컴포넌트가 들어있다면 이를 각각의 컨테이너로 나눈다. 이를 통해 이미지 사이즈 감소, 더 나은 확장..
나만의 Docker Compose Cheat Sheet Docker Compose 구성 파일 (docker-compose.yml) 일반적으로 어플리케이션은 여러 컴포넌트(웹 서버, 어플리케이션 서버, 캐시, DB 등)와 함께 구동된다. 또한 한 어플리케이션도 다수의 서비스로 분리하고, 이것들이 모여 하나의 어플리케이션으로 역할을 하기도 한다. 각각의 구성요소를 컨테이너로 만들어 개별로 운영하는 것은 매우 번거로울 것 이다. Docker Compose를 이용하면 여러 컨테이너를 일괄 관리하고, 설정하고, 의존성을 관리할 수 있다. Compose 정의 파일은 사용할 Docker Engine에 맞는 Compose File Format Version을 지정해야 한다. 호환되는 버전은 https://docs.docker.com/compose/compose-file/ ..
나만의 Dockerfile Cheat Sheet 명령어 키워드들은 대/소문자를 구분하지는 않지만, 관례적으로 대문자를 사용한다. 주석은 #을 사용한다. 기본 명령어 FROM Base Image를 지정한다. ### # 사용법 ### FROM [이미지명] FROM [이미지명]:[태그명] FROM [이미지명]@[다이제스트] ### # 사용 예시 ### FROM ubuntu:xenial RUN (이미지를 작성하기 위해 실행하는) 명령을 실행한다. ### # 사용법 ### RUN [실행하고 싶은 명령] ### # 사용 예시 : Shell 형식 # - /bin/sh -c를 사용하는 것과 동일 # - 기본 쉘을 변경하려면 SHELL 명령 사용 ### RUN apt-get install -y nginx ### # 사용 예시 : Exec 형식 # - 쉘을 경유하지 않..
나만의 Docker Cheat Sheet 초창기 Docker 명령어들은 docker --help 입력 시 그룹화 없이 쭉 나열해 보여줬다. 때문에 처음 봤을 때 보기 어려울 뿐만 아니라 내가 사용한 명령어임에도 불구하고 기억에 잘 남지 않았다. Docker 개발자들도 이를 인지했는지 Docker 1.13 버전부터 Management Commands라는 것을 발표했다. Docker Command가 제공하는 기능들을 conatiner, image, network, service, volume, system 등으로 Top-Level에서 분류하고, 각 하위 명령어가 관련 명령어들을 포함하는 기능이다. 기존 사용자를 위해 예정 명령어들도 그대로 유지하는 것 같다. 그러나 실제로 사용해보니 Management Commands를 사용한 지 얼마 안 되었음에..
스트림(Stream) 활용 스트림을 활용하면 외부 반복 을 내부 반복 으로 바꿀 수 있어 좀 더 직관적인 코드를 작성할 수 있습니다. 또한 병렬로 수행할지 여부를 결정할 수 있습니다. 본문에서는 스트림 API를 활용하는 방법을 정리합니다. 필터링과 슬라이싱 filter() distinct() limit() skip() // ** 프레디케이트로 필터링 ** // 스트림 인터페이스의 filter 메서드는 Predicate를 인수로 받고, // 일치하는 모든 요소를 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); // ** 고유 요소 필터링 ** // distinct 메서드로 중복을 제거한다. List numbers = Ar..
스트림 (Stream) 스트림이란? 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 로 정의할 수 있다. 스트림을 사용하면 선언형(즉, 데이터를 처리하는 임시코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있다. 따라서 데이터 컬렉션 반복을 멋지게 처리할 수 있으며, 별도의 멀티 스레드 코드를 구현하지 않더라도 데이터를 병렬로 처리할 수 있게 된다. 다음은 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 정렬하는 로직을 Java7과 Java8로 비교하는 예시이다. // Java7 List lowCaloricDishes = new ArrayList(); // 컨테이너 역할만 하는 Gabage 변수! for (Dish d : menu) { if(d.getCalories() < 400) { lowCalo..

반응형