오늘은 스프링 프로젝트를 마무리하고 발표자료를 준비하는 시간을 가졌었다. 생각보다 할 일이 꽤 많아서 시간이 많이들어갔고 다른 공부를 많이는 하지 못했다.
프로젝트가 마무리 되면 미뤄뒀던 CS 공부라던지 여러가지 공부를 빨리 하고싶다.
여기에는 다른 부트캠프 동료가 정규표현식 관련해서 질문해준 것을 해결했던 과정을 적어보았다.
1. 정규표현식 작성하기
사용자가 입력한 비밀번호를 정규 표현식을 이용해서 제한하는 것에 대해서 질문을 받아서 그것에 대해서 생각해보고 검색해보고 같이 해결해보는 시간을 가지게 되었다.
정규 표현식을 열심히 공부해보았지만, 아예 처음부터 특정 조건에 맞는 정규식을 작성하는 것은 결코 쉬운일이 아니었다. 그래서 항상 여러 사이트들을 이용해서 검증해보고, 실험해보고 참고하면서 사용해왔다.
그러던 중 이런 정규식을 작성하는 것을 ChatGPT와 같은 곳에 부탁하면 잘 작성해준다는 이야기가 있어서 이번에 한 번 적용해 보았다.
'공백문자를 포함하지 않고, 연속된 같은 숫자 3개를 허용하지 않는, 최소 8자, 최대 15자 까지만 허용하는 정규 표현식'을 만들어달라고 요청해보았고 다음과 같은 답변이 달렸다.
다음은 요청하신 조건에 맞는 정규 표현식입니다:
- 공백문자 금지
- 최소 8자, 최대 15자
- 연속된 같은 숫자 3개 금지
^(?!.*(\d)\1\1)(?!.*\s)[A-Za-z\d]{8,15}$
위의 식을 받아서 직접 사용해보니 잘 작동하는 것처럼 보였다. 하지만 정규식을 잘 들여다보니 바로 문제가 보였다. 나는 알파벳과 숫자만을 허용하는 문자열을 만들어달라고 부탁한 적이 없었는데 [A-Za-z\d]라는 조건을 더해서 알파벳과 숫자만을 허용하는 정규식을 만들어 준 것이다.
만약 내가 정규식에 대한 지식이 아예 없었더라면 문제를 발견하는데 시간이 다소 걸렸을 수도 있겠다라는 생각이 들었다.
모든 문자를 허용하려면 [A-Za-z\d] 부분을 .으로 변경만 해주면 된다.
따라서 작성된 정규식은 다음과 같다.
^(?!.*(\d)\1\1)(?!.*\s).{8,15}$
이렇게 작성해두면 원했던대로 문자열을 걸러내는 것이 가능해진다. 이것과 더불어 실제로 여러 사이트들에서 비밀번호 입력을 어떤 식으로 제한하는지에 대해서도 공부해보면 좋을 것 같다는 생각이 들었다.
그리고 AI도 잘 사용하면 강력한 도구가 될 수 있겠지만 역시나 그대로 믿으면 안되겠구나 하는 생각이 들었다. 편리하게 사용할 수 있는 도구 이상으로 의존하면 안될 것 같다.
2. 오늘 배운 것
- 정규 표현식을 복습할 수 있는 시간을 가져보았다.
- 코틀린의 컬렉션에 대해서 조금 공부하고 정리해보는 시간을 가져보았다.
'오늘 배운 것' 카테고리의 다른 글
24-06-04 JPA @MappedSuperClass (0) | 2024.06.04 |
---|---|
24-06-03 팀 프로젝트 회고 (0) | 2024.06.03 |
24-06-01 Spring 팀 프로젝트 (5) (0) | 2024.06.01 |
24-05-31 Spring 팀 프로젝트 (4) (0) | 2024.05.31 |
24-05-30 Spring 팀 프로젝트 (3) (0) | 2024.05.30 |