오늘은 삽질을 많이 했던 날이다.
그리고 건설적인 이야기도 많이 나왔던 날.
라고 이야기를 꾸준히 말해서 일주일이라는 시간을 받았다.
그러면서 리더님께서 정리를 해주셨는데 이게 묘한 괴리가 발생했다.
현재 매니지먼트 및 인프라를 관리하고 계신 리더님과
실제로 업무를 보고 있던 개발자들의 정보가 다른 것.
그래서 조금 더 디테일한 자료를 만들기 위하여 노션에 디테일을 추가해놨다.
원래는 현재 작업현황만 적혀있었지만 두가지를 추가했다.
1. 발생 빈도수
2. 작업 권한을 가져야하는 사람
이렇게 조금 더 명확하게 체크를 해놓고, 계속 줄여나갈 예정이다.
아 그리고 여기서 중요한 이야기를 하나 들었다.
현재 운영 업무 중에서는 2가지의 갈래가 존재한다.
이렇게 두가지로 나눠져있는데, 이 중 2번에 속하지만 1번에도 속하는 것들이 상당히 많았다.
그렇다보니 이것을 분류할 수 없어서 개발자들이 직접 일감이 많았는데
출근을 해서 CTO님과 대화를 하다가 나온 이야기가 있었다.
80에서 100을 만드는 것이 0에서 80을 만드는 것 보다 어려우니까
단순한 업무같은 것은 빈도수를 줄이기 위해서라도 만들고, 복잡한 업무는 차차 제거하는 방향성이 좋다고
그래서 일단 간단하게 처리할 수 있는 다양한 것들은 제거하고, 복잡한 것들은 열심히 고민을 해서 제거하는 방향으로 갈 것 같다.
뭔가를 만들어달라했는데, 대충 이야기하면 지금까지 API 콜 횟수를 체크해달라는 요청을 받았다.
현재 회사에서는 엘라스틱서치를 활용하여 어떤 API가 호출됐는지 모두 체크를 하고 있다.
어떤 유저가, 어떤 입력값으로 호출했는지를 파악하여 에러핸들링을 할 때 디테일을 보는 목적으로
겸사겸사 어떤 API가 일마다 몇회씩 호출이 되었는지 파악을 해달라는 요청을 받아서
어 그거 별거 아닐 것 같은데 금방 하죠 ㅋㅋ 라고 받아왔는데 정말 2일만에 끝내버렸따(?)
엘라스틱서치의 기능 중에는 aggregation 라는 SQL의 Group By와도 비슷한 함수?가 있다.
이것을 활용하면 여러가지를 그룹핑하여 체크를 할 수 있는데
나같은 경우에는 매일 단위로 체크를 해서, 하루에 몇회를 호출했는지를 알아보는 방식으로 사용했다.
자세한 코드는 공개할 수 없기에 일부만 공개하지만, 이정도면 얼추 필요한 것을 구현할 수 있으리라 생각한다.
const document = await this.elasticsearchService.search({
size: 0,
query: {
range: {
'@timestamp': {
gte: '2021-01-01',
lte: '2022-12-30',
},
},
},
aggs: {
group_a: {
// 여기서 빌트인 메소드를 사용한다. 매일매일 단위로 구분하며, 어떤 형식으로 표기할지 정한다.
date_histogram: {
field: '@timestamp',
calendar_interval: 'day',
format: 'yyyy년MM월dd일',
},
// aggregation같은 경우에는 1개의 조건만 사용할 수 있어, 이렇게 그룹의 그룹같은 형식으로 사용해야한다.
aggs: {
group_b: {
filter: {
bool: {
must: [
// 이와같이 filter, bool, must 옵션을 걸어버리면 and 조건으로 설정되어 명확한 구분을 할 수 있게 된다.
{
match: {
env: 'prod',
},
},
],
},
},
},
},
},
},
});
그럼 여기서 문제가 있다.
이 자료를 보기 위해서 무엇을 해야하냐?
엑셀을 만들어야지
엑셀을 만들때는 라이브러리를 활용해야하는데, 주로 https://www.npmjs.com/package/xlsx 이것을 사용하고 있다.
데이터는 이중배열의 형태로 넣으면 되는데 대충 이런느낌
const data = [
[1,2,3,4,5,6,7],
["가","나","다","라","마","바","사"],
["아","자","차","카","타","파","하"]
]
그리고 나머지는 이렇게 하면 된다.
const workBook = XLSX.utils.book_new();
const worksheet = XLSX.utils.aoa_to_sheet(data);
XLSX.utils.book_append_sheet(workbook, worksheet, '테스트');
XLSX.writeFile(workbook, path.join('./', '엑셀테스트.xlsx'));
읽어서 데이터를 수정하고, 다시 저장하는 것도 해보고 싶은데 이건 조금 찾아보고 있다(ㅋㅋ)
아무튼 이렇게 요구사항이 들어온 것을 이틀만에 정리하고 다른 것을 좀 해야겠다.
최초에 작성되었던 재고 관련된 코드를 건드려야하는데, 이게 정말 잘 건드려야해서...
한번 디테일하게 정리를 해봐야겠다.
잘 만들어져서 프로덕션에 붙일 수 있으면 좋겠다 !