오늘 아침에 막 출근해서 이슈를 처리하려는데 서버에 문제가 생겼다. 서버 로그를 살펴보니 DB에 연결되지 못하고 있었고, Unable to connect to the database(lock)이 발생하고 있었다.RDS 상태와 로그를 확인하자 제일 먼저 RDS 상태와 로그를 확인하기 위해 콘솔에 접속했다. RDS 상태는 정상. 에러로그에도 별다른 사항이 없었고, 모니터링 지표를 봐도 문제가 될 부분이 없었다.lock이 실제로 걸려 있는가? 원래 잘 작동되고 있던 서버였고, lock 관련해서는 이미 테스트를 했던터라 갑자기 발생한 게 의아했다. 우선 RDS의 상태가 정상인지 확인했는데 정상이었고, datagrip으로 접속해서 lock이 걸려 있는지 확인했다. 그런데 걸려 있는 락이 없었다.최후의 방법, 재기..
최근에 애드몹 설정을 한 앱을 앱스토어에 출시했다. 그 과정 중에 내가 찾아봐도 안 나왔거나 몰랐던 정보들이 있어서 이곳에 정리한다.미리보기는 테스트 화면으로 하지 말자 앱스토어에 앱을 검색하면 나오는 앱 사용 화면이 있다. 앱을 출시하려면 이걸 준비해야 하는데, 난 잘 몰라서 플러터로 실행하면 나오는 debug 리본이 노출되고, 애드몹 테스트 광고가 노출된 화면으로 캡처를 해서 제출했다. 결과는 반려. 스크린샷은 실제 사용하는 것처럼 보여야 한다고 한다. 그래서 debug 리본도 안 보이도록 처리하고, 애드몹 광고 영역도 가리고 스크린샷을 제출해서 심사 통과했다.애드몹 앱 등록을 위한 준비를 미리 하자 나도 그냥 앱에 애드몹 설정만 하면 되는 줄 알았는데, 알고보니 그게 아니라 앱스토어에 등록한 이후에..
서비스 오픈을 준비하면서 내가 가장 걱정했던 것인 AWS에 서버 구축하기를 마쳐서 그 과정을 정리해본다. 우선 구축하려는 아키텍처는 아래와 같았다.EC2 인스턴스 만들기 EC2 인스턴스를 만드는 과정은 다른 블로그에 잘 나와 있으므로 생략한다. 서버1을 먼저 인스턴스 생성으로 만든 후에 서버1을 이미지화하여 템플릿 생성 후 템플릿으로 인스턴스를 복제하여 서버2를 생성했다. 이때, 서버1을 접속하기 위한 .pem 파일을 함께 사용할 수 있었다. 만약 각 서버마다 다른 .pem 파일로 관리하기를 원한다면 새로 만들어주는 수 밖에 없는 듯하다.RDS로 Master-Slave 만들기RDS로 DB를 하나 만든 후, 그 DB를 선택하고 읽기 전용 복제본 생성을 선택한다. 이렇게 되면 Master로는 CRUD가 전부..
mysql에서는 아래 모두 같은 결과 지원select DATE_FORMAT(now(), '%Y-%m-%d') from dual;select DATE_FORMAT(now(), "%Y-%m-%d") from dual;근데 mariadb에서는 아래와 같은 결과select DATE_FORMAT(now(), '%Y-%m-%d') from dual; // 2024-07-04select DATE_FORMAT(now(), "%Y-%m-%d") from dual; // [42S22][1054] (conn=11683) Unknown column '%Y-%m-%d' in 'field list'
지난번 Lock 관련해서 문제 해결을 고민하면서 Redis를 사용한 방법도 고민하지 않은 것은 아니지만, Redis를 사용한다고 했을 때 구축하는 것도 비용이고 관리포인트가 하나 더 늘어나기 때문에 제외했었는데, 또 다른 문제가 발생했고, Redis를 사용하여 해결하면 참 쉬울 것 같은데 Redis를 정말 사용할지 고민이 된다. 이제 갓 오픈하는 서비스이니 우선 간단하게 시작하자는 마음으로 최대한 Redis를 안 쓰고 해결할 수 있는 방법을 찾는 게 맞는가, 아니면 Redis를 사용하면 간단하게 해결될 문제이니 사용하는 것이 맞는가.
문제길이가 n인 배열 nums에서 n/2번 이상 등장하는 숫자를 반환한다. n/2번 이상 등장하는 숫자는 반드시 존재한다고 가정하며, 아래 조건일 때 시간복잡도 O(n), 공간복잡도O(1)으로 해결해야 한다.n == nums.length1 -10^9 나의 접근법Boyer-Moore 과반수 투표 알고리즘을 사용했다.class Solution { public int majorityElement(int[] nums) { int count = 0; int candidate = 0; for (int num : nums) { if (count == 0) { candidate = num; } ..