'개발자가 뭐길래'에 해당되는 글 54건
- 2010/01/12 Longest Prefix
- 2009/12/14 Fire Fox용 http watch (2)
- 2009/12/11 [우분투] - How to install manpage (man page 설치)
- 2009/08/26 IPv4 compatible address와 IPv4 mapped address의 차이는?
- 2009/08/14 업무프로세스 세미나
- 2009/06/26 The name-to-address translation function (2)
- 2009/06/26 PTR
- 2009/06/26 RR(resource records) 자원 레코드
- 2009/06/26 FQDN
- 2009/06/26 IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요?
라우팅 룰을 넣을 때, 프리픽스가 긴 것이 우선순위가 높다.
http://en.wikipedia.org/wiki/Longest_prefix_match
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| Longest Prefix (0) | 2010/01/12 |
|---|---|
| IPv4 compatible address와 IPv4 mapped address의 차이는? (0) | 2009/08/26 |
| The name-to-address translation function (2) | 2009/06/26 |
| PTR (0) | 2009/06/26 |
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
Firefox 브라우져를 이용해 웹 접속을 할 때 http 패킷이 뭐가 다니는지 확인하고 싶다면
HttpFox 를 부가 기능으로 설치할 수 있다.
UI도 http watch와 진짜로 흡사하게 생겼다.
그냥 Firfox 용 부가 기능이라서, Windows든, Linux 든 상관없이 설치해서 쓸 수 있다.
더구나 공짜인데..
http watch는 무얼 먹고 사나요?
크고 선명하게 보려면 그림 클릭
내려받기 : https://addons.mozilla.org/ko/firefox/addon/6647
HttpFox 를 부가 기능으로 설치할 수 있다.
UI도 http watch와 진짜로 흡사하게 생겼다.
그냥 Firfox 용 부가 기능이라서, Windows든, Linux 든 상관없이 설치해서 쓸 수 있다.
더구나 공짜인데..
http watch는 무얼 먹고 사나요?
크고 선명하게 보려면 그림 클릭
내려받기 : https://addons.mozilla.org/ko/firefox/addon/6647
'개발자가 뭐길래 > HTTP' 카테고리의 다른 글
| Fire Fox용 http watch (2) | 2009/12/14 |
|---|
댓글을 달아 주세요
<우분투에서 man 페이지 설치하기>
sudo apt-get install manpages-dev
아놔 왜 이렇게 안깔린게 많아? ㅇ_ㅇ;
스마트 폰도 사면 이런 생각 들겠지..?
sudo apt-get install manpages-dev
아놔 왜 이렇게 안깔린게 많아? ㅇ_ㅇ;
스마트 폰도 사면 이런 생각 들겠지..?
'개발자가 뭐길래' 카테고리의 다른 글
| [우분투] - How to install manpage (man page 설치) (0) | 2009/12/11 |
|---|---|
| 업무프로세스 세미나 (0) | 2009/08/14 |
| 최신 커널의 특징과 디바이스 드라이버 개발에 대한 이해 (0) | 2008/12/10 |
| 웹 로봇 소스 코드 (0) | 2008/12/09 |
| iptables Tutorial 1.2.2 (0) | 2008/12/09 |
| 공돌이는 대단해! (0) | 2008/09/04 |
댓글을 달아 주세요
IPv4 compatible address는 IPv4 주소 (32비트) 96비트의 0을 채운 것입니다. 예를 들어, IPv4 주소가 143.248.2.5이면, “::143.248.2.5”가 되는 것입니다. IPv4 mapped address는 IPv4 주소 (32비트) 앞에 80개의 0과 16개의 1을 채우는 것입니다. 예를 들면, “::ffff:143.248.2.5”가 됩니다.
IPv4 compatible 주소는 IPv6 컴퓨터인데, IPv4 네트웍에 연결된 경우에 사용합니다. 이런 경우에, IPv6 패킷은 IPv4 패킷 위에 tunneling 되어서 다른 IPv6 컴퓨터로 전송되어야 합니다. IPv4 네트웍 속에 덮여있는 IPv6 컴퓨터인 셈이죠.
IPv6 mapped address는 IPv4 컴퓨터에 IPv6 주소를 할당하는 경우입니다. IPv6 compatible이 IPv4 cloud 안에 갇힌 컴퓨터라면, 이 경우에는 그런 것은 없지만 IPv4 컴퓨터에 패킷을 전달하기 위해서는 IPv4 컴퓨터가 IPv6에서 알 수 있는 주소를 가져야 하겠죠.
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| Longest Prefix (0) | 2010/01/12 |
|---|---|
| IPv4 compatible address와 IPv4 mapped address의 차이는? (0) | 2009/08/26 |
| The name-to-address translation function (2) | 2009/06/26 |
| PTR (0) | 2009/06/26 |
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
댓글을 달아 주세요
2009|0814 회의록
회의 발표자
- 김이사님
회의 안건
- 개발 프로세스 세미나 01
이슈 및 논의내용
- 스펙(사양) => 디자인(설계) => 코딩 => 테스트
-
기능과 스펙(specification 요구명세서)
- 기능에서 기능적인 것 외에 더 상세히 적는 것이 스펙(spec)이다.
-
스펙이 없을 경우 혼돈이 발생한다.
- "숫자 3개를 주고 정렬하는 프로그램" 을 만들기로 하고 진행 중에 나오는 요구사항
- -> 만약 실수 3개라면?
- -> 만약 복소수 포함이라면?
- -> 만약 핸드폰에 넣을 프로그램이라면?
- 이와 같이 스펙이 명확하지 않으면 최악의 경우 모두 엎고 다시 만들어야 할 수도 있다.
-
대부분의 개발자들은 방해받는 것을 싫어한다.
- 다른 부서와의 명확한 의사소통을 하고 중복 의사소통을 피하기 위해 스펙을 상세히 쓰는 것이 좋다.
-
디자인 (설계)
- 완성된 스펙으로 디자인을 시작한다.
- 프로그래머에 대한 의존도를 최소화 한다.
-
어떤 TOOL을 이용할 것인가?
- 자신에 맞는 TOOL을 이용하여 설계한다. 너무 다루기 힘든 TOOL을 사용하려고 하면 TOOL 사용법을 배우는데 시간이 더 많이 든다.
-
개발
- 20%의 코딩 + 80%의 예외처리(에러처리)
-
Peer Review
-
종류 :
- 설계 리뷰
- 코드 리뷰 (checkin 하기 전 코드에 대한 review) 등등
-
방법 :
- 몇명 모여서 간단히.
- 보통 상급 프로그래머 + 초급 프로그래머의 조합
-
코드 리뷰의 목적 :
- test 이전에 버그를 조기 발견할 수 있다.
- 정보의 공유를 통해 개인 사정으로 부재시에도 별 문제가 없다.
- 잘된 코드를 볼 수 있고, 잘못된 코드를 고쳐가면서 빨리 배울 수 있다.
- 왜 이렇게 만들었느냐 하는 책임을 묻는 자리가 아니다.
-
-
테스트
- Pre-Alpha test (개발버전)
- Alpha test : 설치, 동작이 되고 주요기능 구현이 되어 있다.
- Beta test : 모든 기능이 구현되어 있다.
- RC (Release candidate) : 출시를 위해 만들어 버그가 거의없다.
- RTM (Release To Manufacturing == GA(General Available)) 릴리즈 버전. RC의 마지막 버전
-
훌륭한 관리자의 역할
-
예상치 못한 것을 예상하라.
- Back up Plan을 가지고 A가 안될 경우 B플랜을 실행한다.
- 예상하는 것까지는 괜찮은 관리자, 예상하여 B플랜을 가지고 B로 하면 된다는 것까지 알고 있으면 훌륭한 관리자.
이 글은 스프링노트에서 작성되었습니다.
'개발자가 뭐길래' 카테고리의 다른 글
| [우분투] - How to install manpage (man page 설치) (0) | 2009/12/11 |
|---|---|
| 업무프로세스 세미나 (0) | 2009/08/14 |
| 최신 커널의 특징과 디바이스 드라이버 개발에 대한 이해 (0) | 2008/12/10 |
| 웹 로봇 소스 코드 (0) | 2008/12/09 |
| iptables Tutorial 1.2.2 (0) | 2008/12/09 |
| 공돌이는 대단해! (0) | 2008/09/04 |
TAG notes
댓글을 달아 주세요
[RFC 2133] Basic Socket Interface Extensions for IPv6)
좋은 참고가 되었다.
http://www.ietf.org/rfc/rfc2133.txt?number=2133
추천받은 사이트 (Powerd by DNS)
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| Longest Prefix (0) | 2010/01/12 |
|---|---|
| IPv4 compatible address와 IPv4 mapped address의 차이는? (0) | 2009/08/26 |
| The name-to-address translation function (2) | 2009/06/26 |
| PTR (0) | 2009/06/26 |
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
TAG dns
댓글을 달아 주세요
-
-
보리숲
2009/06/30 09:41
gethostbyname(), gethostname2() 함수와 RES_USE_INET6 옵션에 대한 비교표도 나와있고, getaddrinfo() 함수에 대한 설명이 나와있는데 발표한 PPT도 이 문서를 참고해서 만들어졌을 거라는 생각이 들 정도로 PPT 내용에 대한 설명들이 적혀 있어요. RFC가 함수 설명도 해줄줄은 몰랐어요..
-
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| IPv4 compatible address와 IPv4 mapped address의 차이는? (0) | 2009/08/26 |
|---|---|
| The name-to-address translation function (2) | 2009/06/26 |
| PTR (0) | 2009/06/26 |
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
| IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요? (0) | 2009/06/26 |
TAG dns
댓글을 달아 주세요
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| The name-to-address translation function (2) | 2009/06/26 |
|---|---|
| PTR (0) | 2009/06/26 |
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
| IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요? (0) | 2009/06/26 |
| IPv6 멀티캐스트 범위 (2) | 2009/06/26 |
댓글을 달아 주세요
전체 주소 도메인 네임 (FQDN, Fully qualified domain name)
부분 주소 도메인 네임 (PQDN, Partially qualified domain name)
예를 들어, boriya.tistory.com 이 FQDN이라면, boriya 는 PQDN 이 되는 것이다.
PQDN을 사용하는 이유는 바로 편리함이다. 도메인 관리자는 매번 전체 주소 네임을 반복할 필요 없이 PQDN을 이용해 장비나 하위 도메인을 알아낼 수 있다. 예를 들어 "cs.widgetopia.edu."라는 도메인 네임을 가지는 Widgetopia 대학 컴퓨터 공학부의 관리자가 있다고 하자. 그는 개개의 호스트를 과일 네임을 따서 명명했따. 이 경우 관리자는 기본적으로 자신이 관리하는 DNS 파일에서 "apple.cs.widgetopia.edu." 나 "banana.cs.widgetopia.edu."와 같은 FQDN으로 각 장비를 찾아낼 수 있다. 그러나 "부분 주소 네임이면 cs.widgetopia.edu 도메인 안의 것으로 간주하라"와 같은 명령을 미리 소프트웨어에 입력해 둠으로써 apple, banana만으로도 각각에 해당하는 장비를 찾을 수 있다. 즉 DNS 소프트웨어는 kiwi와 같은 PQDN을 "kiwi.cs.widgetopia.edu."로 인식한다.
<도메인 마지막에 오늘 점(.)에 대해서..>
일반적으로 널 루트 도메인의 마지막에 오는 점(.)은 주로 생략한다. 실제로 사용자가 애플리케이션에서 도메인 네임을 입력할 때와 같은 일반적인 상황에서는 주로 마지막의 점을 생략한다. 예를 들어 웹 브라우저에 도메인 네임을 입력할 때 마지막 점을 입력하는 경우는 거의 없다. 그러나 DNS 마스터 파일에서는 FQDN과 PQDN을 명확히 구분하기 위해서 마지막에 오는 점을 사용한다. 앞선 예에서 apple은 "apple.cs.widgetopia.edu."를 가리키지만 "apple.com."은 Apple Computer, Inc.의 FQDN을 가리킨다. 여기서 "apple.com."의 마지막에 오는 점은 중요하다. 마지막에 점이 없는 apple.com은 PQDN으로 애플컴퓨터의 도메인이 아니라 "apple.com.cs.widgetopia.edu."을 가리키기 때문이다.
기술적으로 최상위 도메인 A가 하위 도메인 B를 포함하고 B는 다시 C라는 하위 도메인을 포함한다면 C의 전체 도메인 네임은 "C.B.A"다 .이 네임을 해당 노드의 전체 주소 도메인 네임 (FQDN, Fully qualified domain name)이라고 한다. C.B.A라는 도메인 네임은 특정 도메인의 위치를 정확히 알려주기 때문에 완전한 도메인 네임이다. 전체 주소 도메인 네임은 전체 DNS 네임 공간에서 생성한 네임이다.
부분 주소 도메인 네임 (PQDN, Partially qualified domain name)
때로는 불완전한 네임으로 장비를 찾아낼 수도 있다. 이를 PQDN이라고 한다. PQDN은 장비의 위치를 부분적으로 지정하여 이것만 가지고는 도메인의 전체 경로를 알수 없기 때문에 모호하다. 그러므로 PQDN은 절대 도메인 네임을 알고 있는 특정 부모 도메인 안에서만 사용할 수 있다. 부모 도메인의 절대 네임을 부분 네임에 붙이면 그 부분 주소 도메인의 FQDN을 알 수 있다. 예를 들어 FQDN "Y.X" 안에 Z라는 PQDN이 있다면 Z의 FQDN은 "Z.Y.X"이다.
PQDN을 사용하는 이유는 바로 편리함이다. 도메인 관리자는 매번 전체 주소 네임을 반복할 필요 없이 PQDN을 이용해 장비나 하위 도메인을 알아낼 수 있다. 예를 들어 "cs.widgetopia.edu."라는 도메인 네임을 가지는 Widgetopia 대학 컴퓨터 공학부의 관리자가 있다고 하자. 그는 개개의 호스트를 과일 네임을 따서 명명했따. 이 경우 관리자는 기본적으로 자신이 관리하는 DNS 파일에서 "apple.cs.widgetopia.edu." 나 "banana.cs.widgetopia.edu."와 같은 FQDN으로 각 장비를 찾아낼 수 있다. 그러나 "부분 주소 네임이면 cs.widgetopia.edu 도메인 안의 것으로 간주하라"와 같은 명령을 미리 소프트웨어에 입력해 둠으로써 apple, banana만으로도 각각에 해당하는 장비를 찾을 수 있다. 즉 DNS 소프트웨어는 kiwi와 같은 PQDN을 "kiwi.cs.widgetopia.edu."로 인식한다.
<도메인 마지막에 오늘 점(.)에 대해서..>
일반적으로 널 루트 도메인의 마지막에 오는 점(.)은 주로 생략한다. 실제로 사용자가 애플리케이션에서 도메인 네임을 입력할 때와 같은 일반적인 상황에서는 주로 마지막의 점을 생략한다. 예를 들어 웹 브라우저에 도메인 네임을 입력할 때 마지막 점을 입력하는 경우는 거의 없다. 그러나 DNS 마스터 파일에서는 FQDN과 PQDN을 명확히 구분하기 위해서 마지막에 오는 점을 사용한다. 앞선 예에서 apple은 "apple.cs.widgetopia.edu."를 가리키지만 "apple.com."은 Apple Computer, Inc.의 FQDN을 가리킨다. 여기서 "apple.com."의 마지막에 오는 점은 중요하다. 마지막에 점이 없는 apple.com은 PQDN으로 애플컴퓨터의 도메인이 아니라 "apple.com.cs.widgetopia.edu."을 가리키기 때문이다.
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| PTR (0) | 2009/06/26 |
|---|---|
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
| IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요? (0) | 2009/06/26 |
| IPv6 멀티캐스트 범위 (2) | 2009/06/26 |
| ND (Neighbor Discovery) (0) | 2009/06/25 |
댓글을 달아 주세요
도메인네임이 IPv4 주소(A RR)와 IPv6 주소(AAAA RR)를 모두 갖고 있는 경우
IPv4 인터넷에서는 도메인 네임이 갖는 IP 주소는 IPv4 주소 한 종류 뿐이었습니다.
그러나 이제 IPv6 인터넷이 도입되면서, 하나의 도메인네임이 IPv4 주소와 IPv6 주소 모두를 갖는 경우가 발생하게 됩니다.
예를 들어 아래와 같은 경우,
"examp.co.kr" 도메인 설정 내용ftp.examp.co.kr. 1800 IN A 192.0.2.200ftp.examp.co.kr. 1800 IN AAAA 2001:dc5:f::200
단말 호스트의 IPv6 어플리케이션은 getaddrinfo() 함수 호출의 결과로 ftp.examp.co.kr. 도메인네임에 대해 "192.0.2.200" IPv4 주소와 "2001:dc5:f::200"의 2개 주소를 얻게 됩니다.
이 경우, 어플리케이션은 "이 2개의 주소 중 어느 주소를 선택하여 접속을 시도해야 하는가?" 하는 문제가 발생하게 됩니다.
물론 이것은 원칙적으로 어플리케이션을 작성하는 개발자의 선택에 따라 결정될 것입니다.
어플리케이션이 getaddrinfo() 함수로부터 얻은 IP 주소 중 하나를 다시 Socket API에 인자로 전달함으로써 통신이 개시될 수 있기 때문입니다.
이 동작은 프로그래머가 정하여 프로그램 코드를 작성할 수 있습니다.
디폴트 IP 주소 선택 알고리듬 (Default Address Selection)
IETF RFC3484 문서는 이 문제를 다루고 있습니다.
Ref Docs : RFC3484 "Default Address Selection for Internet Protocol version 6 (IPv6)"
일반적으로 어플리케이션은 도메인네임의 IP 주소 변환 함수 gethostbyname() 이나 getaddrinfo()가 리턴하는 IP 주소 목록에서 첫 번째 IP 주소를 선택하여 이 IP 주소로 Socket을 열고 통신을 개시합니다.
이러한 일반 사항을 기반으로 RFC3484는 getaddrinfo() 함수가 도메인네임의 IPv4 주소와 IPv6 주소를 함께 파악한 경우, 일정한 디폴트 알고리듬을 적용하여 어플리케이션으로 리턴하는 IP 주소 목록을 정렬(sort)하여 반환하는 동작을 정의합니다.
getaddrinfo() 함수는 일정한 규칙으로 IP 주소 목록을 반환하여 어플리케이션이 접속 시도하는 IP 주소를 일정하게 제어하는 역할을 하게 됩니다.
접속대상 주소 선택 알고리듬에 사용되는 디폴트 정책 테이블(default poliy table)은 아래와 같습니다.
Prefix Precedence Label 비고
---------- ------------------- ---------- --------------------
::1/128 50 0 IPv6 LoopBack 주소
::/0 40 1 이외의 모든 IPv6 주소
2002::/16 30 2 6to4 IPv6 주소
::/96 20 3 IPv4-compatible IPv6 주소
::ffff:0:0/96 10 4 IPv4-mapped IPv6 주소, IPv4 주소를 의미
Source : RFC3484 "Default Address Selection for Internet Protocol version 6 (IPv6)"
2.1. Policy Table
이 주소 선택 알고리듬의 개략적인 내용은 아래와 같이 정리할 수 있습니다.
1. IPv4 주소와 IPv6 주소가 함께 리스트에 있는 경우, IPv6 주소가 디폴트로 리스트 중 첫 번째 IP 주소로 리턴됩니다.
IPv4 주소(::ffff:0:0/96) 보다 IPv6 주소(::1/128, ::/0, 2002::/16, ::/96)들이 Precedence에서 모두 우선순위가 높습니다.
이에 따라 IPv6 어플리케이션이 getaddrinfo() 함수로부터 반환받는 IP 주소 리스트에 IPv4와 IPv6가 혼재하는 경우, 디폴트 동작으로 그 첫 번째 IP 주소는 IPv6 주소가 됩니다.
결과적으로 IPv6 어플리케이션은 IPv4와 IPv6 주소 모두 가진 도메인네임에 대해서는 IPv6를 먼저 접속 시도 주소로 선택하는 동작을 하게 됩니다.
2. IPv6 주소가 다수 존재하는 경우, IPv6 루프백(loopback) 주소, 일반적인 IPv6 주소, 6to4 IPv6 주소, IPv4-compatible IPv6 주소의 순으로 정렬(sort)하여 리턴합니다.
IPv6 주소 "2001:dc5:f::200"와 IPv6 주소 "2002:c000:02c8::c000:02c8"가 도메인네임에 함께 지정되어 있는 경우, APNIC을 통해 할당된 native IPv6 주소 "2001:dc5:f::200"가 6to4 tunnelling 방식의 자동생성된 6to4 IPv6 주소 "2002:c000:02c8::c000:02c8"보다 우선하게 됩니다.
곧 어플리케이션은 native IPv6 주소와 6to4 IPv6 주소가 있는 경우, native IPv6 주소로 먼저 접속시도하게 됩니다.
NOTE!: DNS의 IPv6 주소 설정오류가 야기하는 어플리케이션의 접속 시간 지연 문제
일반적으로 어플리케이션은 getaddrinfo() 등의 함수로부터 리턴받은 IP 주소 목록 중 첫 번째 IP 주소로 접속을 시도한 후 접속에 실패하면 다음의 IP 주소를 사용하여 접속을 시도합니다.
따라서 IPv4와 IPv6 주소가 하나씩 있는 경우, IPv6 주소로 먼저 접속을 시도하고, 이에 실패하게 되면, IPv4 주소로 접속을 시도합니다.
만일 DNS의 특정 도메인네임에 존재하지 않는 IPv6 주소가 설정되어 있는 경우, 어플리케이션에서는 접속시도와 그 timeout에 따르는 시간지연이 발생한 후 IPv4 주소로 접속이 성공함으로써, 사용자는 접속이 느린 현상을 경험하게 됩니다.
위에서 정리된 디폴트 주소 선택 알고리듬 내용은 개략적인 것으로 이외에 시스템 환경조건에 의한 주소 선택 및 정렬 알고리듬을 RFC3484 문서에서 정의하고 있습니다.
주의할 점은 RFC3484에서 정의한 주소선택 알고리듬은 디폴트 알고리듬일 뿐이며 어플리케이션에서 별도의 선택 알고리듬을 사용하여 특정한 주소 선택을 하거나, 디폴트 주소 선택 정책 테이블의 내용을 변경하는 경우, 선택 방식이 변경될 수 있다는
사실입니다.
Windows 2003 서버의 경우, 아래와 같이 default policy table 내용을 볼 수 있으며, 이 테이블에서 각 필드 값을 변경하여 getaddrinfo() 함수의 정렬 순서를 변경할 수 있습니다.
C:>netsh interface ipv6 show prefixpolicyQuerying active state...Precedence Label Prefix---------------- --------- --------------------------------10 4 ::ffff:0:0/9620 3 ::/9630 2 2002::/1640 1 ::/050 0 ::1/128
'개발자가 뭐길래 > Network' 카테고리의 다른 글
| PTR (0) | 2009/06/26 |
|---|---|
| RR(resource records) 자원 레코드 (0) | 2009/06/26 |
| FQDN (0) | 2009/06/26 |
| IPv6 어플리케이션은 IPv4와 IPv6 주소 중에서 어느 것으로 접속을 하나요? (0) | 2009/06/26 |
| IPv6 멀티캐스트 범위 (2) | 2009/06/26 |
| ND (Neighbor Discovery) (0) | 2009/06/25 |

댓글을 달아 주세요