따로 코딩 전용 AI를 사용한 것은 아닌데, 그냥 구글 gemini 를 통해 Rust 프로그램을 작성했다. 

어느 정도는 분명히 도움을 받았으나 생각했던 것 처럼 유용하지 않았다. 내가 회사에서 구글 gemini 를 통해 python pandas 를 했을 때 엄청 도움을 받았기 때문에 이번에도 큰 도움이 될 것이라고 생각했다. 그런다 어느 정도 확실히 한계가 느껴졌다. 

 이 이유는 분명하다. 내가 하려는 것이 다른 누구도 해 본적 없는 일이기 때문이다. 내가 회사에서 했던 pandas 의 경우 다른 누군가가 많이 했던 일이 었을 것이다. 그래서 인터넷에 그 사용예가 매우 많을 것이다. 그런데 내가 이 번 휴일 동안 했던 일은 누군가도 해 본적 없는 독특한 일이 었을것이다. 
 
 내가 이번에 하려고 했던 것은 rust tauri 를 이용해서 PC용과 안드로이드 앱을 만들기 였다. 그리고 그 앱은 오픈스트리트맵 데이터를 이용해서 오프라인 지도 앱을 만들려고 했다. 이를 위해 우선 osm.pbf 을 파싱해서 렌더링 하려는 일을 하려고 했다. 그런데 Rust 로 이런일을 하려는 라이브러리 자체가 부족했다. 그리고 그 예가 거의 없었다. 

  코딩 전용 AI 가 아니라서 가능한 unittest 단위의 함수를 작성하려고 했다. 분명히 어느 정도 도움을 받기도 했으나 내가 Rust 에 익숙하지 않다보니 한계가 있었다. 그리고 너무 많이 배경지식이 필요한지라 AI에게도 좀 버거웠나 보다.
 코딩 전용 AI 였으면 에러가 발생하면 자기스스로 알아서 고쳤을련지도 모르겠다. 그리고 하필 AI가 추전하는 라이브러리들이 하나같이 매뉴얼이 부족하고 사용예가 적은 거라서 인간인 나도 검색으로 해결할 수 없었다. 

아직은 AI가 복잡한 프로그램을 만들기에는 한계가 있나보다. 

 회사 홈페이지에 알 수 없는 이름의 사용자가 등록되어 있는 것을 확인 했다. 사용자 이름이 sql injection 을 일으킬만한 이름으로 회원 가입이 되어 있었다. 로그를 확인해보니 엄청나게 다양한 시도를 했다. 이 서버에는 사용자들이 어떻게 들어 왔는지 확인하기 위해 간단한 내부적인 pixel tracking 코드가 동작하는데 이 사용자 IP 에서도 이런 코드가 발견되었다. 이렇다는 것은 javascript 가 동작했다는 것이고 단순히 User agent 를 속이고 동작시킨게 아니라 실제로 웹브라우저가 동작했다는 의미이다. 요즘에는 취약점을 점검할 때 웹브라우저를 동작시키나 보다.

 어째는 이 서버에는 fail2ban 이 설정되어 있다. 그런데 이게 왜 동작하지 않았는지 확인해 보았다. fail2ban 을 동작시키기 위해서는 로그파일을 설정해야 하는데 이 로그 파일이 Logrotate (https://yiunsr.tistory.com/749 ) 에 의해 이름이 변경되면서 문제가 되었다. 예를 들어 fail2ban 에 access.log 이렇게 되어 있는데 Logrotate 에 주기적으로 Logrotate access.log.1 이런식으로 파일을 만들고 여기에 로그를 쌓아서 문제가 된 것이다. 또 다른 서버에는 access.log.20250914  이런식으로 설정되어 있던 Logrotate 설정도 있었다. 

다행히 fail2ban 은 glob pattern 을 지원한다. 완전한 regular expression 을 지원하는 것은 아니지만 없는 것 보다는 이것으로 어떻게든 설정할 수 있었다. https://www.digitalocean.com/community/tools/glob  에서 이러한 형식을 테스트 해 볼 수 있다. 그리고 여러개 등록이 가능하다. 

첫 서버에는 
* 등록되어야 하는 파일이름
  access.log  access.log.1
* 등록되면 안되는 파일이름
  access.log.2.gz access.log.3.gz  
이런 식이라  access.log , access.log.1 을 같이 넣었다.

2번째 서버가 좀 골치 아팠다.
* 등록되어야 하는 파일이름
access.log.20250914     다만 이름이 계속 변경됨
* 등록되면 안되는 파일이름
access.log.20250913.gz    다만 이름이 계속 변경됨
이런식으로 파일이 생성되었다. 어떻게 할지 고민하다가  [0-9]를 8개 넣어 해결했다. 
access.log.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]       이렇게 설정했다.


다음날 확인해 보니 꽤 많은 ip 들이 ban 되고 있었다. 
우선 간단히 fail2ban 으로 막았지만  너무 다양한 공격들이 들어오고 있어 어떻게 더 효율적으로 막을 수 있는지 고민해 봐야 할 것 같다. 

 python 에서 string("2025-01-31" 같은 형태)을 datetiem 으로 변환하기 위해서는 strptime 을 사용한다. 반대로 datetime 을 string 형태로 변환하기 위해서는 strftime 을 사용한다. 

 예전부터 이 함수들을 사용해 왔지만 계속 혼동했었다. 그러다 보니 구글검색을 자주하게 된다. 오늘도 이 2개가 혼동되어서 도대체 이 함수들의 fullname  이 뭔지 찾아보았다.  strptime 은 string parse time, strftime 은 string format time 이었다. 

parse 라는 말은 아무래도 string 을 뭔가 특별한 것으로 변경하는 것으로 사용하는 말이기 때문에 원래 type이 string 일 거라 추측할 수 있을 것 같다. format 이라는 말은 뭔가를 출력하기 위해서 사용하는거라서(예를 들어 C언어의 printf 같은 느낌.) 결과 값이 string 이라고 추측할 수 있을 것 같다. 

이젠 그만 찾아보고 외워서 할 때도 된 것 같은데, 내 머리가 너무 나빠서 계속 찾아보게 된다.