묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
Stateless(무상태)에 관하여 의문점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]HTTP 특징 중 하나인 무상태 설계는 클라이언트가 필요한 모든 요청을 서버에게 보내서 서버는 응답만 함으로써 클라이언트 입장에선 어떤 서버가 와도 상관 없으니 서버의 무한한 확장이 가능하다고 이해하였습니다.그런데 "서버"를 "상태 유지" 혹은 "무상태"로 설계하는데 어떻게 클라이언트가 보내는 데이터에서 차이가 나는 건지 궁금합니다. 서버의 설계가 클라이언트에 영향을 미치는 건가요?
-
해결됨네트워크, 그림으로 이해하자
전송 계층에서 연결 확립 및 종료 단계 관련 질문
전송 계층은 네트워크 계층에서의 신뢰성 문제를 해결하기 위해서 연결 확립 과정과 연결 종료 과정을 거친다고 이해했습니다.연결 확립 과정은 3 way handshake를 통해서 진행되고, 연결 종료 과정은 4 way handshake 과정을 통해서 진행되고요. 그러면 이 과정도 캡슐화 와 역캡슐화가 이뤄지는 건가요? 그렇다면 연결 수립 과정과 종료 과정에서 데이터 신호가 서버측까지 캡슐화와 역캡슐화를 계속해서 반복하는 것이라 이해하면 될까요? 또한, OSI 7 layer 기준으로 session layer와 representation layer는 그러면 무슨 역할을 하는 건가요? 강사님께 여쭤보는 이유는 블로그마다 내용이 사뭇 다르고 정확도가 떨어져서 직접 여쭤봅니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
process의 버퍼 크기
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 강사님!! tcpip 통신에서 process의 버퍼의 크기는 개발자가 결정한다고 하셨는데 고정인가요? 가변인가요?좋은 강의 항상 감사드립니다. 새해 복 많이 받으세요~
-
해결됨네트워크, 그림으로 이해하자
DNS 챕터 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! DNS를 학습하면서 든 의문점이 있어서 질문드립닏다.1. DNS의 계층 구조 명칭 질문보여주신 그림을 보자면 다음과 같이 이해했는데요.root -> TLD -> Sub domain -> host name이에 대해서 구글링을 해보면 어떤 사람은 naver를 Second Level domain이고, cafe 나 search를 sub domain이라고도 하는데 이를 어떤 게 정확하게 맞는 건가요?host name은 제일 하단에 있는 부분이라고 이해하면 되는 걸까요?제 생각에는 이런 문제가 발생된 이유가 DNS가 트리형인 계층적 구조로 되어 있어서 계속 밑으로 내려갈 수 있기 때문에 어디부터 어디까지를 Second level domain, sub domain, host name이라고 하기 어려워서 그런 것 같습니다. 2. DNS 질의 원리 강의해주신 질의 방식에는 재귀와 반복이 있다고 하셨는데, 재귀의 경우, DNS client가 root에 질의한다음 root에서 한 층씩 내려가는 걸로 이해했는데요. 그러면 예를 들어서 www.naver.com 이라고 하면 root 계층에는 없으니 TLD 으로 내려가고 여기서 일치하는 com이 있으니 com 에서 더 낮은 계층으로 내려가서 탐색하고 거기서 naver가 일치하니 naver에서 하위 계층으로 이렇게 내려가는 식으로 탐색한다는 건가요? 등록되어 있지 않으면 더 하위 계층으로 내려간다는 게 이해가 안가서 질문 드립니다. 더 아래로 내려갈려면 무조건 상위 도메인이 일치해야 내려가는 게 아닌가요? 그리고 반복적 질의에 대해 제가 잘 이해했는지 확인하고자 질문드립니다.예를 들겠습니다.1. 브라우저의 url 창에 www.lab.glasscom.com 을 입력하여 로컬 DNS 서버에 먼저 질의2. 로컬 DNS 서버에서 모를 경우, Root DNS 서버에 질의한다. (`www.lab.glasscom.com`의 IP 주소는?) 그러면 Root DNS 서버에서 `com` 의 IP 주소를 로컬 DNS 서버에 응답한다.3. 로컬 DNS 서버는 `com` TLD DNS 서버에 동일하게 질의한다. 그러면 `com` TLD DNS 서버에서 `glasscom`의 IP 주소를 로컬 DNS 서버에 응답한다.4. 로컬 DNS 서버는 `glasscom` DNS 서버에 동일하게 질의한다. 그러면 `glasscom` DNS 서버에서 `lab`의 IP 주소를 로컬 DNS 서버에 응답한다.5. 로컬 DNS 서버는 `lab` DNS 서버에 동일하게 질의한다. 그러면 `lab` DNS 서버에서는 `www.lab.glasscom.com`의 IP 주소를 로컬 DNS 서버에 응답한다.6. 로컬 DNS 서버는 클라이언트에게 10번에서 얻은 IP 주소를 전달위와 같이 이해하면 될까요? 마지막으로 재귀와 반복 질의 각각 언제 사용되는 건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
파트 6 서버연동에 대해 질문합니다.
파트4에서는 5장에서 간단하게 다루고 파트 6에서 연동에 대해서 제대로 다루는 것으로 알고 있는데 혹시 파트 6는 언제 나올까요?부트캠프로 하신다고 하셨는데 제가 대학생이라 부트캠프를 참가할 여력이 안되는데혹시 온라인 강의로는 언제 공개될까요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
L2 스위치(L2 Access와 L2 Distribution)
안녕하세요? 항상 좋은 강의 감사드립니다. L2 스위치는 L2 Access와 L2 Distribution이 있는데 이들은 같은 네트워크인가요? 즉, IP 주소에서 network id는 같은건가요?네트워크가 처음이고 많은 개념이 들어오니 막 헷갈리네요ㅠ
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 분산 처리 에 대해서는 혹시 다룰 예정이 없으신가요?
게임서버만 제작하셨는데 DB 서버나 채널 등등 scale-up 관련으로 혹시 다룰 생각 없으신가요? 그리고 다른 질문에서 "나머지 MMO 컨텐츠는 추후 실전 부트캠프 강의에서나 다룰 생각입니다."이렇게 대답해주신거를 들었는데 부트캠프 강의 일정은 혹시 언제쯤 가능할지 알수 있을까요?끝으로 좋은강의 너무 감사합니다 다른 강의도 너무 잘듣고 있습니다.,
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
10강 내용에 대해서 질문드립니다.
안녕하세요 이득우님.이전에 다른분이 남겨주신 내용과 위치가 같은데요,380번째줄, void AABCharacterPlayer::ServerRPCAttack_Implementation(float AttackStartTime) 함수에 대한 질문이 있습니다. 수업을 위해서 401번째줄에 if(!PlayerController->IsLocalController()) 조건문을 넣어주신것 같아보이긴 하는데, 사실 엄밀하게는, 이 조건문은 아예 없어도 전혀 문제되지 않는 로직이라고 생각되는데 제가 잘못 생각한걸까요? 좀 찝찝하기도 해서, 혹시 제가 놓친게 있나 싶어서 질문 남깁니다. 위 조건문이 없어도 되는 이유는, 해당 로직이 있는 곳은 클라이언트에서는 절대 동작할 수 없는 Server RPC 함수 내부 코드이며, 그렇기 때문에 서버에서만 동작하는 상태가 보장되고, 추가로 서버에 있는 모든 PlayerController는 서버 클라이언트 서버 모델에서 항상 IsLocalController가 false가 되기 때문이라고 생각하였습니다.다른분의 질문에서 올려주신 IsLocalController 함수는 AController의 함수로 올려주셨는데, 저희가 사용하는 Controller는 현재 형변환에 의해 PlayerController이고, 언리얼에서 함수 호출을 살펴보면, PlayerController의 IsLocalController이 호출되는것 같습니다. 그래서 위의 로직에서if (NetMode == NM_DedicatedServer)return false;에 의해 false가 항상 반환될거 같은데, 혹시 제가 놓친 부분이 있을까요?=> 혼자 고민을 이것저것 해보고 테스트 해보면서, 아마도 이렇게 해주신 이유는 Listen 서버이기 때문에 그런것 같네요. 리슨서버에서는 리슨서버의 PlayerController가 bIsLocalPlayerController가 true가 나오더군요. 그럼에도 불구하고, 일반적으로 데디케이티드 서버 환경에서는 리슨서버를 생각하지 않기 때문에 위 조건문은 필요없을것으로 생각됩니다. 게임 환경을 Client로 바꿔서 사용하였을때를 생각해보았습니다. 그리고 추가로 질문이 하나 더 있습니다.강의에서 Multicast 방식을 각각의 Controller에 대해 Client RPC를 사용해주면서 네트워크 최적화를 설명하신것에 대해서, 저는 이 부분을 멀티캐스트 하나를 사용하는것과 월드 내에 모든 클라이언트에 해당하는 Controller에게 직접 Client RPC를 직접 각각 호출해주는게 좀더 네트워크 성능상 좋다, 라고 이해했는데, 이 부분은 제가 올바르게 이해한게 맞을까요? 언제나 좋은 강의 해주시고, 질문도 꼼꼼하게 달아주셔서 감사드립니다(_ _)
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
무상태 프로토콜 을 제대로 이해한건지 모르겠습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Stateless 의 대표적인 예 는 쿠키 이며 Stateful 의 대표적인 예는 세션 이라고 이해를 했습니다. 그렇다고 한다면 여기서 궁금증이 생깁니다. HTTP 는 기본적으로 stateless 이며 HTTP 요청은 이전 요청과 상관없이 독립적으로 처리되는데 HTTP 는 통신 프로토콜 중 하나가 아닌가요?세션 또한 서버와 통신을 해야 데이터를 받아 오고 HTTP 통신을 통해 데이터를 받아올 텐데 세션의 정의가 뭔가 모호해진거 같습니다.
-
해결됨인프라공방 - 그럴듯한 서비스 만들기
brainbackdoor-management
brainbackdoor-management는 라우팅 테이블을 public-rt에 연결해야하나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라의 패킷 조작 방어(범위 내일 때)
루키스님 안녕하세요?본 강의 17:00분대에this.playerId = BitConverter.ToInt64(new ReadOnlySpan<byte>(s.Array, s.Offset + count, s.Count - count));로 범위를 초과하는 패킷에 대해서 클라의 패킷 조작을 방어하는 예시를 들어주셨습니다. 저는 여기서 궁금한게, 클라의 패킷 조작 중 범위를 벗어나지 않는 패킷 공격은 어떤 아이디어로 방어를 할지 궁금합니다. 예를 들어 보스의 체력을 10000 -> 1로 조작한 패킷 같은 경우 아이디어가 궁금합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Cache-Control: no-cache 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.강의를 듣다가 Cache-Control: no-cache 관련한 질문이 있어서 질문 드립니다.만약에 데이터를 요청할 때 캐시 유효시간이 남았다면 서버와의 네트워크 통신이나 요청메시지, 응답메시지 없이 브라우저 캐시 저장소에서 데이터를 가져오는 게 맞나요?1번이 맞다면 Cache-Control: no-cache 를 하면 캐시 유효시간이 남아 서버와의 통신이 필요 없는데도 불구하고 원 서버와의 통신을 통해 검증한다고 이해하면 될까요??클라이언트가 원 서버에 검증하고 사용하기 위해서 Cache-Control: no-cache를 요청 메시지에서 사용하는 건가요? 아니면 클라이언트에게 원 서버와의 검증을 강제(?)하기 위해서 서버의 응답 메시지에서 사용하는 건가요??
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
온라인 환경에서 Arrow, 제거와 발사 시 동기화 문제
안녕하세요 Rookis님.강의를 모두 완강하고 포트폴리오를 개선하고 있는 중입니다.강의 중에 화살을 온라인에 추가할 것이라면 Creature와 GameObject 내용을 수정해야 한다고 하셔서 코드 이사는 완료한 상태입니다.지금 Arrow는 MyPlayer에서 입력을 받고 State와 WeaponType을 체크하면 Player에서 Scene에 Arrow를 스폰해주는 방식으로 알고 있습니다.이걸 서버에서는 몬스터나 플레이어를 만드는 GameObject::Create 함수를 파줘서 Arrow를 make_shared로 만들어서 발사 처리를 하게 만들었는데요서버에서 몬스터가 제거되면 클라이언트에서도 정상적으로 몬스터가 제거되는걸 확인은 했습니다.그러나 문제가 몇 가지 있습니다.Arrow 스마트 포인터가 해제되지 않는 현상Arrow 동기화가 종종 씹히는 현상입니다. 먼저 1번입니다.make_shared로 생성된 Arrow가 해제되지 않음void Player::UpdateSkill() { if (room == nullptr) return; if (info.weapontype() == Protocol::WEAPON_TYPE_SWORD) { // 내 앞에 있는 좌표 CreatureRef creature = room->GetCreatureAt(GetFrontCellPos()); if (creature) { if (creature->GetType() == Protocol::OBJECT_TYPE_PLAYER) { SetState(IDLE); return; } // 몬스터가 플레이어에게 피격 creature->OnDamaged(shared_from_this()); } } else if (info.weapontype() == Protocol::WEAPON_TYPE_BOW) { ArrowRef arrow = CreateArrow(); arrow->SetDir(GetLookAtDir(GetFrontCellPos())); arrow->SetOwner(shared_from_this()); arrow->room = room; arrow->info.set_posx(info.posx()); arrow->info.set_posy(info.posy()); arrow->SetState(IDLE, true); room->AddObject(arrow); } SetState(IDLE); }서버쪽의 UpdateSkill 함수인데 여기에서 arrow를 CreateArrow로 만들어서 room에 AddObject로 _arrows map을 만들어 관리를 하고 있습니다. (사실 룸에서 발사체를 관리하는 것이 옳은지도 의문이긴 합니다)void GameRoom::Update() { for (auto& item : _players) { item.second->Update(); } for (auto& item : _monsters) { item.second->Update(); } for (auto& item : _arrows) { item.second->Tick(); } }그리고 Update 함수, AddObject, RemoveObject도 _arrows map을 처리하게 만들었습니다.이렇게 처리하다 보니 화살을 제거할 때 몬스터가 피격받는 순간에 해당 화살을 RemoveObject를 실행하니 삭제 이후에 for문을 돌 때 오류가 발생하며 크래시가 발생했습니다.Arrow가 _arrows 맵에서 관리되어서 스마트 포인터가 해제가 안되는 것 같은데, 화살을 어떤 때에서 제거해야 될지 모르겠습니다.지금은 임시적으로 vector에 참조로 받아와서 Update 하단에서 erase하는 방법을 사용하고 있습니다. 화살 동기화 문제 클라이언트에서는 Projectile 클래스에서 _owner에 대한 정보를 들고 있고 Arrow를 Scene에서 소환할 때 GetOwner 함수로 화살의 주인에 대한 포인터를 들고 있도록 했습니다.기존에 발사할 때도 S_Move 패킷을 그대로 이용해서 Arrow의 _owner 포인터를 이용해서 위치를 초기화해주고 있습니다.그런데 두 클라이언트를 접속시켜서 2를 눌러 WeaponType을 Bow로 바꿔서 공격 키로 테스트해보면 종종 반대쪽 플레이어의 화살이 안보이는 경우가 있습니다.여기에 몇 개의 질문이 있는데요1) 화살을 생성하고 클라이언트에서 패킷을 전송하는 것이 맞는지2) 맞다면 어떤 정보를 패킷에 담아야 하는지3) 서버에서는 어떤 처리를 해주어야 하는지잘 모르겠습니다.일단은 Make, Handle 함수를 파서 ObjectInfo를 넣어놓긴 했습니다.하루 종일 코드를 조작해봐도 해결을 못하고 있습니다.. 도와주세요..
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강기간 연장 부탁드립니다.
수강기간 연장 부탁드립니다. 시간이 너무빠르네요..ㅜ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 7:42 에 해당하는 내용에 대해서 질문입니다
안녕하세요. 강의 7:42 부분에 대해서 질문이 있습니다.말씀해주신 내용처럼 _popCount 가 1인지 체크하고 oldHead를 delete 하는 사이에 다른 쓰레드에서 TryPop() 함수를 참조하게 되는 상황이 헷갈리는데요. 만약 1번 쓰레드가 TryDelete 함수 내부에서 oldHead를 delete 했는데, 2번 쓰레드가 compare_exchange_weak 함수를 콜하게 된다면 이미 지워버린 oldHead 에 대해서 참조를 하게되는 상황이 문제가 될 듯 하여 질문드립니다.
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 기간 연장 요청드립니다.
회사 업무와 병행 하다 보니 시간이 부족한 것 같습니다..!죄송하지만 기간 연장 부탁 드리겠습니다..!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티 스레드 환경에서의 캐시 효율
멀티 스레드 환경에서 A,B 2개의 쓰레드가 있다고 가정했을때프로세스에서 어떤 전역 Data number를 +1 해달라는 주문이 들어 왔을때 A쓰레드에서 해당 주문을 받고 동시에 B도 해당 주문을 받는다면 문제가 되기때문에 동기화를 해줘야한다고 말씀 주셨는데요 그렇게 되면 A가 주문을 받고 다시 Ram에 동기화 그다음 B가 주문을 받고 Ram에서 수정된 값을 가져와서 다시 Ram에 동기화 이런식이라면 멀티 쓰레드 환경에서는 캐시의 의미가 없는건가요?캐시라는게 결국엔 프로세서와 Ram간의 거리가 멀기 때문에 이걸 완하해주는게 캐시로 알고 있는데 멀티 환경에서 주문이 들어올때마다 Ram에서 최신화 정보 가져오고 다시 동기화 한다면 캐시의 의미가 없어지는게 아닌가 해서 이렇게 질문 남기게 됩니다
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Http persistent comnection 관련 문의드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 좋은 강의 잘보고 있습니다 다름이아니라 http 지속연결 관련해서 문의드립니다 만약 main 페이지 띄워질때 html js css 를 다응답 받고 화면에 다 뿌려지고 나면 웹 socket라이브러리에서 연결을 close 하나요 아니면 그냥 계속 연결 시켜놓나요 ?? 만약 자동 Close 하면 ajax나 새로운 페이지 호출을 하면 그때또 tcp/ip 3way handshake를 또 하나요 ? 아니면 지속 연결 되있어서 그냥 ajax 및 새 링크 연결되어도 계속 요청 응답만 하나요 ?? 지속 연결 이라고 하셔서 헷갈리네요 ㅠㅠ close 는 하는건지 안하는건지 궁금하네요... 감사합나다
-
해결됨AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 연장 부탁드립니다.
안녕하세요.강의 구매 후 이직 시기가 겹치면서 수강을 많이 못했는데, 수강 연장을 부탁드릴 수 있을까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
영속쿠키: 로그아웃 vs 브라우저 닫기
안녕하세요, 김영한 강사님이해한 내용이 맞는지 확인부탁드립니다 ㅎㅎㅎ 만약에 만료날짜를 대충 1년뒤 2024년 12/22 이라고 정해놓은 영속쿠키를 설정한다면 브라우저를 꺼도 1년동안 자동로그인이 된 상태로 유지되는 원리인가요? 그런데 영속쿠키를 설정해놓았더라도 브라우저를 끄는것이 아닌 로그아웃을 누르게 되면 서버측으로 "로그아웃 요청"을 직접적으로 한것이라 서버측에서는 쿠키 max-age 같은 설정을 0으로 초기화하여 로그인이 풀릴수 있는것이죠? 즉, 영속쿠키는 아무리 만료날짜까지 쿠키가 삭제되지 않는다해도 그 날짜 사이에 로그아웃을 하면 로그인이 풀리는것이죠?