McK's Avatar

McK

@mck.uri.life.ap.brid.gy

월급루팡 아님. 월급 장발장~ (。▼皿▼) 빨간 날은 쉽니다. 토요일은 기계랑 멀어짐. Accessibility, F/OSS, WWW, Jeju, 歷史, 한글, 한국어 [bridged from https://uri.life/@mck on the fediverse by https://fed.brid.gy/ ]

4 Followers  |  9 Following  |  129 Posts  |  Joined: 01.01.0001  |  2.4829

Latest posts by mck.uri.life.ap.brid.gy on Bluesky

한국의 차세대 산업혁명 - NVIDIA

> 한국은 처음부터 엔비디아의 여정에 함께해 왔습니다. 그리고 이제 AI 시대를 맞이하여, 엔비디아는 한국의 여정에 함께하며 함께 미래를 만들어갈 수 있게 되어 자랑스럽게 생각합니다.

이게 대체 뭐임? 깐부치킨에 이어서 유튜브 영상까지

https://youtu.be/KnW9lU0lK5g?si=blyMEXiUDLenpog3

01.11.2025 10:39 — 👍 0    🔁 0    💬 0    📌 0

#macos Tahoe로 너무 일찍 넘어갔나? 26.0.1 나온거 보고 지난 주말에 넘어갔는데 자잘하게 성가시다

30.10.2025 03:31 — 👍 0    🔁 0    💬 0    📌 0
Preview
호재성 기사 쓰고 주가 올려 되팔기···‘작전 가담 언론인’에 커지는 규제 목소리 이재명 정부가 주가조작 세력과의 전쟁을 선포한 가운데, 확인되지 않은 호재성 정보를 담은 기사로 주가 조작에 가담하는 일부 언론인들의 행태가 도마에 올랐다. 취재 중 얻은 정보를 이용한 선행매매로 이득을 보거나, IR(투자자 관계) 대행사 등을 통해 작전 세력처럼 이용된 경우가 연이어 드러난 것이다. 자정 작용을 위한 언론계의 노력과 함께 금융당국의 ...

호재성 기사 쓰고 주가 올려 되팔기···‘작전 가담 언론인’에 커지는 규제 목소리 [경제밥도둑]
www.khan.co.kr/article/2025...

"자정 노력을 넘어 정부의 간접규제가 필요하다는 지적도 나온다. 문화체육관광부가 신문진흥법 시행령을 개정해 직원들의 부당이득을 방지하기 위한 준칙이나 서약서 마련, 교육과 점검 체계 도입을 인터넷매체 등록 요건에 추가하는 방안이 대표적이다. 문체부가 정부광고 집행할 때 언론사의 부당이득 방지 대책 마련 여부나, 소속 직원들의 위반 횟수 등을 반영해야 한다는 지적도 있다."

29.10.2025 00:41 — 👍 3    🔁 11    💬 0    📌 0
“역사의 정치 도구화 반대”···오는 25일 사이비역사학·뉴라이트역사학 비판 학술대회 개최 사이비역사학과 뉴라이트역사학을 비판하는 역사학자들의 학술대회가 열린다. 한국역사연구회를 비롯한 7개 역사학 분야 학회는 25일 오후 12시30분부터 오후 1시30분까지 제68회 전국역사학대회에서 ‘사이비역사학 및 뉴라이트역사학 비판’을 주제로 한 학술회의(특별패널)를 개최한다고 24일 밝혔다. 장소는 서울대 인문대학 7동 106호다. 주최 측은 보도자...

“역사의 정치 도구화 반대”···오는 25일 사이비역사학·뉴라이트역사학 비판 학술대회 개최

수정 2025.10.24 11:30

www.khan.co.kr/article/2025...

24.10.2025 10:06 — 👍 4    🔁 7    💬 0    📌 1
Preview
류이치사카모토 유족재단 “학살 위한 음악은 없다, 이스라엘 스트리밍서 음악 삭제” 류이치 사카모토 유족 재단이 이스라엘 집단학살 보이콧 캠페인 ‘집단학살에 음악은 없다(No Music For Genocide)’에 참여한다고 밝혔다. 이스라엘 내 모든 음악 스트리밍과 다운로드 서비스에서 류이치 사카모토의 음악을 삭제하는 절차를 밟고 있다.류이치 사카모토 유족 재단은 지난 18일 X(트위터)와 인스타그램 등을 통해 “류이치 사카모토 유족 재...

류이치사카모토 유족재단 “학살 위한 음악은 없다, 이스라엘 스트리밍서 음악 삭제”
“이스라엘 내 모든 음악 스트리밍·다운로드 서비스에서 음악 삭제” SNS로 알려
입력 2025.10.26 19:09
www.mediatoday.co.kr/news/article...

26.10.2025 10:59 — 👍 117    🔁 215    💬 0    📌 3
Preview
[단독]“성소수자 이웃 싫다” 30년간 줄었지만···한국, 여전히 ‘OECD 최고 불관용국’ 이주민·성소수자 등 사회적 소수자와 ‘함께 살기 싫다’는 설문조사 응답자 수가 지난 30년간 꾸준히 감소한 것으로 나타났다. 소수자에 대한 인식이 개선된 결과로 분석된다. 다만 성소수자에 대한 인식은 경제개발협력기구(OECD) 국가 중에서 여전히 최하위권을 기록했다. 김승섭 서울대 보건대학원 교수와 연구진(팽은지 서울대 보건대학원 석사과정, 문영민 중...

[단독]“성소수자 이웃 싫다” 30년간 줄었지만···한국, 여전히 ‘OECD 최고 불관용국’
www.khan.co.kr/article/2025...

"한국의 ‘동성애자를 이웃으로 삼기 싫다’는 응답자 비율은 세계가치조사에 참여한 OECD 국가 16개국 중 가장 높았다. ‘이민자·외국인노동자를 이웃으로 삼기 싫다’는 응답자 비율도 튀르키예, 체코, 일본 등에 이어 6번째로 높았다. 연구진은 “30년간 전 연령대에서 소수자에 대해 관용적으로 인식이 변했지만 한국 사회의 소수자 불관용은 여전히 심각한 수준”이라고 설명했다."

23.10.2025 22:14 — 👍 19    🔁 75    💬 0    📌 1
Preview
‘허위 보도자료’ 그대로 기사화…‘삼부토건 주가조작’ 통로된 언론 김건희 특검(김건희와 명태균·건진법사 관련 국정농단 및 불법 선거 개입 사건 등 진상규명을 위한 특별검사)이 들여다보고 있는 삼부토건 주가조작 의혹에, 이기훈 삼부토건 부회장이 관계자들과 공모하여 허위·과장 보도자료를 만들어 배포, ‘테마주’ 등의 제목을 단 언론 기사를 통해 주가조작을 한 정황이 드러났다. 이기훈 삼부토건 부회장은 주가조작으로 총 369억...

‘허위 보도자료’ 그대로 기사화…‘삼부토건 주가조작’ 통로된 언론
www.mediatoday.co.kr/news/article...

"미디어오늘이 네이버 뉴스창에 관련 뉴스를 검색해보니, 해당 기사들은 여전히 삭제되지도 않은 채 남아있다. 파이낸셜뉴스, 머니S, 아시아경제, 머니투데이, 프라임경제, 이투데이, 서울경제TV, 톱데일리, 글로벌이코노믹, 뉴스핌, 뉴시스, 대한경제, 더벨 등의 기사가 검색된다."

17.10.2025 06:58 — 👍 1    🔁 9    💬 0    📌 1

이 주제를 왜 생각하고 있었냐면 읍내에서 한국어의 표현력이 부족하다는 얘기를 봤는데... 표현력이 부족한 언어는 없다고 생각함 다만 한국에서는 표준어 규범을 만족하는 선에서만 표현하려는 경향이 강할 뿐이지

그냥 "눈이 푹푹 쌓이는 밤 흰 당나귀 타고
산골로 가자 출출이 우는 깊은 산골로 가 마가리에 살자 [...] 언제 벌써 내 속에 고조곤히 와 이야기한다" 같은 표현을 쓰면 혼나다 보니 사람들이 표현력을 스스로 봉인하고 있는 거라는 생각...

16.10.2025 03:40 — 👍 11    🔁 10    💬 0    📌 0
Post image Post image Post image Post image

캄보디아 한인을 무슨 흉악한 사람으로, 그리고 대사관 직원을 끝간데 없이 무능하게 묘사하던데, 비하인드는 참 많이 머리가 아픕니다.

14.10.2025 01:30 — 👍 70    🔁 149    💬 5    📌 4

이에 대해 중국 사람들은 대체로... 빡쳐 있다(...

개발자 연봉이 보통 한국보다 40% 정도 낮은 와중에 상하이의 부동산 임대료는 이미 무려 서울을 뛰어넘었고 청년실업률은 무려 20%에 근접함 (한국은 5% 정도)

적게 벌고 많이 일해서 월세도 못 내니까 그냥 포기하는 사람들이 많아지는 것임

중국은 분명 정말 빠르게 발전하고 있고 본받을 점도 많겠지만 중국의 고용환경을 본받자고 하면 지금 사람이 남아도냐는 말밖엔 해줄 수 없다...

13.10.2025 10:50 — 👍 34    🔁 53    💬 0    📌 2

중국 SW업계의 2024년 매출은 590억 달러 정도고 동기간 한국 SW업계의 매출은 120억 달러 정도인데
중국의 개발자 수는 한국의 스무 배가 넘음 (대략 900만 VS 35만)
주5일 9시간씩 일하는 한국 개발자 1명이 주6일 12시간씩 일하는 중국 개발자 1명에 비해 5배 정도의 매출을 창출하는 셈이다...

13.10.2025 10:32 — 👍 38    🔁 75    💬 2    📌 0
Preview
# 들어가며 최근에 KT 펨토셀을 이용한 가짜 기지국 사태가 있었습니다. 이 사건에 대해 **메이저 언론 채널 (네, 지상파 채널 또한 예외는 아닙니다)** 을 포함해 많은 채널로 잘못된 정보가 퍼지고 있기에 이를 바로잡는 데 눈꼽만큼이라도 도움이 되고자 관련 기술적 내용을 이번 사건과 연결하여 글을 쓰고자 합니다. # 이동통신 보안 우선, 가짜 기지국에 대해 이야기하기 전에 필요한 사전 지식인 이동통신 보안에 대해 알아봅시다. 참고: 이 문단의 일러스트레이션은 arXiv:2107.07416 에서 발췌하였습니다. 참고: TMSI 와 같은 인증 과정의 디테일은 여기서는 설명을 생략하도록 하겠습니다. 더불어, 현대 인증 시스템과 크게 연이 없는 CDMA 관련 내용 또한 다루지 않습니다. ### GSM GSM 의 경우, 인증은 다음과 같은 절차를 통해 이루어집니다: 1. AuC 에서 RAND 값을 내려줍니다 2. SIM 카드는 RAND 값을 K 값과 계산하여 CK 와 RES 값을 계산합니다 3. MSC 는 해당 값을 AuC 에서 계산한 XRES 값과 비교해서 인증 통과 여부를 판단합니다. 이 인증 프로세스는 다음과 같은 문제를 가집니다. * SIM 카드는 AuC 의 진위를 검증하지 않습니다. 더불어, 번외로, GSM 은 유도한 CK 를 사용해서 터널을 암호화하지만, 기지국의 선택에 따라, 터널 암호화를 생략할 수 있습니다. 이는 위의 문제와 결합되어 다음과 같은 문제로 이어집니다. * Rogue BTS 에 임의의 UE 를 인증이 통과한 것으로 속여, attach 후 통신 조작을 할 수 있습니다. ### UMTS 이러한 문제를 막기 위해 UMTS 에서는 인증 과정이 다음과 같이 바뀌었습니다 UMTS 는 다음 과정을 통해 인증을 진행합니다 1. AuC 에서 RAND 와 (RAND와 K, SQN을 섞어) AUTN 을 생성합니다 2. SIM 은 AuC 의 진위 여부를 AUTN 의 MAC 부분을 비교하고, 인증 카운터 (SEQ) 가 올바른 범위인지를 통해 확인합니다. (SEQ 가 틀린 경우라면, Synch failure 오류를 통해 AuC 와 SIM 의 SEQ 를 동기화하는 과정을 거치게 됩니다) 3. AuC 가 진짜라면, RES 를 계산해 올려보냅니다. MSC는 이 RES 를 비교해 인증 통과 여부를 판단합니다. 더불어, GSM 에서는 빠져 있었던 다음 인증 외 부분이 추가되었습니다. * 평문 전송 모드인 UEA0 은 남아있지만, (긴급 통화와 나사빠진 모뎀 펌웨어 시나리오를 제외하면) 무결성 검증 옵션 비활성화 옵션이 제거되었습니다. * 주파수와 PCI를 통한 명시적인 다운그레이드 루트가 막혔습니다. 이는 공격자의 다운그레이드 공격 난이도를 증가시킵니다 이는, Rogue BTS 가 (다운그레이드 공격 없이) 할 수 있는 공격의 범위를 축소시킵니다. ### LTE LTE 의 인증 과정은 UMTS 에 비해 크게 달라지지 않았지만, 다음과 같은 변경점이 있습니다 1. IK와 CK 를 통신 키로 바로 사용하는 대신, SQN^AK 값과 CK, IK, SNID 값을 섞어 KASME 키를 유도합니다. 이 변화점은 CK와 IK를 바로 사용하지 않고, KASME 로부터 KNAS 와 KeNB 를 유도하여 NAS와 RRC 키를 다르게 가져가고자 만들어졌습니다. ### NR NR이 표준화되기 전, 세상에는 큰 변화가 있었습니다. 광대역 소프트웨어 라디오헤드들이 저렴한 가격에 풀림으로서, 소프트웨어 라디오의 민주화가 일어났습니다. 이는 Rogue cell station 의 위협을 크게 증가시켰고, 이에 따른 프라이버시 강화를 위한 SUPI 도입과 같은 여러 추가 하드닝이 적용되었습니다. # 가짜 기지국 들여다보기 ## 가짜 기지국 공격 시나리오 위에서도 잠깐 돌아보았지만, 가짜 기지국들은 각각 통신망 세대에서 다음과 같은 공격을 수행할 수 있습니다. 참고: 이 문단은 가짜 기지국이 modem firmware 와 같은 부분에 대해서 특징적인 공격을 수행하지 않는다는 전제 하에 작성되었습니다. 실제 상황에서는 modem firmware 의 취약점과 같은 부분을 이용하여 프로토콜 자체 공격 벡터 이외의 공격을 수행할 수 있는 점을 엄두에 두십시오. 참고: 이 문서는 프로토콜에 존재하는 모든 깊고 어두운 면을 짚는 문서가 아닙니다. 이 문서에서 기술하는 것 이외의 공격 벡터 또한 존재함을 엄두에 두십시오. ### GSM 가짜 기지국이 가장 많은 공격을 진행할 수 있는 프로토콜입니다. 해당 프로토콜에서는 상호 인증이 결여되어 있고, A5/0 “사이퍼” 슈트를 사용할 경우, 평문으로 통신을 진행할 수 있습니다. 이는, SIM 과 AuC 의 shared secret 인 K값을 알 수 없어, CK 를 유도할 수 없는 시나리오에도, 정상적인 기지국을 흉내내어 통신을 할 수 있음을 의미하고, 이는 GSM frame 을 자유롭게 위조 및 주입할 수 있음을 의미합니다. 이를 통해, 공격자는 단순히 identity 수집 뿐만 아니라, SMS 인젝션 혹은 통화 스푸핑 등, 많은 광범위 공격을 수행할 수 있습니다. ### UMTS/LTE GSM 시절의 문제를 덮기 위해, 상호 인증이 도입되었습니다. 이 시점부터, (AuC 에 접근이 불가능한) 일반적인 가짜 기지국을 통해서는 공격적 접근이 불가능해집니다. 이 시점부터 가짜 기지국은 크게 두 가지로 나뉩니다: 첫째는 다운그레이드 공격을 진행하여, 취약한 GSM 을 통해 더 넓은 공격 표면을 획득하는 부류와, 둘째는, IMSI 수집(IMSI-catcher)을 통한 프라이버시 침해(IMSI 가 가짜 기지국들 사이에서 어떻게 움직이는지)와 네트워크의 가용성을 공격하는 형식의 가짜 기지국이죠. ### NR NR 부터는 가짜 기지국이 할 수 있는 일이 크게 줄어듭니다. 더 이상 identity 정보는 평문으로 전송되지 않고, 단순 passive eavesdropping 만으로는 IMSI(정확히는, SUPI) 의 수집이 불가능해졌습니다. 이는 가짜 기지국이 프라이버시 이슈를 일으키는 데 큰 제약이 생깁니다. # 펨토셀 다음 문단에서 다룰 KT 가짜 기지국 공격 사건을 다루기 전에, 펨토셀의 특수성에 대해 먼저 다루고 넘어갈 필요가 있습니다. ## 펨토셀의 특수성 흔히 펨토셀이라 불리는 HeNB (Home eNodeB) 의 경우, 일반적인 eNodeB 와 다르게 다음 특수성을 가집니다. * 고객의 집이라는 제일 신뢰할 수 없는 공간에 설치됩니다. * CPRI 를 통해 I/Q 스트림을 전송하는 RRU 와 다르게, 코어망에 직접 연결됩니다. 이는, 해당 장비는 EPC(Evolved Packet Core) 로 직행하는 S1-U 링크에 접근할 수 있음을 의미하며(대체로 IPSec 으로 보호되지만, 해당 터널은 펨토셀 내부에서 종결됩니다), S1-U 에는 UE(여러분의 휴대폰) 와 MME(대충 기지국이라고 생각하시면 됩니다) 와의 공유된 비밀키로 암호화되어 통신되는 전파단과는 다르게, 평문 형태의 데이터가 흐르고 있습니다. 이는, 해당 장비에 대해 공격을 성공할 경우 (그리고 공격자는 일반적인 eNodeB 세트가 위치한 데이터센터 서버랙에 접근할 필요 없이 집에서 공격을 수행할 수 있습니다), 공격자가 S1-U 링크를 보호하는 IPSec 터널 내부에 접근할 수 있음을 의미합니다. 이는 이제 아래에서 설명할 KT 가짜 기지국 공격 사건에서 큰 역활을 하게 됩니다. # KT 가짜 기지국 공격 사건 최근, KT 사건의 경우에는, 일반적인 가짜 기지국이 아닌, 특수한 형태의 가짜 기지국이 사용되었습니다. 일반적인 가짜 기지국의 경우, 코어망에 접근을 할 수 없기에, 공격 벡터가 제약적이지만, 위에서 설명한, 펨토셀의 IPSec 크레덴셜을 이용해 코어망에 접근할 수 있는 경우, 공격 시나리오가 달라지게 됩니다. 공격자는 S1-U 링크에 직접적으로 액세스하여 AuC 와 통신해 에어링크를 암호화하는 키를 획득할 수 있고, 이는, 공격자의 셀에 접속한 모든 UE 들의 통신을 들여다볼 수 있게 됨을 의미합니다. (S1-MME 인터페이스의 경우, KNAS 로 암호화되어 있어, MME 까지 이어지지만, 많은 경우에서 SMS over SGs 를 사용하고 있지 않기에, 안타깝게도, 뒤의 VoLTE 이슈로 이어지게 됩니다) 이는, 데이터 통신 상으로는, 암호 없는, 혹은 신뢰할 수 없는 퍼블릭 와이파이 액세스포인트에 접속하는 것보다 약간 더 나쁜 시나리오인데, 와이파이 액세스포인트와는 다르게, 사용자의 직접적 상호작용 없이 Rogue cell 으로의 접속이 이루어지게 되기 때문입니다. 다행히도, 우리는 암호화 통신이 일상화된 세상에서 살고 있기 때문에, 이것 자체로는 큰 영향을 끼치기 힘듭니다. 하지만… ## VoLTE 한국은 CDMA2000 독박을 써 버려, 가능한 한 빠르게 CDMA 통신을 죽여버리고 싶었던 한 통신사와 아무튼 “세계 최초” 타이틀 뺏기기 싫었던 나머지 두 통신사 때문에, VoLTE 상용화에 있어 지나치게 서둘렀습니다. 이 과정에서 당연히 보안성에 대한 고려는 뒷전이 되었고, 이는 한국 TTA-VoLTE 프로파일이 타 국가의 통신사(주의: 저 또한 모든 통신사의 VoLTE 프로파일에 대해 조사를 진행하지 못했음을 미리 알려드립니다) 와 비교하였을 때, 한 가지 크리티컬한 부분을 빠뜨리는 결과를 낳았습니다. 이 차이에 대해, Qualcomm modem 에서 추출된 VoLTE 프로파일을 비교해 보며 살펴봅시다. (흔히 외산 폰에 TTA-VoLTE 지원을 추가할 때 “MBN 패치” 라고 부르는 것이 바로 이 VoLTE 프로파일을 프로그램하는 절차입니다) 제한 사항: 한국 VoLTE 프로파일 구현은 매우 다양한 방법으로 비틀려 있습니다. 비록 Qualcomm 모뎀 내장 프로필이 이렇게 되어 있더라도, 유저랜드에서 VoLTE 를 구현한 갤럭시와 같은 경우, 설정이 이와 같지 않을 수 있습니다! RedmiS2 에서 추출된 태국 DTAC 의 VoLTE 프로파일. ImsWithIpSec 플래그를 확인할 수 있다 Mi5 에서 추출된 한국 KT 의 VoLTE 프로파일. ImsWithoutIpSec 플래그를 확인할 수 있다 다음과 같이, KT 의 VoLTE 프로파일에는 VoLTE 연결을 IPSec 터널으로 감싸지 않도록 설정되어 있는 것을 확인할 수 있습니다. 이는 위의 노출된 S1-U 링크 이슈와 맞물려 다음 문제를 일으킵니다 ## SIP Hijacking 주의: 이 문단은, 공격 방식에 대한 추측입니다. KT 공격에 대한 가설이지, 반드시 이 공격 방법이 사용되었다는 의미는 아닙니다! VoLTE 는 기본적으로 SIM 안의 크레덴셜을 통해 인증된 SIP 를 통해 통신하는 인터넷 전화입니다. (SIP over TLS와 함께하는 SRTP 같은 별도의 암호화를 진행하지 않았다면) UDP 를 통해 흘러가는 SIP 세션 연결을 엿보거나, 하이잭 가능하다는 것은 매우 잘 알려진 사실이며, 이는 공격자에게 다음과 같은 공격이 가능하게 합니다. * SIP 메시지 스니핑을 통해, SMS 내용을 엿보거나, RTP 세션 스니핑을 통해 통화를 엿들을 수 있습니다. * SIP 세션 하이재킹을 통해, SIP 를 통해 전달되는 SMS 를 먹어버리거나, 전화를 대신 받거나, 가짜 전화를 걸거나, 가짜 SMS 를 주입하는 등의 공격이 가능합니다. 현재로는, 이 방식으로 공격자들이 KT 사용자들을 공격하여 소액결제 사기를 수행한 것으로 **추측** 되는 상황입니다. 이러한 공격을 막기 위해서는, 다른 통신사들과 같이 SIP 세션을 IPSec 에 터널링하는 (물론, 터널링하는 코스트로 인해 인프라 지출이 증가하겠지만) 것이 필요합니다. ## 언론에 소개된 가짜 기지국 이슈 돌아보기 한국 언론은 이 사건에 대해 보도할 때, 충분히 검증된 정보를 전달하는 데 실패하였습니다. 위에서 돌아봤듯이, 일반적인 가짜 기지국 솔루션들은 코어망에 접근하는 대신, 수동적인 아이덴티티 수집 및 액티브한 공격을 위해 다운그레이드 공격을 이용합니다. 해당 공격 방법들은 오래된 방법으로 하지만, 한국 언론에서는, 온라인을 통해 구매할 수 있는 IMSI-catcher/GSM 다운그레이드를 통한 SMS 블라스터 솔루션을 이용해 이번 KT 소액결제 사기 사건과 같은 공격을 할 수 있는 것처럼 부풀리거나 (힌트: SMS 블라스터는 SMS 를 주입하는 것만 가능하고 SMS 를 가로챌 수는 없는 장치입니다. 더불어, 2G 다운그레이드를 통해야 하므로 매우 어그로를 끄는 방법이기도 하고요), (추후 포스트에서 다룰 예정인) IMSI/IMEI 만으로 “휴대폰 복제”가 가능하다는 등, 대중에게 잘못된 정보를 전달하였습니다. 이는 언론사가 사실을 전달하는 대신, FUD(Fear, Uncertainty and Doubt) 를 퍼뜨린, 안 좋은 사례입니다. # 보너스: VoWiFi? 재미있게도, VoWiFi 의 경우, IPSec 터널을 통해 SIP 연결을 보호하는 것이 de-facto default 입니다 (주의: 한국의 VoWiFi 솔루션 – 홈파이콜 – 과 같은 별도 앱을 사용해 연결하는 솔루션에 대해서는 검증되지 않았습니다.) 이는, 많은 대중들의 믿음과는 다르게, 올바르게 설정된 VoWiFi 를 통해서는(IPSec NULL cipher 를 허용한다거나 하는 미친 짓을 안 한다는 전제 하에) SMS 하이재킹과 같은 이슈가 일어나기 매우 어렵다는 것을 의미합니다. # 마치며 이동통신 프로토콜은 https://etsi.org 라는 곳에 방문하시면 (3GPP 의 [편집됨] 같은 문서와는 다른) 사람이 읽을 수 있는 형태의 문서를 무료로 읽어보실 수 있습니다. 여러분도 이 글을 있는 그대로 받아들이기보다는, ETSI 문서와 함께 보며 즐겨주시길 부탁드립니다.

PSA: 아이폰을 KT에서 사용 중이라면 즉시 iOS 를 26 developer beta3 버전 이상으로 업데이트 하십시오

이유가 궁금하시면 https://blog.quendi.moe/2025/10/11/ko-%ec%9d%b4%eb%8f%99%ed%86%b5%ec%8b%a0-%eb%b3%b4%ec%95%88-%eb%93%a4%ec%97%ac%eb%8b%a4%eb%b3%b4%ea%b8%b0-pt1-%ea%b0%80%ec%a7%9c-%ea%b8%b0%ec%a7%80%ea%b5%ad/ 를 읽어보시면 됩니다

11.10.2025 13:53 — 👍 4    🔁 27    💬 1    📌 1
파란色 背景의 FOSS for All 컨퍼런스 2025 發表者 카드. 右側 아래에는 發表者 洪民憙의 寫眞이 있고, 中央의 흰色 말風船 안에는 「Keynote」라는 文句와 함께 發表 題目 〈야크 셰이빙: 새로운 오픈 소스의 原動力〉이 쓰여 있다.

파란色 背景의 FOSS for All 컨퍼런스 2025 發表者 카드. 右側 아래에는 發表者 洪民憙의 寫眞이 있고, 中央의 흰色 말風船 안에는 「Keynote」라는 文句와 함께 發表 題目 〈야크 셰이빙: 새로운 오픈 소스의 原動力〉이 쓰여 있다.

오는 11月(월) 8日(일) 光云大學校(광운대학교)에서 開催(개최)되는 FOSS for All 컨퍼런스 2025에서 제가 〈야크 셰이빙: 새로운 오픈 소스의 原動力(원동력)〉이라는 主題(주제)로 基調演說(기조연설)을 하게 되었습니다!

> 올해 처음 열리는 FOSS for All 컨퍼런스는 “Free and Open Source Software for All”이라는 슬로건 아래, 모두를 爲(위)한 오픈 소스 컨퍼런스를 目標(목표)로 하는 非營利(비영리) 오픈 소스 커뮤니티 컨퍼런스입니다.

10.10.2025 10:46 — 👍 4    🔁 13    💬 0    📌 0
Preview
macOS의 dotfiles는 ~/Library/Application Support에 넣지 말아야 합니다 - RosettaLens 번역 macOS에서 CLI 도구가 설정 파일을 ~/Library/Application Support에서 찾도록 하는 관행은 사용자 기대와 Apple 문서의 취지 모두에 어긋난다. GUI 앱이 사용자를 대신해 설정을 관리하는 경우를 제외하면, CLI 도구는 XDG Base Directory 사양을 따라 기본값 ~/.config($XDG_CONFIG_HOME)에 설정을 두어야 한다.

〈macOS의 dotfiles는 ~/Library/Application Support에 넣지 말아야 합니다〉

27.08.2025 02:35 — 👍 0    🔁 1    💬 0    📌 0
Preview
[단독] ‘중국 유학생 100% 잠재적 간첩’···혐중 현수막, 보수 시민도 65%가 “불쾌” 전국 곳곳에 내걸린 ‘극우·혐중(중국 혐오)’ 현수막을 본 시민 10명 중 8명은 ‘불쾌감’을 느낀 것으로 나타났다. 이해식 더불어민주당 의원실이 윈지코리아컨설팅에 의뢰해 지난달 29일~30일 전국 만 18세 이상 시민 1004명을 대상으로 진행한 여론조사 결과를 보면 ‘부정선거·대선불복’ 등 표현이 담긴 정당현수막을 본 적 있는 683명 중 542명...

[단독] ‘중국 유학생 100% 잠재적 간첩’···혐중 현수막, 보수 시민도 65%가 “불쾌”
www.khan.co.kr/article/2025...

“이런 현수막이 사회적 갈등을 부추긴다는 지적에는 응답자 1004명 중 672명(66.9%)이 동의했다. 나이별로는 40대(79.7%)와 50대(79.4%)에서 비율이 높았고 70세 이상(41.3%)과 20대(59.5%)에서는 낮았다.”

10.10.2025 00:15 — 👍 2    🔁 13    💬 0    📌 0

"상화병(霜花餠)은 고려시대에 원나라에서 전해온 외래음식이다. 사투리로 상애/상외/상웨/상화+병/떡이라고도 불린다.

근현대기에는 레시피가 비슷한 찐빵 등으로 대체되면서 대부분의 지역에서 소멸하였고, 오직 제주도에만 향토 요리로 남아있다." 세상에 몰랐어요.

원나라 출신 빵(떡)이라고 하면 햄버거식으로 고기 끼워먹는게 오히려 원조에 가깝겠군요. 한국 만두의 시작에도 영향을 줬을 수 있다고.

09.10.2025 03:55 — 👍 12    🔁 15    💬 0    📌 0

I'll write a detailed blog post soon, but I'm thrilled to share that Fedify has received investment from the Sovereign Tech Fund, which means I'll be able to focus exclusively on the Fedify project for the next year or so.

02.10.2025 15:32 — 👍 3    🔁 5    💬 4    📌 0

엘리베이터에 타려고 문에 딱 붙어서 기다리는 사람때문에,
문쪽에 서면 몸을 살짝 돌려서 팔꿈치를 올린 상태로 있게 되었다. AT 필드를 지켜야 해

01.10.2025 05:19 — 👍 0    🔁 0    💬 0    📌 0
Preview
미세먼지 심한 곳 살면 수면 무호흡증 악화된다 미세 먼지의 영향으로 수면 무호흡증이악화될 수 있다는 점이 확인됐다. 게티이미지뱅크 제공.대기 오염이 심한 지역에 사는 사람은 수면 무호흡증이악화되는 것으로 나타났다. 수면장애 치료 시 환경 요인을 고려해야 한다는 ...

미세먼지 심한 곳 살면 수면 무호흡증 악화된다
www.dongascience.com/news.php?idx...

"분석 결과 PM10이 심한 지역일수록 환자의 ‘무호흡-저호흡 지수(AHI)’가 완만하게 증가하는 경향을 보였다. AHI는 수면 중 시간당 호흡이 멈추는 무호흡과 호흡이 감소하는 저호흡이 나타나는 횟수를 합산한 값이다. 연구팀은 대기 오염과 OSA 간 상관관계의 강도가 도시별로 차이를 보인다는 점도 발견했다."

29.09.2025 10:17 — 👍 1    🔁 5    💬 0    📌 0
Preview
“여성으로 태어나 여성으로 살았는데”…경기장 밖으로 밀려나는 아프리카 여성 선수들 [플랫] 2025 세계육상선수권이 열리고 있는 일본 도쿄 트랙 밖에서는 선수 자격을 둘러싼 논란이 거세다. 세계육상연맹(WA)의 새로운 성별 규정 때문에 우간다·케냐 등 아프리카 출신 여성 선수들이 경기장 밖으로 밀려나고 있다고 CNN이 20일 대서특필했다. 우간다 중거리 선수 도쿠스 아조크는 한때 올림픽 챔피언을 꿈꿨다. 2014년부터 국제무대에서 활약했지만...

“여성으로 태어나 여성으로 살았는데”…경기장 밖으로 밀려나는 아프리카 여성 선수들
입력 2025.09.23 16:03

우간다 아조크·케냐 이말리 등 테스토스테론 검사 후 ‘출전 금지’

“과학이 내 존재 규정할 수 없어” www.khan.co.kr/article/2025...

24.09.2025 02:18 — 👍 37    🔁 87    💬 0    📌 6
Video thumbnail

"팔찌 열 개 껴라, 샹치"

https://qdon.space/@jarm/115263654830901241

25.09.2025 08:37 — 👍 0    🔁 0    💬 0    📌 0

> 김대리, 너무 엑셀 팡션? 사용 하지 마세요.

11.09.2025 06:54 — 👍 0    🔁 0    💬 0    📌 0

모노노케 히메(원령공주) IMAX 개봉 흐음

11.09.2025 06:47 — 👍 0    🔁 0    💬 0    📌 0

X에서 소프트웨어 공학적 담론을 보면 거의 항상 소프트웨어 개발이 언제나 잘 조직된 팀에 의해서 수행된다는 전제를 품고 있다. 어떤 기술을 과도하게 쓰면 조직이 일을 잘못하고 있다는 증거라고 주장하는 식이다. 그런데, 많은 오픈 소스 프로젝트를 포함해서, 세상에는 느슨하게 조직화된 팀에 의해 개발되는 경우도 아주 많다. 그런 경우에는 문제를 사람으로 푸는 것보다 기술과 도구로 푸는 게 더 나을 때도 많다.

11.09.2025 05:50 — 👍 1    🔁 1    💬 0    📌 0

Git cherry-pick, git rebase 쓰면 뭔가 문제가 있다는 이상한 소리가 도는데,

음 git rebase 안 하고 지저분한채로 git send-email 하면 당신의 패치가 리젝 되기까지 5... 4... 3... 2...

11.09.2025 06:01 — 👍 1    🔁 2    💬 1    📌 0
Stop writing CLI validation. Parse it right the first time. I have this bad habit. When something annoys me enough times, I end up building a library for it. This time, it was CLI validation code. See, I spend a lot of time reading other people's code. Open source projects, work stuff, random GitHub repos I stumble upon at 2 AM. And I kept noticing this thing: every CLI tool has the same ugly validation code tucked away somewhere. You know the kind: if (!opts.server && opts.port) { throw new Error("--port requires --server flag"); } if (opts.server && !opts.port) { opts.port = 3000; // default port } // wait, what if they pass --port without a value? // what if the port is out of range? // what if... It's not even that this code is hard to write. It's that it's _everywhere_. Every project. Every CLI tool. The same patterns, slightly different flavors. Options that depend on other options. Flags that can't be used together. Arguments that only make sense in certain modes. And here's what really got me: we solved this problem years ago for other types of data. Just… not for CLIs. ## The problem with validation There's this blog post that completely changed how I think about parsing. It's called _Parse, don't validate_ by Alexis King. The gist? Don't parse data into a loose type and then check if it's valid. Parse it directly into a type that can only be valid. Think about it. When you get JSON from an API, you don't just parse it as `any` and then write a bunch of `if`-statements. You use something like Zod to parse it directly into the shape you want. Invalid data? The parser rejects it. Done. But with CLIs? We parse arguments into some bag of properties and then spend the next 100 lines checking if that bag makes sense. It's backwards. So yeah, I built Optique. Not because the world desperately needed another CLI parser (it didn't), but because I was tired of seeing—and writing—the same validation code everywhere. ## Three patterns I was sick of validating ### Dependent options This one's everywhere. You have an option that only makes sense when another option is enabled. The old way? Parse everything, then check: const opts = parseArgs(process.argv); if (!opts.server && opts.port) { throw new Error("--port requires --server"); } if (opts.server && !opts.port) { opts.port = 3000; } // More validation probably lurking elsewhere... With Optique, you just describe what you want: const config = withDefault( object({ server: flag("--server"), port: option("--port", integer()), workers: option("--workers", integer()) }), { server: false } ); Here's what TypeScript infers for `config`'s type: type Config = | { readonly server: false } | { readonly server: true; readonly port: number; readonly workers: number } The type system now understands that when `server` is false, `port` literally doesn't exist. Not `undefined`, not `null`—it's not there. Try to access it and TypeScript yells at you. No runtime validation needed. ### Mutually exclusive options Another classic. Pick one output format: JSON, YAML, or XML. But definitely not two. I used to write this mess: if ((opts.json ? 1 : 0) + (opts.yaml ? 1 : 0) + (opts.xml ? 1 : 0) > 1) { throw new Error('Choose only one output format'); } (Don't judge me, you've written something similar.) Now? const format = or( map(option("--json"), () => "json" as const), map(option("--yaml"), () => "yaml" as const), map(option("--xml"), () => "xml" as const) ); The `or()` combinator means exactly one succeeds. The result is just `"json" | "yaml" | "xml"`. A single string. Not three booleans to juggle. ### Environment-specific requirements Production needs auth. Development needs debug flags. Docker needs different options than local. You know the drill. Instead of a validation maze, you just describe each environment: const envConfig = or( object({ env: constant("prod"), auth: option("--auth", string()), // Required in prod ssl: option("--ssl"), monitoring: option("--monitoring", url()) }), object({ env: constant("dev"), debug: optional(option("--debug")), // Optional in dev verbose: option("--verbose") }) ); No auth in production? Parser fails immediately. Trying to access `--auth` in dev mode? TypeScript won't let you—the field doesn't exist on that type. ## “But parser combinators though…” I know, I know. “Parser combinators” sounds like something you'd need a CS degree to understand. Here's the thing: I don't have a CS degree. Actually, I don't have any degree. But I've been using parser combinators for years because they're actually… not that hard? It's just that the name makes them sound way scarier than they are. I'd been using them for other stuff—parsing config files, DSLs, whatever. But somehow it never clicked that you could use them for CLI parsing until I saw Haskell's optparse-applicative. That was a real “wait, of course” moment. Like, why are we doing this any other way? Turns out it's stupidly simple. A parser is just a function. Combinators are just functions that take parsers and return new parsers. That's it. // This is a parser const port = option("--port", integer()); // This is also a parser (made from smaller parsers) const server = object({ port: port, host: option("--host", string()) }); // Still a parser (parsers all the way down) const config = or(server, client); No monads. No category theory. Just functions. Boring, beautiful functions. ## TypeScript does the heavy lifting Here's the thing that still feels like cheating: I don't write types for my CLI configs anymore. TypeScript just… figures it out. const cli = or( command("deploy", object({ action: constant("deploy"), environment: argument(string()), replicas: option("--replicas", integer()) })), command("rollback", object({ action: constant("rollback"), version: argument(string()), force: option("--force") })) ); // TypeScript infers this type automatically: type Cli = | { readonly action: "deploy" readonly environment: string readonly replicas: number } | { readonly action: "rollback" readonly version: string readonly force: boolean } TypeScript knows that if `action` is `"deploy"`, then `environment` exists but `version` doesn't. It knows `replicas` is a `number`. It knows `force` is a `boolean`. I didn't tell it any of this. This isn't just about nice autocomplete (though yeah, the autocomplete is great). It's about catching bugs before they happen. Forget to handle a new option somewhere? Code won't compile. ## What actually changed for me I've been dogfooding this for a few weeks. Some real talk: **I delete code now.** Not refactor. Delete. That validation logic that used to be 30% of my CLI code? Gone. It feels weird every time. **Refactoring isn't scary.** Want to know something that usually terrifies me? Changing how a CLI takes its arguments. Like going from `--input file.txt` to just `file.txt` as a positional argument. With traditional parsers, you're hunting down validation logic everywhere. With this? You change the parser definition, TypeScript immediately shows you every place that breaks, you fix them, done. What used to be an hour of “did I catch everything?” is now “fix the red squiggles and move on.” **My CLIs got fancier.** When adding complex option relationships doesn't mean writing complex validation, you just… add them. Mutually exclusive groups? Sure. Context-dependent options? Why not. The parser handles it. The reusability is real too: const networkOptions = object({ host: option("--host", string()), port: option("--port", integer()) }); // Reuse everywhere, compose differently const devServer = merge(networkOptions, debugOptions); const prodServer = merge(networkOptions, authOptions); const testServer = merge(networkOptions, mockOptions); But honestly? The biggest change is trust. If it compiles, the CLI logic works. Not “probably works” or “works unless someone passes weird arguments.” It just works. ## Should you care? If you're writing a 10-line script that takes one argument, you don't need this. `process.argv[2]` and call it a day. But if you've ever: * Had validation logic get out of sync with your actual options * Discovered in production that certain option combinations explode * Spent an afternoon tracking down why `--verbose` breaks when used with `--json` * Written the same “option A requires option B” check for the fifth time Then yeah, maybe you're tired of this stuff too. Fair warning: Optique is young. I'm still figuring things out, the API might shift a bit. But the core idea—parse, don't validate—that's solid. And I haven't written validation code in months. Still feels weird. Good weird. ## Try it or don't If this resonates: * _Tutorial_: Build something real, see if you hate it * _Concepts_ : Primitives, constructs, modifiers, value parsers, the whole thing * _GitHub_: The code, issues, angry rants I'm not saying Optique is the answer to all CLI problems. I'm just saying I was tired of writing the same validation code everywhere, so I built something that makes it unnecessary. Take it or leave it. But that validation code you're about to write? You probably don't need it.
06.09.2025 18:17 — 👍 1    🔁 6    💬 1    📌 1

> 며칠 전에 있었던 《제80회 광복절 전야제》 라이브 방송 영상을 보았습니다.
> 제가 본 부분은 주로 ‘드론 공연’과 《독립군가》 부분이었습니다.
> 역시 독립, 자유, 민중과 관련된 노래는 마음을 두근거리게 하네요.
> 기분이 한껏 고조됩니다.

03.09.2025 00:41 — 👍 0    🔁 0    💬 0    📌 0

> 한국 『독립군가』【夢ノ結唱 ROSE POPY SV,SV2】【夢ノ結唱 HALO PASTEL SV2】【JP Vocal】

2025년 8월

https://www.youtube.com/watch?v=ldmt677748s

02.09.2025 23:55 — 👍 0    🔁 0    💬 1    📌 0
Preview
9월1일 전 세계 언론에 ‘검은 화면’ 뜨는 이유 9월1일, 전 세계 뉴스 채널에 ‘검은 화면’이 뜬다. 팔레스타인 가자지구에서 벌어지는 언론인 살해를 중단하고 취재진 접근을 요구하기 위한 언론계의 공동 행동이다. 국제 언론 단체 ‘국경없는 기자회(RSF)’의 제안으로, 총 50여개 국가에서 150여개 언론사와 언론 단체가 동참한다.

국제 언론 단체 ‘국경없는 기자회(RSF)’의 제안으로, 총 50여개 국가에서 150여개 언론사와 언론 단체가 동참한다. 2023년 10월 이후 악화된 가자지구 위기와 관련해 각국의 언론사들이 공동 행동을 통해 연대 목소리를 내는 건 이번이 처음이다.

입력 2025.08.31 23:46

www.sisain.co.kr/news/article...

31.08.2025 15:09 — 👍 35    🔁 74    💬 0    📌 2
Preview
mise 런타임 관리자를 통한 환경 대통합 주변에서 한참 동안 잘 써온 도구인데 이상하게 관련된 이야기가 잘 들리지 않아서 영업해 보려 한다. mise다. 구글에 검색할 때는 개발자의 이름을 붙여서 jdx mise라고 검색하면 좋다. 이 글에서는 mise가 필요한 이유 및 대강의 사용법과 함께 mise에 요즘 PR을 날리고 있는 이야기까지 다루려고 한다. 배경 자바 프로젝트 하나를 연다고 해보자. 의존하는

의외로 잘 안 알려진 도구인데, mise가 정말 좋습니다. 다들 mise 쓰고 행복한 개발 하세요.

https://proofby.ac/mise-for-all/

30.08.2025 06:01 — 👍 6    🔁 6    💬 0    📌 0

@mck.uri.life.ap.brid.gy is following 9 prominent accounts