본문 바로가기

전체 글

(49)
[Java] 자바 8 Default method 정리 자바 8에서는 Interface에 Body를 가진 메소드를 추가할 수 있는데 이를 디폴트 메소드(Default method)라고 한다. 자바 8 이전의 인터페이스에서는 API를 추가할 경우 기존 인터페이스를 구현하여 만든 애플리케이션에서는 호환성 문제가 발생하게 된다. 이를 해결하기 위해여 별도의 버전의 API를 만들어 버전을 관리하는 방법등 다양한 방법이 있으나 불편한 점이 많았다. 디폴트 메소드를 이용하면 기존 클라이언트에서도 자동으로 기본 구현이 되므로 기존 코드를 고치지 않아도 되는 장점이 있다. 아래는 자바8 Collection 인터페이스에 sort 메소드가 추가된 것을 확인할 수 있다. Collection 인터페이스를 구현하는 자바의 클래스들은 소스의 변경 없이 sort 메소드를 이용할 수 있..
[mysql] 무중단으로 대량 테이블 전체 데이터 교체하기 업무중 대량의 데이터가 있는 테이블의 데이터를 insert, update, delete를 통한 데이터 교체가 아닌 무중단으로 한번에 테이블의 데이터를 교체해야 하는 요구사항이 생겼습니다. 다양한 방법을 고민 끝에 임시 테이블과 테이블 rename을 통해 해결한 과정을 공유합니다. 사전 작업으로는 대상 테이블과 똑같은 스키마의 _tmp postfix를 붙힌 다음과 같은 테이블을 생성합니다. {tableName}_tmp. 그 이후에는 매 배치별로 아래와 같은 3단계의 작업을 진행하면 됩니다. 1. 임시 테이블을 truncate를 하여 전체 데이터를 지워줍니다. 첫 작업에는 데이터가 존재하지 않기 때문에 truncate를 할 필요가 없지만 배치로 반복적으로 작업이 일어난다면 기존 데이터를 삭제하기 위해 tru..
[Mysql] 잠금(Lock) 정리 Mysql 잠금 글로벌 락(Global Lock)- FLUSH TABLES WITH READ LOCK 명령으로 획득할 수 있으며, mysql에서 제공하는 잠금 가운데 가장 범위가 크다. - 한 세션에서 글로벌 락을 획득하면 다른 세션에서 SELECT를 제외한 대부분의 DDL이나 DML을 실행하는 경우 글로벌 락이 해제될 때까지 해당 문장이 대기상태로 남는다.- MyISAM이나 MEMORY 테이블에 대해 mysqldump로 일관된 백업을 받아야 할 때 글로벌 락을 사용해야 한다. 테이블 락(Table Lock)- 개별 테이블 단위로 설정되는 잠금- LOCK TABLES table_name [READ | Write] 명령으로 특정 테이블의 락을 획득 할 수 있다.- 명시적으로 획득한 잠금은 UNLOCK TA..
[kafka] topic이 delete가 되지 않을 경우 해결법 kafka에서 토픽을 삭제하는 방법은 아래와 같다. 먼저 server.properties에 다음 옵션을 추가해야 한다. delete.topic.enable = true 그리고 아래의 명령어를 실행하면 해당 토픽이 marked되고 일정 시간 후에 전체 클러스터에 토픽이 삭제되게 된다. bin/kafka-topics.sh --delete --zookeeper --topic 하지만 UnknownTopicOrPartitionException 같은 에러가 발생하면서 주키퍼에서까지 지워졌던 토픽이 다른 노드에 의해 복구되어 삭제가 되지 않는 경우가 있다. 이런 경우는 카프카 클러스터를 재시작할 때 원할하게 실행되지 않은 경우 발생하여 전체 클러스터를 다시 시작해도 지속적으로 발생하게 된다. :org.apache.k..
Node.js logging 프레임워크 winston node.js에서 colsole 객체를 이용하여 로그를 출력할 수 있습니다. 그렇지만 프로그램의 크기가 커질 경우 로그의 양도 많아지고 저장했다가 나중에 확인해야 하는 경우가 있습니다. node.js에는 여러 logging 프레임워크가 있습니다. 이번에는 winston이라는 프레임워크에 대해 알아보겠습니다. Winston은 다중 전송을 지원하는 간단하고 보편적인 비동기 로깅 라이브러리입니다.로깅하는 방식을 transport라고 하며 Console, File, db등을 지원합니다. 윈스톤 로거의 각 인스턴스는 여러 수준으로 구성된 여러 전송을 가질 수 있습니다. 모듈 설치로깅처리를 위한 Winston 의존적인 모듈 설치합니다. winston 기본 모듈, 파일에 일별 로테이트하며 기록하는 모듈, 그리고 시간..
[Hadoop] HDFS에 파일 쓰기 이번 글에서는 하둡 hdfs에 파일을 저장하는 방법을 알아보겠다.기본적인 형태는 일반 파일 입출력과 크게 차이가 있지 않다.첫번째로는 하둡에 저장하기 위해 DFSOutputStream을 추상화한 FSDataOutputStream을 이용하는점.두번째로는 FileSystem과 Path 객체를 이용해 hdfs의 경로 및 기타 설정을 해야하는 차이가 있을 뿐이다. 아래는 예제 코드이다. public static void main(String[] args) throws Exception { FSDataOutputStream fout = null; try { Path path = new Path("hdfs://NaeNode:port/path/file"); String data = "data"; FileSystem ..
[mysql] rownum을 결과에 반환하기 mysql에는 쿼리 결과에서 rownum을 반환하는 방법이 3가지가 있다. 1. where절에서 rownum을 생성하여 반환하는 방법. SELECT @rownum:=@rownum+1 FROM MyTable WHERE (@rownum:=0)=0; 2. from절에서 rownum을 생성하여 반환하는 방법. SELECT @rownum:=@rownum+1 FROM MyTable, (SELECT @rownum:=0)=0; 3. set문을 이용하여 rownum을 생성하여 반환하는 방법 SET @rownum:=0; SELECT @rownum:=@rownum+1 FROM MyTable;
Android sd카드 데이터 저장 및 읽기 # 네이버블로그에서 이사 (2012.07.13 게시물. http://blog.naver.com/rkdmfql1540) 안드로이드 sd카드에 접근해 sd카드에 파일을 저장하거나 읽어오는 샘플 소스. 먼저 해당 앱에서 sd카드에 저장하거나 읽어 오기 위해서는 매니페스트에 다음에 해당하는 퍼미션을 추가해야 한다. 아래는 주석과 소스이다. save메소드는 sd카드에 저장 load 메소드는 데이터를 읽어오는 메소드이다. public static void save(String result) { String sdPath; //SD 카드의 경로 String externalState = Environment.getExternalStorageState(); if (externalState.equals(Environment..