카테고리 보관물: Web Standards

웹 퍼블리셔들의 블로그 홍수를 꿈꾼다

제가 처음 웹 표준을 하는 사람들을 만날때는 블로그를 안가지고 있는 사람들이 없었습니다. 이름보다는 각자의 필명을 부르는것이 더 익숙할 정도 였죠. 그당시 사람이 별로 없기도 했지만, 블로그에 자신이 배우고 익힌것들을 포스팅하면서 실력을 높이는 하나의 수단이 되었다고 확신합니다. 요즘에도 사람들을 만나면 제가 하는 많은얘기중 하나는 “자기만의 블로그를 운영해라, RSS를 구독해라” 입니다. 그러나 많은 사람들이 개인 블로그를 운영하는것을 망설이고 있더군요.

이유를 물어보면 보통 나오는 얘기가.

“쓸 얘기가 별로 없어서” 라던가, “제가무슨…”, “좀더 준비해서요” 등의 얘기가 나오드라구요…

제 생각에는 블로그에 꼭 기술 이슈에 대한 얘기 남에게 도움이 될거 같은글만 올려야 한다고 생각하지는 않습니다. 예를 들어 저 같은 경우는 개인적인 관심사나 사는 이야기 등의 이야기도 올리고, 어쩌다 알게된 기술 상식도 올리고 그러고 있습니다. 블로그는 기본적으로 개인적인 일기나 느낌들을 올리거나.. 기술이라도 개인이 자유롭게 작성하면 되는건데  많은 분들이 뭔가 블로그는 아무나 하는게 아닌것처럼 인식되어서 참으로 안타깝더라구요…

저만해도 블로그 업데이트가 정말 뜸하기 떄문에 할말은 없지만, 그래도 블로그를 운영하면 얻는것이 정말 많다고 생각합니다.

블로그를 운영하면서 얻을 수 있는 잇점은 여러가지가 있지만 제가 생각하는 몇가지 잇점을 나열해보면…

  1. 자신이 공부한것을 정리할 수 있다 입니다.우리는 많은것을 배웁니다. 커뮤니티에 질문을 하던, 검색을 하던, 아님 직접 손으로 짜면서 테스트를 하던, 각각의 공부 방법을 통해 우리는 얻는게 있습니다. 그것을 블로그에 정리해두면 나중에 찾아보기도 쉽고, 다른 사람도 쉽게 접근하여 더욱 발전할 수 있는 계기를 만들 수 있습니다. 물론 자신만의 노하우를 가지고 싶은 사람은 싫은 일이겠지만 다먹고 살자고 하는건데 공유하면서 살면 좋자나요 🙂
  2. 내꺼니까 이것저것 해볼 수 있다.
    사실 업무로 웹 페이지를 만들때는  지산이 하고 싶은것을 충분히 할 수 없는 경우가 많습니다. 하지만 내 블로그는 내 소유이기 때문에 내 맘대로 지지고 볶고 난리를 쳐도 모라 그럴사람 없습니다. 그야말로 자신의 블로그는 내 코드를 맘껏가지고 놀 수 있는 놀이터인 셈입니다.
  3. 설치형 블로그에 대한 경우 많은 다른기술을 익힐 기회가 있다.
    위의 이것저것과 일맥 상통하는 부분인데 맘만 먹으면 프로그래밍도 해볼 수 있고, 디자인도 해볼 수 있고 역시 내꺼니까 내맘대로 할 수 있고 또 애정을 가지고 해볼수있다는 생각이 듭니다. 사실 일할때는 다른 업무롤 접하기는 힘드니까요.. 이것도 큰 도움이 되지 않을까요?
  4. 말그대로 내 자신에 대한 로그이다.
    저 같은 경우에 해당이 되는데 제 신변잡기를 써놨기 때문에 제가 언제 무엇에 관심이 있었고 뭘 하려했는지 알수가 있습니다. 저는 제 자신의 기록을 따로 많이 해두는 편이 아니라서 그런가…. 블로그가 이럴깨 도움이 많이 되더라구요 (특히 이력서 쓸때;;; )

써 놓고 보니 몇가지 안되기는하는데;;;;;;;; 그래도 위의 두 세가지 정도만 으로도 충분히 가치가 있다고 생각하지 않으시나요? 또한 써 놓고 보니 블로그 라기보다는 개인 홈페이지가 더 필요 할 것 같긴한데… 뭐 암튼 그놈이 그놈이고 ㅋㅋㅋ

블로그를 만들어서 조금의 시간 투자만으로도 좋은 블로그를 만들 수 있을것이고 그런 블로그들이 많이 모여야 한국의 웹 퍼블리싱 시장도 발전 할 수 있을거라는 생각이 듭니다. 요즘 좋은서비스도 많이 나왔고 툴도 많으니 잘골라서 바로 시작해 보세요.

웹 상의 좋은 문서는 모두 영어야 라고 불평만 하지 마시고, 일단 글을 써보세요 쉬운것부터 말이죠…  글이 많아져야 정보도 많이 생기고 경쟁력도 많이 생긴다고 봅니다 저는 ㅎㅎㅎ

하지만 무엇보다 저부터 좀 글좀 많이 써야할텐데 말이죠 ㅠ_ㅠ

저도 웹 표준 좀 잘하고 싶어요

웹 표준을 잘하고 싶다 어떻게 공부해야하느냐 막막하다. 이런 내용의 글들을 많이 보게 되는데요.

“그런거 없습니다. 그냥 열심히 하세요.” 라고 하면 돌 맞을것 같고… 일단은 제가 웹 표준 기반 기술에 대한 것들을 아직 잘 하지 못하는 데다가 제가 공부했던 방식은 닥치고 하다보면 뭔가 생기겠지 라는 방식이었기 때문에 할 얘기도 별로 없습니다. 그러나 주변의 사람들이나 술자리에서 들었던 얘기들을 토대로 이야기를 풀어가 보려고 합니다.

웹 표준을 잘한다는 말은 어떤 의미에서 보면(적어도 한국에서는) HTML, CSS등의 front-end기반의 기술이 높은것을 말하기도 합니다. 또한 웹 접근성에 대한 지식도 높은것을 의미하기도 합니다. 그외 여러가지 알아야 할 것들이 많기 합니다만 천리길도 한걸음부터라고 하나하나 알아가다 보면, 잘하게 되겠죠…

웹 표준 관련 도서

시중에 웹 표준 관련 도서들이 많이 나와 있습니다. 2005년 실용예제로 배우는 웹 표준 (에이콘, 2005)이라는 책이 처음 번역이 되면서 웹 표준 책은 그동안 수도 없이 나왔습니다. 사실 저는 어떤 책을 특히 추천 한다기 보다는, 어떤 책이던지 한 권을 전부 읽는것을 먼저 목표로 잡아야한다고 생각합니다. 사실 책 한 권 보기가 그렇게 쉬운일이 아니죠… 어떤 책이 좋은지 추천을 권하신다면 현석님 블로그의 글을 읽어 보기를 권합니다.

제가 몇가지 권하는 책은

  • 제프리 젤드만의 웹 표준 가이드 (웹 표준의 역사를 알 수 있는 책입니다. 출간된지 오래되어 이해하기 힘든면들이 있을 수 있지만 제게는 제일 좋았던 책입니다.)
  • 웹 표준 교과서 (말그대로 교과서 같은책입니다. 가장 많이 알려지기도 했습니다.)
  • Head first HTML & XHTML with CSS (HTML, CSS 처음배우는 사람에게 권장하는 책입니다. 이시리스 책의 특징은 재미있는구성으로 이해하기가 쉽다는것입니다.)

입니다. 사람마다 기호가 다르고 취향이 다르기 때문에 좋아하는 책도 다릅니다. 뭐 그냥 제 개인적인 생각이니 그냥 지면 낭비용이라고 보시면 될것같아요 🙂

RSS Feeding

사실 웹 표준 관련도서가 한국에 전무했을때는 웹 표준을 공부하는데 가장 큰 도움을 주었던 방식이라고 생각합니다. 웹 표준은 단순히 기술만 이해한다고 해서 되는것이 아니라고 생각하기 때문에 사람들의 다양한 생각을 보고 느끼고 자신의 생각을 정리하는데 RSS Feeding 만한 것도 없다고 봅니다. 저는 구글 리더에 각종 RSS주소들을 등록하고 읽고 있습니다. 50여개정도의 RSS를 등록해서 보고 있는데.. 정말 많은 도움이 되고 있습니다. 조만간 CDK 에서 유용한 RSS들을 모아서 공유할까 하는 생각도 있습니다.

Forum, community

우리나라에도 웹 표준 관련 커뮤니티나 포럼들이 많이 존재합니다. 그들과 의견을 공유하고 개개인의 사정을 공감하면 때로는 오프라인에서 만나서 대화도 나누면서 자기자신의 실력을 높이는 방법중 하나입니다. 우리나라에는 대표적인 사이트로 CDK, clearboth, 하드코딩을사랑하는사람들 등이 있습니다:) 그냥 맘에 드는 사이트에서 질문도 하고 의견도 나누고 답변도 하고 그러다보면 배우는것이 정말 많을거라 생각합니다.

Spec 문서 공부 및 영어 =_=;

제가 보기엔 스팩을 보는것이 가장 확실한 방법입니다. 보는데 어려움이 있고 영어로 구성되어있어 이해하기 쉽지는않지만 차근차근 보다 보면 생각보다 문서가 어렵지 않게 구성되어 있습니다. “모든것의 핵심에는 스팩이 있었다” 라고 말할정도로 스팩은 중요합니다. 포럼이나 게시판에서 나오는 질문들의 대부분은 (호환성 이슈를 제외하고) 스팩에 답이 있습니다. 다만 항상 문제가 되는것은 영어라지요. 저도 영어가 이세상에서 이명박 다음으로 싫은데… 사전 좀 찾고 구글 번역기 돌리면 대충 이해할 수 있더라구요. 그리고 영어문서는 보면 볼수록 이해의 폭이 넓어지더라구요. 저같은 까막눈도 이제는 어려워도 조금은 볼 수 있으니 가능할것같아요.

Search

검색만 잘하면 언제나 반은 먹고 들어갑니다. 이것도 하면 할수록 늘어요… 잘키운 검색 습관 열 책 안부럽습니다. ㅎㅎ

다들 열심히 공부해서 웹 표준의 고수가 되어봅시다 :)(저부터도 좀;;;;)

meta tag 정리

html페이지에 meta 태그를 많이 쓰는데 한번 쯤 정리해 보고 싶어서 찾아봤습니다.
일단 meta에 대한 단어의 뜻이 필요하겠죠??

http://engdic.daum.net/dicen/search.do?m=all&n=search&endic_kind=&q=meta

찾아보니 뭔 헛소리인지 모르겠더라구요 그래서 좀더 찾아보니

http://www.terms.co.kr/meta.htm

이런글이 나오네요..
뭐 길게 써놨는데 일단 필요한건 첫줄!!

“대부분의 정보기술 용례에서 “메타”란, “근원적인 정의 또는 설명”을 의미하는 접두사이다.
그러므로, 메타데이터란 데이터에 대한 정의나 설명이 되고, 메터언어란 언어에 대한 정의나 설명이 되는 것이다.”

라고 합니다.
이 정도로 영어공부는 그만 하고;;;

meta 태그는 HTML문서의 메타데이터(데이터 즉 자료에 대한 정보를 말함) 공급하는 태그입니다.
떄문에 정보만 가지고 있기 때문에 화면이나 코드에는 표현이 되지않지만 컴퓨터는 이해하는 정보가 되는것이죠.
그래서 일반적으로 meta 태그는 페이지의 키워드나, 페이지를 만든사람, 마지막으로 업데이트된 날짜, 등등의 정보를 넣어주면 컴퓨터(현재는 브라우저)에서 인식을한다는것같아요~
페이지의 인코딩이나 타겟브라우징(현재 IE)을 설정할 수 있기도 하고. 그리고 페이지를 리다이렉트 시키기도 하고 뭐 그런 용도로 쓰이는 태그입니다.

그래서 브라우저는 meta 의 정보를 보고 이페이지의 인코딩, 저작자, 내용, 업데이트 된 날짜 등등을 알아내고 그에 맞게 반응을  합니다.

에서 참고했습니다.

참 meta정보는 head 태그에 넣어야하구요. 인코딩 정의 메타태그는 맨 앞에 넣어주는게 좋습니다
이제 대충 뭔 태그인가 알아봤으니 써봐야겠죠.


<!-- 제일중요한거! -->
<meta http-equiv="content-Type" content="text/html; charset=UTF-8" /> : 웹 문서의 인코딩 설정.

<meta http-equiv="Last-Modified" content="Sat,22 01 2011 10:07:30" /> : 최종수정일을 정의.

<!-- 이건 페이지를 자동으로 이동하는건데 사용자가 의도하지않은 액션이 생기므로 접근성에 별로 좋지 않아요:) -->
<meta http-equiv="Refresh" content="15;URL=http://mydeute.com/txp/" /> : 페이지이동
<meta http-equiv="Page-Enter" content="RevealTrans(Duration=5/시간 초단위, Transition=21) " /> : 페이지 로딩시 트랜지션 효과(장면 전환 효과)
<!-- 이걸쓰면 검색엔진이나 브라우저에서 정보를 잘긁어간다는!! -->
<meta name="Subject" content="홈페이지 주제 입력" />
<meta name="Title" content="홈페이지 이름 입력" />
<meta name="Description" content="설명문 입력" />
<meta name="Keywords" content="키워드 입력" />
<meta name="Author" content="만든사람 이름" />
<meta name="Publisher" content="만든단체/회사 이름" />
<meta name="Other Agent" content="웹책임자 이름" />
<meta name="Classification" content="카테고리위치(분류)" />
<meta name="Generator" content="생성프로그램(에디터)" />
<meta name="Reply-To(Email)" content="메일주소 입력" />
<meta name="Filename" content="파일이름 입력" />
<meta name="Author-Date(Date)" content="제작일" />
<meta name="Location" content="위치" />
<meta name="Distribution" content="배포자" />
<meta name="Copyright" content="저작권" />

<!-- 검색엔진에서 뭘가져갈지 허용범위를 설정해주는~ -->
<meta name="robots" content="ALL" />
<meta name="robots" content="index,follow" /> : 이 문서도 긁어가고 링크된 문서도 긁어감.
<meta name="robots" content="noindex,follow" /> : 이 문서는 긁어가지 말고 링크된 문서만 긁어감.
<meta name="robots" content="index,nofollow" /> : 이 문서는 긁어가지만, 링크된 문서는 무시함.
<meta name="robots" content="noindex,nofollow" /> : 이 문서도 무시!, 링크도 무시함.

<!-- 캐시 컨트롤 -->
<meta http-equiv='Cache-Control' content='no-cache' />
<meta http-equiv="Expire" content="-1" /> : 캐쉬 완료(파기)시간 정의.
<meta http-equiv='Pragma' content='no-cache' /> : 캐쉬가 되지 않게 하는 태그

물론 다쓸 필요 절대 없고
주로 쓰는거를 보면


<meta http-equiv="content-Type" content="text/html; charset=UTF-8" />
<meta name="Keywords" content="키워드 입력" />
<meta name="Author" content="만든사람 이름" />
<meta name="Description" content="설명문 입력" />

아무래도 대충 찾아본거라 부족한점이 많습니다.
잘못된거나 지적질 환영합니다.
그럼 안녕~

p.s 참 이 메타태그리스트는 어떤 사이트에서 참고를 한건데 사이트가 기억이 안나네요. 찾으면 출처 및 참고 업데이트 하겠습니다.

CSS3 Media queries Vol.1

얼마전에 One Web 에 대해서 잠깐 언급한적이 있었는데.. One Web 을 구현하기 위해 꼭 알아야 하는 기술인 CSS3 Media queries Module 에 대해서 아주 조금 건드려 볼까 합니다. 예전에 스터디에서 했던 주제를 고친것으로 계속 발전시켜 볼 예정입니다.

개요

HTML4.01 과 CSS2 에서 이미 media type에 대응하는 스타일 시트를 따로 구성할 수 있는 방식을 지원하고 있었지만, 미디어에 대한 특징이나 범위를 명확하게 지정할 수 없었기 때문에, screen, print, handheld 정도만 사용 되었던것이 사실이었습니다. 그래서 CSS3에서는 좀 더 미디어의 특징을 잘 표현할 수 있는 방법을 확장하고 세분화한 스팩을 제공하게 되었습니다. 그것이 CSS3 Media Queries Module 이 되겠습니다. 앞서 언급했지만 HTML4, CSS2에서도 media type에 따른 css를 분기하는 방법은 지원하고 있었습니다. 그예를 보면 HTML4.01 에서는 스타일 시트 정의 시에 media를 선택 할 수 있습니다.


<STYLE type="text/css" media="projection">
    H1 { color: blue}
</STYLE>
<link rel="stylesheet" type="text/css" media="screen" href="sans-serif.css">
<link rel="stylesheet" type="text/css" media="print" href="serif.css">

참고 URL 은 다음과 같습니다.

CSS2에서 정의된 media type 정의방법은 다음과 같습니다.


@media screen {
    * { font-family: sans-serif }
}

참고 URL은 다음과 같습니다.

  • http://www.w3.org/TR/CSS21/media.html

위의 방법은 출력될 media의 type만 결정 할 수 있기 때문에 같은 미디어의 다양한 환경을 모두 수용하기에는 어려움이 많습니다. 하지만 CSS Media queries Module을 이용하면 디바이스의 종류뿐만 아니라 다양한 조건을 이용하여 Style을 분기할 수 있게 됩니다.

문법 및 사용법

미디어 쿼리의 문법 및 사용법은 다음과 같습니다.

media_query_list: <media_query> [, <media_query> ]*
media_query: [[only | not]? <media_type> [ and <expression> ]*]
| <expression> [ and <expression> ]*
expression: ( <media_feature> [: <value>]? )
media_type: all | aural | braille | handheld | print |
projection | screen | tty | tv | embossed
media_feature: width(가로 너비) | min-width(최소 가로 너비) | max-width(최대 가로 너비)
| height(높이) | min-height(최소 세로 높이) | max-height(최대 세로 높이)
| device-width(디바이스의 기본 가로 너비)
| min-device-width(디바이스의 기본 최소 가로 너비) | max-device-width(디바이스의 기본 최대 가로 너비)
| device-height(디바이스의 세로 높이) | min-device-height | max-device-height
| aspect-ratio(화면 비율) | min-aspect-ratio(최소 화면 비율) | max-aspect-ratio(최대 화면 비율)
| device-aspect-ratio(디바이스의 화면 비율)
| min-device-aspect-ratio(디바이스의 최소 화면 비율) | max-device-aspect-ratio(디바이스의 최대 화면 비율)
| color(색상당 비트수) | min-color(최소 색상당 비트수) | max-color(최대 색상당 비트수)
| color-index(user agent가 지원하는 팔레트의 색상 갯수)
| min-color-index(user agent가 지원하는 팔레트의 색상의 최소 갯수) | max-color-index(user agent가 지원하는 팔레트의 색상의 최대 갯수)
| monochrome(흑백 장치에서 픽셀 당 비트의 개수)
| min-monochrome(흑백 장치에서 픽셀 당 비트의 최소 개수) | max-monochrome(흑백 장치에서 픽셀 당 비트의 최대 개수)
| resolution(해상도) | min-resolution(최소 해상도) | max-resolution(최대 해상도)
| scan | grid

무슨소리인지 저도 잘모르겠습니다. ㅎㅎ 미디어 쿼리는 대소문자를 구별하지 않으며 알수없는 미디어의 경우에는 false 를 리턴한다고 합니다. 🙂

Media Type

CSS3 Media Queries Module 에서 정의하는 Media의 종류는 다음과 같습니다.

  • all : 모든 미디어 타입
  • aural : 음성 합성 장치
  • braille : 점자 표시 장치
  • handheld : 손으로 들고 다니면서 볼 수 있는 작은 스크린에 대응하는 용도
  • print : 인쇄 용도
  • projection : 프로젝터 표현 용도
  • screen : 컴퓨터 스크린을 위한용도
  • tty : 디스플레이 능력이 한정된, 텔렉스(teletype), 터미날, 또는 수동 이동 장치 등, 고정 피치(fixed-pitch:폭이 일정) 글자를 사용하는 메디아를 위한 의도 “tty” 메디아 타입에서 제작자는 픽셀(pixel) 단위를 사용하여서는 안됨
  • tv : 음성과 영상이 동시 출력되는 TV와 같은 장치
  • embossed : 페이지에 인쇄된 점자 표지 장치

뭔가 겁네 많은것 같아요. 일단 대충 이정도로 알아보고 실제 사용해보면서 알아보는거로 하는게 좋겠어요.

사용예

외부 파일을 사용하는법


&lt;link rel="stylesheet" media="screen and (min-device-width: 200px)" href="example2.css" /&gt;
&lt;link rel="stylesheet" media="screen and (min-device-width: 800px)" href="example1.css" /&gt;

예제) 아이폰과 웹브라우저에서 비교 http://mydeute.com/media_queries/1.html
디바이스의 가로값이 최소 200px이상이면 example2.css를 로드, 디바이스의 가로값이 최소 800px이상이면 example1.css도 같이 로드함

<style> 태그를 이용하는법.


&lt;style type="text/css" media="screen and (min-device-width: 200px)"&gt;
body { background-color: #0F0; }
&lt;/style&gt;
 &lt;style type="text/css" media="screen and (min-device-width: 800px)"&gt;
body { background-color: #F00; }
&lt;/style&gt;

예제) 아이폰과 웹브라우저에서 비교 http://mydeute.com/media_queries/2.html

CSS 파일내에서 사용하는 방법


&lt;style type="text/css"&gt;
@media screen and (min-device-width: 200px) {
body { background-color: #0F0; }
}
@media screen and (min-device-width: 800px) {
body { background-color: #F00; }
}
&lt;/style&gt;

예제) 아이폰과 웹 브라우저에서 비교 http://mydeute.com/media_queries/3.html

only, not

media type 을 선별하는 과정중에 선택할 수 있는 접두어

only

@media only handheld {
body { background-color: #F00; }
}
not

@media not screen {
body { background-color: #F00; }
}

features

width

user-agent의 현재 width 값에 대응해서 반응


@media screen and (width: 980px) {
body { background-color: #F00; }
}

예제) 아이폰과 브라우저에서 비교 http://mydeute.com/media_queries/4.html user-agent의 가로너비가 980px일때 배경이 빨간색으로 표현

min-width

최소 가로 너비를 지정하고 지정된 값보다 너비가 길면 그값에 대해 반응


@media screen and (min-width: 981px) {
body { background-color: #F00; }
}

예제) 아이폰과 브라우저에서 비교 http://mydeute.com/media_queries/5.html user-agent의 가로너비가 981px 이상 일때 배경이 빨간색으로 표현

max-width

최대 가로 너비를 지정하고 지정된 값보다 너비가 좁은 경우에만 그 값에 대해 반응


@media screen and (max-width: 980px) {
body { background-color: #F00; }
}

예제) 아이폰과 브라우저에서 비교 http://mydeute.com/media_queries/6.html user-agent의 가로너비가 980px 이하 일때 배경이 빨간색으로 표현

응용 1

조합이 가능해짐 0~ 320px 까지는 배경이 파란색 321px~ 800px 까지는 배경색이 빨간색 801px이상의 너비에서는 녹색 배경을 만들고 싶다면


@media screen and (max-width: 320px) {
body { background-color: #00F; }
}
@media screen and (min-width: 321px) and (max-width: 800px) {
body { background-color: #F00; }
}
@media screen and (min-width: 801px) {
body { background-color: #0F0; }
}

예제 브라우저의 가로 너비를 조절해보면서 보면 됨 http://mydeute.com/media_queries/7.html

응용 2

브라우저 화면의 가로 너비에 따라 레이아웃을 변경할수도 있음


@media screen and (max-width: 320px) {
#wrap { width:320px }
#left {  border:2px solid #F00; width: 316px }
#contents{ border:2px solid #0F0; width: 316px }
#right { border:2px solid #00F; width: 316px }
}
@media screen and (min-width: 321px) and (max-width: 800px) {
#wrap { width:800px }
#left {  float: left; border:2px solid #F00; width: 196px }
#contents{ float: left;border:2px solid #0F0; width: 596px }
#right { clear:both;border:2px solid #00F; width: 796px }
}
@media screen and (min-width: 801px) {
#wrap { width:100% }
#left {  float: left; border:2px solid #F00; width: 23% }
#contents{ float: left;border:2px solid #0F0; width: 50% }
#right { float: left;border:2px solid #00F; width: 23% }
}

예제) http://mydeute.com/media_queries/8.html

아주 기본적인 미디어 쿼리의 사용법에 대해 알아보았습니다.
이 다음에는  제가 현재 제블로그 스킨을 좀 바꿔보려고 하고 있으므로 실제 적용기를 다뤄볼까 합니다.

그럼 그동안 즐거웠어요