Fizzy의 Rails 라우팅 및 컨트롤러 구조
Fizzy는 Rails의 라우팅에서 리소스 중첩(nesting resources)을 컨트롤러 모듈과 함께 사용하는 흥미로운 접근 방식을 보여줍니다.
-
중첩 라우트 예시:
routes.rb파일에서 깊게 중첩된 구조를 사용하며, 이는Columns::Cards::Drops::NotNowsController와 같은 명확한 컨트롤러 매핑으로 이어져 액션의 의도를 즉각적으로 파악할 수 있게 합니다. -
Restomatic Gem: 저자는
Restomaticgem을 사용하여 이러한 중첩 라우트 정의를nest :cards do ... end와 같이 더욱 간결하게 정리할 수 있다고 제안합니다. 이는 동일한 결과를 제공하면서 라우트 파일을 깔끔하게 유지하는 방법입니다.
매직 링크 인증 방식 분석
Fizzy는 사용자 로그인에 매직 링크(Magic Link) 방식을 채택하여, 사용자 이름/비밀번호 관리의 복잡성과 고객 지원 문제를 해결합니다.
-
매직 링크의 장점: 잘못된 이메일 입력으로 인한 로그인 문제 및 고객 지원 부담을 줄이고, 올바른 이메일을 통해서만 접근 가능하여 보안을 강화합니다.
-
잠재적 보안 문제 및 개선 방안:
- 이메일 가로채기: 매직 링크가 이메일을 통해 전송되므로 가로채기 위험이 있습니다. 요청을 시작한 브라우저에 쿠키나 세션 토큰으로 비밀 값을 설정하여 링크를 해당 브라우저에 바인딩하는 방법이 제안됩니다. 공격자가 다른 브라우저에서 링크를 열면 세션에 비밀 값이 없어 오류가 발생합니다.
- 의사 난수 코드 생성: 매직 링크에 사용되는 랜덤 코드(
CODE_ALPHABET.sample)가 의사 난수 방식으로 생성되는 점이 지적됩니다. 보안 강화를 위해SecureRandom.hex와 같이 암호학적으로 안전한 난수를 사용하거나Anybasegem을 활용하는 것이 권장됩니다.