본문 바로가기

Slack 채널 정리

(87)
파일 크기 기준으로 분할 압축된 로그에서 정보 찾기 애플리케이션 로그량이 너무 많아서 일단위+50M 크기로 백업되게 했더니 특정 시간에 발생한 이벤트 로그를 찾아 보기가 만만찮네요. 제가 사용한 방법을 리눅스 명령어 그리 익숙치 않은 분들을 위해 간단히 단계별로 정리해 공유해봅니다.상황은 이렇습니다. 어제 16:20:35 에 발생한 이벤트 로그를 찾아보려 합니다. 로그 파일들을 여러 개로 나뉘어 있고 gzip 으로 압축되어 있는 상황이어서 grep 등으로 한 번에 찾기는 안되고. 그래서 일단 어제 16:20 이후 몇 분 사이 변경된 파일을 찾아봤습니다. 시작을 위한 기본 틀은 이런 식이 되겠죠. find . -mtime n 1. mtime 은 n * 24 이므로 좀 더 세밀하게 찾으려면 -mmin 으로 분 기준으로 찾도록 합니다. 가령 10분 전 부터 바..
Spring Boot 에서 hessian 사용하기 예상에 없던 hessian 클라이언트 기능이 급작스럽게 필요하게 되어서 작성했던 김에 정리. 몇 년 전에 spring 에서 했던거랑 spring boot 에서 패턴이 바뀌어 좀 헷갈렸으나 그래도 역시 sb 가 훨 심플하네요. 제일 안 풀렸던 문제가 interface autowird 안 되어 에러 난 건데 @Autowired(required=false) 로 해주니 깔끔하게 해결. @Configuration public class HessianConfig { @Value("${tos.HESSIAN_URL}") private String hessianUrl; @Value("${tos.HESSIAN_PORT}") private String hessianPort; @Bean public HessianProxyFa..
bean 담긴 리스트 핸들링 4줄 짜리 로직 만들어 내려고(getExistEntityInList 메서드) 3시간여를 모자란 머리 쥐어 짜며 야근.상황 이해해야 코드 설명도 와닿을거라 (그리고 조금 지난 후 제 자신도 왜 이런거 짰나 기억 되살릴 수 있을 듯 하여) 우선 배경부터 잠깐. 1. 카프카에서 데이터 꺼내 DB 에 건건이 입력하던거를 성능 개선을 위해 데이터 모아두었다가 배치로 처리하게 구현했었습니다. 2. 로그성 데이터이지만 데이터 활용 때문에 몇 개의 속성값(키값)이 동일한 데이터(이하 '같은 아이템'이라고 칭하겠음)이 DB 에 이미 있다면 최종 동일 아이템에 변경된 값만 덮어써서 insert 하는(즉, 기존 정보에 변경값이 계속 누적 추가되는, update를 가장한 insert) 방식입니다. 예를 들어 기존에 (A, B..
Javers 기존 데이터와 비교해서 변경된 것이 있을 때만 DB 에 저장하기 위해 Javers 를 이용해보았습니다. 시작하고 보니 생각지 못했던 문제들(비교할 두 놈을 분리하기 위해 Deep Copy 해야했던거나 등등) 있었지만 그런 것들 제하고 Javers 로 빈 비교 하는 부분에서 추가 작업 필요했던 것만 정리해보자면 ... 1. Entity 그대로 사용하려고 하니 비교가 제대로 되지 않습니다. 우선 문제가 되는게 Entity 에는 DB 테이블 매핑 위해 @Id 애노테이션 선언한 속성이 있는데 이런 속성 값은 비교 시 제외할 방법을 못 찾았습니다. Javers 인스턴스 생성 시에 비교 제외할 속성 등록하는 방법이 문서에 있긴 하던데 애노테이션 등이 적용된 속성 일부는 이게 잘 안먹는 듯(물론 Javers 제대로 ..
리눅스 fuser 명령어 리눅스 머쉰에서 Redis 적용했던 프로그램 재기동하는데 Redis 서버 시작 못한다는 에러 발생. 확인해보니 kill 명령으로 애플리케이션 프로세스 죽였는데 embedded 된 Redis 는 죽지 않고 포트 물고 있어서 발생한 에러. 보통 하듯이 netstat 으로 포트 사용 중인 프로세스 ID 확인해서 죽이는 방법을 써왔는데 fuser 란 명령어를 오늘 처음 알게 되었습니다. Redis 기본 포트가 6379 이므로 다음과 같이 하면 되네요. fuser -k 6379/tcp
git HTTP Basic: Access denied 에러 git에서 HTTP Basic: Access denied 에러 나는 경우. 여러가지 상황에서 발생할 수 있고 해법도 다양하지만 사내 gitlab 쓰는 경우에 간단히 시도해볼 수 있는 방법은 .git/config 파일을 열어서 url = https://your_git_url 를 url = https://user_id@your_git_url 로 바꾸고 저장 후 에러났던 명령어 다시 실행해보면 해결되기도 합니다.
armeria 사용 gradle 설정 간만에 시간 좀 나서 얼마 전 모님이 얘기했던 armeria 이용해서 간단한 샘플 코딩 해봤습니다. 샘플 코드 등은 좀 더 공부한 후 공유해보도록 하겠고 오늘은 gRPC, thrift 코드 자동 생성 하기 위한 방법 우선 공유합니다. (gRPC, thrift 프로그래밍 방식에 대한 세세한 설명은 빼고 소스 자동 생성에 관련된 부분만 설명합니다) 1. gRPC - 확장자가 proto 인 IDL 파일을 src/main/proto 밑에 작성해둡니다. - build.gradle 보면 grpc, protobuf 가 들어간 설정들이 보일텐데 reposioty 에서 grpc 라이브러리 다운 받아 protobuf 로 코드 생성해주는 것들입니다. - 위 두 단계만으로도 소스는 자동 생성되었습니다. 하지만 정작 서비스 구..
graphql 기초 용어 graphql 기초 용어 몇가지 간단히 정리해봅니다. • overfetching / unserfetching : Rest 와 대비한 gql 의 장점을 언급할 때 빠짐없이 나오는 개념입니다. gpl 은 엔드포인트에 데이터 요청 시 쿼리를 이용해서 쓸 값만 가져올 수 있으므로 Rest 에서 처럼 안 쓰는 데이터까지 다 받아야하는 네트워크 오버페칭을 피할 수 있습니다. 또한 Rest 처럼 필요한 데이터 조합을 얻기 위해 여러 API 를 호출할 필요 없이 하나의 호출로 가능하므로 언더페칭을 피할 수 있습니다. • mutation : gql 의 쿼리 타입 중 하나로 Rest 에서 post, put, delete 등으로 처리하는 데이터 inserrt/update/delete 처리를 정의합니다. • resolver ..