본문 바로가기

개발노트

(93)
Rails + Sidekiq 에서 Retrying Jobs 를 rails console 에서 한 번에 kill 하기 rs = Sidekiq::RetrySet.new rs.select { |job| job.args[0]['job_class'] == 'SomeNameSpace::SomeModule::SomeClassName' && job.args[0]['arguments'][0] == 'target job arg.' } .sample(remaining_1_count) .each { |job| job.delete }
Google maps API 에 Signature 추가를 위한 URL Signing Secret 찾기 어딨는지 위치를 한참 못찾아서, 나중에 또 헤맬까봐 기록해둠 진입점 : API 및 서비스 > 대시보드 > Maps Static API > URL 서명 보안 비밀 https://console.cloud.google.com/google/maps-apis/apis/static-maps-backend.googleapis.com/staticmap?project=project_name
Rspec 에서 "여러" 인스턴스가 지정한 메소드를 실행하는지에 대한 Assertion 이번에 rails 에서 aws-sdk gem 을 이용하여 sns 를 사용하는 코드를 만들고 있다. 그런데 어떠한 이유로 aws 의 상태가 좋지 않거나, 인터넷 상태가 좋지 않는 등의 이유로 해당 로직이 실패할 수 있을 것 같아, begin ~ rescue 문법을 이용해 retry 로직을 구현하였다. begin 블럭안에서 처리하는 로직에서 Aws::SNS::Topic 클래스의 인스턴스를 retry 할 때마다 새로 생성하도록 했는데 (처음에는 singleton 으로 했다가, thread safeness 를 보장한다는 내용을 찾을 수 없어서, local variable 로 매번 인스턴스 생성하도록 처리하게 하였음) 여러 인스턴스가 생긴 것에 대해서 Rspec 에서는 자주 쓰이는 expect 나 expect_a..
Rspec 에서 어떤 Mailer 를 이용하여 발송될지에 대한 테스트 it '메일의 종류는 A 메일이다' do expect { subject }.to have_enqueued_job.on_queue('mailers').with('AMailer', any_args) end 간단한 건데도, 삽질을 좀 많이 했네. rails 에서의 mail 발송(deliver 메소드)은 결국 queue 를 통해서 이뤄지므로, queue 에 넣는 내용을 확인하면 된다. "mailers" 라는 이름의 큐로 enqueue 될 땐, Mailer 클래스의 이름이 전달인자 중 가장 처음으로 들어가기 때문에, with 메소드의 전달인자로 mailer 이름 문자열을 넣어주면 된다.
ubuntu 18.04 에서 캡스락을 마우스 왼쪽 클릭으로 쓰기 책상에 앉아 컴퓨터를 오래 하다보면, 오른쪽 손으로 클릭을 많이 하다보면 왼손의 사용률과 격차가 심해지면서 오른 손목이 가끔 저려올 때가 있다. 한.. 1년 반 전 쯤, 유난히 오른손이 많이 불편한 날이 있었는데, 그 날을 계기로 그 당시에 회사에서 쓰는 키보드(Cougar)에서 UX 툴을 이용하여 캡스락을 클릭으로 변경해서 잘 쓰고 있다. 그런데, 집에 있는 데스크톱 2대 중, 지금 이 글을 쓰고 있는 머신은 운영체제가 우분투이다. (18.04) 키보드는 한성컴퓨터의 무접점 키보드인데, 많이 사용하는 컴퓨터는 아니라 큰 불편을 못 느끼고 있다가, 요즘 다시 많이 쓰는 것 같은데 오른손으로 클릭을 몇 번 하다보니 뭔가 어색함이 느껴졌다. 그래서 우분투에서도 캡스락을 클릭으로 사용하기 위해 찾아보았고, 의..
리눅스에서 프로그램 업데이트 후 dock 에 등록 안 될 때 집에 2대의 데스크톱 컴퓨터 중 1대는 우분투 데스크톱이다. 공부할 때 많이 쓰는 머신인데, 공부를 영 안 했는지 최근 너무 오랜만에 켰다. 그리고 개발툴인 idea, pycharm 등 프로그램 업데이트를 하고 싶어졌다. 근데 윈도우즈에선 .exe 로, 맥에선 .dmg 로 설치하다보면 알아서 예전 버전을 삭제해주고, path 도 잡아주고 사용자가 별 다른 액션을 하지 않아도 깔끔하게 업데이트 된 버전을 사용할 수 있는 반면에, 리눅스 데스크톱을 쓰다보면, 사용하는 프로그램은 대부분 .tar 로 배포된다. jetbrains 의 프로그램도 그러하다. 그래서 사용자가 tar 파일을 압축풀고 원하는 설정(dock 에 추가, 터미널에서 실행 가능하게 등등)은 직접 해줘야 하는데, 그 중 dock 에 등록이 안 되..
OOM 맞고 나서 알아본 apache poi xlsx 레거시 코드에서 csv 를 생성해주는 코드(csv 다운로드 기능)가 여러 이유로 아직도 쓰이고 있다. 로직은 xlsx 를 생성하고 이 xlsx 로부터 데이터를 읽으며 csv 를 쓰는 로직이었다. 오래된 코드(무려 2013년!)이고, 다 퇴사를 해버린데다 히스토리 관리가 잘 안 돼있어서 왜 xlsx 를 먼저 생성하는지 정확한 이유를 찾진 못했지만, 이미 xlsx 다운로드 기능을 먼저 만들어놔서 그것을 활용하는 게 더 낫다고 판단이 됐었나 보다. 그러던 중, 어제 약 23,000 rows 에 대한 csv 다운로드 요청이 OOM 을 유발하며 서버가 죽는 현상이 발견되었다. (컬럼수도 493개였음) xlsx 를 생성할 때 Workbook 의 인스턴스 타입을 XSSFWorkbook 으로 되어있었는데, 해당 인스턴..
Mysql GTID-based Replication 오류 Skip 하기 뚜렷이 어떤 SQL 에러가 발생한 지 확인 가능하고, 그걸 Skip 해도 된다는 확신이 있으면 이 방법이 가장 쉽고 빠르다. 1. 문제가 된 gtid 트랜잭션 번호 찾기 2. 문제가 된 gtid 트랜잭션 건너 띄도록 빈(empty) 트랜잭션 주입 mysql> SET GTID_NEXT="c85b621b-8fd3-11e8-862c-020051680009:66194695"; Query OK, 0 rows affected (0.00 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.01 sec) mysql> SET GTID_NEXT="AUTOMATIC"; Query OK, 0 rows..