Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IP 지리적 위치 서비스 개선 완료 #364

Merged
merged 3 commits into from
Jun 5, 2024
Merged

Conversation

limehee
Copy link
Collaborator

@limehee limehee commented Jun 4, 2024

Summary

#326

[1]
기존 일부 IP를 대상으로 정적으로 처리하던 사설 IP(Bogon IP) 판별 로직을 강화합니다.

[2]
IP 정보를 가져오는 서비스와 해외 IP를 차단하는 서비스가 강결합되어있다고 판단됩니다.
변경 용이성 및 단일 책임 원칙을 고려하여 각 서비스를 분리하여 필터로 구성합니다.

Tasks

  • Bogon IP 판별 로직 개선
  • 요청 IP에 대한 정보 수집/차단 필터 분리

ETC

스크린샷의 로그는 테스트 목적으로 임시로 작성한 로그이며, 커밋에 포함되지 않습니다.

Screenshot

IPinfoSpringFilter에서 IP 정보를 수집하고 IpAuthenticationFilter에서 해외 IP를 차단하는 과정이 순차적, 정상적으로 이루어짐을 확인할 수 있습니다.
image

@limehee limehee requested a review from mingmingmon June 4, 2024 13:14
@limehee limehee self-assigned this Jun 4, 2024
@limehee limehee added the 🔨 Refactor 코드 수정 및 개선 label Jun 4, 2024
@limehee limehee linked an issue Jun 4, 2024 that may be closed by this pull request
2 tasks
Copy link
Collaborator

@mingmingmon mingmingmon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IpAuthenticationFilter와 IpInfoSpringFilter를 분리한 작업이 적절한 것 같습니다.

이렇게 처음에 작성할 때는 같은 메소드에 여러 기능이 섞여들어갔지만, 어떤 과정으로 두 기능이 섞여있음을 파악(인지)하신건지 궁금합니다!

제가 이미 작성된 코드를 다시 객관적으로 보는 부분이 어려워서 좋은 사고흐름을 배우고 싶어 여쭤봅니다!

@limehee
Copy link
Collaborator Author

limehee commented Jun 4, 2024

처음 의도대로라면, '해외 IP 차단' 기능만을 위해 사용되는 필터를 통해 수집된 정보가 있었습니다. 이 경우에는 클래스가 응집력을 가지고 있다고 볼 수 있습니다. 그러나 실제로는 필터에서 수집된 정보가 필터 외부에서도 사용되었고, 앞으로 추가적인 확장 가능성도 염두에 두어야 했습니다. 수정 전의 코드에서는 정보 수집과 차단 기능이 하나의 필터에 결합되어 있었는데, 이는 확장이 이루어질수록 불필요한 결합으로 이어지고, 한 기능의 변경이 다른 기능에 영향을 미칠 수 있습니다. 따라서, 이번 작업을 통해 각 기능을 분리하기로 결정했습니다.


리팩토링할 코드를 찾는 데 있어서는 최근에 아키텍처 전환을 목표로 의존성에 대해 공부하면서 얻은 넓은 시야가 큰 도움이 되었습니다.

@mingmingmon
Copy link
Collaborator

개념공부 후에 실질적으로 코드에 적용하는 과정이 중요하군요! 노하우 공유 감사합니다!

@SongJaeHoonn
Copy link
Contributor

아직 clab 서비스의 전반을 파악하지 못해서 보안을 위해 가짜 ip들을 차단하는 로직을 처음 보기도 하고, 이런 부분에서는 지식이 거의 없어서, 어떤 기준으로 이런 ip들을 정하신건지 궁금합니다! 아직까지 코드 보는 능력이 없어서 필터 분리 부분은 제가 지금 바로 볼 수 없는 부분 같아서 죄송합니다,,

@limehee
Copy link
Collaborator Author

limehee commented Jun 4, 2024

가짜 IP(사설 IP)의 경우 서비스 코드에서 요구하는 위치 정보를 가져올 수 없기 때문에 필터링 과정을 거쳐 IPInfo에 API 요청을 보내지 않도록 설계하였습니다. 이를 위해 가짜 IP를 식별하는 과정이 필요한데, 현재 프로젝트에서 발생할 수 있는 가짜 IP는 정해져 있었습니다. 따라서 현재 발생되는 가짜 IP를 고정으로 하여 처리했습니다.

하지만 이 부분은 프로젝트가 진행되면서 변경될 수 있는 부분이기 때문에 리팩토링이 필요했습니다. IPInfo에서 제공하는 라이브러리 안에 가짜 IP를 구분하는 로직이 포함되어 있음을 인지하고, 해당 코드 부분을 일부 발췌하여 적용시키는 과정을 진행했습니다. 이후, 기존 1개의 필터에서 진행되던 기능을 2개로 분리하면서 해당 부분의 코드가 수정되었습니다. 라이브러리에는 API 요청 과정에서 가짜 IP에 대한 적절한 처리를 하여 응답을 넘겨주기 때문에, 정보 수집 필터를 먼저 거치게 되면 이후에 가짜 IP에 대한 추가 검증은 필요없어지게 됩니다. 이 이유로 커밋에 포함되어 있던 가짜 IP 검증 로직은 사라지게 되었고, 라이브러리에서 전적으로 처리하는 지금의 형태가 되었습니다.

@SongJaeHoonn
Copy link
Contributor

가짜 IP를 구별해내기 위해 원래는 커스텀을 통해 직접 필터링하도록 구현했는데, 해당 내용을 IPInfo가 제공하는 라이브러리를 적용해 기존 로직과 중복되는 부분을 깔끔하게 지우고, 필터 분리를 통해 SRP도 지키게 된 것으로 이해했습니다! 감사합니다

@limehee limehee merged commit 545b9b2 into develop Jun 5, 2024
1 check failed
@limehee limehee deleted the refactor/#326 branch June 5, 2024 00:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🔨 Refactor 코드 수정 및 개선
Projects
None yet
Development

Successfully merging this pull request may close these issues.

IP 지리적 위치 서비스 개선
3 participants