https:// 없이 마크다운 링크가 작동하지 않나요?

최근 링크 관련해서 뭔가 변경된 게 있나요?

게시글에 example.com을 입력하면 자동으로 링크로 작동합니다. (즉, 링크처럼 보이고 클릭하면 해당 사이트로 이동합니다.)

하지만

[link](example.com)

link

처럼 입력하면 링크처럼 보이지만 실제로는 링크가 아닙니다. (즉, 클릭해도 아무 반응이 없습니다.)

이게 최근 변경된 건가요? 우리 포럼에서 이런 식의 링크가 많이 있는데, (이제?) 작동하지 않는다는 걸 누군가가 알아챘습니다.

참고: 위 예시는 마크다운 편집기를 사용할 때의 경우입니다(명백하지 않았다면). 리치 WYSIWYG 편집기를 사용하고 링크 대화상자에 example.com을 그냥 붙여넣으면 링크는 정상적으로 작동합니다.

예를 들어 [link](example.com)이 실제로 작동한 적이 있는지 확신하십니까? 상대 경로 링크를 포함하는 마크다운, 예를 들어 사이트의 사용자 목록으로 가는 [link](/u) 링크는 작동한다는 점은 알고 있습니다.

저는 확신이 없습니다! 제가 가진 유일한 단서라면, 그걸 단서라고 부를 수 있다면, 저는 그런 방식으로(즉, https:// 없이) 해당 사이트로 링크를 자주 올렸다는 것입니다. 그리고 이번이 누군가 그 문제를 지적한 첫 번째 사례입니다. 아마도 아무도 제 링크를 클릭해 본 적이 없었던 것일 수도 있습니다!

마크다운 링크에 https://를 포함해야 하지 않다는 데 동의하시나요?

공통 마크다운 표준에서 이를 언급하는 부분을 찾지 못했습니다: CommonMark Spec

잘 모르겠네요. 솔직히 이전에는 그게 불편하다고 느낀 적이 없습니다.

말씀하신 것처럼 동작하는 다른 마크다운 시스템이 있는지 알고 계신가요?

글쎄요, 방금 GitHub 이슈에서 시도해 봤는데 제 링크가 상대 경로로 처리되었어요. 솔직히 아무것도 안 하는 것보다 더 나빴습니다.

Joplin에서는 https가 없는 제 링크를 실제 링크로 인식하여 올바른 위치로 이동합니다.

마크다운을 WordPress 편집기에 붙여넣어도 WP 사이트용 상대 링크가 생성됩니다.

제가 마크다운을 사용하는 다른 곳이 어디인지 생각해보고 있습니다.

어려를 따지자면, 이 동작은 허용 가능한 수준이라고 생각합니다. 정보만으로는 상대 경로인지 호스트명인지 구별할 수 있는 충분한 정보가 부족하기 때문입니다.

링크는 링크 텍스트(가시적인 텍스트)와 링크 대상(링크 대상이 되는 URI)를 포함합니다.

example.com은 단독으로 유효한 URI가 아닙니다. example.com을 단독으로 입력하면 링크로 변환되긴 하지만, 이는 명세(spec)가 아닌 관례입니다. pineapple.belongson.pizza도 유효한 호스트명(아직 도메인이 만료되지 않았을 때)이지만 자동 링크로 변환되지 않으므로 그렇습니다.

다음과 같은 방법을 사용할 수 있습니다:

  • 루트 URI
    [rooted](/t/384591)
    rooted
  • 상대 URI (./ 포함 또는 미포함)
    :information_source: 이는 유효한 마크다운이지만, 우리의 파서는 이를 허용하지 않습니다
    [relative](../../386082)
    relative
    [relative](./386082)
    relative
    [relative](386082)
    relative
  • 절대 URI
    [absolute](https://www.example.com/foo.html)
    absolute
  • 스킴 없는 URI (상대 URI와 유사하지만, 스킴에 대해서만 명시적으로 상대적입니다)
    [schemeless](//www.example.com/foo.html)
    schemeless

분명히, 이것이 올바른 동작입니다. 앞부분에 어떤 앵커링(고정)도 없으므로, 이는 현재 위치를 기준으로 한 상대 경로이며, [link](./example.com)와 동일합니다.

네, 마크다운 링크도 그렇게 동작해야 한다고 생각했던 제 (희망적인) 논리였죠. 하지만 점점 이것이 불가능하다는 사실(그리고 원래부터 그랬다는 사실)을 받아들이고 있습니다.

방금 Reddit에서 테스트해 봤는데, https://가 없으면 아예 링크로조차 인식되지 않습니다.

제가 여전히 제안할 수 있는 유일한 것은, 링크가 되지 않을 것이라면 링크처럼 보이게 하지 않는 것입니다(현재 동작 방식이죠). 이 옵션은 모든 선택지 중 가장 도움이 적어 보이지만, 상대 링크가 되는 것보다는 낫습니다. 사이트 자체의 상대 링크로 해석해야 하는 경우를 감지할 수만 있다면, 아예 링크가 되지 않는 Reddit의 동작 방식이 가장 좋을 것 같습니다.

이 아이디어가 좋습니다. 최종 게시글에서는 링크를 완전히 제거하고, 작성기 미리보기에 경고 메시지를 표시하는 것이 좋을 것 같습니다.

@product-managers ?

음… 큰 문제는 아니지만, 예시를 들어줄 때 [foo]() 같은 것을 사용하는 데에도 익숙해져서 foo로 렌더링되도록 하고 있었어요.

여기서 문제는 “linkify” 사이트 설정에 대한 기대치가 일치하지 않는 것 같다는 느낌이 들어요. 이 문제를 어떻게 해결해야 할지 확신이 서지 않지만, 에디터에서 이러한 엣지 케이스를 고려하고 있는 분들에게 공유해서 최소한 인지하고 고려해볼 수 있도록 할 거예요.

저는 그런 불일치를 느끼지 않지만, 그 상황을 이해합니다.

저는 마크다운이 제가 말하는 대로 정확히 작동하기를 기대합니다. [link]는 그 뒤의 내용을 링크로 렌더링하라는 뜻이며, 유효한 URL을 넣는 것은 제 몫입니다.

저는 작성기(composer)가 마법을 조금 부려주기를 기대합니다. 이것은 URL로 사용하려는 것처럼 보이므로 링크로 표시하겠습니다.

이것은 저에게 자연스러워졌지만, 혼란의 가능성이 있을 수 있다는 점은 분명히 이해합니다. 아마도 링크화(linkify)하기 전에 마크다운 링크의 형식을 검증하는 데도 비슷한 마법을 적용할 수 있을 것입니다.

단순히 데모 목적으로 링크를 원한다면, 앵커를 사용할 수 있습니다.

[foo](#nowhere)

foo

(여전히 상대 링크이지만, 현재 페이지에 대한 상대적 앵커 링크입니다)

:+1:

물론이죠. 하지만 대부분의 사용자는 [link](example.com)example.com으로 연결되는 링크를 생성할 것이라고 기대할 것 같습니다. 브라우저 주소창에 example.com을 입력하면 작동합니다. 그리고 게시물에 그대로 입력해도 작동하죠.

제가 찾고 있는 마법이 바로 그거예요 :mage: