Conversation
WalkthroughHTTP 요청에서 클라이언트 IP를 서버 측에서 추출하도록 새로운 유틸리티 Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant Controller
participant API
participant Service
participant CampusWiFiService
participant IpUtil
Client->>Controller: HTTP 요청 (start/process...)
Controller->>API: 전달 (HttpServletRequest 포함)
API->>Service: 호출 (HttpServletRequest 포함)
Service->>IpUtil: getClientIp(HttpServletRequest)
IpUtil-->>Service: clientIp
Service->>CampusWiFiService: validateCampusWiFi(ssid,bssid,HttpServletRequest)
CampusWiFiService->>IpUtil: getClientIp(HttpServletRequest)
IpUtil-->>CampusWiFiService: clientIp
alt 검증 성공
CampusWiFiService-->>Service: valid
Service-->>API: 성공 응답
else 검증 실패
CampusWiFiService-->>Service: invalid / 예외
Service-->>API: 예외 전파
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
src/main/java/com/gpt/geumpumtabackend/global/wifi/IpUtil.java(1 hunks)src/main/java/com/gpt/geumpumtabackend/study/api/StudySessionApi.java(3 hunks)src/main/java/com/gpt/geumpumtabackend/study/controller/StudySessionController.java(3 hunks)src/main/java/com/gpt/geumpumtabackend/study/dto/request/HeartBeatRequest.java(1 hunks)src/main/java/com/gpt/geumpumtabackend/study/dto/request/StudyStartRequest.java(1 hunks)src/main/java/com/gpt/geumpumtabackend/study/service/StudySessionService.java(4 hunks)src/main/java/com/gpt/geumpumtabackend/wifi/service/CampusWiFiValidationService.java(3 hunks)src/main/resources/application-local.yml(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
src/main/java/com/gpt/geumpumtabackend/study/service/StudySessionService.java (1)
src/main/java/com/gpt/geumpumtabackend/global/wifi/IpUtil.java (1)
IpUtil(5-27)
src/main/java/com/gpt/geumpumtabackend/wifi/service/CampusWiFiValidationService.java (1)
src/main/java/com/gpt/geumpumtabackend/global/wifi/IpUtil.java (1)
IpUtil(5-27)
🔇 Additional comments (1)
src/main/resources/application-local.yml (1)
30-30: PR 목표와의 관계 명확히 필요Hibernate DDL 전략이
create에서update로 변경되었습니다. 이 변경이 Wi-Fi 검증 및 IP 추출 개선(PR 목표)과 직접적인 관련이 있는지 확인이 필요합니다. 또한 이 변경 사항의 동기를 코드 주석이나 커밋 메시지에 명시하면 추후 유지보수에 도움이 될 것입니다.개발 환경에서
update는 일반적으로create보다 안전하지만, PR 범위에 포함된 이유를 명확히 해주시기 바랍니다.
🚀 개요
기존 프론트엔드에서 전달받던 IP 주소 대신, 서버에서 직접 요청자의 실제 IP를 추출하여 교내 Wi-Fi 접속 여부를 판단하도록 로직을 변경했습니다. 또한, Nginx 리버스 프록시 환경에서 발생하던 내부 IP(
127.0.0.1) 인식 문제를 해결하기 위해 헤더 기반의 IP 추출 유틸리티를 구현했습니다.request.getRemoteAddr()가127.0.0.1을 반환하여 Wi-Fi 검증이 실패하는 문제를 해결해야 했습니다.📝 작업 내용
1.
IpUtil유틸리티 클래스 추가HttpServletRequest의 헤더를 순차적으로 검사하여 실제 클라이언트 IP를 추출합니다.X-Forwarded-For>X-Real-IP> ... >getRemoteAddr()2. DTO 및 Controller/Service 수정
StudyStartRequest,HeartBeatRequest에서 신뢰할 수 없는ipAddress필드를 삭제했습니다.HttpServletRequest를 파라미터로 주입받아 Service 계층으로 전달하도록 변경했습니다.request객체를 사용하여IpUtil.getClientIp(request)를 호출, IP를 확보한 뒤 검증 로직을 수행합니다.3. Wi-Fi 검증 로직 (
CampusWiFiValidationService)validateCampusWiFi,validateFromCache메서드의 시그니처를 변경했습니다.(String ssid, String bssid, String ipAddress)(String ssid, String bssid, HttpServletRequest request)이 로직이 정상 동작하려면 운영 서버의 Nginx 설정(
nginx.conf)에 아래 내용이 포함되어 있어야 합니다.