public KafkaClient(String hosts, String group, String topic) {
        HashMap<String, Object> configs = new HashMap<>();
        configs.put("bootstrap.servers", hosts);
        configs.put("group.id", group);
        configs.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        configs.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");

        this.producer = new KafkaProducer<>(configs);
        log.debug("create kafka client. ");
        this.gson = new Gson();
    }
    
      public void sendMessage(String data) {
        String jsonMsg = gson.toJson(new Message(data, new Date().getTime()));
        log.debug("sendMessage [{}]", jsonMsg);
        producer.send(new ProducerRecord<>(topic, jsonMsg));
    }

설을 맞아 삼성 240 qhd 모니터 s32bg650 모니터를 구매했다.

32인치 qhd 240hz va (hdr600) 

이 스펙에 50만원대 가격이라 더이상 망설일수가 없었다.

 

설치기사가 오는줄 알았는데, 그냥 박스로 툭 놓고 배송완료되어서 뭔가 했는데 스티로폼이 꼼꼼하니 잘왔다.

기존에 모니터암을 사용하고 있어서 설치하려 하니 아답터가 포함되어 있다. 

뒷판의 LED는 설정에 따라 켤수 있다고 한다.

(나사는 기존 스탠드 나사를 사용해야함)

 

배젤은 얇은편이라 보기는 좋으나 부딪히면 깨질거같으니 조심하자

 

스피커 기능도 포함하고 있는데 생각보다 소리가 깔끔하니 좋다.

스마트 기능은 사용하지 않을거 같긴하지만 리모콘이 동봉되어 편리하다.

 

넓직하고 글씨도 큼직하니 눈이 편안..

 

총평:

va패널도 고급라인은 볼만하다.

고주사율에도에도 hdr600은 밝기가 충분하다

커브드 적응은 한시간도 안걸린다.

기능을 좀더 사용해보자.

'근황' 카테고리의 다른 글

Tech Planet 2016  (0) 2016.10.20
2014 JCO . Java Conference  (0) 2014.02.04
제 13회 한국 자바 개발자 컨퍼런스 (13/02/23)  (0) 2013.02.21
갤넥 젤리빈 GPS 문제  (0) 2012.10.12
신기한글자  (0) 2012.04.03

관리하는 서버가 많고, root권한이 없는경우 바꾸기는 매우 귀찮은 일이다. 

따라서 스크립트를 작성, 공유한다.

** serverlist.txt 에는 서버 ip 목록이 줄별로 있다.

#!/bin/bash
i=1
while read line || [ -n "$line" ] ; do
    echo "$line"
    ((i+=1))
    `/home/customuser/chg.sh $line`
done < serverlist.txt

 

#!/usr/bin/expect

set user_name ""
set old_pwd ""
set new_pwd ""
set ip_addr [lindex $argv 0]


spawn ssh $user_name@$ip_addr
expect $user_name
sleep 3

send "passwd\n"
expect "password:"
send "$old_pwd\r"

expect "New password:"
send "$new_pwd\r"
sleep 1
expect "Retype new password:"
send "$new_pwd\r"
sleep 1

expect "$ "
send "exit\n"

 

'linux' 카테고리의 다른 글

grep 여러 키워드 찾기  (0) 2019.05.09
vi 공백제거 :g/^$/d  (0) 2017.08.09
Mysql DB 덤프 쉘 스크립트 (다수 테이블)  (2) 2016.04.29
bad superblock on /dev/sdb1  (0) 2014.11.19
top 5초마다 프로세스 사용량 파악  (0) 2014.02.11

평소처럼 테스트를 실행하는데 그래들로 실행되어 콘솔로그 등 보기가 힘들때 

 

Project Structure (설정) (Ctrl Alt S) or (CMD ;)으로 들어가 기본 빌드 설정을 변경하면 된다.

 

'OS > Tool' 카테고리의 다른 글

k8s 강의 후기  (0) 2022.10.25
YouTube 검색 목록 묶어서 재생하기  (0) 2013.10.14
VirtualBox  (0) 2012.08.29
Putty  (2) 2012.03.28
Evernote  (0) 2012.03.28
sudo kill -9 `ps -ef | grep {{process_name}} | awk '{print $2}'`

 

 

  1. devops 와 k8s
    • 개발/운영 을 통합. -> MSA가 등장
      • 통 모놀리스 -> 느슨하게 결합되고 컨테이너화된 요소로 구성
    • 전체 생명주기 통합 관리 : 개발/테스트/배포/운영
    • 컨테이너: 지속적인 개발, 통합 배포에 효과적
  2. k8s와 컨테이너
    • k8s : 컨테이너 기반의 가상화 환경을 운영 관리 기술
    • 개발환경을 컨테이너 기반 가상환경으로 구현
    • CICD 개발도구를 결합
    • 빌드/테스트를 용이하게 하여 개발환경 자동화, 운영환경 배포의 기반 마련
  3. k8s와 오브젝트 모델
    • CNCF 쿠버네티스 생태계 및 도구
    • 마스터(컨트롤러), 노드/미니언(컨테이너)
    • 오브젝트 : 상태를 관리하기 위한 대상
    • basic object
      • pod (컨테이너화된 app)
      • service (LB)-label selector로 하나의endpoint 제공, 어떤pod를 서비스로 묶을지 정의
      • volume(저장소)-마운트하여사용(cloud, NFS 등등) pod과 lifecycle이 같음
      • namespace(패키지명) k8s 클러스트 내 논리적인 분리단위, 접근권한, 리소스할당 등을 할 수 있다.
    • controller
      • RC(Replication Controller), RS(Replication Set), DS(DaemonSet), Job, SafefulSet, Deploymenet
    • object 및 기타정보
  4. k8s 클러스트 아키텍쳐
    • 마스터는 설정환경 저장, 전체 클러스터 관리
    • 노드는 pod, container 처럼 k8s위에서 동작하는 워크로드 호스팅
    • 애드온으로 리소스를 관리 클로스트 구현 (DS, deployment)
  5. k8s 운영
    • volume - 데이터 보존, service - pod집합에 접근 기술 api객체
    • k8s : 컨테이너의 상태체크, 재시작, 제외(pod) 등 기능을 제공
  6. k8s 배포
    • 배포전략
      • blue/green
      • canary
      • rolling update
        • 업데이트된 pod으로 점진적으로 교체, 서비스 중단 없이 제공
    • deployment는 replicated 앱을 관리하는 API객체
    • ConfigMap - 공개 데이터를 key-value 값으로 저장하여 사용 , 환경설정 내용을 컨테이너와 분리/제공
  7. k8s 모니터링
    • layer : node, container, app, k8s
    • k8s 대상 : resource,disk,cpu,memory,pod,network
  8. k8s 보안
    • 계정 role : admin, 일반계정
    • network : pod그룹간 통신, 외부네트워크와의 통신 포인트 (end-point)
    • Security Context - pod의 접근제어, 권한, 정책 정의
  9. k8s network
    • k8s 에서 IP는 컨테이너가 아니라 pod 에 할당 된다.
    • CNI (Container Network Interface) 표준 API 제공

'OS > Tool' 카테고리의 다른 글

intellij 에서 테스트가 gradle로 될때  (0) 2022.12.06
YouTube 검색 목록 묶어서 재생하기  (0) 2013.10.14
VirtualBox  (0) 2012.08.29
Putty  (2) 2012.03.28
Evernote  (0) 2012.03.28

@Entity 어노테이션 붙은 클래스 필드명을 따라 컬럼명 매칭룰을 적용

이를 커스텀으로 변경

CamelCaseToUnderscoresNamingStrategy 를 상속받아 uppercase로 변경

yml 에선언

spring.jpa.hibernate:
  naming:
    physical-strategy
public class CustomColumnUppercaseStrategy extends CamelCaseToUnderscoresNamingStrategy {
    @Override
    protected Identifier getIdentifier(String name, final boolean quoted, final JdbcEnvironment jdbcEnvironment) {
        if (isCaseInsensitive(jdbcEnvironment)) {
            name = name.toUpperCase(Locale.ROOT);
        }
        return new Identifier(name, quoted);
    }
}

 

QueryDSL join 및 subquery 및 case 문 사용 예시

case문 사용시 then 값은 enum값이 들지 않으니 String 으로 변환하여 사용한다. (querydsl 5.0)

(로직적으로 처리하자)

QTbEntity innerME = new QTbEntity("ime");
        return queryFactory
                .select(Projections.constructor(TbEntity.class, tbEntity.memberId, tbEntity.roleGroup, joinBEntity.commId, joinBEntity.enumA))
                .from(tbEntity)
                .leftJoin(joinAEntity).on(tbEntity.memberId.eq(joinAEntity.userId))
                .leftJoin(joinBEntity).on(joinAEntity.commId.eq(joinBEntity.commId))
                .where(tbEntity.roleGroup.ne(
                                JPAExpressions.select(new CaseBuilder()
                                                .when(joinBEntity.enumA.eq(EnumA.EQ)).then("EQ_NAME")
                                                .when(joinBEntity.enumA.eq(EnumA.DIFF)).then("DIFF_NAME")
                                                .otherwise(tbEntity.roleGroup)
                                        ).from(innerME)
                                        .leftJoin(joinAEntity).on(innerME.memberId.eq(joinAEntity.userId))
                                        .leftJoin(joinBEntity).on(joinAEntity.commId.eq(joinBEntity.commId))
                                        .where(innerME.memberId.eq(tbEntity.memberId))
                        )
                );
.stream().collect(Collectors.toMap(A::getKey, B::getKey)
>> .stream().collect(Collectors.toMap(A::getKey, B::getKey, (k1,k2) -> k1)

java8 stream collect  toMap 사용 중 duplicate key 발생 시

Map 반환에 키 중복이 있을때 발생하는데,  오버로딩된 toMap 메소드 중 merge 기능이 있는걸 사용하면 된다. 

<실행되는 Collectors.class >

public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                Function<? super T, ? extends U> valueMapper,
                                BinaryOperator<U> mergeFunction) {
    return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
}

스프링 배치잡으로 실행하려고 셋팅 하고 (라이브러리셋팅, config셋팅)

kafka consumer 를 poll 할때

ConcurrentModificationException. KafkaConsumer is not safe for multi-threaded access

에러가 발생했다. 

이유가 뭔고 하니 

카프카 컨슈머는 쓰레드세이프하지 않으니 멀티쓰레드 환경에서는 쓰지 말라는 것이다. 

어쩔까 하다 보니 결국 하나씩만 실행하게 환경을 구축해 줘야 한다. 

.yml 파일에 아래와 같이 셋팅해주자.

spring.task.execution.pool.coreSize: 1

관련 javadoc : http://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#multithreaded

 

KafkaConsumer (kafka 2.1.0 API)

Subscribe to all topics matching specified pattern to get dynamically assigned partitions. The pattern matching will be done periodically against topics existing at the time of check. This is a short-hand for subscribe(Pattern, ConsumerRebalanceListener),

kafka.apache.org

 

+ Recent posts