제목처럼 Mac 환경의 브라우저에서 Command키를 누를 경우 이벤트 처리를 정리한 내용입니다. 아래는 최대한 가볍게 읽기 쉽도록 적어보려고 합니다. :)


# Mac에 존재하는 Command키
윈도우 기반과 달리 Mac 환경에서는 Command 키가 존재합니다. 이 커맨드 키는 다양한 용도로 사용되는데 브라우저를 기반으로 생각해보면 대표적인 기능은 바로 복사하기 또는 붙여넣기일 것입니다.

브라우저에서도 복사하기나 붙여하기는 많이 쓰이죠... 예를들어 아이디나 쿠폰 등의 값을 붙여넣는 경우를 생각해보겠습니다. 즉 키 이벤트를 추가한 후 Command 키를 누르면 이벤트 객체를 통해 어떤 키가 입력되었는지 확인하고 구현하는 것이 가능하겠죠. 이때 자바스크립트에서 Command 키 입력은 어떻게 알 수 있을까요?

event.metaKey


Command 키 입력 후 event 객체의 프로퍼티 중 하나인 metaKey 값이 바로 커맨드 키의 입력을 확인 할  수 있는 방법입니다. 예를들어 ctrlKey는 Ctrl 키를 입력할 경우 true 값을 반환합니다. 이처럼 Command 키를 누르면 metaKey 값이 true로 반환되죠. 반대로 입력하지 않을 경우 false를 반환하게 됩니다.


! 커맨드키 이벤트 제어가 필요한 경우
아까 언급한 것 처럼 Mac 환경에서 복사하기 또는 붙여넣기 이벤트 처리시 특히 주의해야 합니다. 그 이유는 Windows와 달리 Mac에서는 복사하기나 붙여넣이에 Ctrl이 아닌 Command 키를 사용하기 때문이죠. 즉 이벤트 처리시 ctrlKey에 추가로 Mac에 대응하기 위한 metaKey 역시 대응이 필요합니다.

만약 웹브라우저에서 복사하기를 금지하기 위해서 Ctrl 키와 v를 입력할 경우 이벤트를 동작하지 않도록 하기 위해서 아래처럼 preventDefault()를 사용할 수 있습니다. 다만 이 경우 Mac 환경에서는 복사하기가 정상적으로 동작하게 되겠죠... 바로 Command 키를 제어하지 않았기 때문입니다. 그래서 아래처럼 코드를 작성할 필요가 있을 것입니다.
if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
  event.preventDefault();
}

위 코드는 ctrl 키 뿐만 아니라 command 키 역시 이벤트 처리에 추가하여 둘 중 하나라도 입력될 경우 복사하기를 동작하지 않을 것입니다.