드디어.. 막바지에 다다렀습니다.
스피드스텝, 그리고 잠자기 SSDT 마지막편에 오신걸 환영합니다.
아주 길고도 긴 여정이었습니다.
이제 종지부를 찍을 때가 온 것 같아 마무리를 지으려합니다.
잠자기 관련 삽질만 장장 수 주를 해보았는데
가장 베일에 쌓여있는 미지의 영역인만큼 삽질이 쉽지 않았습니다.
제게 큰 도움을주신 @IanMinchangShin, @아이뱅크, @맥토피아 이 세분께
감사의 말씀을 올립니다.
요번 글은 아마도 기존보다도 더 불친절한 글이 될거라 생각합니다.
dsdt의 큰 패치가 필요한데, 이부분을 모든 커맥에 맞게끔 설명할 능력이 안되기 때문입니다.
기본적으로 필요한 문구를 복붙해서 넣었을 때 발생하는 오류에대한 추가적인 수정방안은
제가 직접 패치해둔 제 메인보드의 dsdt를 첨부하오니 참고하시어 작성해주시면 감사하겠습니다.
하여튼 각설하고 시작하기에 앞서 켁스트와 관련하여 깔끔하게 정리해서 말씀드리자면,
잠자기와 연관되어 가장 큰 역할을 하는 켁스트들은
X86PlatformPlugin, X86PlatformShim 켁스트를 꼽을 수 있겠더라는 것입니다.
그리고 스피드스텝과 관련하여 가장 큰 역할을 하는 켁스트를 꼽는다면
AppleLPC.kext, AppleAPIC.kext를 꼽을 수 있겠으며
그리고 전력관리 기술과 관련하여 가장 큰 역할을 하는 켁스트를 꼽는다면
AppleACPI*.kext (약 7종)을 꼽을 수 있겠습니다.
이들은 서로 얽히고 섥혀 잠자기 및 스피드스텝, 전력관리와 관련한 모든부분을 총괄합니다.
그런만큼 어느 것 하나 중요하지 않은 켁스트가 없다고 말씀드리고 싶습니다.
이 모든 켁스트는 반드시 로드되지 않아도됩니다.
가장 주축이되는 켁스트들이 따로 있기 때문입니다.
가장 큰 주축은
X86PlatformPlugin, X86PlatformShim (이 2개가 로드되지 않는 경우에는, ACPI_SMC_PlatformPlugin.kext 로 대체)
AppleLPC, AppleAPIC, 이정도의 켁스트라고 볼 수 있겠습니다.
구체적으로 얘네들이 무슨역할을 하는지는 제게 묻지 말아주세요... 저도 잘 모르거든요..ㅠㅠ
다만 삽질의 노고로 알아낸건 이 켁스트들이 로드되면 적어도 안정성이 좋아진다? + 문제가 덜 발생한다 정도입니다.
삽질을 하는 와중에 알게된 사실은
리얼맥에는 로드되는 켁스트가 있지만, 커스텀맥에는 로드되지 않는 켁스트가 있다는 것이었습니다.
아이뱅크님의 스샷으로 하여금 덜미가 잡힌 녀석이었는데
요번 글은 그녀석을 로드하는 방법에대해 서술해보려합니다.
(덜미를 잡게끔 도와주신 아이뱅크님께 감사의말씀 다시 올립니다.)
이 녀석이 잡히면 특별히 두드러지는 부분은 없습니다만,
전력관리 기술의 추가적인 안정성과 함께 리얼맥에서 볼 수 있는
잠자기 전 모니터 밝기 감소라는 부분이 전력관리기술에 추가로 붙는다는 사실입니다.
다만 모니터가 리얼맥 모니터가 아닌관계로 -_-;;
노트북에서나 동작하리라 보여집니다.
첨부해둔 FakeSMC.kext 에서 Info.plist를 열어주셔서 살펴보시면
smc-compatible과 REV, RVBF, RVUF 가 있는데, 이 값들을 PlistEditor로 열어주셔서
자신에게 맞는 smc타입 및 최신 버전으로 수정해주시면 되겠습니다.
[수정방법은 넘어갑니다.]
만일 iMac 17,1을 사용중이시라면 그냥 켁스트 그대로 사용하셔도 무방합니다.
구글링을 통하여 실제 리얼맥 키값을 해당 켁스트에다 추가해준 것으로써
FakeSMC 최신버전이 나오면 또 다시 패치해주어야하는 단점이 있습니다 -_-;;
Device (ALS0)
{
Name (_HID, "ACPI0008")
Name (_CID, "smc-als")
Name (BUFF, Buffer (0x02) {})
CreateByteField (BUFF, Zero, OB0)
CreateByteField (BUFF, One, OB1)
CreateWordField (BUFF, Zero, ALSI)
Method (_STA, 0, NotSerialized)
{
If (LGreaterEqual (OSYS, 0x07D9))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Method (_ALI, 0, NotSerialized)
{
Store (^^EC.ALB0, OB0)
Store (^^EC.ALB1, OB1)
Store (ALSI, Local0)
Return (Local0)
}
Name (_ALR, Package (0x05)
{
Package (0x02)
{
0x0A,
Zero
},
Package (0x02)
{
0x14,
0x0A
},
Package (0x02)
{
0x32,
0x50
},
Package (0x02)
{
0x5A,
0x012C
},
Package (0x02)
{
0x64,
0x03E8
}
})
}
이 문구가 LPCB에 추가됩니다.
Device (EC)
{
Name (_HID, EisaId ("PNP0C09"))
Name (_UID, Zero)
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0062, // Range Minimum
0x0062, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x0066, // Range Minimum
0x0066, // Range Maximum
0x00, // Alignment
0x01, // Length
)
})
Name (_GPE, 0x17)
Method (_PRW, 0, NotSerialized)
{
If (OSDW ())
{
Return (Package (0x02)
{
0x23,
0x04
})
}
Else
{
Return (Package (0x02)
{
0x23,
0x03
})
}
}
Name (CFAN, Zero)
Name (CMDR, Zero)
Name (DOCK, Zero)
Name (PLMX, Zero)
Name (PECH, Zero)
Name (PECL, Zero)
Name (PENV, Zero)
Name (PPSL, Zero)
Name (PSTP, Zero)
Name (RPWR, Zero)
Name (LSTE, Zero)
Name (VPWR, Zero)
Name (WTMS, Zero)
Name (AWT2, Zero)
Name (AWT1, Zero)
Name (AWT0, Zero)
Name (DLED, Zero)
Name (IBT1, Zero)
Name (PB10, Zero)
Name (ECOK, Zero)
OperationRegion (ECOR, EmbeddedControl, Zero, 0xFF)
Field (ECOR, ByteAcc, Lock, Preserve)
{
ECVS, 8,
Offset (0x02),
Offset (0x03),
G3HT, 1,
Offset (0x04),
WBCB, 1,
DSLP, 1,
Offset (0x05),
Offset (0x06),
WKRS, 8,
Offset (0x10),
ECSS, 8,
PLIM, 8,
ALB0, 8,
ALB1, 8,
WTLB, 8,
WTMB, 8,
Offset (0x20),
SPTR, 8,
SSTS, 8,
SADR, 8,
SCMD, 8,
SBFR, 256,
SCNT, 8,
SAAD, 8,
SAD0, 8,
SAD1, 8,
SMUX, 8,
Offset (0x60),
ELSW, 1,
EACP, 1,
ECDI, 1,
ENMI, 1,
Offset (0x61),
EMHP, 1,
Offset (0x62),
Offset (0x63),
Offset (0x64),
SWLO, 1,
SWLC, 1,
SWAI, 1,
SWAR, 1,
SWCI, 1,
SWCE, 1,
SWMI, 1,
SWMR, 1,
SWPB, 1,
SWGP, 1,
SWPM, 1,
SWWT, 1,
SWLB, 1,
Offset (0x66),
Offset (0x67),
Offset (0x68),
EWLO, 1,
EWLC, 1,
EWAI, 1,
EWAR, 1,
EWCI, 1,
EWCE, 1,
EWMI, 1,
EWMR, 1,
EWPB, 1,
EWGP, 1,
EWPM, 1,
ENWT, 1,
EWLB, 1,
Offset (0x6A),
Offset (0x6B),
Offset (0x6C),
LWLO, 1,
LWLC, 1,
LWAI, 1,
LWAR, 1,
LWCI, 1,
LWCE, 1,
LWMI, 1,
LWMR, 1,
LWPB, 1,
LWGP, 1,
LWPM, 1,
LWWT, 1,
LWLB, 1,
Offset (0x6E),
Offset (0x6F),
Offset (0x70)
}
Field (ECOR, ByteAcc, Lock, Preserve)
{
Offset (0x03),
G3AD, 1,
BLOD, 1,
S4WE, 1,
APWC, 1,
Offset (0x04),
Offset (0x6C),
LWE0, 8,
LWE1, 8,
LWE2, 8,
LWE3, 8
}
Field (ECOR, ByteAcc, Lock, Preserve)
{
Offset (0x24),
SBDW, 16,
Offset (0x46),
SADW, 16
}
Method (WAKE, 0, NotSerialized)
{
If (ECOK)
{
Return (WKRS)
}
Else
{
Return (Zero)
}
}
Method (_Q40, 0, NotSerialized)
{
Notify (ALS0, 0x80)
}
Method (_Q5A, 0, NotSerialized)
{
Notify (SLPB, 0x80)
}
Method (_Q80, 0, NotSerialized)
{
Notify (\_PR.CPU0, 0x80)
Notify (\_PR.CPU1, 0x80)
Notify (\_PR.CPU2, 0x80)
Notify (\_PR.CPU3, 0x80)
If (LEqual (^^^IGPU.VID0, 0x8086))
{
Store (IGPS, Local0)
Subtract (RP0C, Local0, Local0)
Store (Local0, RPSL)
}
Else
{
Notify (GFX0, 0x81)
}
}
Method (_REG, 2, NotSerialized)
{
If (LOr (LEqual (Arg0, 0x03), LGreaterEqual (OSYS, 0x07D6)))
{
Store (Arg1, ECOK)
If (LEqual (Arg1, One))
{
Store (Zero, ECSS)
}
}
}
Method (ECWT, 2, Serialized)
{
Store (Arg0, Arg1)
}
Method (ECMD, 1, Serialized)
{
If (ECON)
{
While (CMDR)
{
Stall (0x14)
}
Store (Arg0, CMDR)
}
}
Method (ECRD, 1, Serialized)
{
Return (DerefOf (Arg0))
}
}
이부분은 H_EC or EC부분입니다.
자신의 dsdt에 맞게끔 수정하여 없는 부분들을 패치해주시면 되겠습니다.
Method (OSDW, 0, NotSerialized)
{
If (LEqual (OSYS, 0x2710))
{
Return (One)
}
Else
{
Return (Zero)
}
}
Method (PINI, 0, NotSerialized)
{
Store (0x07DC, OSYS)
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Darwin"))
{
Store (0x2710, OSYS)
}
Else
{
If (_OSI ("Linux"))
{
Store (0x03E8, OSYS)
}
Else
{
If (_OSI ("Windows 2009"))
{
Store (0x07D9, OSYS)
}
Else
{
If (_OSI ("Windows 2012"))
{
Store (0x07DC, OSYS)
}
}
}
}
}
Else
{
Store (0x07DC, OSYS)
}
}
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
추가 패치입니다.
적당히 잘 버무려서 오류없게 패치해주시면 위처럼
ACPIEC와 SMCLMU 켁스트가 추가로 로드되어 동작하게됩니다.
이렇게 저렇게.. 하다보니 너무 불친절한 글이 되어버려 죄송스럽게 생각합니다.
패치는 이정도면 되겠으며, 마지막으로 여담을 좀 풀어보려고 합니다.
다름이 아닌 스탠바이모드에 대하여서인데
확실하지는 않지만 스탠바이의 경우에는 일부 맥 모델 (맥북시리즈)에서만 정상동작하며
그외의 경우에는 동작하지 않는다는 이야기를 본 적이 있습니다.
노트북은 시간이 지나면 배터리가 줄어들어 자동으로 파워를 종료할 필요가 있지만
아이맥이나 맥프로는 그럴 이유가 없다는 것입니다. (정전을 제외하고는)
그로 인하여 쓸데 없이 자원을 낭비하는 스탠바이모드로 진입하게되는 것을 차단하며
하버네이트 모드도 1, 3, 25를 지원하지 않고 0만 정상동작하는 것으로 보여집니다.
최근 실험한 바로는 hibernatemode 0, darkwake=10 일 때에
파워냅이 활성화되어 동작한다는 사실이 입증되었으며 (1번도 가능할겁니다.)
파워냅을 활성화하기 위하여서는 반드시 X86PlatformPlguin, X86PlatformShim 이 두 켁스트가
로드되어 정상적으로 동작하고 있어야만 한다는 것입니다.
3번모드에 대해서는 현재 추가로 실험중에 있는 상태이지만,
오늘 밤으로도 동작이 되지 않으면 마무리를 지으려합니다. ㅎㅎ
짧고도 긴 글 읽어주셔서 감사드립니다.
[아 참, 적용관련하여 질문 주시는 것은 언제든 환영입니다 ^^.]
저러한 패치들을 추가로..? 해주고 보니 부팅할 때 게이지바가 차는것이
실제 리얼맥과 흡사하게 차더군요. 속도가 아주 빠르지 않으면서도, 초반에 조금 느리게 로드되다가 빠르게 쭉 가다가
중 후반에서는 조금 더뎌지더니 바로 화면이 나오는? 식으로 말이죠.
저도 괜시레 리얼맥에 있는거다보니 패치하게 되더군요 -_-.... 안해도 문제 없는데 말이죠 ㅠㅠ
로딩속도 얘기가 나와서 드리는 말씀인데 ACPI kexts를 FakeSMC.kext로 강제로 로드하면 부팅속도에 상당한 영향을 미치더군요.
그리고 리얼맥도 CPU Frequency가 상당히 높았습니다. 그거보고 바로 ACPI 빼버리고 X86 kexts를 넣은거죠.ㅎㅎ
이건 아이뱅크님께서 제공해주신 리얼맥의 인텔 파워 가젯 데이터입니다.(X86 로드 상태)
ㅎㅎ 저도 눈팅??으로 해당 글을 읽어보았었는데, 굉장히 흥미로웠었습니다.
왜그런지는 모르겠더군요 -_-.... 다만? Watt가 문제가 없다면 P-state, C-state 모두 이상이 없다는 것이니
그냥 그런가보다...하기는 한데, 제 컴퓨터도 확인해보니 위처럼 나오더군요. ㄷ_ㄷ;
한 가지 질문드립니다.
Method (_ALI, 0, NotSerialized)
{
Store (^^EC.ALB0, OB0)
Store (^^EC.ALB1, OB1)
Store (ALSI, Local0)
Return (Local0)
}
여기서 LPCB에 추가한 후 컴파일 하니
object not found or not accessible from scope (^^EC.ALB0, OB0)
object not found or not accessible from scope (^^EC.ALB1, OB1)
에러가 발생하는데, 어떤 방법을 적용해야하는지 모르겠습니다. (그냥 지워도 되는 것인가요?)
해당 부분은 그냥 지우시면 안되고, EC->ALB0, EC->ALB1을 추가해줌으로써 해결할 수 있습니다.
H_EC, 혹은 EC 쪽 디바이스를 잘 살펴보시면
Field (ECOR~~)로 기술된 부분이 있을것입니다.
이부분에 ALB0, ABL1을 추가해주시면 됩니다.
아래 사진과같은 부분입니다.
이 두녀석 잡기가 제일 어려울거라 생각합니다...
다른 패치는 독립적으로 넣어주면 끝인데, 이녀석들은 넣으면 관련한 부분까지 싹다 잡아서 넣어주어야하기때문에 -_-;;
오류문구를 잘 살펴서 검색해가지고 넣어주거나 그래야합니다.
마무리 작업은 하고 에러는 다 패치했는데 나타나지 않아서
패치를 우격다짐으로 해서 그런가요
아무것도 안나타납니다.
오류부분과 FakeSMC.kext 의 info 부분 dsdt올려봅니다.
뒷부분 세개는 이부분처럼 EC->ALB0, EC->ALB1을 추가해줌으로써 해결했습니다.
Device (IGPU)
{
Name (_ADR, 0x00020000)
OperationRegion (GFXH, PCI_Config, 0x00, 0x40)
Field (GFXH, ByteAcc, NoLock, Preserve)
{
VID0, 16,
DID0, 16
}
Method (PCPC, 0, NotSerialized)
{
}
Method (PAPR, 0, NotSerialized)
{
Return (0x00)
}
추가했습니다.
처음으로 dsdt 수정해봅니다.
제 커스텀맥이 하스웰이 아니어서
ACPIEC는 로드가 되지 않는 것입니까?
또한 노트북이 아니어서 SMCLMU 켁스트가 로드 되지 않는 것입니까?
ksj님은 되신 것 보니까 문제는 분명 다른 곳에 있는 것 같습니다.
AppleAPCIEC 잡았습니다.
아래처럼 추가하니까 드디어 잡혔습니다.
FakeSMc.kext 을 AppleSMC.kext와 내용부분은 넣음
저는 appleSMCLMU.kext 만 잡히지 않네요
ACPIEC는 로드가 되는데 ALS는 로드가 안되는군요. (맥프로에는 상관없는 옵션같지만..)
올려두신 dsdt 패치중에 Q80에 해당하는 부분을 아래처럼 수정하였습니다.
Method (_Q80, 0, NotSerialized) // _Qxx: EC Query
{
Notify (\_PR.CPU0, 0x80) // Performance Capability Change
Notify (\_PR.CPU1, 0x80) // Performance Capability Change
Notify (\_PR.CPU2, 0x80) // Performance Capability Change
Notify (\_PR.CPU3, 0x80) // Performance Capability Change
Notify (\_PR.CPU4, 0x80) // Performance Capability Change
Notify (\_PR.CPU5, 0x80) // Performance Capability Change
Notify (\_PR.CPU6, 0x80) // Performance Capability Change
Notify (\_PR.CPU7, 0x80) // Performance Capability Change
If (LEqual (^^^GFX0.VID0, 0x8086))
{
Store (IGPS, Local0)
Subtract (RP0C, Local0, Local0)
Store (Local0, RPSL) /* \_SB_.PCI0.RPSL */
}
Else
{
Notify (GFX0, 0x81) // Information Change
}
}
제 CPU가 내장 그래픽이 없는 모델이라 GFX0을 IGPU로 바꾸거나 옮기면 에러가 생기더라구요. 그래서 변경안하고 사용중인데...밑줄친부분을 보시면 변경된걸 보실수 있는데요. IGPU에서 GFX0으로 바꾸고 거기에 VID0 추가해서 오류를 잡았습니다. 그런데 궁금한점은 외장그래픽을 사용하고 있으니 GTX960 패치한된곳 즉 SB.PEG0.PEGP에 VID0을 추가해야하는건가요? 아니면 별 상관이 없나요?
하... DSDT제대로 수정하려면 토나오는군요...
사실 그래서 리얼맥 구성하는 부품 그대로 사다가 맞췄습니다
그래도 깊게 이해가 되네요. 감사합니다~
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +29 | 937 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +23 | 575 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1403 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 575 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 909 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 4002 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5086 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
Hot AMD Sequoia용 AppleALC 1.9.2 +3 | 106 | 24.10.2319:04 | 사노라맨 |
Hot [Sequoia 15.0.1, OC r1.0.2] ASUS TUF B550-PLUS / RYZEN 5 5600X / RX470 +2 | 103 | 24.10.2322:26 | 뿌엥 |
Hot OCLP로 지원되지 않는 기기/dGPU를 사용하는 해킨토시의 사이드카 품질 문제 해결방법 +1 | 119 | 24.10.2321:29 | 해킨도전자 |
103 | 24.10.2322:26 | 뿌엥 | |
119 | 24.10.2321:29 | 해킨도전자 | |
106 | 24.10.2319:04 | 사노라맨 | |
784 | 24.10.1412:27 | shl628 | |
665 | 24.10.1316:00 | 수박 | |
344 | 24.10.1222:56 | Stultus | |
937 | 24.10.1121:10 | 좌절금지 | |
732 | 24.10.1115:53 | 수박 | |
575 | 24.10.0900:22 | 줌바이퍼 | |
1403 | 24.07.1219:19 | Stultus | |
1210 | 24.10.0500:31 | 줌바이퍼 | |
569 | 24.10.0410:49 | Tamy | |
749 | 24.09.2923:48 | 머트 | |
628 | 24.09.2822:28 | 머트 | |
463 | 24.09.2808:22 | Tamy | |
894 | 24.09.2321:32 | Stultus | |
994 | 24.09.2210:59 | 좌절금지 | |
644 | 24.09.2203:23 | 누림어멈 | |
1191 | 24.09.1919:17 | 좌절금지 | |
575 | 24.09.1917:09 | 좌절금지 | |
498 | 24.09.1813:37 | Stultus | |
909 | 24.09.1723:58 | 좌절금지 | |
601 | 24.09.1722:40 | 좌절금지 | |
453 | 24.09.1717:13 | 맥가즈아 | |
562 | 24.09.1708:13 | 김경석 | |
234 | 24.09.1617:47 | Panictosh | |
768 | 24.09.1504:35 | Tamy | |
584 | 24.09.1319:18 | Stultus | |
706 | 24.09.1019:44 | 치토 | |
484 | 24.09.0118:13 | 머핀X | |
462 | 24.09.0112:54 | 해킨도전자 | |
546 | 24.08.3115:34 | 머핀X | |
306 | 24.08.2601:42 | 화정큐삼 | |
305 | 24.08.2422:59 | 하나브 | |
318 | 24.08.2316:25 | 화정큐삼 | |
415 | 24.08.1810:56 | CanBe | |
363 | 24.08.1800:04 | 화정큐삼 | |
300 | 24.08.1722:03 | 화정큐삼 | |
201 | 24.08.1710:14 | jbhlyk | |
312 | 24.08.1622:06 | Stultus | |
218 | 24.08.1511:16 | hackillious | |
169 | 24.08.1421:30 | 세유니 | |
419 | 24.08.1419:58 | Stultus | |
377 | 24.08.1311:26 | 오디세이 | |
270 | 24.08.1115:46 | 좌절금지 | |
186 | 24.08.1111:21 | 티타보르 | |
233 | 24.08.1022:46 | Stultus | |
538 | 24.08.1022:10 | 오디세이 | |
168 | 24.08.1019:05 | jbhlyk | |
200 | 24.08.0923:20 | RogerT |
뭐랄까요... dsdt패치는 안해줘도 현재 잘 작동하고 있지만
리얼맥이 저런게 들어가있다고하니, 패치를 해줘야겠습니다.ㅋㅋ 좋은 정보 감사합니다.