프로그래밍(Web)

    [바미] 실전 아파치 카프카 - 카프카의 구성요소

    카프카의 구성요소 프로듀서 : 데이터 생산자이며 브로커에 메시지를 보내는 애플리케이션 메시지 : 카프카에서 데이터를 다루는 최소 단위 브로커 : 데이터 수신 및 전달하는 서비스 컨슈머 : 브로커에게 메시지를 전달받는 애플리케이션 토픽 : 메시지를 종류별로 관리하는 스토리지. 브로커에 배치되어 관리된다. 프로듀서와 컨슈머는 특정 토픽을 지정하여 메시지를 송수신한다. 프로듀서 -> 브로커 -> 컨슈머의 흐름에서, 프로듀서 -> 브로커는 PUSH형 / 브로커 -> 컨슈머는 PULL형으로 이루어집니다. PULL형의 장점은 컨슈머 고장 시 브로커에 미치는 영향이 적으며, 컨슈머의 증감에 효율적으로 대응할 수 있게 되죠. 카프카의 브로커에서 분산 처리를 위한 관리 도구로 주키퍼가 필요합니다. 주키퍼는 카프카에서 분..

    VisualVM 실행 시 Cannot find java 1.8 or higher 에러 뜰 때

    위와 같은 에러 창이 뜨는 경우 다운받은 VisualVM 폴더에 들어 간 뒤 etc 폴더에 들어감. 그 다음 visualvm.conf파일을 연 뒤, 밑으로 내리다 보면 visualvm_jdkhome 부분이 있을텐데 주석 제거하고 자신의 JDK경로를 입력하면 실행된다.

    쿠버네티스와 컨테이너, 도커에 대해 알아보기.

    들어가기전에 요즘 IT 생태계에 도커와 쿠버네티스라는 것을 사용하는 회사가 많아졌다. 도커, 쿠버네티스를 접하지 않은 나에게는 둘 다 생소한 단어들이였다. 최근에 우리 회사에서 도커에 대해 관심을 보이기 시작하여 도커를 사용하려는 움직임을 보이기 시작했고, 도커와 쿠버네티스에 대해 용어적으로 공부한 것들을 기록해본다. 용어 정리 용어 뜻 컨테이너 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술 컨테이너 런타임 컨테이너를 다루는 도구 도커 컨테이너를 다루는 도구 중 유명한 것 쿠버네티스 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구 오케스트레이션 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위 컨테이너부터 살펴보면 내가 구동하려는 애플리케이션을 실행할 수 있는..

    Eclipse Memory Analyzer를 사용하여 메모리 누수 파악하기.

    Java 프로세스를 다루는 Linux서버를 운영하다 보면 종종 OutOfMemory(OOM)에러를 만날 때가 있어요. 보통 OOM에러가 발생하면 시스템 자원이 소멸되어 "bash fork retry no child process" 에러로 이어지더군요. 그래서 아래와 같은 쉘 스크립트 코드를 추가하여 Java 프로세스를 실행시키더라도 "bash fork retry no child process" 에러가 발생 했을 시점엔 사용 가능한 시스템 자원이 충분하지 않아서 JVM(Java Virtual Machine)에서 덤프 파일을 생성하는 데 실패했어요. 그래서 제가 찾은 방법은 OutOfMemory(OOM)에러가 발생하기 전 힙 덤프 파일을 생성하여 메모리 누수가 되는 부분을 찾아 예방하는 방법외엔 없더라구요...

    페이징 예제 코드

    JS // 페이징 함수 function pagination() { // 시작 페이지 let start_page = 1; // 페이지 별 보여줄 게시물 수. let req_num_row = 5; // 테이블의 각 행을 선택하여 변수 tr에 저장 let tr = $('.board tr'); // 총 행의 개수를 변수 total_num_row에 저장 let total_num_row = tr.length; // 전체 페이지 수 계산 let num_pages = Math.ceil(total_num_row / req_num_row); // 이전 버튼 추가 if (num_pages > 0) { $('.pagination').append('Previous'); } // 페이지 버튼 추가 i는 페이지 버튼에 보여질 숫자..

    [바미] 3년차 개발자의 회고

    들어가기전에.. 한 회사에서 신입으로 입사한 지 엊그제 같은데 벌써 만으로 3년이라는 시간이 지났다. 백엔드 개발자를 지원하여 입사하게 되었지만 처음엔 프론트엔드 개발부터 시작하여, 현재는 백엔드 개발을 하고 있다. 3년이라는 시간이 지나며 여러개의 큼지막한 프로젝트를 진행하였고, 블로그를 관리하며 개발 관련 된 부분들을 공부했던 것들을 정리하였지만 지금까지 있었던 일들을 되짚어 보아야 할 필요성을 느끼게 되어 지금 내가 잘했던 점, 아쉬웠던 점을 적어보려한다. 좋았던 점 여기에선 내가 지금까지 시간을 보내면서 잘했던 점, 좋았던 점을 써보려한다. 다양한 프로젝트 경험 지금까지 Node.js, Typescript, Javascript, Java, Go를 사용하여 프로젝트를 진행했던 경험이 있다. Node..

    [바미] Java - BigDecimal 반올림 메소드 주의사항.

    버전이 업데이트 되면서 'ROUND_'로 시작하는 메소드 명들은 BigDecimal.ROUND_UP 올림 BigDecimal.ROUND_DOWN 버림 BigDecimal.ROUND_HALF_UP 반올림(5이상) BigDecimal.ROUND_HALF_DOWN 반내림(5이하) RoundingMode으로 사용하는 부분은 아래로 대체되었다. RoundingMode.UP RoundingMode.DOWN RoundingMode.HALF_UP RoundingMode.HALF_DOWN http://cris.joongbu.ac.kr/course/java/api/java/math/RoundingMode.html

    [바미] 클린 코드를 읽고..

    들어가기전에.. 읽은 지 꽤 된 책이지만 내용이 너무 좋아 다시 리마인드 할 겸 의미 있었던 내용들을 적어두려고 합니다. 그렇기 때문에 에서는 책의 모든 내용을 다루지 않습니다. 깨끗한 코드 이 책의 1장에서는 '깨끗한 코드'에 대해 각자 생각했던 내용을 다뤘다. 책을 읽으며 공감이 됐던 부분을 종합해서 내가 생각하는 깨끗한 코드는 아래와 같다. 제 3자가 읽기 쉽고 고치기 쉬운 코드 한 가지에 집중하는 코드 테스트 케이스가 있는 코드 특히 여기에서 가장 중요하게 생각하는 부분은 제 3자가 읽기 쉽고 고치기 쉬운 코드라고 생각하는데, 코드라는 게 결국 한 사람에 귀속된다기보다는 다른 사람이 코드를 이어받아 유지 보수하는 경우가 더 많기 때문에 제 3자가 읽기 쉽고 고치기 쉬운 코드가 가장 중요하다고 생각..

    [바미] linux서버 용량 관리하기.

    안녕하세요. 회사 내에서 서비스를 운영하기 위해 많은 서버들이 사용되고 있는데요. 그 중에 37GB정도의 용량을 가진 Java 서버의 메모리가 80%넘게 찼다는 봇 알림을 받게 되었어요. 제일 처음 했던 것은 가장 많은 용량을 차지하는 디렉토리를 알아보기 위해 각 디렉토리마다 들어가 아래와 같은 'df' 명령어를 사용하였어요. du -ah | sort -n -r | head -n 10 위의 코드를 사용하면 해당 디렉토리 안에 용량을 가장 많이 차지하는 것 Top10을 뽑아줘서 굉장히 유용했어요. 그 결과 가장 많이 나온 디렉토리는 jar파일들을 저장하고 있는 디렉토리와 log를 쌓고 있는 디렉토리였어요. 로그 파일 정리하기 먼저는 로그를 쌓고 있는 디렉토리에 가서 오래된 log파일들을 정리했고, 그 결과..