diff --git a/etc/servers/work-server/data/e-reader-library.json b/etc/servers/work-server/data/e-reader-library.json index 5daee52..2f3b0e3 100644 --- a/etc/servers/work-server/data/e-reader-library.json +++ b/etc/servers/work-server/data/e-reader-library.json @@ -1,5 +1,577 @@ { "items": [ + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-77738d688dc829b1", + "title": "볼보자동차코리아, 차량 케어 돕는", + "sourceLabel": "아이뉴스24", + "url": "https://n.news.naver.com/mnews/article/031/0001031814", + "lead": "볼보자동차코리아는 고객의 차량 케어를 지원하는 '볼보 보증 연장 프로그램(이하 VWEP)'을 공식 런칭한다고 29일 밝혔다.", + "body": "볼보자동차코리아는 고객의 차량 케어를 지원하는 '볼보 보증 연장 프로그램(이하 VWEP)'을 공식 런칭한다고 29일 밝혔다.\n\n이번 프로그램은 볼보자동차 고객이 차량을 소유하는 동안 최상의 컨디션을 유지할 수 있도록 돕는 맞춤형 서비스다. △제조상 결함에 대한 핵심 파워트레인 부품 보장 △차량 매각 시 잔여 보증 기간 100% 승계△볼보자동차코리아 전국 공식 서비스센터 이용 등이 포함된다.\n\n볼보자동차코리아가 고객의 차량 케어를 지원하는 '볼보 보증 연장 프로그램(이하 VWEP)'을 공식 런칭한다. [사진=볼보자동차코리아]\n\n특히 순수 전기차뿐만 아니라 마일드 하이브리드(MHEV) 및 플러그인 하이브리드(PHEV) 등 차량 라인업별 특성과 고객의 주행 패턴에 맞춰 최적의 옵션을 선택할 수 있도록 프로그램 가격이 책정됐다.\n\n대표적으로 순수 전기 SUV인 EX30 또는 EX30CC 구매 시 해당 프로그램에 가입할 경우 1년 연장은 80만원이며, 2년 연장은 130만원 수준이다.\n\n이번 얼리버드 가입 이벤트는 볼보자동차코리아가 프로그램 런칭을 기념하고, 더 많은 고객에게 혜택을 제공하기 위해 기획됐다.\n\n이벤트 기간인 내달 30일까지 전국 공식 서비스센터를 방문해 '볼보 보증 연장 프로그램(VWEP)'에 신규 가입한 고객을 대상으로 제주도 비즈니스 왕복 항공권 등을 비롯해 경품 추첨을 진행한다.\n\n기존 5년·10만km의 업계 최고 수준 기본 보증과 '평생 부품 보증'에 이어, 이번 VWEP 출시를 통해 차량 인도부터 매각까지 전 과정에 걸친 프리미엄 서비스 네트워크를 완성했다.\n\n볼보자동차코리아 이윤모 대표는 \"이번 프로그램은 고객이 볼보자동차를 소유하는 전 과정에서 더 오랜 기간 차량을 안심하고 운행할 수 있도록 기획된 서비스 프로그램\"이라며 \"이번 출시를 기념해 마련된 얼리버드 이벤트를 통해 풍성한 혜택과 볼보만의 차별화된 서비스를 직접 경험해 보시길 바란다\"고 전했다.", + "htmlBody": "

볼보자동차코리아는 고객의 차량 케어를 지원하는 '볼보 보증 연장 프로그램(이하 VWEP)'을 공식 런칭한다고 29일 밝혔다.

이번 프로그램은 볼보자동차 고객이 차량을 소유하는 동안 최상의 컨디션을 유지할 수 있도록 돕는 맞춤형 서비스다. △제조상 결함에 대한 핵심 파워트레인 부품 보장 △차량 매각 시 잔여 보증 기간 100% 승계△볼보자동차코리아 전국 공식 서비스센터 이용 등이 포함된다.

\"볼보자동차코리아가

볼보자동차코리아가 고객의 차량 케어를 지원하는 '볼보 보증 연장 프로그램(이하 VWEP)'을 공식 런칭한다. [사진=볼보자동차코리아]

특히 순수 전기차뿐만 아니라 마일드 하이브리드(MHEV) 및 플러그인 하이브리드(PHEV) 등 차량 라인업별 특성과 고객의 주행 패턴에 맞춰 최적의 옵션을 선택할 수 있도록 프로그램 가격이 책정됐다.

대표적으로 순수 전기 SUV인 EX30 또는 EX30CC 구매 시 해당 프로그램에 가입할 경우 1년 연장은 80만원이며, 2년 연장은 130만원 수준이다.

이번 얼리버드 가입 이벤트는 볼보자동차코리아가 프로그램 런칭을 기념하고, 더 많은 고객에게 혜택을 제공하기 위해 기획됐다.

이벤트 기간인 내달 30일까지 전국 공식 서비스센터를 방문해 '볼보 보증 연장 프로그램(VWEP)'에 신규 가입한 고객을 대상으로 제주도 비즈니스 왕복 항공권 등을 비롯해 경품 추첨을 진행한다.

기존 5년·10만km의 업계 최고 수준 기본 보증과 '평생 부품 보증'에 이어, 이번 VWEP 출시를 통해 차량 인도부터 매각까지 전 과정에 걸친 프리미엄 서비스 네트워크를 완성했다.

볼보자동차코리아 이윤모 대표는 "이번 프로그램은 고객이 볼보자동차를 소유하는 전 과정에서 더 오랜 기간 차량을 안심하고 운행할 수 있도록 기획된 서비스 프로그램"이라며 "이번 출시를 기념해 마련된 얼리버드 이벤트를 통해 풍성한 혜택과 볼보만의 차별화된 서비스를 직접 경험해 보시길 바란다"고 전했다.

", + "tags": [ + "네이버뉴스", + "생활/문화" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:33:06+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-da0e0db8b418f84a", + "title": "사전투표율 오후 2시 7.02%…전남 높고 대구 낮아", + "sourceLabel": "한국경제TV", + "url": "https://n.news.naver.com/mnews/article/215/0001253739", + "lead": "사진=연합뉴스 제9회 전국동시지방선거 사전투표 첫날인 29일 오후 2시 기준 전국 투표율이 7.02%를 기록했다. 지난 2022년 지방선거 같은 시간대보다 높은 수준이다.", + "body": "사진=연합뉴스 제9회 전국동시지방선거 사전투표 첫날인 29일 오후 2시 기준 전국 투표율이 7.02%를 기록했다. 지난 2022년 지방선거 같은 시간대보다 높은 수준이다.\n\n중앙선거관리위원회에 따르면 이날 오전 6시부터 시작된 사전투표에는 전체 유권자 4천464만9천908명 가운데 313만4천398명이 참여했다.\n\n현재 투표율은 제8회 지방선거 당시 같은 시각 기록한 6.26%보다 0.76%포인트 높다.\n\n지역별로는 전남이 14.5%로 가장 높은 투표율을 보이고 있다. 이어 전북 12.22%, 강원 9.03%, 광주 8.63% 순이다.\n\n반면 투표율이 가장 낮은 지역은 대구로 5.46%를 기록했다. 경기 5.79%, 인천 6.04%, 울산 6.37% 등이 뒤를 이었고, 서울은 6.58%로 나타났다.\n\n사전투표는 오는 30일까지 이틀 동안 진행된다. 투표 시간은 오전 6시부터 오후 6시까지다.\n\n전국에는 모두 3천571개의 사전투표소가 마련됐다. 투표소 위치는 중앙선거관리위원회 홈페이지와 대표전화를 통해 확인할 수 있다.", + "htmlBody": "
\"사진=연합뉴스\"

사진=연합뉴스 제9회 전국동시지방선거 사전투표 첫날인 29일 오후 2시 기준 전국 투표율이 7.02%를 기록했다. 지난 2022년 지방선거 같은 시간대보다 높은 수준이다.

중앙선거관리위원회에 따르면 이날 오전 6시부터 시작된 사전투표에는 전체 유권자 4천464만9천908명 가운데 313만4천398명이 참여했다.

현재 투표율은 제8회 지방선거 당시 같은 시각 기록한 6.26%보다 0.76%포인트 높다.

지역별로는 전남이 14.5%로 가장 높은 투표율을 보이고 있다. 이어 전북 12.22%, 강원 9.03%, 광주 8.63% 순이다.

반면 투표율이 가장 낮은 지역은 대구로 5.46%를 기록했다. 경기 5.79%, 인천 6.04%, 울산 6.37% 등이 뒤를 이었고, 서울은 6.58%로 나타났다.

사전투표는 오는 30일까지 이틀 동안 진행된다. 투표 시간은 오전 6시부터 오후 6시까지다.

전국에는 모두 3천571개의 사전투표소가 마련됐다. 투표소 위치는 중앙선거관리위원회 홈페이지와 대표전화를 통해 확인할 수 있다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "주목" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:33:16+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-3fc3af650c888fec", + "title": "이민표 후보, 교육·돌봄 공약 발표…\"아이 키우기 좋은 증평\"", + "sourceLabel": "뉴스1", + "url": "https://n.news.naver.com/mnews/article/421/0008973821", + "lead": "영어교육·돌봄교실 확대…\"사교육 부담 완화, 국가 수준 돌봄\"", + "body": "영어교육·돌봄교실 확대…\"사교육 부담 완화, 국가 수준 돌봄\"\n\n이민표 국민의힘 증평군수 후보 거리유세.(자료사진)/뉴스1\n\n(증평=뉴스1) 이성기 기자 = 이민표 국민의힘 증평군수 후보가 29일 '아이 키우기 좋은 증평'을 목표로 한 교육·돌봄 공약을 발표했다.\n\n공약은 △공공형 영어교육 환경 조성 △돌봄교실 확대와 프로그램 다양화 두 축으로 구성했다.\n\n영어교육 분야는 영어 독서와 체험 중심의 교육환경을 조성해 아이들이 일상 속에서 자연스럽게 영어를 접하도록 한다는 계획이다.\n\n지역 공공형 영어교육 인프라도 구축해 학부모의 교육비 부담을 완화하고, 아이와 부모가 함께 이용할 수 있는 교육문화 공간으로 확대한다는 구상이다.\n\n돌봄 분야는 초등 돌봄교실 정원을 확대해 대기자를 해소하고, 방과후·저녁·방학까지 이어지는 탄력적인 돌봄체계를 구축한다는 생각이다.\n\n더불어 기존 보호 중심의 돌봄을 넘어 독서·체육·예술·코딩 등 체험형 프로그램을 확대하고, 영어·AI 등 미래형 콘텐츠를 도입해 ‘배움이 있는 돌봄’으로 전환한다는 방침이다.\n\n이 후보는 \"지금 증평은 아이를 키우는 부모 입장에서 교육과 돌봄에 대한 부담이 적지 않다\"며 \"아이들은 안전하게 성장하고 부모는 안심할 수 있는 증평을 반드시 만들겠다\"고 강조했다.\n\n이민표 후보는 최근 어린이, 청년, 어르신, 원도심 활성화 등 분야별 공약을 잇따라 발표하며 정책 선거 이미지 부각에 노력하고 있다.", + "htmlBody": "

영어교육·돌봄교실 확대…"사교육 부담 완화, 국가 수준 돌봄"

\"이민표

이민표 국민의힘 증평군수 후보 거리유세.(자료사진)/뉴스1

(증평=뉴스1) 이성기 기자 = 이민표 국민의힘 증평군수 후보가 29일 '아이 키우기 좋은 증평'을 목표로 한 교육·돌봄 공약을 발표했다.

공약은 △공공형 영어교육 환경 조성 △돌봄교실 확대와 프로그램 다양화 두 축으로 구성했다.

영어교육 분야는 영어 독서와 체험 중심의 교육환경을 조성해 아이들이 일상 속에서 자연스럽게 영어를 접하도록 한다는 계획이다.

지역 공공형 영어교육 인프라도 구축해 학부모의 교육비 부담을 완화하고, 아이와 부모가 함께 이용할 수 있는 교육문화 공간으로 확대한다는 구상이다.

돌봄 분야는 초등 돌봄교실 정원을 확대해 대기자를 해소하고, 방과후·저녁·방학까지 이어지는 탄력적인 돌봄체계를 구축한다는 생각이다.

더불어 기존 보호 중심의 돌봄을 넘어 독서·체육·예술·코딩 등 체험형 프로그램을 확대하고, 영어·AI 등 미래형 콘텐츠를 도입해 ‘배움이 있는 돌봄’으로 전환한다는 방침이다.

이 후보는 "지금 증평은 아이를 키우는 부모 입장에서 교육과 돌봄에 대한 부담이 적지 않다"며 "아이들은 안전하게 성장하고 부모는 안심할 수 있는 증평을 반드시 만들겠다"고 강조했다.

이민표 후보는 최근 어린이, 청년, 어르신, 원도심 활성화 등 분야별 공약을 잇따라 발표하며 정책 선거 이미지 부각에 노력하고 있다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "주목" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:33:32+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-0ca928c2beec9509", + "title": "한동훈 \"하정우, 사전투표도 혼자 못해. 전재수에 큰 짐\"…하정우 \"본인도 모시면 될 일\"", + "sourceLabel": "JTBC", + "url": "https://n.news.naver.com/mnews/article/437/0000493558", + "lead": "28일 오후 부산 동구 부산 MBC에서 열린 북갑 보궐선거 후보자 토론회에서 더불어민주당 하정우(왼쪽부터), 무소속 한동훈, 국민의힘 박민식 후보가 토론에 앞서 파이팅을 외치고 있다. 〈사진=연합뉴스〉", + "body": "28일 오후 부산 동구 부산 MBC에서 열린 북갑 보궐선거 후보자 토론회에서 더불어민주당 하정우(왼쪽부터), 무소속 한동훈, 국민의힘 박민식 후보가 토론에 앞서 파이팅을 외치고 있다. 〈사진=연합뉴스〉\n\n부산 북구갑 보궐선거 한동훈 무소속 후보가 하정우 더불어민주당 후보는 \"투표도 혼자 못한다\"며 공세를 이어갔습니다.\n\n오늘(29일) 오전 7시쯤 부산 북구 만덕 제2동 행정복지센터에서 사전투표를 마친 한 후보는 \"혼자서는 투표도 못 하는 후보로 부산 북구를 이끌 수 없다\"고 말했습니다. 하 후보가 전재수 민주당 부산시장 후보와 같이 사전투표를 한다는 점을 꼬집은 겁니다. 또 \"하 후보가 전재수 후보에게 큰 짐이 되는 것 같다\"고도 비판했습니다.\n\n전날 TV 토론회가 '네거티브 난타전'이었다는 평가에 대해서는 다른 두 후보의 잘못이라는 취지로 답했습니다. \"하 후보가 토론회에서 신경질적인 반응을 많이 보였다\"며 자신의 질문에 '검사가 취조하는 것 같다'고 말한 것 등을 언급했습니다. 또 박민식 국민의힘 후보에 대해서는 \"명백한 허위사실 유포까지 했다\"며 \"현명한 북구 주민들이 잘 판단하실 것이라고 생각한다\"고 덧붙였습니다.\n\n오전 11시 쯤 사전투표를 마치고 기자들을 만난 하 후보는 한 후보의 지적을 맞받아쳤습니다. 자신이 전 후보와 함께 투표에 나선 이유 \"협업해서 (부산 북구를) 발전시키겠다는 상징성을 말씀드리고 싶은 것\"이라며, 한 후보를 향해 \"본인도 하실 수 있으면 모셔서 하면 됐을 것 아닌가\"라고 말했습니다.", + "htmlBody": "
\"28일

28일 오후 부산 동구 부산 MBC에서 열린 북갑 보궐선거 후보자 토론회에서 더불어민주당 하정우(왼쪽부터), 무소속 한동훈, 국민의힘 박민식 후보가 토론에 앞서 파이팅을 외치고 있다. 〈사진=연합뉴스〉

부산 북구갑 보궐선거 한동훈 무소속 후보가 하정우 더불어민주당 후보는 "투표도 혼자 못한다"며 공세를 이어갔습니다.

오늘(29일) 오전 7시쯤 부산 북구 만덕 제2동 행정복지센터에서 사전투표를 마친 한 후보는 "혼자서는 투표도 못 하는 후보로 부산 북구를 이끌 수 없다"고 말했습니다. 하 후보가 전재수 민주당 부산시장 후보와 같이 사전투표를 한다는 점을 꼬집은 겁니다. 또 "하 후보가 전재수 후보에게 큰 짐이 되는 것 같다"고도 비판했습니다.

전날 TV 토론회가 '네거티브 난타전'이었다는 평가에 대해서는 다른 두 후보의 잘못이라는 취지로 답했습니다. "하 후보가 토론회에서 신경질적인 반응을 많이 보였다"며 자신의 질문에 '검사가 취조하는 것 같다'고 말한 것 등을 언급했습니다. 또 박민식 국민의힘 후보에 대해서는 "명백한 허위사실 유포까지 했다"며 "현명한 북구 주민들이 잘 판단하실 것이라고 생각한다"고 덧붙였습니다.

오전 11시 쯤 사전투표를 마치고 기자들을 만난 하 후보는 한 후보의 지적을 맞받아쳤습니다. 자신이 전 후보와 함께 투표에 나선 이유 "협업해서 (부산 북구를) 발전시키겠다는 상징성을 말씀드리고 싶은 것"이라며, 한 후보를 향해 "본인도 하실 수 있으면 모셔서 하면 됐을 것 아닌가"라고 말했습니다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:33:46+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-ce6cb155208f0789", + "title": "문재인 전 대통령, 오중기 경북지사 후보에 300만원 후원", + "sourceLabel": "조선비즈", + "url": "https://n.news.naver.com/mnews/article/366/0001168005", + "lead": "정청래 더불어민주당 대표가 28일 오후 경북 김천시 혁신도시에서 열린 합동유세에서 오중기 경북지사 후보(왼쪽)와 나영민 김천시장 후보의 손을 잡고 시민들에게 인사하고 있다./뉴스1 문재인 전 대통령이 오중기 더불어민주당 경북지사 후보에게 300만원을 후원했다.", + "body": "정청래 더불어민주당 대표가 28일 오후 경북 김천시 혁신도시에서 열린 합동유세에서 오중기 경북지사 후보(왼쪽)와 나영민 김천시장 후보의 손을 잡고 시민들에게 인사하고 있다./뉴스1 문재인 전 대통령이 오중기 더불어민주당 경북지사 후보에게 300만원을 후원했다.\n\n29일 오중기 후보 선거본부에 따르면, 문 전 대통령은 최근 오 후보의 후원회 계좌로 300만원을 후원했다. 오 후보는 문 전 대통령 재임 당시 청와대 선임행정관을 지냈다.\n\n오 후보 측은 이날까지 후원자 수가 이미 4000명을 돌파했고, 후원회 모금액도 계속 늘어나고 있다고 밝혔다. 공식 유튜브 채널인 ‘오중기TV’ 구독자 수도 5만4400명을 넘었다.\n\n오 후보는 이재명 대통령과 문재인 전 대통령, 경북도민 그리고 전국에서 보내주신 국민 여러분의 뜨거운 성원은 정체된 경북을 반드시 대전환시키라는 준엄한 명령”이라며 “전국에서 모인 민심의 무게를 무겁게 받들어 사전투표부터 기세를 이어가 이번 지방선거에서 반드시 승리로 보답하겠다”고 했다.", + "htmlBody": "
\"정청래

정청래 더불어민주당 대표가 28일 오후 경북 김천시 혁신도시에서 열린 합동유세에서 오중기 경북지사 후보(왼쪽)와 나영민 김천시장 후보의 손을 잡고 시민들에게 인사하고 있다./뉴스1 문재인 전 대통령이 오중기 더불어민주당 경북지사 후보에게 300만원을 후원했다.

29일 오중기 후보 선거본부에 따르면, 문 전 대통령은 최근 오 후보의 후원회 계좌로 300만원을 후원했다. 오 후보는 문 전 대통령 재임 당시 청와대 선임행정관을 지냈다.

오 후보 측은 이날까지 후원자 수가 이미 4000명을 돌파했고, 후원회 모금액도 계속 늘어나고 있다고 밝혔다. 공식 유튜브 채널인 ‘오중기TV’ 구독자 수도 5만4400명을 넘었다.

오 후보는 이재명 대통령과 문재인 전 대통령, 경북도민 그리고 전국에서 보내주신 국민 여러분의 뜨거운 성원은 정체된 경북을 반드시 대전환시키라는 준엄한 명령”이라며 “전국에서 모인 민심의 무게를 무겁게 받들어 사전투표부터 기세를 이어가 이번 지방선거에서 반드시 승리로 보답하겠다”고 했다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:14+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-7df171e3272116d7", + "title": "한국투자증권, 오트원과", + "sourceLabel": "한국경제", + "url": "https://n.news.naver.com/mnews/article/015/0005292826", + "lead": "사진=(좌) 김도현 한국투자증권 개인고객그룹장, (우) 서영우 오트원 대표 한국금융지주 자회사 한국투자증권(사장 김성환)이 AI 전문기업 오트원과 AI 금융 서비스 고도화를 위한 업무협약을 체결했다고 29일 밝혔다.", + "body": "사진=(좌) 김도현 한국투자증권 개인고객그룹장, (우) 서영우 오트원 대표 한국금융지주 자회사 한국투자증권(사장 김성환)이 AI 전문기업 오트원과 AI 금융 서비스 고도화를 위한 업무협약을 체결했다고 29일 밝혔다.\n\n오트원은 주식 관련 뉴스 및 주가 상관관계 등 금융 데이터를 벡터화해 금융 도메인에 최적화된 RAG(검색 증강 생성) 아키텍처를 구현하는 기업이다. AI가 생성하는 정보의 오류인 ‘환각 현상’을 최소화하고, 단순 키워드 검색을 넘어 문맥과 의미를 파악하는 시맨틱 검색 기술에 강점을 보유하고 있다.\n\n한국투자증권은 지난 3월부터 오트원의 기술을 적용해 모바일 트레이딩 시스템(MTS) 내 ‘AI 시황, 지금 시장은?’ 서비스를 제공하고 있다. 장전, 장중, 장마감 등 시간대별로 핵심 시황 정보를 요약해 제공하는 해당 서비스는 출시 10영업일 만에 조회수 120만 회를 기록했고, 한 달 만에 1000만 회를 돌파했다고 회사 측은 전했다.\n\n이번 협약을 계기로 한국투자증권은 AI 기술을 활용한 투자 서비스를 고도화할 계획이다. 개별 종목의 심층 분석 정보를 제공하는 ‘AI 종목분석’ 서비스를 추가로 선보이는 한편, 대규모언어모델(LLM) 기반의 대화형 AI 서비스 도입을 위한 작업도 추진한다. 이를 통해 투자자들에게 자연스러운 대화를 나누며 시장과 종목 정보를 탐색할 수 있는 투자 경험을 제공하는 것이 목표다.\n\n김도현 한국투자증권 개인고객그룹장은 “투자자들이 빠르게 변화하는 시장 상황에서 핵심 정보를 적시에 확인하고 합리적인 투자 판단을 내릴 수 있도록 MTS 혁신을 지속해 나갈 것”이라고 밝혔다.\n\n김성혜 한경닷컴 기자 shkimmy@hankyung.com", + "htmlBody": "
\"사진=(좌)

사진=(좌) 김도현 한국투자증권 개인고객그룹장, (우) 서영우 오트원 대표 한국금융지주 자회사 한국투자증권(사장 김성환)이 AI 전문기업 오트원과 AI 금융 서비스 고도화를 위한 업무협약을 체결했다고 29일 밝혔다.

오트원은 주식 관련 뉴스 및 주가 상관관계 등 금융 데이터를 벡터화해 금융 도메인에 최적화된 RAG(검색 증강 생성) 아키텍처를 구현하는 기업이다. AI가 생성하는 정보의 오류인 ‘환각 현상’을 최소화하고, 단순 키워드 검색을 넘어 문맥과 의미를 파악하는 시맨틱 검색 기술에 강점을 보유하고 있다.

한국투자증권은 지난 3월부터 오트원의 기술을 적용해 모바일 트레이딩 시스템(MTS) 내 ‘AI 시황, 지금 시장은?’ 서비스를 제공하고 있다. 장전, 장중, 장마감 등 시간대별로 핵심 시황 정보를 요약해 제공하는 해당 서비스는 출시 10영업일 만에 조회수 120만 회를 기록했고, 한 달 만에 1000만 회를 돌파했다고 회사 측은 전했다.

이번 협약을 계기로 한국투자증권은 AI 기술을 활용한 투자 서비스를 고도화할 계획이다. 개별 종목의 심층 분석 정보를 제공하는 ‘AI 종목분석’ 서비스를 추가로 선보이는 한편, 대규모언어모델(LLM) 기반의 대화형 AI 서비스 도입을 위한 작업도 추진한다. 이를 통해 투자자들에게 자연스러운 대화를 나누며 시장과 종목 정보를 탐색할 수 있는 투자 경험을 제공하는 것이 목표다.

김도현 한국투자증권 개인고객그룹장은 “투자자들이 빠르게 변화하는 시장 상황에서 핵심 정보를 적시에 확인하고 합리적인 투자 판단을 내릴 수 있도록 MTS 혁신을 지속해 나갈 것”이라고 밝혔다.

김성혜 한경닷컴 기자 shkimmy@hankyung.com

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "주목" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:18+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-4fce5f326052d330", + "title": "김진태 “우 후보 공약인 정자리 어디인가”…우상호 답 못해", + "sourceLabel": "동아일보", + "url": "https://n.news.naver.com/mnews/article/020/0003723270", + "lead": "6·3 지방선거 강원도지사 선거에 출마한 우상호 더불어민주당 후보(왼쪽)와 김진태 국민의힘 후보. 뉴시스 더불어민주당 우상호 강원도지사 후보가 사전투표를 하루 앞둔 28일 TV토론회에서 자신의 공약에 대해 제대로 답변하지 못했다. 우 후보는 자신의 공약인 정자리 관광단지 개발과 관련해 어느 지역인지를 묻는 국민의힘 김진태 강원도지사 후보 질문에 40초 넘게 준비한 자료만 뒤적였다.", + "body": "6·3 지방선거 강원도지사 선거에 출마한 우상호 더불어민주당 후보(왼쪽)와 김진태 국민의힘 후보. 뉴시스 더불어민주당 우상호 강원도지사 후보가 사전투표를 하루 앞둔 28일 TV토론회에서 자신의 공약에 대해 제대로 답변하지 못했다. 우 후보는 자신의 공약인 정자리 관광단지 개발과 관련해 어느 지역인지를 묻는 국민의힘 김진태 강원도지사 후보 질문에 40초 넘게 준비한 자료만 뒤적였다.\n\n김 후보는 28일 G1 방송이 생중계한 강원도지사 후보자 TV토론에서 우 후보에게 “정자리 관광단지(부지가)가 어디인가”라고 물었다. 자료를 살펴보던 우 후보는 6초 만에 “관광 산업을 획기적으로 키워나갈 생각”이라고 했다. 김 후보는 재차 “정자리가 어디 있는가? 지난 번에는 홍제동 가지고 그러시더니”라고 꼬집었다. 앞서 우 후보는 이달 11일 토론회에서 “(강원) 원주에 홍제동이 있다”고 했다. 이에 김 후보는 “강릉에 홍제동이 있다”고 바로잡았고, 우 후보는 ”깜빡했다“며 사과했다.\n\n우 후보가 정자리 관광단지 위치를 답하지 못한 채 약 43초간 자료만 들춰보자 김 후보는 ”우 후보가 공약으로 내신 것“이라며 ”아유, 참 그러니까 제가 그냥 가르쳐 드리겠다. 한참 뒤적뒤적하시는데 뭐 모르실 수도 있다. 인제다, 인제“라고 했다. 그제서야 우 후보는 ”네, 맞다“고 말했다.\n\n6·3 지방선거 강원도지사에 출마한 우상호 더불어민주당 후보(사진 왼쪽)와 김진태 국민의힘 후보. G1방송 유튜브 캡처 우 후보는 마무리 발언에서 ”강원도의 세부적 사정에 대해서 밝지 못한 측면이 있다더라도 양해해 달라“면서도 ”일은 세부적인 사실 관계의 문제보다도 중앙정부와의 관계와 이 문제를 풀어갈 수 있는 능력 등으로 이뤄진다고 생각한다“고 강조했다. 김 후보는 ”유권자 집에 배달된 선거 공보물, 후보도 모르는 내용인데 굳이 보실 필요가 있겠나 싶다“며 ”좀 너무 하다“고 말했다.", + "htmlBody": "
\"6·3

6·3 지방선거 강원도지사 선거에 출마한 우상호 더불어민주당 후보(왼쪽)와 김진태 국민의힘 후보. 뉴시스 더불어민주당 우상호 강원도지사 후보가 사전투표를 하루 앞둔 28일 TV토론회에서 자신의 공약에 대해 제대로 답변하지 못했다. 우 후보는 자신의 공약인 정자리 관광단지 개발과 관련해 어느 지역인지를 묻는 국민의힘 김진태 강원도지사 후보 질문에 40초 넘게 준비한 자료만 뒤적였다.

김 후보는 28일 G1 방송이 생중계한 강원도지사 후보자 TV토론에서 우 후보에게 “정자리 관광단지(부지가)가 어디인가”라고 물었다. 자료를 살펴보던 우 후보는 6초 만에 “관광 산업을 획기적으로 키워나갈 생각”이라고 했다. 김 후보는 재차 “정자리가 어디 있는가? 지난 번에는 홍제동 가지고 그러시더니”라고 꼬집었다. 앞서 우 후보는 이달 11일 토론회에서 “(강원) 원주에 홍제동이 있다”고 했다. 이에 김 후보는 “강릉에 홍제동이 있다”고 바로잡았고, 우 후보는 ”깜빡했다“며 사과했다.

우 후보가 정자리 관광단지 위치를 답하지 못한 채 약 43초간 자료만 들춰보자 김 후보는 ”우 후보가 공약으로 내신 것“이라며 ”아유, 참 그러니까 제가 그냥 가르쳐 드리겠다. 한참 뒤적뒤적하시는데 뭐 모르실 수도 있다. 인제다, 인제“라고 했다. 그제서야 우 후보는 ”네, 맞다“고 말했다.

\"6·3

6·3 지방선거 강원도지사에 출마한 우상호 더불어민주당 후보(사진 왼쪽)와 김진태 국민의힘 후보. G1방송 유튜브 캡처 우 후보는 마무리 발언에서 ”강원도의 세부적 사정에 대해서 밝지 못한 측면이 있다더라도 양해해 달라“면서도 ”일은 세부적인 사실 관계의 문제보다도 중앙정부와의 관계와 이 문제를 풀어갈 수 있는 능력 등으로 이뤄진다고 생각한다“고 강조했다. 김 후보는 ”유권자 집에 배달된 선거 공보물, 후보도 모르는 내용인데 굳이 보실 필요가 있겠나 싶다“며 ”좀 너무 하다“고 말했다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:18+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-8707c648586a3d60", + "title": "고양꽃박람회 정기 종합감사 실시", + "sourceLabel": "서울신문", + "url": "https://n.news.naver.com/mnews/article/081/0003648062", + "lead": "고양시청 전경 경기 고양특례시가 오는 6월 15일부터 26일까지 고양국제박람회재단을 대상으로 정기 종합감사를 실시한다고 29일 밝혔다.", + "body": "고양시청 전경 경기 고양특례시가 오는 6월 15일부터 26일까지 고양국제박람회재단을 대상으로 정기 종합감사를 실시한다고 29일 밝혔다.\n\n이번 감사에서는 주요 사업의 예산 집행과 관리 적정성, 임직원 채용·복무 등 인사 운영, 회계·재정 관리, 기관 민원 처리 등을 중점 점검할 예정이다.\n\n시는 감사의 투명성을 높이기 위해 다음달 12일까지 시민 제보도 받는다. 제보 대상은 불합리한 규제, 제도 개선 사항, 위법·부당 사례 등이다.\n\n제보는 고양시 감사관실 전화(031-8075-2147), 팩스(031-8075-4905), 이메일(wktmalss@korea.kr), 고양시청 누리집 민원신고센터를 통해 가능하다. 다만 가명·무기명 제보와 수사·재판 관련 사항, 사적 권리 분쟁 등은 접수 대상에서 제외된다.\n\n시 관계자는 “기관 운영 전반을 철저히 점검해 공정성과 투명성을 강화하겠다”고 밝혔다.", + "htmlBody": "

내달 12일 까지 시민 제보도 접수

\"고양시청

고양시청 전경 경기 고양특례시가 오는 6월 15일부터 26일까지 고양국제박람회재단을 대상으로 정기 종합감사를 실시한다고 29일 밝혔다.

이번 감사에서는 주요 사업의 예산 집행과 관리 적정성, 임직원 채용·복무 등 인사 운영, 회계·재정 관리, 기관 민원 처리 등을 중점 점검할 예정이다.

시는 감사의 투명성을 높이기 위해 다음달 12일까지 시민 제보도 받는다. 제보 대상은 불합리한 규제, 제도 개선 사항, 위법·부당 사례 등이다.

제보는 고양시 감사관실 전화(031-8075-2147), 팩스(031-8075-4905), 이메일(wktmalss@korea.kr), 고양시청 누리집 민원신고센터를 통해 가능하다. 다만 가명·무기명 제보와 수사·재판 관련 사항, 사적 권리 분쟁 등은 접수 대상에서 제외된다.

시 관계자는 “기관 운영 전반을 철저히 점검해 공정성과 투명성을 강화하겠다”고 밝혔다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:18+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-62462d88358adbff", + "title": "구윤철 “6300호 성남 신규택지 1년 앞당겨 2029년 착공”", + "sourceLabel": "조선일보", + "url": "https://n.news.naver.com/mnews/article/023/0003979169", + "lead": "구윤철 부총리 겸 재정경제부 장관은 “6300호 규모의 (경기) 성남 신규 택지는 계획 수립 절차를 통합하는 등 추진 일정을 가속화해, 착공 시기를 당초 계획인 2030년에서 2029년으로 1년 앞당긴다”고 29일 밝혔다.", + "body": "구윤철 부총리 겸 재정경제부 장관은 “6300호 규모의 (경기) 성남 신규 택지는 계획 수립 절차를 통합하는 등 추진 일정을 가속화해, 착공 시기를 당초 계획인 2030년에서 2029년으로 1년 앞당긴다”고 29일 밝혔다.\n\n구윤철 부총리 겸 재정경제부 장관이 29일 정부서울청사에서 부동산관계장관회의 겸 주택공급촉진관계장관회의를 주재하고 있다. /뉴시스 구 부총리는 이날 정부서울청사에서 부동산관계장관회의 겸 주택공급촉진 관계장관회의를 열고 “정부는 정책의 최우선 순위를 주택 공급 확대와 조기 착공에 두고 총력을 다하고 있다”며 이같이 밝혔다.\n\n정부는 지난 1·29 공급 대책에서 성남 신규 택지 등 공급 방안을 발표했는데, 이 지역 착공 시기를 앞당기겠다고 한 것이다. 구 부총리는 앞서 지난 15일에도 서울 노원구 태릉 골프장 부지(6800가구 공급 예정)의 주택 착공 시점을 2029년으로 1년 앞당기는 등 주택 공급에 속도를 내겠다고 밝혔었다.\n\n구 부총리는 이날 또 “2800호 규모의 (서울) 동대문구, 은평구 부지도 기관별 이전 계획을 연내 조속하게 수립하는 등 관련 절차를 빠르게 추진할 계획”이라고 했다.\n\n그는 “주택 사업 현장의 걸림돌을 확실히 제거하여, 최대한 빠르게 착공이 이뤄지도록 하겠다”고도 했다. 서울·경기 등 수도권 규제 지역에서 10만호가량의 주택 착공이 프로젝트 파이낸싱(PF) 자금 조달이나 자재 수급 애로, 공사비 상승 등의 사유로 1년 이상 지연되고 있는 상황을 해결하기 위해 국토교통부와 지자체 등이 참여하는 ‘범정부 주택 공급 현장 애로 해소 지원 센터’를 이날부터 가동한다고 했다.\n\n구 부총리는 이날 회의에서 “공급 정책의 실효성을 저해하는 부동산 불법행위 대응에도 만전을 기하겠다”고도 했다. 이미 국토부를 중심으로 1·29 공급 방안에 포함된 신규 주택 공급지 인근 투기의심 거래를 집중 조사하고 있으며, 수도권 규제 지역 등 43단지 2만5000세대에 대한 부정 청약 의심 사례 전수 조사·검증도 진행 중이라고 그는 밝혔다.", + "htmlBody": "

구윤철 부총리 겸 재정경제부 장관은 “6300호 규모의 (경기) 성남 신규 택지는 계획 수립 절차를 통합하는 등 추진 일정을 가속화해, 착공 시기를 당초 계획인 2030년에서 2029년으로 1년 앞당긴다”고 29일 밝혔다.

\"구윤철

구윤철 부총리 겸 재정경제부 장관이 29일 정부서울청사에서 부동산관계장관회의 겸 주택공급촉진관계장관회의를 주재하고 있다. /뉴시스 구 부총리는 이날 정부서울청사에서 부동산관계장관회의 겸 주택공급촉진 관계장관회의를 열고 “정부는 정책의 최우선 순위를 주택 공급 확대와 조기 착공에 두고 총력을 다하고 있다”며 이같이 밝혔다.

정부는 지난 1·29 공급 대책에서 성남 신규 택지 등 공급 방안을 발표했는데, 이 지역 착공 시기를 앞당기겠다고 한 것이다. 구 부총리는 앞서 지난 15일에도 서울 노원구 태릉 골프장 부지(6800가구 공급 예정)의 주택 착공 시점을 2029년으로 1년 앞당기는 등 주택 공급에 속도를 내겠다고 밝혔었다.

구 부총리는 이날 또 “2800호 규모의 (서울) 동대문구, 은평구 부지도 기관별 이전 계획을 연내 조속하게 수립하는 등 관련 절차를 빠르게 추진할 계획”이라고 했다.

그는 “주택 사업 현장의 걸림돌을 확실히 제거하여, 최대한 빠르게 착공이 이뤄지도록 하겠다”고도 했다. 서울·경기 등 수도권 규제 지역에서 10만호가량의 주택 착공이 프로젝트 파이낸싱(PF) 자금 조달이나 자재 수급 애로, 공사비 상승 등의 사유로 1년 이상 지연되고 있는 상황을 해결하기 위해 국토교통부와 지자체 등이 참여하는 ‘범정부 주택 공급 현장 애로 해소 지원 센터’를 이날부터 가동한다고 했다.

구 부총리는 이날 회의에서 “공급 정책의 실효성을 저해하는 부동산 불법행위 대응에도 만전을 기하겠다”고도 했다. 이미 국토부를 중심으로 1·29 공급 방안에 포함된 신규 주택 공급지 인근 투기의심 거래를 집중 조사하고 있으며, 수도권 규제 지역 등 43단지 2만5000세대에 대한 부정 청약 의심 사례 전수 조사·검증도 진행 중이라고 그는 밝혔다.

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "주목" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:19+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-51f565c29ad8c029", + "title": "청년미래적금 최고 연 19.4% 효과…내달 22일 출시", + "sourceLabel": "더팩트", + "url": "https://n.news.naver.com/mnews/article/629/0000503386", + "lead": "5대은행·기업·우정본부, 최대 3%p 우대금리", + "body": "5대은행·기업·우정본부, 최대 3%p 우대금리\n\n이억원 금융위원장이 지난 1월 28일 오전 서울 종로구 정부서울청사에서 열린 출입기자단 월례 간담회에 참석해 발언을 하고 있다. /임영무 기자\n\n[더팩트ㅣ이선영 기자] 만 19세부터 34세의 청년층 자산 형성을 돕기 위한 정책금융상품인 청년미래적금이 내달 22일 출시될 예정이다. 기본금리와 우대금리, 정부 기여금 및 비과세 혜택을 모두 반영할 경우 최고 연 19% 수준의 적금 효과를 누릴 것으로 기대된다.\n\n29일 금융위원회에 따르면 청년미래적금 취급 기관은 이날 기관별 우대금리 세부 사항 등 금리 수준을 은행연합회 소비자포털에 공시했다.\n\n청년미래적금은 3년 고정금리 상품으로 전 취급기관 공통 기본금리 5%에 기관별 최대 우대금리 2~3%를 더해 최고 7~8% 금리가 적용된다.\n\n농협·신한·우리·하나·기업·국민은행과 우정사업본부는 최대 3%포인트(p), 수협·iM·부산·광주·전북·경남·카카오뱅크는 최대 2%포인트의 우대금리를 각각 제공한다.\n\n공통 우대금리로는 총급여 3600만 원(종합소득금액 2600만원) 이하 청년에게 0.5%포인트, '청년 모두를 위한 재무상담' 이수자에게 0.2%포인트가 주어진다.\n\n기관별 추가 우대금리는 급여이체·카드 이용·자동이체 등 금융거래 실적에 따라 차등 적용된다. 세부 금리는 은행연합회 소비자포털에서 확인할 수 있다.\n\n금리에 정부 기여금과 이자소득 비과세 혜택까지 합산하면 실질 가입 효과는 일반형 기준 최대 13.2~14.4%, 우대형 18.2~19.4% 수준 단리 적금상품에 가입하는 것과 유사한 수준이다.\n\n매달 50만원씩 3년간 납입할 경우 금리 8% 기준으로 일반형은 약 2138만원(원금 1800만원·기여금 108만원·이자 230만원), 우대형은 약 2255만원(원금 1800만원·기여금 216만원·이자 239만원)을 수령할 수 있다.\n\n청년미래적금은 내달 22일 출시를 목표로 하고 있다. 현재 금융위와 관계기관은 전산 시스템 구축 및 전산 연계 테스트 등 출시 준비를 마무리하는 중이다.\n\n취급 기관은 토스뱅크를 제외한 14개 기관이 6월 22일 동시 출시한다. 토스뱅크는 전산 구축 일정에 따라 12월에 별도 출시할 예정이다.\n\n가입 신청은 출시일인 6월 22일부터 7월 3일까지 2주간 진행된다. 첫 5영업일(6월 22~26일)은 출생 연도 끝자리에 따른 5부제가 적용되며 다음 주 5영업일(6월 29일~7월 3일)은 출생 연도와 무관하게 누구나 신청할 수 있다.\n\n금융위는 \"청년들이 궁금해하는 사항을 취합해 청년도약계좌 특별중도해지를 통한 갈아타기 등에 대해 상세히 안내할 예정\"이라고 말했다.\n\n발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write", + "htmlBody": "

5대은행·기업·우정본부, 최대 3%p 우대금리

\"이억원

이억원 금융위원장이 지난 1월 28일 오전 서울 종로구 정부서울청사에서 열린 출입기자단 월례 간담회에 참석해 발언을 하고 있다. /임영무 기자

[더팩트ㅣ이선영 기자] 만 19세부터 34세의 청년층 자산 형성을 돕기 위한 정책금융상품인 청년미래적금이 내달 22일 출시될 예정이다. 기본금리와 우대금리, 정부 기여금 및 비과세 혜택을 모두 반영할 경우 최고 연 19% 수준의 적금 효과를 누릴 것으로 기대된다.

29일 금융위원회에 따르면 청년미래적금 취급 기관은 이날 기관별 우대금리 세부 사항 등 금리 수준을 은행연합회 소비자포털에 공시했다.

청년미래적금은 3년 고정금리 상품으로 전 취급기관 공통 기본금리 5%에 기관별 최대 우대금리 2~3%를 더해 최고 7~8% 금리가 적용된다.

농협·신한·우리·하나·기업·국민은행과 우정사업본부는 최대 3%포인트(p), 수협·iM·부산·광주·전북·경남·카카오뱅크는 최대 2%포인트의 우대금리를 각각 제공한다.

공통 우대금리로는 총급여 3600만 원(종합소득금액 2600만원) 이하 청년에게 0.5%포인트, '청년 모두를 위한 재무상담' 이수자에게 0.2%포인트가 주어진다.

기관별 추가 우대금리는 급여이체·카드 이용·자동이체 등 금융거래 실적에 따라 차등 적용된다. 세부 금리는 은행연합회 소비자포털에서 확인할 수 있다.

금리에 정부 기여금과 이자소득 비과세 혜택까지 합산하면 실질 가입 효과는 일반형 기준 최대 13.2~14.4%, 우대형 18.2~19.4% 수준 단리 적금상품에 가입하는 것과 유사한 수준이다.

매달 50만원씩 3년간 납입할 경우 금리 8% 기준으로 일반형은 약 2138만원(원금 1800만원·기여금 108만원·이자 230만원), 우대형은 약 2255만원(원금 1800만원·기여금 216만원·이자 239만원)을 수령할 수 있다.

청년미래적금은 내달 22일 출시를 목표로 하고 있다. 현재 금융위와 관계기관은 전산 시스템 구축 및 전산 연계 테스트 등 출시 준비를 마무리하는 중이다.

취급 기관은 토스뱅크를 제외한 14개 기관이 6월 22일 동시 출시한다. 토스뱅크는 전산 구축 일정에 따라 12월에 별도 출시할 예정이다.

가입 신청은 출시일인 6월 22일부터 7월 3일까지 2주간 진행된다. 첫 5영업일(6월 22~26일)은 출생 연도 끝자리에 따른 5부제가 적용되며 다음 주 5영업일(6월 29일~7월 3일)은 출생 연도와 무관하게 누구나 신청할 수 있다.

금융위는 "청년들이 궁금해하는 사항을 취합해 청년도약계좌 특별중도해지를 통한 갈아타기 등에 대해 상세히 안내할 예정"이라고 말했다.

발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:20+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-9fd03ef6efe3d3a9", + "title": "산업부, K-전기기기 현장 점검…해외 수출 지원 약속", + "sourceLabel": "아이뉴스24", + "url": "https://n.news.naver.com/mnews/article/031/0001031819", + "lead": "여한구 통상본부장 HD현대일렉트릭 방문 무역보험 공급 규모 275조원으로 확대 여한구 산업통상부 통상교섭본부장은 정부 출범 1주년을 계기로 29일 HD현대일레트릭을 방문해 수출 현장을 점검하고 전기기기 업계와 간담회를 진행했다.", + "body": "여한구 통상본부장 HD현대일렉트릭 방문 무역보험 공급 규모 275조원으로 확대 여한구 산업통상부 통상교섭본부장은 정부 출범 1주년을 계기로 29일 HD현대일레트릭을 방문해 수출 현장을 점검하고 전기기기 업계와 간담회를 진행했다.\n\nHD현대일렉트릭의 전력 변압기. [사진=HD현대일렉트릭]\n\nHD현대일레트릭은 글로벌 변압기 시장 6위 기업으로, 매출의 77%를 수출에서 창출하고 있다. 지난해에는 국내 전기기기 업계 최초로 ‘10억불 수출의 탑’을 수상했다.\n\n간담회에 참석한 기업들은 국제정세 불안 속에서도 안정적인 기업 활동과 수출을 이어갈 수 있도록 원부자재 공급망 안정화 지원 등을 요청했다.\n\n산업부는 전기기기를 비롯한 주요 산업의 수출 호조세 유지를 위해 무역보험 공급 규모를 올해 역대 최대인 275조원으로 확대할 계획이다.\n\n이 가운데 114조원은 중소·중견기업에 공급한다. 또 원전·방산·전기기기 등 대규모 프로젝트 지원을 위해 향후 5년간 127조원의 금융 지원과 이행성 보증도 제공할 방침이다.\n\n특히 산업부는 글로벌 AI 데이터센터 확산에 따른 전력 인프라 수요 증가에 맞춰 프로젝트 발굴부터 기업 매칭, 금융 지원까지 전 과정을 지원해 우리 기업의 해외 수주 확대를 뒷받침할 계획이다.\n\n여한구 통상교섭본부장은 “국제정세 불안 속에서도 우리 전기기기 산업이 독보적인 기술력으로 세계시장을 주도하고 있다”며 “무역금융 지원 확대와 주요국과의 통상 채널을 통해 우리 기업들의 글로벌 활동 무대를 넓히는 데 최선을 다하겠다”고 밝혔다.", + "htmlBody": "

여한구 통상본부장 HD현대일렉트릭 방문 무역보험 공급 규모 275조원으로 확대 여한구 산업통상부 통상교섭본부장은 정부 출범 1주년을 계기로 29일 HD현대일레트릭을 방문해 수출 현장을 점검하고 전기기기 업계와 간담회를 진행했다.

\"HD현대일렉트릭의

HD현대일렉트릭의 전력 변압기. [사진=HD현대일렉트릭]

HD현대일레트릭은 글로벌 변압기 시장 6위 기업으로, 매출의 77%를 수출에서 창출하고 있다. 지난해에는 국내 전기기기 업계 최초로 ‘10억불 수출의 탑’을 수상했다.

간담회에 참석한 기업들은 국제정세 불안 속에서도 안정적인 기업 활동과 수출을 이어갈 수 있도록 원부자재 공급망 안정화 지원 등을 요청했다.

산업부는 전기기기를 비롯한 주요 산업의 수출 호조세 유지를 위해 무역보험 공급 규모를 올해 역대 최대인 275조원으로 확대할 계획이다.

이 가운데 114조원은 중소·중견기업에 공급한다. 또 원전·방산·전기기기 등 대규모 프로젝트 지원을 위해 향후 5년간 127조원의 금융 지원과 이행성 보증도 제공할 방침이다.

특히 산업부는 글로벌 AI 데이터센터 확산에 따른 전력 인프라 수요 증가에 맞춰 프로젝트 발굴부터 기업 매칭, 금융 지원까지 전 과정을 지원해 우리 기업의 해외 수주 확대를 뒷받침할 계획이다.

여한구 통상교섭본부장은 “국제정세 불안 속에서도 우리 전기기기 산업이 독보적인 기술력으로 세계시장을 주도하고 있다”며 “무역금융 지원 확대와 주요국과의 통상 채널을 통해 우리 기업들의 글로벌 활동 무대를 넓히는 데 최선을 다하겠다”고 밝혔다.

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:22+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-ce561327d0bbec1c", + "title": "한국투자MySuper알아서펀드 시리즈, 순자산액 5000억 넘어", + "sourceLabel": "뉴시스", + "url": "https://n.news.naver.com/mnews/article/003/0013976106", + "lead": "[서울=뉴시스] 강수윤 기자 = 한국투자신탁운용은 한국투자마이슈퍼(MySuper)알아서펀드 시리즈의 순자산액이 5000억원을 넘어섰다고 29일 밝혔다.", + "body": "[서울=뉴시스] 강수윤 기자 = 한국투자신탁운용은 한국투자마이슈퍼(MySuper)알아서펀드 시리즈의 순자산액이 5000억원을 넘어섰다고 29일 밝혔다.\n\n금융정보업체 에프앤가이드에 따르면 전일 종가 기준 한국투자마이슈퍼 알아서펀드 시리즈의 합산 순자산액은 5027억원을 기록했다. 안정적인 장기 성과를 바탕으로 투자자 자금이 꾸준히 유입되고 있다고 회사 측은 전했다.\n\n특히 한국투자MySuper알아서성장형펀드(혼합-재간접형)(O 클래스)는 국내 설정된 해외혼합형 해외자산배분 공모펀드(설정액 100억 이상) 가운데 최근 3년 수익률 126.63%로 동일 유형 펀드 중 가장 높았다. 최근 2년 수익률 역시 최상위권을 기록하며 장단기 구간에서 안정적인 성과 흐름을 이어가고 있다.\n\n한국투자MySuper알아서펀드 시리즈는 올해 초 이후 합산 설정액이 854억원 증가했다. 특히 디폴트옵션과 퇴직연금 계좌를 중심으로 꾸준한 자금 유입이 나타났다. 디폴트옵션 전용 클래스(O 클래스)는 480억원이 들어오며 전체 클래스 중 가장 큰 증가폭을 기록했다. 퇴직연금 온라인 전용 클래스(C-Re 클래스) 역시 약 280억원 증가해 안정적인 자금 유입세를 이어갔다.\n\n한국투자MySuper알아서펀드 시리즈는 연금 선진국으로 꼽히는 호주의 연금제도 '마이슈퍼(MySuper)'를 벤치마킹한 자산배분형 공모펀드다. 소비자물가지수(CPI)를 상회하는 실질 수익 추구를 목표로 글로벌 주식과 채권은 물론 물가와 연관성이 높은 자산에도 분산 투자한다.\n\n강성수 한투운용 솔루션본부장은 \"장기간 안정적인 수익률을 기록하며 연금 투자자를 중심으로 꾸준한 자금 유입이 이어진 결과 순자산액 5000억원을 돌파했다\"며 \"글로벌 자산배분 전략을 바탕으로 장기 투자에 적합한 상품 경쟁력을 지속적으로 강화해 나갈 계획\"이라고 말했다.", + "htmlBody": "
\"기사

[서울=뉴시스] 강수윤 기자 = 한국투자신탁운용은 한국투자마이슈퍼(MySuper)알아서펀드 시리즈의 순자산액이 5000억원을 넘어섰다고 29일 밝혔다.

금융정보업체 에프앤가이드에 따르면 전일 종가 기준 한국투자마이슈퍼 알아서펀드 시리즈의 합산 순자산액은 5027억원을 기록했다. 안정적인 장기 성과를 바탕으로 투자자 자금이 꾸준히 유입되고 있다고 회사 측은 전했다.

특히 한국투자MySuper알아서성장형펀드(혼합-재간접형)(O 클래스)는 국내 설정된 해외혼합형 해외자산배분 공모펀드(설정액 100억 이상) 가운데 최근 3년 수익률 126.63%로 동일 유형 펀드 중 가장 높았다. 최근 2년 수익률 역시 최상위권을 기록하며 장단기 구간에서 안정적인 성과 흐름을 이어가고 있다.

한국투자MySuper알아서펀드 시리즈는 올해 초 이후 합산 설정액이 854억원 증가했다. 특히 디폴트옵션과 퇴직연금 계좌를 중심으로 꾸준한 자금 유입이 나타났다. 디폴트옵션 전용 클래스(O 클래스)는 480억원이 들어오며 전체 클래스 중 가장 큰 증가폭을 기록했다. 퇴직연금 온라인 전용 클래스(C-Re 클래스) 역시 약 280억원 증가해 안정적인 자금 유입세를 이어갔다.

한국투자MySuper알아서펀드 시리즈는 연금 선진국으로 꼽히는 호주의 연금제도 '마이슈퍼(MySuper)'를 벤치마킹한 자산배분형 공모펀드다. 소비자물가지수(CPI)를 상회하는 실질 수익 추구를 목표로 글로벌 주식과 채권은 물론 물가와 연관성이 높은 자산에도 분산 투자한다.

강성수 한투운용 솔루션본부장은 "장기간 안정적인 수익률을 기록하며 연금 투자자를 중심으로 꾸준한 자금 유입이 이어진 결과 순자산액 5000억원을 돌파했다"며 "글로벌 자산배분 전략을 바탕으로 장기 투자에 적합한 상품 경쟁력을 지속적으로 강화해 나갈 계획"이라고 말했다.

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:36+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-974145ed50b04b9a", + "title": "부산 제조업 AI 전환 본격화…스마트제조 AX 협의체 출범", + "sourceLabel": "뉴시스", + "url": "https://n.news.naver.com/mnews/article/003/0013976107", + "lead": "[부산=뉴시스] 부산지방중소벤처기업청 청사 전경. (사진=부산중기청 제공) *재판매 및 DB 금지 [부산=뉴시스]원동화 기자 = 부산지방중소벤처기업청은 부산지역 제조산업의 인공지능 전환(AX)을 촉진하고 스마트제조 생태계 활성화를 위해 '부산지역 스마트제조 AX 협의체'를 출범했다고 29일 밝혔다.", + "body": "[부산=뉴시스] 부산지방중소벤처기업청 청사 전경. (사진=부산중기청 제공) *재판매 및 DB 금지 [부산=뉴시스]원동화 기자 = 부산지방중소벤처기업청은 부산지역 제조산업의 인공지능 전환(AX)을 촉진하고 스마트제조 생태계 활성화를 위해 '부산지역 스마트제조 AX 협의체'를 출범했다고 29일 밝혔다.\n\n협의체 출범식은 이날 부산테크노파크 엄궁단지에서 열렸다.\n\n부산은 조선기자재와 자동차부품, 기계금속 등 전통 제조업 기반이 두터운 지역으로 제조기업 대부분이 중소기업으로 구성돼 있다. 최근 인구 감소 등에 따른 현장 인력난이 심화되면서 제조공정의 자동화와 지능화 필요성이 커지고 있다.\n\n부산중기청에 따르면 부산지역 스마트공장 구축기업은 2025년 기준 2166개사로 전국의 약 5.6%를 차지한다. 이 가운데 고도화 단계 기업은 539개사, 기초 단계 기업은 1627개사로 집계됐다.\n\n또 스마트공장 사업관리시스템에 등록된 부산지역 공급기업은 총 176개사로 정보화 분야 기업 비중이 가장 높고 자동화·지능화·연결화 분야 기업이 뒤를 잇고 있다.\n\n협의체에는 부산중기청과 부산테크노파크를 비롯해 중소벤처기업진흥공단, 기술보증기금, 소상공인시장진흥공단, 부산창조경제혁신센터, 부산신용보증재단, 중소기업중앙회, 스마트제조기술기업 부산지역협의회 등 9개 유관기관과 단체가 참여한다.\n\n협의체는 지역 제조기업의 인공지능 도입과 스마트공장 고도화를 지원하고, 수요기업과 공급기업 간 연계 및 협력체계 구축에 나설 계획이다.\n\n이청일 부산중기청장은 \"부산은 제조업 사업체 비중이 전국 평균보다 높고 제조 중소기업이 밀집한 지역인 만큼 AI 도입을 통한 공정혁신 필요성이 크다\"며 \"AX 협의체를 통해 공급기업의 우수한 기술력과 수요기업의 현장 과제를 맞춤형으로 연결해 부산이 스마트제조 혁신의 선도 모델로 자리매김할 수 있도록 적극 지원하겠다\"고 말했다.", + "htmlBody": "

9개 유관기관 참여 거버넌스 구축

\"[부산=뉴시스]

[부산=뉴시스] 부산지방중소벤처기업청 청사 전경. (사진=부산중기청 제공) *재판매 및 DB 금지 [부산=뉴시스]원동화 기자 = 부산지방중소벤처기업청은 부산지역 제조산업의 인공지능 전환(AX)을 촉진하고 스마트제조 생태계 활성화를 위해 '부산지역 스마트제조 AX 협의체'를 출범했다고 29일 밝혔다.

협의체 출범식은 이날 부산테크노파크 엄궁단지에서 열렸다.

부산은 조선기자재와 자동차부품, 기계금속 등 전통 제조업 기반이 두터운 지역으로 제조기업 대부분이 중소기업으로 구성돼 있다. 최근 인구 감소 등에 따른 현장 인력난이 심화되면서 제조공정의 자동화와 지능화 필요성이 커지고 있다.

부산중기청에 따르면 부산지역 스마트공장 구축기업은 2025년 기준 2166개사로 전국의 약 5.6%를 차지한다. 이 가운데 고도화 단계 기업은 539개사, 기초 단계 기업은 1627개사로 집계됐다.

또 스마트공장 사업관리시스템에 등록된 부산지역 공급기업은 총 176개사로 정보화 분야 기업 비중이 가장 높고 자동화·지능화·연결화 분야 기업이 뒤를 잇고 있다.

협의체에는 부산중기청과 부산테크노파크를 비롯해 중소벤처기업진흥공단, 기술보증기금, 소상공인시장진흥공단, 부산창조경제혁신센터, 부산신용보증재단, 중소기업중앙회, 스마트제조기술기업 부산지역협의회 등 9개 유관기관과 단체가 참여한다.

협의체는 지역 제조기업의 인공지능 도입과 스마트공장 고도화를 지원하고, 수요기업과 공급기업 간 연계 및 협력체계 구축에 나설 계획이다.

이청일 부산중기청장은 "부산은 제조업 사업체 비중이 전국 평균보다 높고 제조 중소기업이 밀집한 지역인 만큼 AI 도입을 통한 공정혁신 필요성이 크다"며 "AX 협의체를 통해 공급기업의 우수한 기술력과 수요기업의 현장 과제를 맞춤형으로 연결해 부산이 스마트제조 혁신의 선도 모델로 자리매김할 수 있도록 적극 지원하겠다"고 말했다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "주목" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:38+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-a5d959a27f876f8a", + "title": "권오을 \"민주유공자법", + "sourceLabel": "뉴스1", + "url": "https://n.news.naver.com/mnews/article/421/0008973823", + "lead": "\"박종철·이한열도 국가유공자 아니라서 놀라\"", + "body": "\"박종철·이한열도 국가유공자 아니라서 놀라\"\n\n권오을 국가보훈부 장관이 29일 오전 서울 용산구 국방컨벤션센터에서 열린 국가보훈부 출입기자단 정책간담회에 참석해 모두 발언을하고 있다.(국가보훈부 제공)\n\n(서울=뉴스1) 허고운 김예원 김기성 기자 = 권오을 국가보훈부 장관은 29일 '민주유공자 예우에 관한 법률'(민주유공자법) 제정을 최우선 입법 과제로 추진하겠다고 밝히며 \"정서적 반대를 이유로 입법을 반대하는 것은 이해하기 어렵다\"라고 밝혔다.\n\n권 장관은 29일 서울 용산구 국방컨벤션에서 열린 국민주권 정부 출범 1주년 출입기자단 정책간담회에서 \"제가 장관이 되고 가장 놀란 부분이 박종철, 이한열, 전태일 이분들이 현재 국가유공자가 아니라는 것\"이라며 \"정무적 판단을 존중하겠지만 후반기 국회가 구성되면 민주유공자법을 가장 우선순위로 처리하려고 한다\"라고 말했다.\n\n그는 \"김대중·노무현·문재인 정부를 거쳐 이재명 정부까지 민주 진영 대통령이 네 번째인데 왜 유공자가 안 됐을까 하는 아쉬움이 있었다\"라며 \"이제는 국가가 책임 있게 예우해야 할 때\"라고 강조했다.\n\n민주유공자법은 4·19혁명과 5·18민주화운동이 아닌 6월 민주항쟁 등 민주화운동 과정에서 사망하거나 부상당한 이들을 국가유공자로 인정하고 유족에 대한 지원을 제공하는 내용을 담고 있다.\n\n현재 국회 본회의 처리를 앞두고 있는 이 법안은 지난 2024년 윤석열 정부 당시 재의요구권(거부권) 행사 대상이 됐다. 당시 국가보훈부는 동의대 사건, 남민전(남조선민족해방전선) 사건 관련자나 국가보안법 위반자 등이 유공자로 인정될 수 있다며 반대 입장을 낸 바 있다.\n\n이에 대해 권 장관은 \"논란이 됐던 남민전 관련 문제는 대법원에서 무죄 판결이 났고, 동의대 사건도 실제 부상이 있고 부상 등급 기준이 적용된다\"라며 \"나머지 부분에 대해선 야당에서도 큰 반대가 없다\"라고 설명했다.\n\n그는 이어 \"법사위나 정무위에서 느끼는 것은 정서적 반대가 있는 것 같다\"라며 \"6·10항쟁의 기폭제가 되고 87년 헌정체제를 만든 분들인데, 이에 대해 반대하는 것은 이해하기 어렵다\"라고 밝혔다.\n\n권 장관은 이어 \"국민의힘에도 지방선거 이후 만나서 정서적 반대를 이유로 반대하지 않았으면 좋겠다고 요청할 것\"이라며 야당 설득 의지를 드러냈다.\n\n권오을 국가보훈부 장관이 29일 정책간담회에서 발언하고 있다.(국가보훈부 제공)\n\n민주유공자법 통과 시 적용 대상은 민주화보상법과 부마항쟁보상법에 따라 민주화운동 관련자로 인정된 사망·실종·부상자 가운데 상이 등급 판정을 받은 635명 수준이 될 전망이다.\n\n권 장관은 \"감옥 간 사람, 해직된 사람, 정신질환을 앓은 사람 등도 피해자지만 현재 포함되지 않는다\"라며 \"우리가 봐도 참 '빡세게' 인원을 정했다는 생각이 든다\"라고 말했다.\n\n민주유공자법이 시행되더라도 대규모 재정 부담은 없을 것으로 보훈부는 전망하고 있다. 권 장관은 \"민주화보상법에 따라 경제적 보상은 이미 이뤄졌기 때문에 추가 예산은 크지 않다\"라며 \"요양·양로·의료 지원 정도로 연간 20억원 수준이 소요될 것으로 안다\"라고 설명했다.\n\n권 장관은 민주유공자법과 함께 독립유공자 유족 지원 확대도 주요 과제로 추진하겠다고 밝혔다. 이를 뒷받침하기 위한 독립유공자법이 이달 6일 개정됐고, 내년 1월 1일부로 시행된다.\n\n독립유공자법은 독립유공자 사망시점(광복 전후)과 무관하게 손자녀까지 보상금을 지급하고, 때 늦게 포상된 독립유공자 후손은 최초 수급자부터 최소 2대(代)가 보상받을 수 있도록 하는 내용이 담겼다.\n\n권 장관은 \"독립유공자 후손 가운데 실제 혜택을 받는 범위가 제한적이라는 지적이 꾸준히 제기돼 왔다\"라며 \"독립유공자의 희생과 헌신이 후손 세대까지 제대로 예우받을 수 있도록 보상 범위를 확대하는 방안을 검토하고 있다\"라고 말했다.\n\n또 참전유공자 배우자 지원 확대, 보훈의료 서비스 강화 등 보훈 사각지대 해소 정책도 함께 추진하겠다고 밝혔다.\n\n권 장관은 \"민주유공자법 제정과 독립유공자 유족 지원 확대, 보훈 사각지대 해소는 결국 국민통합의 문제\"라며 \"희생한 분들에 대한 국가의 책임을 다하는 것이 보훈의 본질\"이라고 강조했다.", + "htmlBody": "

"박종철·이한열도 국가유공자 아니라서 놀라"

\"권오을

권오을 국가보훈부 장관이 29일 오전 서울 용산구 국방컨벤션센터에서 열린 국가보훈부 출입기자단 정책간담회에 참석해 모두 발언을하고 있다.(국가보훈부 제공)

(서울=뉴스1) 허고운 김예원 김기성 기자 = 권오을 국가보훈부 장관은 29일 '민주유공자 예우에 관한 법률'(민주유공자법) 제정을 최우선 입법 과제로 추진하겠다고 밝히며 "정서적 반대를 이유로 입법을 반대하는 것은 이해하기 어렵다"라고 밝혔다.

권 장관은 29일 서울 용산구 국방컨벤션에서 열린 국민주권 정부 출범 1주년 출입기자단 정책간담회에서 "제가 장관이 되고 가장 놀란 부분이 박종철, 이한열, 전태일 이분들이 현재 국가유공자가 아니라는 것"이라며 "정무적 판단을 존중하겠지만 후반기 국회가 구성되면 민주유공자법을 가장 우선순위로 처리하려고 한다"라고 말했다.

그는 "김대중·노무현·문재인 정부를 거쳐 이재명 정부까지 민주 진영 대통령이 네 번째인데 왜 유공자가 안 됐을까 하는 아쉬움이 있었다"라며 "이제는 국가가 책임 있게 예우해야 할 때"라고 강조했다.

민주유공자법은 4·19혁명과 5·18민주화운동이 아닌 6월 민주항쟁 등 민주화운동 과정에서 사망하거나 부상당한 이들을 국가유공자로 인정하고 유족에 대한 지원을 제공하는 내용을 담고 있다.

현재 국회 본회의 처리를 앞두고 있는 이 법안은 지난 2024년 윤석열 정부 당시 재의요구권(거부권) 행사 대상이 됐다. 당시 국가보훈부는 동의대 사건, 남민전(남조선민족해방전선) 사건 관련자나 국가보안법 위반자 등이 유공자로 인정될 수 있다며 반대 입장을 낸 바 있다.

이에 대해 권 장관은 "논란이 됐던 남민전 관련 문제는 대법원에서 무죄 판결이 났고, 동의대 사건도 실제 부상이 있고 부상 등급 기준이 적용된다"라며 "나머지 부분에 대해선 야당에서도 큰 반대가 없다"라고 설명했다.

그는 이어 "법사위나 정무위에서 느끼는 것은 정서적 반대가 있는 것 같다"라며 "6·10항쟁의 기폭제가 되고 87년 헌정체제를 만든 분들인데, 이에 대해 반대하는 것은 이해하기 어렵다"라고 밝혔다.

권 장관은 이어 "국민의힘에도 지방선거 이후 만나서 정서적 반대를 이유로 반대하지 않았으면 좋겠다고 요청할 것"이라며 야당 설득 의지를 드러냈다.

\"권오을

권오을 국가보훈부 장관이 29일 정책간담회에서 발언하고 있다.(국가보훈부 제공)

민주유공자법 통과 시 적용 대상은 민주화보상법과 부마항쟁보상법에 따라 민주화운동 관련자로 인정된 사망·실종·부상자 가운데 상이 등급 판정을 받은 635명 수준이 될 전망이다.

권 장관은 "감옥 간 사람, 해직된 사람, 정신질환을 앓은 사람 등도 피해자지만 현재 포함되지 않는다"라며 "우리가 봐도 참 '빡세게' 인원을 정했다는 생각이 든다"라고 말했다.

민주유공자법이 시행되더라도 대규모 재정 부담은 없을 것으로 보훈부는 전망하고 있다. 권 장관은 "민주화보상법에 따라 경제적 보상은 이미 이뤄졌기 때문에 추가 예산은 크지 않다"라며 "요양·양로·의료 지원 정도로 연간 20억원 수준이 소요될 것으로 안다"라고 설명했다.

권 장관은 민주유공자법과 함께 독립유공자 유족 지원 확대도 주요 과제로 추진하겠다고 밝혔다. 이를 뒷받침하기 위한 독립유공자법이 이달 6일 개정됐고, 내년 1월 1일부로 시행된다.

독립유공자법은 독립유공자 사망시점(광복 전후)과 무관하게 손자녀까지 보상금을 지급하고, 때 늦게 포상된 독립유공자 후손은 최초 수급자부터 최소 2대(代)가 보상받을 수 있도록 하는 내용이 담겼다.

권 장관은 "독립유공자 후손 가운데 실제 혜택을 받는 범위가 제한적이라는 지적이 꾸준히 제기돼 왔다"라며 "독립유공자의 희생과 헌신이 후손 세대까지 제대로 예우받을 수 있도록 보상 범위를 확대하는 방안을 검토하고 있다"라고 말했다.

또 참전유공자 배우자 지원 확대, 보훈의료 서비스 강화 등 보훈 사각지대 해소 정책도 함께 추진하겠다고 밝혔다.

권 장관은 "민주유공자법 제정과 독립유공자 유족 지원 확대, 보훈 사각지대 해소는 결국 국민통합의 문제"라며 "희생한 분들에 대한 국가의 책임을 다하는 것이 보훈의 본질"이라고 강조했다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:43+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-1d9290baf642c5f2", + "title": "정몽규 축구협회장, 월드컵 후 전격 사퇴…\"논란, 내 부덕의 소치\"", + "sourceLabel": "JTBC", + "url": "https://n.news.naver.com/mnews/article/437/0000493559", + "lead": "13년 만에 자리에서 물러나 성명서 \"대표팀 지지 위한 마지막 소임\"", + "body": "13년 만에 자리에서 물러나 성명서 \"대표팀 지지 위한 마지막 소임\"\n\n정몽규 대한축구협회장이 2026 북중미 월드컵 이후 자리에서 물러나겠다고 전격 발표했습니다. 지난 2월, 4선에 성공했지만 임기를 채우지 못하고 물러나게 됐습니다.\n\n[정몽규/대한축구협회장] \"저는 이번 월드컵이 끝난 뒤 축구협회장에서 물러나고자 합니다.\"\n\n여러 논란을 빚었던 정몽규 대한축구협회장이 2026 북중미 월드컵이 끝난 뒤 회장직에서 물러나겠다고 밝혔습니다.\n\n정 회장은 사임 배경에 대해 월드컵 기간 대표팀에 대한 팬들의 전폭적인 지지와 응원을 이끌어내기 위해서라고 밝혔습니다.\n\n[정몽규/대한축구협회장] \"제가 축구협회를 운영하는 동안 여러 가지 논란과 비판이 있었다는 것을 잘 알고 있습니다. 이 모든 것은 제 부덕의 소치라고 생각합니다.\"\n\n사직서는 북중미 월드컵이 폐막하는 오는 7월 19일 이후 제출할 계획입니다.\n\n정 회장은 85%의 지지율로 4선에 성공했지만, 임기를 다 채우지 못하고 자리에서 내려오게 됐습니다.\n\n정 회장은 2013년 제52대 대한축구협회장으로 취임해 13년간 축구협회를 맡아왔습니다.", + "htmlBody": "

13년 만에 자리에서 물러나 성명서 "대표팀 지지 위한 마지막 소임"

정몽규 대한축구협회장이 2026 북중미 월드컵 이후 자리에서 물러나겠다고 전격 발표했습니다. 지난 2월, 4선에 성공했지만 임기를 채우지 못하고 물러나게 됐습니다.

[정몽규/대한축구협회장] "저는 이번 월드컵이 끝난 뒤 축구협회장에서 물러나고자 합니다."

여러 논란을 빚었던 정몽규 대한축구협회장이 2026 북중미 월드컵이 끝난 뒤 회장직에서 물러나겠다고 밝혔습니다.

정 회장은 사임 배경에 대해 월드컵 기간 대표팀에 대한 팬들의 전폭적인 지지와 응원을 이끌어내기 위해서라고 밝혔습니다.

[정몽규/대한축구협회장] "제가 축구협회를 운영하는 동안 여러 가지 논란과 비판이 있었다는 것을 잘 알고 있습니다. 이 모든 것은 제 부덕의 소치라고 생각합니다."

사직서는 북중미 월드컵이 폐막하는 오는 7월 19일 이후 제출할 계획입니다.

정 회장은 85%의 지지율로 4선에 성공했지만, 임기를 다 채우지 못하고 자리에서 내려오게 됐습니다.

정 회장은 2013년 제52대 대한축구협회장으로 취임해 13년간 축구협회를 맡아왔습니다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:44+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-2b56c9dd92be8ee3", + "title": "“당신의 금연 응원합니다”… 센텀종합병원, 건강캠페인", + "sourceLabel": "아시아경제", + "url": "https://n.news.naver.com/mnews/article/277/0005769618", + "lead": "흡연 위험 알리고 금연 실천 센텀종합병원이 세계 금연의 날을 맞아 병원을 찾은 시민들과 임직원을 대상으로 금연 실천 분위기 확산에 나섰다. 병원은 흡연의 위험성을 알리고 건강한 병원 환경 조성을 위해 다양한 홍보 활동을 진행하며 금연의 중요성을 다시 한번 강조했다.", + "body": "흡연 위험 알리고 금연 실천 센텀종합병원이 세계 금연의 날을 맞아 병원을 찾은 시민들과 임직원을 대상으로 금연 실천 분위기 확산에 나섰다. 병원은 흡연의 위험성을 알리고 건강한 병원 환경 조성을 위해 다양한 홍보 활동을 진행하며 금연의 중요성을 다시 한번 강조했다.\n\n센텀종합병원은 29일 세계보건기구(WHO)가 지정한 '세계 금연의 날'을 기념해 병원 내원객과 임직원 등을 대상으로 금연 캠페인을 실시했다고 알렸다.\n\n매년 5월 31일인 세계 금연의 날은 흡연의 유해성을 널리 알리고 금연 실천을 독려하기 위해 WHO가 제정한 날이다.\n\n이번 캠페인은 '담배 연기 없는 건강한 병원 환경' 조성을 목표로 마련됐다. 이날 병원 1층 로비와 옥상 흡연부스 앞에서는 환자와 보호자, 직원 등 내원객들을 대상으로 금연의 필요성을 알리는 홍보 물품과 건강 리플렛 등을 배부하며 금연 실천 참여를 독려했다.\n\n특히 병원은 단순한 홍보를 넘어 일상 속 작은 실천이 건강을 바꿀 수 있다는 메시지를 전달하며 시민들과 공감대를 나누는 데 집중했다.\n\n센텀종합병원 박남철 병원장은 \"이번 캠페인을 통해 많은 분이 금연의 중요성을 인식하고 건강한 생활습관을 시작하는 계기가 되길 바란다\"고 말했다.\n\n센텀종합병원은 매년 환자와 지역 주민들의 건강 인식 개선을 위해 다양한 원내 캠페인과 의료 지원 활동을 꾸준히 이어가고 있다.\n\n센텀종합병원 임직원들이 '세계금연의 날'을 맞아 캠페인을 펼치고 있다.", + "htmlBody": "

흡연 위험 알리고 금연 실천 센텀종합병원이 세계 금연의 날을 맞아 병원을 찾은 시민들과 임직원을 대상으로 금연 실천 분위기 확산에 나섰다. 병원은 흡연의 위험성을 알리고 건강한 병원 환경 조성을 위해 다양한 홍보 활동을 진행하며 금연의 중요성을 다시 한번 강조했다.

센텀종합병원은 29일 세계보건기구(WHO)가 지정한 '세계 금연의 날'을 기념해 병원 내원객과 임직원 등을 대상으로 금연 캠페인을 실시했다고 알렸다.

매년 5월 31일인 세계 금연의 날은 흡연의 유해성을 널리 알리고 금연 실천을 독려하기 위해 WHO가 제정한 날이다.

이번 캠페인은 '담배 연기 없는 건강한 병원 환경' 조성을 목표로 마련됐다. 이날 병원 1층 로비와 옥상 흡연부스 앞에서는 환자와 보호자, 직원 등 내원객들을 대상으로 금연의 필요성을 알리는 홍보 물품과 건강 리플렛 등을 배부하며 금연 실천 참여를 독려했다.

특히 병원은 단순한 홍보를 넘어 일상 속 작은 실천이 건강을 바꿀 수 있다는 메시지를 전달하며 시민들과 공감대를 나누는 데 집중했다.

센텀종합병원 박남철 병원장은 "이번 캠페인을 통해 많은 분이 금연의 중요성을 인식하고 건강한 생활습관을 시작하는 계기가 되길 바란다"고 말했다.

센텀종합병원은 매년 환자와 지역 주민들의 건강 인식 개선을 위해 다양한 원내 캠페인과 의료 지원 활동을 꾸준히 이어가고 있다.

\"센텀종합병원

센텀종합병원 임직원들이 '세계금연의 날'을 맞아 캠페인을 펼치고 있다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:44+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-aea431676fdeab5d", + "title": "인사말 하는 김용선 지식재산처장", + "sourceLabel": "연합뉴스", + "url": "https://n.news.naver.com/mnews/article/001/0016107825", + "lead": "(서울=연합뉴스) 김용선 지식재산처장이 29일 서울 강남구 지식재산처 서울사무소에서 열린 2026년 부정경쟁방지법 제도개선위원회 제2차 회의에서 인사말을 하고 있다. 2026.5.29 [지식재산처 제공. 재판매 및 DB 금지]", + "body": "(서울=연합뉴스) 김용선 지식재산처장이 29일 서울 강남구 지식재산처 서울사무소에서 열린 2026년 부정경쟁방지법 제도개선위원회 제2차 회의에서 인사말을 하고 있다. 2026.5.29 [지식재산처 제공. 재판매 및 DB 금지]", + "htmlBody": "
\"기사

(서울=연합뉴스) 김용선 지식재산처장이 29일 서울 강남구 지식재산처 서울사무소에서 열린 2026년 부정경쟁방지법 제도개선위원회 제2차 회의에서 인사말을 하고 있다. 2026.5.29 [지식재산처 제공. 재판매 및 DB 금지]

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:47+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-a09c0cc15c3fd66e", + "title": "\"살아있는 시간 지금부터 30분, 유서 써\"…연인폭행·감금", + "sourceLabel": "뉴시스", + "url": "https://n.news.naver.com/mnews/article/003/0013976108", + "lead": "부산지법, 60대에게 징역 1년 10개월 선고", + "body": "부산지법, 60대에게 징역 1년 10개월 선고\n\n[부산=뉴시스]김민지 기자 = 자신의 연락을 피하는 연인을 흉기로 협박하고 유서 작성까지 강요한 혐의로 재판에 넘겨진 60대에게 실형이 선고됐다.\n\n부산지법 형사7단독 장기석 부장판사는 29일 특수강요 및 감금, 주거침입 등 혐의로 기소된 A(60대)씨에게 징역 1년 10개월을 선고했다.\n\n판결문에 따르면 지인 소개로 알게 된 A씨와 B(60대·여)씨의 교제는 비극이 됐다.\n\n만남 초기 B씨는 A씨에게 약 3000만원을 빌렸다. 이후 B씨는 A씨와 관계를 정리하려 했지만 이 돈은 단절을 어렵게 만들었다.\n\nA씨가 빌려준 돈을 빌미로 계속 연락하며 만날 것을 요구했기 때문이다.\n\n끊어지지 않은 관계는 범죄로 번졌다. 사건이 벌어진 건 2023년 7~8월 사이.\n\nA씨는 자신의 집으로 B씨를 불러들였다. \"다리를 다쳐 깁스해서 움직이지 못하니 집에 와서 도와달라\"는 거짓말로 B씨를 유인했다.\n\n이에 속은 B씨는 A씨의 집에 발을 들였다. 그 순간 A씨는 기다렸다는 듯 장롱 속에 숨겨둔 흉기를 꺼내 들었다. 그리고 B씨의 목과 옆구리에 흉기를 들이대며 겁박했다.\n\n그는 \"네가 살아있는 시간은 지금부터 30분\"이라고 위협하며 \"자식한테 유서를 써라\"고 강요까지 했다.\n\nA씨의 범행은 이에 그치지 않았다. 2024년 5월20일 A씨는 B씨가 자신의 연락을 받지 않자 직접 그의 집을 찾아갔다.\n\n집 근처 계단에 숨어있던 A씨는 B씨가 현관문을 열고 나서자마자 달려가 폭행했다.\n\n그러곤 B씨를 집으로 끌고 들어가 감금했다. 또다시 폭행을 퍼붓고 경찰 신고를 하지 못하게 끔 휴대전화도 빼앗았다.\n\n약 한달 뒤 A씨는 또 B씨의 집을 찾아갔다. 자신이 알고 있던 비밀번호를 도어락에 입력했지만 문이 열리지 않자 다른 번호를 눌러 보길 반복했다.\n\n그 끝에 문은 열렸고 A씨는 B씨의 집에서 한달가량을 머물렀다. B씨가 집에 들어오지 못하게 하면서 말이다.\n\n재판 과정에서 A씨는 자신의 혐의를 부인했다. 흉기를 옆에 두기만 했지 들이밀지 않았고 감금을 하지도 않았다고 주장했다.\n\n장 부장판사는 이를 모두 배척했다. A씨의 혐의 모두에 유죄가 성립된다고 봤다.\n\n장 부장판사는 \"A씨가 피해자를 흉기로 위협하며 유서를 작성하게 해 그 위험성이 상당한 점, 폭력 전과로 여러 차례 처벌받은 전력이 있고 2023년 공무집행방해죄로 징역 8개월에 집행유예 2년을 선고받아 그 집행유예 기간 중 범행을 저지른 점, 피해자로부터 용서받지 못한 점을 참작해 실형을 선고한다\"고 밝혔다.", + "htmlBody": "

부산지법, 60대에게 징역 1년 10개월 선고

\"기사

[부산=뉴시스]김민지 기자 = 자신의 연락을 피하는 연인을 흉기로 협박하고 유서 작성까지 강요한 혐의로 재판에 넘겨진 60대에게 실형이 선고됐다.

부산지법 형사7단독 장기석 부장판사는 29일 특수강요 및 감금, 주거침입 등 혐의로 기소된 A(60대)씨에게 징역 1년 10개월을 선고했다.

판결문에 따르면 지인 소개로 알게 된 A씨와 B(60대·여)씨의 교제는 비극이 됐다.

만남 초기 B씨는 A씨에게 약 3000만원을 빌렸다. 이후 B씨는 A씨와 관계를 정리하려 했지만 이 돈은 단절을 어렵게 만들었다.

A씨가 빌려준 돈을 빌미로 계속 연락하며 만날 것을 요구했기 때문이다.

끊어지지 않은 관계는 범죄로 번졌다. 사건이 벌어진 건 2023년 7~8월 사이.

A씨는 자신의 집으로 B씨를 불러들였다. "다리를 다쳐 깁스해서 움직이지 못하니 집에 와서 도와달라"는 거짓말로 B씨를 유인했다.

이에 속은 B씨는 A씨의 집에 발을 들였다. 그 순간 A씨는 기다렸다는 듯 장롱 속에 숨겨둔 흉기를 꺼내 들었다. 그리고 B씨의 목과 옆구리에 흉기를 들이대며 겁박했다.

그는 "네가 살아있는 시간은 지금부터 30분"이라고 위협하며 "자식한테 유서를 써라"고 강요까지 했다.

A씨의 범행은 이에 그치지 않았다. 2024년 5월20일 A씨는 B씨가 자신의 연락을 받지 않자 직접 그의 집을 찾아갔다.

집 근처 계단에 숨어있던 A씨는 B씨가 현관문을 열고 나서자마자 달려가 폭행했다.

그러곤 B씨를 집으로 끌고 들어가 감금했다. 또다시 폭행을 퍼붓고 경찰 신고를 하지 못하게 끔 휴대전화도 빼앗았다.

약 한달 뒤 A씨는 또 B씨의 집을 찾아갔다. 자신이 알고 있던 비밀번호를 도어락에 입력했지만 문이 열리지 않자 다른 번호를 눌러 보길 반복했다.

그 끝에 문은 열렸고 A씨는 B씨의 집에서 한달가량을 머물렀다. B씨가 집에 들어오지 못하게 하면서 말이다.

재판 과정에서 A씨는 자신의 혐의를 부인했다. 흉기를 옆에 두기만 했지 들이밀지 않았고 감금을 하지도 않았다고 주장했다.

장 부장판사는 이를 모두 배척했다. A씨의 혐의 모두에 유죄가 성립된다고 봤다.

장 부장판사는 "A씨가 피해자를 흉기로 위협하며 유서를 작성하게 해 그 위험성이 상당한 점, 폭력 전과로 여러 차례 처벌받은 전력이 있고 2023년 공무집행방해죄로 징역 8개월에 집행유예 2년을 선고받아 그 집행유예 기간 중 범행을 저지른 점, 피해자로부터 용서받지 못한 점을 참작해 실형을 선고한다"고 밝혔다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:52+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-564d0bc9ff4f1bbb", + "title": "휴머노이드·로봇AI 개발 박차…산업부, 규제 완화하고 5천억 투자", + "sourceLabel": "KBS", + "url": "https://n.news.naver.com/mnews/article/056/0012190502", + "lead": "산업통상부는 오늘(29일) 서울 강서구 로보티즈 본사에서 산·학·연 전문가들과 '제2회 M.AX 컨퍼런스'를 열고 AI 로봇 산업 육성 성과와 향후 정책 방향을 논의했습니다.", + "body": "산업통상부는 오늘(29일) 서울 강서구 로보티즈 본사에서 산·학·연 전문가들과 '제2회 M.AX 컨퍼런스'를 열고 AI 로봇 산업 육성 성과와 향후 정책 방향을 논의했습니다.\n\n산업부는 글로벌 AI·로봇 기술 경쟁이 치열해지는 상황에서 산·학·연 협력 강화를 위해 지난해 M.AX 얼라이언스 AI로봇 분과를 출범시켰습니다.\n\n현재 AI로봇 분과에는 로봇 완제품 기업 외에도, AI기업, 부품기업, 수요기업까지 총 280여 개 기관이 참여하여 로봇 AI모델 개발, 핵심 부품 국산화, 현장 실증 등 다양한 분야에서 협력 중이라고 밝혔습니다.\n\n정부는 올해 기준 로봇 관련 연구개발(R&D)에 1,800억 원, 현장 실증에 760억 원을 투자하고 있습니다.\n\n얼라이언스 출범 이후 AI 기반 4족 용접로봇과 비전AI 기반 축산물 처리 로봇, 자율주행 순찰로봇 등 산업·공공 현장에서 활용되는 사례도 늘고 있습니다.\n\n특히 선박 내부 굴곡 구간 작업이 가능한 4족 용접로봇은 HD현대삼호 현장에 적용되고 있으며, 축산물 처리 로봇은 창녕축산물공판장, 자율주행 순찰로봇은 성남시청에서 실증이 이뤄지고 있습니다.\n\n휴머노이드 분야에서는 선박 격벽구간 화재감시, 유독 환경 내 밸브 조작, 물류센터 상품 재분류 등을 수행하는 산업공정 특화 로봇 개발이 진행 중이며, 정부는 오는 2028년 상용화를 목표로 현장 실증도 병행하고 있다고 밝혔습니다.\n\n산업부는 또 휴머노이드 핵심 부품인 액추에이터와 로봇손 국산화에도 투자하고 있다고 설명했습니다.\n\nKAIST 박해원 교수팀은 자체 액추에이터 기반으로 시속 13km 수준의 기동성을 구현한 휴머노이드 하체 플랫폼을 개발했고, 에이딘로보틱스는 20kg 이상의 하중을 견디면서 촉각 인지 기능을 갖춘 로봇손을 개발 중입니다.\n\nAI 로봇의 두뇌 역할을 하는 로봇 파운데이션 모델 국산화에도 박차를 가하고 있습니다. 산업부는 엔비디아 등 글로벌 기업 제품과 경쟁할 수 있는 국산 모델 개발을 지원하고 있다고 밝혔습니다.\n\n정부는 기술 개발과 함께 규제 개선도 추진하고 있습니다.\n\n지난해 실외이동로봇 운행안전인증 심사 기간을 60일에서 30일로 단축했고, 심사항목도 절반 수준으로 줄였습니다.\n\n앞으로 지정될 로봇 메가특구에서는 AI 모델 학습용 영상 원본 데이터 활용과 실외이동로봇 옥외광고, 소방로봇 도로 운행 특례 등도 허용할 계획입니다.\n\n산업부 관계자는 \"얼라이언스 내 기업 의견을 바탕으로 관계부처와 규제 완화도 적극 추진하고 있다\"며 \"아울러 우수한 기술력을 갖춘 로봇 스타트업 자금조달을 지원하기 위해 산업성장펀드를 5천억원 목표로 조성하고 휴머노이드 분야에 일정 비중 이상을 투자할 계획\"이라고 전했다.\n\n이날 콘퍼런스에서는 기술개발과 실증뿐 아니라 AI 로봇에 필요한 대규모 학습 데이터 생산, 초기 로봇수요 창출이 필요하다는 의견도 제기됐습니다다. 산업부는 정책수립과 예산 논의 과정에서 이를 반영하겠다고 밝혔습니다.\n\n■ 제보하기 ▷ 전화 : 02-781-1234, 4444 ▷ 이메일 : kbs1234@kbs.co.kr ▷ 카카오톡 : 'KBS제보' 검색, 채널 추가 ▷ 유튜브, 다음에서도 KBS뉴스를 구독해주세요!", + "htmlBody": "

산업통상부는 오늘(29일) 서울 강서구 로보티즈 본사에서 산·학·연 전문가들과 '제2회 M.AX 컨퍼런스'를 열고 AI 로봇 산업 육성 성과와 향후 정책 방향을 논의했습니다.

산업부는 글로벌 AI·로봇 기술 경쟁이 치열해지는 상황에서 산·학·연 협력 강화를 위해 지난해 M.AX 얼라이언스 AI로봇 분과를 출범시켰습니다.

현재 AI로봇 분과에는 로봇 완제품 기업 외에도, AI기업, 부품기업, 수요기업까지 총 280여 개 기관이 참여하여 로봇 AI모델 개발, 핵심 부품 국산화, 현장 실증 등 다양한 분야에서 협력 중이라고 밝혔습니다.

정부는 올해 기준 로봇 관련 연구개발(R&D)에 1,800억 원, 현장 실증에 760억 원을 투자하고 있습니다.

얼라이언스 출범 이후 AI 기반 4족 용접로봇과 비전AI 기반 축산물 처리 로봇, 자율주행 순찰로봇 등 산업·공공 현장에서 활용되는 사례도 늘고 있습니다.

특히 선박 내부 굴곡 구간 작업이 가능한 4족 용접로봇은 HD현대삼호 현장에 적용되고 있으며, 축산물 처리 로봇은 창녕축산물공판장, 자율주행 순찰로봇은 성남시청에서 실증이 이뤄지고 있습니다.

휴머노이드 분야에서는 선박 격벽구간 화재감시, 유독 환경 내 밸브 조작, 물류센터 상품 재분류 등을 수행하는 산업공정 특화 로봇 개발이 진행 중이며, 정부는 오는 2028년 상용화를 목표로 현장 실증도 병행하고 있다고 밝혔습니다.

산업부는 또 휴머노이드 핵심 부품인 액추에이터와 로봇손 국산화에도 투자하고 있다고 설명했습니다.

KAIST 박해원 교수팀은 자체 액추에이터 기반으로 시속 13km 수준의 기동성을 구현한 휴머노이드 하체 플랫폼을 개발했고, 에이딘로보틱스는 20kg 이상의 하중을 견디면서 촉각 인지 기능을 갖춘 로봇손을 개발 중입니다.

AI 로봇의 두뇌 역할을 하는 로봇 파운데이션 모델 국산화에도 박차를 가하고 있습니다. 산업부는 엔비디아 등 글로벌 기업 제품과 경쟁할 수 있는 국산 모델 개발을 지원하고 있다고 밝혔습니다.

정부는 기술 개발과 함께 규제 개선도 추진하고 있습니다.

지난해 실외이동로봇 운행안전인증 심사 기간을 60일에서 30일로 단축했고, 심사항목도 절반 수준으로 줄였습니다.

앞으로 지정될 로봇 메가특구에서는 AI 모델 학습용 영상 원본 데이터 활용과 실외이동로봇 옥외광고, 소방로봇 도로 운행 특례 등도 허용할 계획입니다.

산업부 관계자는 "얼라이언스 내 기업 의견을 바탕으로 관계부처와 규제 완화도 적극 추진하고 있다"며 "아울러 우수한 기술력을 갖춘 로봇 스타트업 자금조달을 지원하기 위해 산업성장펀드를 5천억원 목표로 조성하고 휴머노이드 분야에 일정 비중 이상을 투자할 계획"이라고 전했다.

이날 콘퍼런스에서는 기술개발과 실증뿐 아니라 AI 로봇에 필요한 대규모 학습 데이터 생산, 초기 로봇수요 창출이 필요하다는 의견도 제기됐습니다다. 산업부는 정책수립과 예산 논의 과정에서 이를 반영하겠다고 밝혔습니다.

■ 제보하기 ▷ 전화 : 02-781-1234, 4444 ▷ 이메일 : kbs1234@kbs.co.kr ▷ 카카오톡 : 'KBS제보' 검색, 채널 추가 ▷ 유튜브, 다음에서도 KBS뉴스를 구독해주세요!

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:35:00+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-900c16d46409c870", + "title": "'광주 여고생 살해' 장윤기, 성폭행·스토킹 혐의 추가", + "sourceLabel": "MBN", + "url": "https://n.news.naver.com/mnews/article/057/0001951419", + "lead": "포토라인 선 '여고생 흉기 살인' 장윤기 / 사진=연합뉴스 밤거리에서 여고생을 흉기로 살해한 장윤기(23)에게 성폭행과 스토킹 혐의가 추가됐습니다.", + "body": "포토라인 선 '여고생 흉기 살인' 장윤기 / 사진=연합뉴스 밤거리에서 여고생을 흉기로 살해한 장윤기(23)에게 성폭행과 스토킹 혐의가 추가됐습니다.\n\n광주 광산경찰서는 살인·살인미수·살인예비 혐의로 구속 송치했던 장 씨에 대해 성폭력범죄의 처벌 등에 관한 특례법 위반(성폭행) 및 스토킹처벌법 위반 혐의를 적용해 추가 송치했다고 오늘(29일) 밝혔습니다.\n\n장 씨는 지난 3일 광주 광산구 월계동에서 아르바이트 동료였던 외국인 여성 A씨를 성폭행하고 여러 차례 스토킹한 혐의를 받습니다.\n\n조사 결과 장 씨는 A씨에게 교제를 요구했다가 거절 당하자 이 같은 범행을 저지른 것으로 드러났습니다.\n\n이후 A씨가 스토킹 신고로 경찰의 신변 보호를 받으며 타 지역으로 이동했고 이를 몰랐던 장 씨는 A씨를 찾으러 광산구 첨단지구 일대를 배회했습니다.\n\nA씨를 발견하지 못한 장 씨는 분풀이 대상을 바꿔 홀로 귀가하던 여고생을 흉기로 찔러 살해했습니다.\n\n이 과정에서 피해 여고생의 비명을 듣고 달려와 제지하려던 남학생에게도 흉기를 휘둘러 다치게 했습니다.\n\n검찰은 앞서 송치된 살인 등 혐의에 대해서도 구속기간을 연장해 보완 수사를 이어가고 있습니다.", + "htmlBody": "

외국인 동료 알바생이 교제 거절하자 범행

\"포토라인

포토라인 선 '여고생 흉기 살인' 장윤기 / 사진=연합뉴스 밤거리에서 여고생을 흉기로 살해한 장윤기(23)에게 성폭행과 스토킹 혐의가 추가됐습니다.

광주 광산경찰서는 살인·살인미수·살인예비 혐의로 구속 송치했던 장 씨에 대해 성폭력범죄의 처벌 등에 관한 특례법 위반(성폭행) 및 스토킹처벌법 위반 혐의를 적용해 추가 송치했다고 오늘(29일) 밝혔습니다.

장 씨는 지난 3일 광주 광산구 월계동에서 아르바이트 동료였던 외국인 여성 A씨를 성폭행하고 여러 차례 스토킹한 혐의를 받습니다.

조사 결과 장 씨는 A씨에게 교제를 요구했다가 거절 당하자 이 같은 범행을 저지른 것으로 드러났습니다.

이후 A씨가 스토킹 신고로 경찰의 신변 보호를 받으며 타 지역으로 이동했고 이를 몰랐던 장 씨는 A씨를 찾으러 광산구 첨단지구 일대를 배회했습니다.

A씨를 발견하지 못한 장 씨는 분풀이 대상을 바꿔 홀로 귀가하던 여고생을 흉기로 찔러 살해했습니다.

이 과정에서 피해 여고생의 비명을 듣고 달려와 제지하려던 남학생에게도 흉기를 휘둘러 다치게 했습니다.

검찰은 앞서 송치된 살인 등 혐의에 대해서도 구속기간을 연장해 보완 수사를 이어가고 있습니다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:35:10+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-c136b9f1aebbf2bd", + "title": "네이버 커넥트재단·서울대, AI 인재 양성 맞손", + "sourceLabel": "전자신문", + "url": "https://n.news.naver.com/mnews/article/030/0003432692", + "lead": "네이버 커넥트재단과 서울대는 지난 26일 서울 관악구 서울대에서 '인공지능(AI) 인재 양성 및 교육 기회 확대를 위한 업무 협약'을 체결했다. 왼쪽부터 공기중 네이버 커넥트재단 이사장과 유홍림 서울대 총장이 협약서를 들어보이고 있다. 〈자료 네이버〉 네이버 커넥트재단과 서울대가 국내 인공지능(AI) 인재 양성을 위한 협력에 나섰다.", + "body": "네이버 커넥트재단과 서울대는 지난 26일 서울 관악구 서울대에서 '인공지능(AI) 인재 양성 및 교육 기회 확대를 위한 업무 협약'을 체결했다. 왼쪽부터 공기중 네이버 커넥트재단 이사장과 유홍림 서울대 총장이 협약서를 들어보이고 있다. 〈자료 네이버〉 네이버 커넥트재단과 서울대가 국내 인공지능(AI) 인재 양성을 위한 협력에 나섰다.\n\n네이버 커넥트재단은 지난 26일 서울 관악구 서울대에서 AI 인재 양성 및 교육 기회 확대를 위해 서울대와 양해각서(MOU)를 교환했다고 29일 밝혔다.\n\n이번 협약으로 커넥트재단과 서울대는 인공지능(AI) 시대에 적합한 교육 프로그램을 공동 개발·운영한다. 다양한 지역 대학생이 양질의 교육을 받도록 지원한다. 공동 연구와 학술 활동으로 새로운 교육 모델 등도 지속 발굴하는 등 협업을 이어갈 예정이다.\n\n양 기관은 전국 거점 국립대 10개 소속 대학생 200명을 대상으로 진행되는 'AI 에이전트 챌린지(AI Agent Challenge)' 프로그램을 시작으로 협력을 확대한다. 서울대 대학연대 지역인재양성사업단과 함께 운영하는 이번 프로그램은 대학생들이 실생활에서 경험하는 문제를 해결할 AI 에이전트를 직접 설계·구축하는 실무형 교육이다. 팀네이버 소속 개발자와 기획자가 멘토로 참여해 그룹 피드백과 특강을 제공할 예정이다.\n\n변상근 기자 sgbyun@etnews.com", + "htmlBody": "
\"네이버

네이버 커넥트재단과 서울대는 지난 26일 서울 관악구 서울대에서 '인공지능(AI) 인재 양성 및 교육 기회 확대를 위한 업무 협약'을 체결했다. 왼쪽부터 공기중 네이버 커넥트재단 이사장과 유홍림 서울대 총장이 협약서를 들어보이고 있다. 〈자료 네이버〉 네이버 커넥트재단과 서울대가 국내 인공지능(AI) 인재 양성을 위한 협력에 나섰다.

네이버 커넥트재단은 지난 26일 서울 관악구 서울대에서 AI 인재 양성 및 교육 기회 확대를 위해 서울대와 양해각서(MOU)를 교환했다고 29일 밝혔다.

이번 협약으로 커넥트재단과 서울대는 인공지능(AI) 시대에 적합한 교육 프로그램을 공동 개발·운영한다. 다양한 지역 대학생이 양질의 교육을 받도록 지원한다. 공동 연구와 학술 활동으로 새로운 교육 모델 등도 지속 발굴하는 등 협업을 이어갈 예정이다.

양 기관은 전국 거점 국립대 10개 소속 대학생 200명을 대상으로 진행되는 'AI 에이전트 챌린지(AI Agent Challenge)' 프로그램을 시작으로 협력을 확대한다. 서울대 대학연대 지역인재양성사업단과 함께 운영하는 이번 프로그램은 대학생들이 실생활에서 경험하는 문제를 해결할 AI 에이전트를 직접 설계·구축하는 실무형 교육이다. 팀네이버 소속 개발자와 기획자가 멘토로 참여해 그룹 피드백과 특강을 제공할 예정이다.

변상근 기자 sgbyun@etnews.com

", + "tags": [ + "네이버뉴스", + "경제" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:35:13+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-3ab56dd419cccc26", + "title": "국가 결산 19조 규모 오류 …국가 채무는 1268조로 증가", + "sourceLabel": "한국일보", + "url": "https://n.news.naver.com/mnews/article/469/0000933442", + "lead": "2025 회계연도 국가결산검사보고서 국회 제출 국가 자산 3593조...부채 2772조 등으로 수정", + "body": "2025 회계연도 국가결산검사보고서 국회 제출 국가 자산 3593조...부채 2772조 등으로 수정\n\n감사원이 2025 회계연도 국가결산 검사 결과 재무제표에서 총 19조 원 규모의 오류를 확인·수정했다고 29일 밝혔다. 지난해 중앙정부 채무는 총 1,286조 1,000억 원으로 나타났다.\n\n감사원은 이날 이 같은 내용이 담긴 2025 회계연도 국가결산검사보고서를 국회에 제출했다. 보고서에 따르면, 지난해 세입·세출 결산은 재정경제부 집계와 감사원 계산이 일치했다. 하지만 자산 항목에서 9조 4,000억 원, 부채 항목에서 4,000억원, 재정운영 결과(재정운영 순원가에서 비교환수익 등을 차감해 산출) 항목에서 9조 2,000억 원 등 총 19조 원 규모의 오류가 발견됐다.\n\n일례로 국세청 미수 국세(상속세·증여세 등) 9조 359억 원이 자산으로 계상되지 않거나, 국토교통부 수도권광역급행철도 구축물이 국유재산(2조 7,860억원)에 등록되지 않았다. 오류 수정으로 뒤 국가자산은 3,593조 4,000억원, 부채는 2,772조원, 재정운영 결과는 64조 원 등으로 각각 조정됐다.\n\n세입과 세출은 각각 597조 9,000억 원과 591조 원으로 나타났다. 결산상 잉여금은 6조 9,000억 원이고, 이 중 세계잉여금은 3조 2,000억 원이었다. 아울러 통합재정수지는 46조 7,000억 원 적자로 전년보다 적자 폭이 3조2,000억 원 확대됐다. 관리재정수지는 104조 2,000억 원 적자로 소폭 개선된 것으로 나타났다.\n\n국가채무는 1,268조 1,000억 원으로, 전년 대비 126조 9,000억 원(11.1%) 증가했다. 국내총생산(GDP) 대비 국가채무 비율도 47.6%로 전년보다 3%포인트 상승했다. 재정경제부가 4월 발표한 금액과 일치한다.\n\n감사원은 이와 별도로 지난해 143개 기관에 대해 결산감사·기관 정기감사를, 49개 사항에 대해 성과·특정·국민제안 감사를 각각 수행했다고 밝혔다. 최근 1년간 지적된 위법·부당 사항은 총 1,383건이다. 이 중 변상 판정·시정·징계·문책 등 요구가 575건, 제도개선 방안 마련 등의 권고·통보가 798건으로 집계됐다.", + "htmlBody": "

2025 회계연도 국가결산검사보고서 국회 제출 국가 자산 3593조...부채 2772조 등으로 수정

\"서울

서울 종로구 감사원 전경. 최주연 기자

감사원이 2025 회계연도 국가결산 검사 결과 재무제표에서 총 19조 원 규모의 오류를 확인·수정했다고 29일 밝혔다. 지난해 중앙정부 채무는 총 1,286조 1,000억 원으로 나타났다.

감사원은 이날 이 같은 내용이 담긴 2025 회계연도 국가결산검사보고서를 국회에 제출했다. 보고서에 따르면, 지난해 세입·세출 결산은 재정경제부 집계와 감사원 계산이 일치했다. 하지만 자산 항목에서 9조 4,000억 원, 부채 항목에서 4,000억원, 재정운영 결과(재정운영 순원가에서 비교환수익 등을 차감해 산출) 항목에서 9조 2,000억 원 등 총 19조 원 규모의 오류가 발견됐다.

일례로 국세청 미수 국세(상속세·증여세 등) 9조 359억 원이 자산으로 계상되지 않거나, 국토교통부 수도권광역급행철도 구축물이 국유재산(2조 7,860억원)에 등록되지 않았다. 오류 수정으로 뒤 국가자산은 3,593조 4,000억원, 부채는 2,772조원, 재정운영 결과는 64조 원 등으로 각각 조정됐다.

세입과 세출은 각각 597조 9,000억 원과 591조 원으로 나타났다. 결산상 잉여금은 6조 9,000억 원이고, 이 중 세계잉여금은 3조 2,000억 원이었다. 아울러 통합재정수지는 46조 7,000억 원 적자로 전년보다 적자 폭이 3조2,000억 원 확대됐다. 관리재정수지는 104조 2,000억 원 적자로 소폭 개선된 것으로 나타났다.

국가채무는 1,268조 1,000억 원으로, 전년 대비 126조 9,000억 원(11.1%) 증가했다. 국내총생산(GDP) 대비 국가채무 비율도 47.6%로 전년보다 3%포인트 상승했다. 재정경제부가 4월 발표한 금액과 일치한다.

감사원은 이와 별도로 지난해 143개 기관에 대해 결산감사·기관 정기감사를, 49개 사항에 대해 성과·특정·국민제안 감사를 각각 수행했다고 밝혔다. 최근 1년간 지적된 위법·부당 사항은 총 1,383건이다. 이 중 변상 판정·시정·징계·문책 등 요구가 575건, 제도개선 방안 마련 등의 권고·통보가 798건으로 집계됐다.

", + "tags": [ + "네이버뉴스", + "정치" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:35:16+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-ae42e3ee1c3d720f", + "title": "살 빼려다 몸 망치는 음주 다이어트…섭식장애 신호일 수도", + "sourceLabel": "전자신문", + "url": "https://n.news.naver.com/mnews/article/030/0003432694", + "lead": "다사랑중앙병원, 공복 음주·단식 반복 위험 경고 체중계 착시 뒤 탈수·영양 불균형 등 합병증 우려", + "body": "다사랑중앙병원, 공복 음주·단식 반복 위험 경고 체중계 착시 뒤 탈수·영양 불균형 등 합병증 우려\n\n다사랑중앙병원 제공. 여름철 체중 관리로 식사를 거른 채 술을 마시거나, 음주 뒤 단식·폭식·구토·과도한 운동을 반복하는 경우 섭식장애와 알코올 문제가 함께 나타나는 신호일 수 있어 주의가 요구된다.\n\n보건복지부 지정 알코올 질환 전문 다사랑중앙병원은 다이어트 과정에서 식사 제한과 음주가 반복될 경우 단순 체중 조절이 아니라 섭식장애와 알코올 사용 장애가 동반된 상태일 수 있다고 29일 밝혔다.\n\n섭식장애는 신경성 식욕부진증, 신경성 폭식증, 폭식장애 등을 포함하는 정신질환이다. 유전적 요인, 신경전달물질 이상, 완벽주의 성향, 외모 중심의 사회적 압박 등이 복합적으로 작용해 발생하는 것으로 알려져 있다.\n\n알코올 사용 장애 치료 현장에서는 섭식장애 증상을 함께 보이는 환자가 적지 않은 것으로 전해졌다. 특히 일부 여성 환자에게서는 체중 증가에 대한 불안으로 식사를 제한하면서도 음주는 지속하거나, 음주 뒤 죄책감으로 단식·폭식·구토·과도한 운동을 반복하는 사례가 관찰된다.\n\n공복 상태에서 술을 마시면 알코올 흡수가 빨라져 혈중알코올농도가 빠르게 오를 수 있다. 식사 제한과 음주가 반복되면 영양 결핍, 탈수, 전해질 불균형 등 신체 합병증 위험이 커지고, 알코올 문제가 지속될 경우 간 기능 저하로 이어질 가능성도 있다.\n\n음주 다음 날 체중이 줄어든 것처럼 보이는 현상도 실제 지방 감소와는 차이가 있다. 알코올의 이뇨 작용으로 체내 수분이 빠져나가 일시적으로 체중이 줄어 보일 수 있기 때문이다.\n\n섭식장애는 우울·불안 등 정신건강 문제와 동반되는 경우가 많고, 자살 위험과도 관련이 있어 조기 발견과 치료가 중요하다. 치료는 영양 결핍과 내과적 합병증 여부를 확인한 뒤 왜곡된 신체상, 우울·불안, 충동조절 문제, 음주 양상 등을 종합적으로 평가하는 방식으로 이뤄진다. 이후 인지행동치료, 약물치료, 영양 재활 등을 병행한다.\n\n안민철 정신건강의학과 원장은 “다이어트와 섭식장애는 구분해야 한다”며 “식사를 제한한 상태에서 음주를 반복하면 섭식장애와 알코올 문제가 함께 악화될 수 있다”고 말했다.\n\n그러면서 “겉으로는 다이어트처럼 보이지만 실제로는 섭식장애와 알코올 문제가 함께 진행되고 있을 수 있다”며 “식사와 음주를 둘러싼 왜곡된 패턴이 반복된다면 전문적인 평가와 치료를 받는 것이 중요하다”고 덧붙였다.\n\n의왕=김동성 기자 estar@etnews.com", + "htmlBody": "

다사랑중앙병원, 공복 음주·단식 반복 위험 경고 체중계 착시 뒤 탈수·영양 불균형 등 합병증 우려

\"다사랑중앙병원

다사랑중앙병원 제공. 여름철 체중 관리로 식사를 거른 채 술을 마시거나, 음주 뒤 단식·폭식·구토·과도한 운동을 반복하는 경우 섭식장애와 알코올 문제가 함께 나타나는 신호일 수 있어 주의가 요구된다.

보건복지부 지정 알코올 질환 전문 다사랑중앙병원은 다이어트 과정에서 식사 제한과 음주가 반복될 경우 단순 체중 조절이 아니라 섭식장애와 알코올 사용 장애가 동반된 상태일 수 있다고 29일 밝혔다.

섭식장애는 신경성 식욕부진증, 신경성 폭식증, 폭식장애 등을 포함하는 정신질환이다. 유전적 요인, 신경전달물질 이상, 완벽주의 성향, 외모 중심의 사회적 압박 등이 복합적으로 작용해 발생하는 것으로 알려져 있다.

알코올 사용 장애 치료 현장에서는 섭식장애 증상을 함께 보이는 환자가 적지 않은 것으로 전해졌다. 특히 일부 여성 환자에게서는 체중 증가에 대한 불안으로 식사를 제한하면서도 음주는 지속하거나, 음주 뒤 죄책감으로 단식·폭식·구토·과도한 운동을 반복하는 사례가 관찰된다.

공복 상태에서 술을 마시면 알코올 흡수가 빨라져 혈중알코올농도가 빠르게 오를 수 있다. 식사 제한과 음주가 반복되면 영양 결핍, 탈수, 전해질 불균형 등 신체 합병증 위험이 커지고, 알코올 문제가 지속될 경우 간 기능 저하로 이어질 가능성도 있다.

음주 다음 날 체중이 줄어든 것처럼 보이는 현상도 실제 지방 감소와는 차이가 있다. 알코올의 이뇨 작용으로 체내 수분이 빠져나가 일시적으로 체중이 줄어 보일 수 있기 때문이다.

섭식장애는 우울·불안 등 정신건강 문제와 동반되는 경우가 많고, 자살 위험과도 관련이 있어 조기 발견과 치료가 중요하다. 치료는 영양 결핍과 내과적 합병증 여부를 확인한 뒤 왜곡된 신체상, 우울·불안, 충동조절 문제, 음주 양상 등을 종합적으로 평가하는 방식으로 이뤄진다. 이후 인지행동치료, 약물치료, 영양 재활 등을 병행한다.

안민철 정신건강의학과 원장은 “다이어트와 섭식장애는 구분해야 한다”며 “식사를 제한한 상태에서 음주를 반복하면 섭식장애와 알코올 문제가 함께 악화될 수 있다”고 말했다.

그러면서 “겉으로는 다이어트처럼 보이지만 실제로는 섭식장애와 알코올 문제가 함께 진행되고 있을 수 있다”며 “식사와 음주를 둘러싼 왜곡된 패턴이 반복된다면 전문적인 평가와 치료를 받는 것이 중요하다”고 덧붙였다.

의왕=김동성 기자 estar@etnews.com

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "상단노출" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:35:17+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-5f9378e92fdb7f1b", + "title": "서울시, 서소문고가 사고 계기 건설현장 특별점검… 공사장 984곳·교량 27곳 대상", + "sourceLabel": "조선일보", + "url": "https://n.news.naver.com/mnews/article/023/0003979170", + "lead": "29일 서울 서대문구 서소문 고가차도 붕괴 사고현장에서 긴급 철거작업이 진행되고 있다. /뉴스1 서울시가 지난 26일 서소문고가 철거 현장 붕괴 사고를 계기로 해체·굴토 공사장과 노후 교량에 대한 특별 안전점검에 나선다.", + "body": "29일 서울 서대문구 서소문 고가차도 붕괴 사고현장에서 긴급 철거작업이 진행되고 있다. /뉴스1 서울시가 지난 26일 서소문고가 철거 현장 붕괴 사고를 계기로 해체·굴토 공사장과 노후 교량에 대한 특별 안전점검에 나선다.\n\n서울시는 다음 달 1일부터 7월 말까지 공공·민간 건설공사장 984곳을 대상으로 특별점검을 실시한다고 29일 밝혔다. 점검 대상은 서울시 발주 공공공사장 114곳과 해체·굴토 등 위험 공정이 진행 중인 민간 공사장 338곳, 우기철 지반침하 우려가 있는 굴착공사장 32곳, 안전관리자를 두지 않은 소규모 공사장 500곳 등이다.\n\n공공공사장은 안전관리계획서가 현장에서 제대로 이행되고 있는지를 중점적으로 점검한다. 작업구역 통제와 가설구조물 설치 상태, 추락·낙하물 방지 조치, 장비 운용 계획, 비상대응체계 등을 살필 예정이다. 민간 공사장은 해체·굴토 등 사고 위험이 큰 공정을 중심으로 구조 검토와 해체계획 준수 여부, 작업구간 통제, 감리·시공 관리 실태 등을 점검한다.\n\n서울시는 또 시내 C등급(보통) 고가·교량 27곳 전체에 대해서도 긴급안전점검을 실시한다. C등급은 안전 등급(A~E) 가운데 일부 부재에 결함이 있어 보수·보강이 필요하지만 시설물 전체 안전에는 지장이 없는 상태다. 점검 결과 물리적·기능적 결함이 확인되면 정밀안전점검을 추가로 진행하고 보수·보강 대책을 마련할 계획이다.\n\n김성보 서울시장 권한대행은 “해체 공사장과 고가·교량 시설물에 대한 시민 우려가 큰 만큼 선제적인 안전점검을 실시하겠다”며 “위험요인이 발견되면 즉시 조치하고 필요하면 통행 제한이나 공사 중지 등 강력한 안전조치도 병행하겠다”고 말했다.\n\n한편 지난 26일 서울 서대문구 서소문고가 철거 현장에서는 안전진단 도중 상판과 비계가 무너지면서 현장 관계자 3명이 숨지고 3명이 다쳤다. 사고를 수사 중인 서울경찰청 광역수사단은 이날 서울시 도시기반시설본부와 시공사·하청업체 사무실 등 7곳에 대해 압수수색을 실시했다. 국토교통부는 고용노동부·행정안전부·서울시·경찰·소방당국 등이 참여하는 중앙산업재해수습본부를 꾸려 잔여 구조물 철거 및 복구 작업을 진행 중이다.", + "htmlBody": "
\"29일

29일 서울 서대문구 서소문 고가차도 붕괴 사고현장에서 긴급 철거작업이 진행되고 있다. /뉴스1 서울시가 지난 26일 서소문고가 철거 현장 붕괴 사고를 계기로 해체·굴토 공사장과 노후 교량에 대한 특별 안전점검에 나선다.

서울시는 다음 달 1일부터 7월 말까지 공공·민간 건설공사장 984곳을 대상으로 특별점검을 실시한다고 29일 밝혔다. 점검 대상은 서울시 발주 공공공사장 114곳과 해체·굴토 등 위험 공정이 진행 중인 민간 공사장 338곳, 우기철 지반침하 우려가 있는 굴착공사장 32곳, 안전관리자를 두지 않은 소규모 공사장 500곳 등이다.

공공공사장은 안전관리계획서가 현장에서 제대로 이행되고 있는지를 중점적으로 점검한다. 작업구역 통제와 가설구조물 설치 상태, 추락·낙하물 방지 조치, 장비 운용 계획, 비상대응체계 등을 살필 예정이다. 민간 공사장은 해체·굴토 등 사고 위험이 큰 공정을 중심으로 구조 검토와 해체계획 준수 여부, 작업구간 통제, 감리·시공 관리 실태 등을 점검한다.

서울시는 또 시내 C등급(보통) 고가·교량 27곳 전체에 대해서도 긴급안전점검을 실시한다. C등급은 안전 등급(A~E) 가운데 일부 부재에 결함이 있어 보수·보강이 필요하지만 시설물 전체 안전에는 지장이 없는 상태다. 점검 결과 물리적·기능적 결함이 확인되면 정밀안전점검을 추가로 진행하고 보수·보강 대책을 마련할 계획이다.

김성보 서울시장 권한대행은 “해체 공사장과 고가·교량 시설물에 대한 시민 우려가 큰 만큼 선제적인 안전점검을 실시하겠다”며 “위험요인이 발견되면 즉시 조치하고 필요하면 통행 제한이나 공사 중지 등 강력한 안전조치도 병행하겠다”고 말했다.

한편 지난 26일 서울 서대문구 서소문고가 철거 현장에서는 안전진단 도중 상판과 비계가 무너지면서 현장 관계자 3명이 숨지고 3명이 다쳤다. 사고를 수사 중인 서울경찰청 광역수사단은 이날 서울시 도시기반시설본부와 시공사·하청업체 사무실 등 7곳에 대해 압수수색을 실시했다. 국토교통부는 고용노동부·행정안전부·서울시·경찰·소방당국 등이 참여하는 중앙산업재해수습본부를 꾸려 잔여 구조물 철거 및 복구 작업을 진행 중이다.

", + "tags": [ + "네이버뉴스", + "사회" + ], + "signals": [ + "주목", + "속보" + ], + "listedDate": "2026-05-29", + "publishedAt": "2026-05-29T14:34:23+09:00" + }, + "createdAt": "2026-05-29T05:35:41.433Z", + "updatedAt": "2026-05-29T05:35:41.433Z" + }, + { + "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", + "article": { + "id": "naver-news-8817adf3650acfe0", + "title": "삼성전자 노사협상 파업 전날 극적 타결…노조 \"총파업 유보\"", + "sourceLabel": "SBS", + "url": "https://n.news.naver.com/mnews/article/055/0001357905", + "lead": "▲ 20일 경기도 수원시 장안구 경기고용노동청에서 열린 삼성전자 임금협상을 마친 후 여명구 삼성전자 DS(디바이스솔루션·반도체 사업 담당) 피플팀장과 최승호 삼성그룹 초기업노동조합 삼성전자지부 위원장이 잠정 합의안에 서명한 후 파이팅을 외치고 있다.", + "body": "▲ 20일 경기도 수원시 장안구 경기고용노동청에서 열린 삼성전자 임금협상을 마친 후 여명구 삼성전자 DS(디바이스솔루션·반도체 사업 담당) 피플팀장과 최승호 삼성그룹 초기업노동조합 삼성전자지부 위원장이 잠정 합의안에 서명한 후 파이팅을 외치고 있다.\n\n삼성전자 노사가 총파업 전날 밤 임금협상 잠정 합의안을 도출하면서 창사 이래 최대 규모가 될 뻔한 파업 사태의 극적 봉합을 눈앞에 두게 됐습니다.\n\n최대 100조 원대 손실과 반도체 생태계 및 공급망 훼손 등 국가적 경제 피해에 대한 우려가 커진 끝에 정부가 적극 중재에 나선 결과, 노사도 한 발씩 물러서 대화를 통한 해결책을 찾았습니다.\n\n이번 잠정 합의안이 노조 찬반투표에서 통과되면 지난해 12월 이후 5개월 넘게 이어진 노사갈등도 최종 마무리될 것으로 보입니다.\n\n삼성전자 노사는 20일 오후 경기도 수원의 노동부 경기고용노동청에서 2026년 임금협상 잠정 합의안에 서명했습니다.\n\n삼성그룹 초기업노동조합 삼성전자지부 최승호 위원장은 \"저희 내부 갈등으로 심려 끼쳐드려 국민 여러분께 송구하다는 말씀을 드린다\"며 \"끝까지 노력해주신 정부와 관계자 여러분, 조합원께 감사드린다\"고 말했습니다.\n\n이어 \"잠정 합의안 찬반투표를 저희의 성적표로 (삼아) 더 나은 초기업노조가 될 수 있도록 하겠다\"고 말했습니다.\n\n삼성전자 DS(반도체 부문) 피플팀장 여명구 부사장은 \"오랜 시간 기다려주신 임직원분들께 죄송하고 감사하다는 말씀을 드리고 싶다.\n\n아울러 노력해주신 노조와 도움 주신 정부 관계자분들께 감사 말씀을 드린다\"고 밝혔습니다.\n\n또한 \"잠정 합의가 상생의 노사문화를 만들어갈 수 있는 출발점이 되도록 하겠다\"며 \"회사는 이 합의사항을 성실히 이행하고 노사 상생을 위해 혼신의 노력을 다하겠다\"고 덧붙였습니다.\n\n이번 협상을 주재한 김영훈 고용노동부 장관은 \"마지막까지 대화의 끈을 놓지 않고 노사 자율교섭으로 잠정 합의에 이르게 됐다는 점에서 깊이 감사한다\"며 \"무엇보다 어려운 대내외 여건 속에서 가슴 졸이고 지켜보고 계셨을 국민들 덕분\"이라고 치하했습니다.\n\n이번 합의 이후 삼성전자 노조 공동투쟁본부는 조합원 대상 투쟁지침을 통해 \"5월 21일~6월 7일 총파업은 추후 별도 지침 시까지 유보한다\"고 공지했습니다.\n\n또한 오는 22일 오후 2시부터 27일 오전 10시까지 잠정 합의안에 대한 찬반 투표를 부칠 예정이라고 전했습니다.\n\n잠정합의안은 투표를 통과해야 합의안 자격을 갖게 됩니다.\n\n삼성전자 노사는 지난 18~20일 진행된 중노위 사후조정에서 이견을 좁히지 못한 끝에 이날 오전 조정이 결렬됐습니다.\n\n노조는 성과급 재원의 70%를 반도체(DS) 부문 전체가 똑같이 나누고 나머지 30%를 사업부별 실적에 따라 차등 지급하자고 요구한 것으로 알려졌습니다.\n\n반면, 사측은 이런 요구대로면 적자 사업부 임직원도 연간 수억 원의 성과급을 받게 된다며, 성과주의 인사 원칙을 훼손해선 안 된다는 입장을 굽히지 않았습니다.\n\n김영훈 고용노동부 장관은 파업을 막기 위해 노사를 설득, 이날 오후 경기도 수원의 노동부 경기고용노동청에서 노사 교섭이 재개됐습니다.\n\n이번 노조 찬반투표가 최종 가결되면 지난 5개월여간 이어진 삼성전자 노사갈등도 종지부를 찍게 됩니다.", + "htmlBody": "
\"기사

▲ 20일 경기도 수원시 장안구 경기고용노동청에서 열린 삼성전자 임금협상을 마친 후 여명구 삼성전자 DS(디바이스솔루션·반도체 사업 담당) 피플팀장과 최승호 삼성그룹 초기업노동조합 삼성전자지부 위원장이 잠정 합의안에 서명한 후 파이팅을 외치고 있다.

삼성전자 노사가 총파업 전날 밤 임금협상 잠정 합의안을 도출하면서 창사 이래 최대 규모가 될 뻔한 파업 사태의 극적 봉합을 눈앞에 두게 됐습니다.

최대 100조 원대 손실과 반도체 생태계 및 공급망 훼손 등 국가적 경제 피해에 대한 우려가 커진 끝에 정부가 적극 중재에 나선 결과, 노사도 한 발씩 물러서 대화를 통한 해결책을 찾았습니다.

이번 잠정 합의안이 노조 찬반투표에서 통과되면 지난해 12월 이후 5개월 넘게 이어진 노사갈등도 최종 마무리될 것으로 보입니다.

삼성전자 노사는 20일 오후 경기도 수원의 노동부 경기고용노동청에서 2026년 임금협상 잠정 합의안에 서명했습니다.

삼성그룹 초기업노동조합 삼성전자지부 최승호 위원장은 "저희 내부 갈등으로 심려 끼쳐드려 국민 여러분께 송구하다는 말씀을 드린다"며 "끝까지 노력해주신 정부와 관계자 여러분, 조합원께 감사드린다"고 말했습니다.

이어 "잠정 합의안 찬반투표를 저희의 성적표로 (삼아) 더 나은 초기업노조가 될 수 있도록 하겠다"고 말했습니다.

삼성전자 DS(반도체 부문) 피플팀장 여명구 부사장은 "오랜 시간 기다려주신 임직원분들께 죄송하고 감사하다는 말씀을 드리고 싶다.

아울러 노력해주신 노조와 도움 주신 정부 관계자분들께 감사 말씀을 드린다"고 밝혔습니다.

또한 "잠정 합의가 상생의 노사문화를 만들어갈 수 있는 출발점이 되도록 하겠다"며 "회사는 이 합의사항을 성실히 이행하고 노사 상생을 위해 혼신의 노력을 다하겠다"고 덧붙였습니다.

이번 협상을 주재한 김영훈 고용노동부 장관은 "마지막까지 대화의 끈을 놓지 않고 노사 자율교섭으로 잠정 합의에 이르게 됐다는 점에서 깊이 감사한다"며 "무엇보다 어려운 대내외 여건 속에서 가슴 졸이고 지켜보고 계셨을 국민들 덕분"이라고 치하했습니다.

이번 합의 이후 삼성전자 노조 공동투쟁본부는 조합원 대상 투쟁지침을 통해 "5월 21일~6월 7일 총파업은 추후 별도 지침 시까지 유보한다"고 공지했습니다.

또한 오는 22일 오후 2시부터 27일 오전 10시까지 잠정 합의안에 대한 찬반 투표를 부칠 예정이라고 전했습니다.

잠정합의안은 투표를 통과해야 합의안 자격을 갖게 됩니다.

삼성전자 노사는 지난 18~20일 진행된 중노위 사후조정에서 이견을 좁히지 못한 끝에 이날 오전 조정이 결렬됐습니다.

노조는 성과급 재원의 70%를 반도체(DS) 부문 전체가 똑같이 나누고 나머지 30%를 사업부별 실적에 따라 차등 지급하자고 요구한 것으로 알려졌습니다.

반면, 사측은 이런 요구대로면 적자 사업부 임직원도 연간 수억 원의 성과급을 받게 된다며, 성과주의 인사 원칙을 훼손해선 안 된다는 입장을 굽히지 않았습니다.

김영훈 고용노동부 장관은 파업을 막기 위해 노사를 설득, 이날 오후 경기도 수원의 노동부 경기고용노동청에서 노사 교섭이 재개됐습니다.

이번 노조 찬반투표가 최종 가결되면 지난 5개월여간 이어진 삼성전자 노사갈등도 종지부를 찍게 됩니다.

", + "tags": [ + "네이버뉴스", + "IT/과학" + ], + "publishedAt": "2026-05-20T14:26:19.000Z" + }, + "createdAt": "2026-05-29T05:35:34.942Z", + "updatedAt": "2026-05-29T05:35:34.942Z" + }, { "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", "article": { @@ -5366,65 +5938,3 @@ } ] } -이 서야 할 자리를 빼앗는 행위"라며 "기득권이 된 일부 강성 노조가 자신들의 파이만 키우는 사이, 미래 세대는 삼성과 같은 일류 기업에서 일할 기회를 잡지 못하고 길거리를 헤매고 있다"고 했다.

장 대표는 "성장이 멈춘 채 분배에만 집착하는 사회는 결코 앞으로 나아갈 수 없다"고 강조했다.

", - "tags": [ - "네이버뉴스", - "정치" - ], - "signals": [ - "상단노출" - ], - "listedDate": "2026-05-21", - "publishedAt": "2026-05-21T08:27:55+09:00" - }, - "createdAt": "2026-05-20T23:30:53.755Z", - "updatedAt": "2026-05-20T23:30:53.755Z" - }, - { - "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", - "article": { - "id": "naver-news-a0444d499a1456e5", - "title": "'전재수와 함께 북구 발전' 내건 하정우 [포토]", - "sourceLabel": "더팩트", - "url": "https://n.news.naver.com/mnews/article/629/0000501065", - "lead": "[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식에 앞서 시민들에게 인사하고 있다.", - "body": "[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식에 앞서 시민들에게 인사하고 있다.\n\n발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write", - "htmlBody": "
\"기사

[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식에 앞서 시민들에게 인사하고 있다.

발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write

", - "tags": [ - "네이버뉴스", - "정치" - ], - "signals": [ - "상단노출" - ], - "listedDate": "2026-05-21", - "publishedAt": "2026-05-21T08:30:08+09:00" - }, - "createdAt": "2026-05-20T23:30:53.755Z", - "updatedAt": "2026-05-20T23:30:53.755Z" - }, - { - "ownerKey": "token:55da11db2e67390bf2bacb861407e697b7e4df64bfb6902d365b4f5856ed084e", - "article": { - "id": "naver-news-9fedaecce4d892be", - "title": "선거운동원에게 인사 건네는 하정우 [포토]", - "sourceLabel": "더팩트", - "url": "https://n.news.naver.com/mnews/article/629/0000501066", - "lead": "[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식을 연 가운데 한 선거운동원에게 인사를 건네고 있다", - "body": "[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식을 연 가운데 한 선거운동원에게 인사를 건네고 있다\n\n발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write", - "htmlBody": "
\"기사

[더팩트 | 부산=박상민 기자] 하정우 더불어민주당 부산 북구갑 국회의원 후보가 21일 오전 부산 북구 구포대교 사거리에서 출정식을 연 가운데 한 선거운동원에게 인사를 건네고 있다

발로 뛰는 더팩트는 24시간 여러분의 제보를 기다립니다. ▶카카오톡: '더팩트제보' 검색 ▶이메일: jebo@tf.co.kr ▶뉴스 홈페이지: http://talk.tf.co.kr/bbs/report/write

", - "tags": [ - "네이버뉴스", - "정치" - ], - "signals": [ - "상단노출" - ], - "listedDate": "2026-05-21", - "publishedAt": "2026-05-21T08:30:10+09:00" - }, - "createdAt": "2026-05-20T23:30:53.755Z", - "updatedAt": "2026-05-20T23:30:53.755Z" - } - ] -} diff --git a/etc/servers/work-server/src/app.ts b/etc/servers/work-server/src/app.ts index 27411b1..90ffd1c 100644 --- a/etc/servers/work-server/src/app.ts +++ b/etc/servers/work-server/src/app.ts @@ -14,6 +14,7 @@ import { registerPlanRoutes } from './routes/plan.js'; import { registerPhotoPrismRoutes } from './routes/photoprism.js'; import { registerReaderRoutes } from './routes/reader.js'; import { registerResourceManagerRoutes } from './routes/resource-manager.js'; +import { registerPlayAppRoutes } from './routes/play-app.js'; import { registerRuntimeRoutes } from './routes/runtime.js'; import { registerServerCommandRoutes } from './routes/server-command.js'; import { registerSchemaRoutes } from './routes/schema.js'; @@ -92,6 +93,7 @@ export function createApp() { app.register(registerNotificationRoutes); app.register(registerPlanRoutes); app.register(registerPhotoPrismRoutes); + app.register(registerPlayAppRoutes); app.register(registerReaderRoutes); app.register(registerResourceManagerRoutes); app.register(registerRuntimeRoutes); diff --git a/etc/servers/work-server/src/routes/play-app.ts b/etc/servers/work-server/src/routes/play-app.ts new file mode 100644 index 0000000..0674a16 --- /dev/null +++ b/etc/servers/work-server/src/routes/play-app.ts @@ -0,0 +1,560 @@ +import type { FastifyInstance } from 'fastify'; +import { z } from 'zod'; +import { db } from '../db/client.js'; + +type PlayAppEnvironment = 'preview' | 'test' | 'prod'; + +type PlayAppSeedEntry = { + id: string; + name: string; + accentClassName: string; + statusLabel: string; + isReady: boolean; + iconName: string; + usagePriority?: number; + supportedEnvironments: PlayAppEnvironment[]; + searchKeywords?: string[]; + searchDescription?: string; +}; + +const PLAY_APP_TABLE = 'play_apps'; +const DEFAULT_ENTRIES: PlayAppSeedEntry[] = [ + { + id: 'baseball-ticket-bay', + name: '야구-티켓베이', + accentClassName: 'apps-library__card--baseball-ticket-bay', + statusLabel: '알림', + isReady: true, + iconName: 'BellOutlined', + usagePriority: 100, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['야구', '티켓베이', 'ticketbay', '야구 티켓', '웹푸시', '알림'], + searchDescription: '팀, 구역, 통로, 가격 조건으로 야구 티켓 알림 조건을 저장하고 테스트 푸시를 보냅니다.', + }, + { + id: 'e-reader', + name: 'E-Reader', + accentClassName: 'apps-library__card--reader', + statusLabel: '읽기', + isReady: true, + iconName: 'BookOutlined', + usagePriority: 80, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['e-reader', 'reader', 'ebook', 'article', 'web article', '기사', '전자책', '리더'], + searchDescription: 'Apps 보관함에서 인터넷 기사와 웹 콘텐츠를 전자책처럼 넘겨 읽습니다.', + }, + { + id: 'photoprism', + name: 'PhotoPrism', + accentClassName: 'apps-library__card--photoprism', + statusLabel: '연결', + isReady: true, + iconName: 'FileImageOutlined', + usagePriority: 70, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['photoprism', 'photo', 'album', 'gallery', '사진 앨범'], + searchDescription: 'Apps 보관함에서 PhotoPrism 앨범과 사진을 단독 앱 형태로 엽니다.', + }, + { + id: 'photo-puzzle', + name: '사진 퍼즐', + accentClassName: 'apps-library__card--puzzle', + statusLabel: '실행', + isReady: true, + iconName: 'PictureOutlined', + usagePriority: 60, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['photo puzzle', '퍼즐', '사진', '슬라이드 퍼즐'], + searchDescription: 'Apps 보관함에서 사진 퍼즐 게임을 바로 실행합니다.', + }, + { + id: 'the-quest', + name: 'The Quest', + accentClassName: 'apps-library__card--the-quest', + statusLabel: '신규', + isReady: true, + iconName: 'ThunderboltOutlined', + usagePriority: 50, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['the quest', 'rpg', 'mobile rpg', 'phaser', 'quest', 'rpg game', '모바일 rpg'], + searchDescription: 'Apps 보관함에서 한국형 모바일 RPG 데모 The Quest를 실행합니다.', + }, + { + id: 'template1', + name: 'Template1', + accentClassName: 'apps-library__card--template1', + statusLabel: '템플릿', + isReady: true, + iconName: 'AppstoreAddOutlined', + usagePriority: 45, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['template1', 'template', '앱 템플릿', '레이아웃', '기본 UI', 'layout'], + searchDescription: '다른 앱 개발 시 공통 레이아웃을 빠르게 적용하기 위한 템플릿 화면입니다.', + }, + { + id: 'tetris', + name: 'Tetris', + accentClassName: 'apps-library__card--tetris', + statusLabel: '실행', + isReady: true, + iconName: 'FundProjectionScreenOutlined', + usagePriority: 40, + supportedEnvironments: ['preview', 'test'], + searchKeywords: ['테트리스', 'block', 'arcade', '블록 게임'], + searchDescription: 'Apps 보관함에서 테트리스 게임을 바로 실행합니다.', + }, + { + id: 'beat-lab', + name: 'Beat Lab', + accentClassName: 'apps-library__card--beat', + statusLabel: '준비', + isReady: false, + iconName: 'SoundOutlined', + usagePriority: 35, + supportedEnvironments: ['preview'], + searchDescription: '향후 추가 예정인 Beat Lab 앱', + }, + { + id: 'sticker-booth', + name: 'Sticker Booth', + accentClassName: 'apps-library__card--sticker', + statusLabel: '준비', + isReady: false, + iconName: 'StarOutlined', + usagePriority: 30, + supportedEnvironments: ['preview'], + searchDescription: '향후 추가 예정인 Sticker Booth 앱', + }, + { + id: 'launch-note', + name: 'Launch Note', + accentClassName: 'apps-library__card--launch', + statusLabel: '예정', + isReady: false, + iconName: 'RocketOutlined', + usagePriority: 20, + supportedEnvironments: ['preview'], + searchDescription: '향후 추가 예정인 Launch Note 앱', + }, + { + id: 'arcade-pack', + name: 'Arcade Pack', + accentClassName: 'apps-library__card--arcade', + statusLabel: '예정', + isReady: false, + iconName: 'FireOutlined', + usagePriority: 10, + supportedEnvironments: ['preview'], + searchDescription: '향후 추가 예정인 Arcade Pack 앱', + }, + { + id: 'app-vault', + name: 'App Vault', + accentClassName: 'apps-library__card--vault', + statusLabel: '테마', + isReady: false, + iconName: 'AppstoreOutlined', + usagePriority: 0, + supportedEnvironments: ['preview'], + searchDescription: '향후 추가 예정인 App Vault 앱', + }, +] ; + +const listQuerySchema = z.object({ + environment: z.enum(['preview', 'test', 'prod']).optional(), +}); + +const playAppIdSchema = z.string().trim().min(1).max(100); + +const supportedEnvironmentSchema = z.enum(['preview', 'test', 'prod']); + +const iconNameSchema = z.enum([ + 'AppstoreOutlined', + 'AppstoreAddOutlined', + 'BellOutlined', + 'BookOutlined', + 'FireOutlined', + 'FundProjectionScreenOutlined', + 'FileImageOutlined', + 'PictureOutlined', + 'RocketOutlined', + 'SoundOutlined', + 'StarOutlined', + 'ThunderboltOutlined', +]); + +const playAppCreatePayloadSchema = z.object({ + id: playAppIdSchema, + name: z.string().trim().min(1).max(120), + accentClassName: z.string().trim().min(1).max(80), + statusLabel: z.string().trim().min(1).max(80), + isReady: z.boolean().default(false), + iconName: iconNameSchema, + usagePriority: z.number().int().min(0).max(1_000_000).optional(), + supportedEnvironments: z.array(supportedEnvironmentSchema).min(1).default(['preview']), + searchKeywords: z + .array(z.string().trim().min(1).max(80)) + .default([]) + .transform((keywords) => Array.from(new Set(keywords.map((keyword) => keyword.trim()).filter((keyword) => keyword.length > 0)))), + searchDescription: z.string().trim().max(4000).default(''), +}); + +const playAppUpdatePayloadSchema = z + .object({ + id: playAppIdSchema.optional(), + name: z.string().trim().min(1).max(120).optional(), + accentClassName: z.string().trim().min(1).max(80).optional(), + statusLabel: z.string().trim().min(1).max(80).optional(), + isReady: z.boolean().optional(), + iconName: iconNameSchema.optional(), + usagePriority: z.number().int().min(0).max(1_000_000).nullable().optional(), + supportedEnvironments: z.array(supportedEnvironmentSchema).optional(), + searchKeywords: z + .array(z.string().trim().min(1).max(80)) + .transform((keywords) => Array.from(new Set(keywords.map((keyword) => keyword.trim()).filter((keyword) => keyword.length > 0)))) + .optional(), + searchDescription: z.string().trim().max(4000).optional(), + }) + .refine((payload) => Object.keys(payload).length > 0, { + message: '수정할 항목이 없습니다.', + }); + +const playAppIdParamsSchema = z.object({ + id: playAppIdSchema, +}); + +type SupportedEnvironment = Array; +type PlayAppRegistryRecord = { + id: string; + name: string; + accent_class_name: string; + status_label: string; + is_ready: boolean; + icon_name: string; + usage_priority: number | null; + supported_environments: string | null; + search_keywords: string | null; + search_description: string | null; +}; + +type PlayAppRow = { + id: string; + name: string; + accentClassName: string; + statusLabel: string; + isReady: boolean; + iconName: string; + usagePriority?: number; + supportedEnvironments: SupportedEnvironment; + searchKeywords: string[]; + searchDescription: string; +}; + +type PlayAppCreateInput = z.infer; +type PlayAppUpdateInput = z.infer; + +function normalizeSupportedEnvironments(value: string | null): SupportedEnvironment { + if (!value) { + return ['preview']; + } + + const trimmed = value.trim(); + if (!trimmed) { + return ['preview']; + } + + if (trimmed.startsWith('[') && trimmed.endsWith(']')) { + try { + const parsed = JSON.parse(trimmed); + if (Array.isArray(parsed)) { + return parsed + .map((item) => String(item).trim()) + .filter((item): item is PlayAppEnvironment => item === 'preview' || item === 'test' || item === 'prod'); + } + } catch { + // fall through to comma parser below. + } + } + + return value + .trim() + .split(',') + .map((item) => item.trim().toLowerCase()) + .filter((item): item is PlayAppEnvironment => item === 'preview' || item === 'test' || item === 'prod'); +} + +function parseJsonArrayList(value: string | null): string[] { + if (!value) { + return []; + } + + const trimmed = value.trim(); + if (!trimmed) { + return []; + } + + if (trimmed.startsWith('[') && trimmed.endsWith(']')) { + try { + const parsed = JSON.parse(trimmed); + if (Array.isArray(parsed)) { + return parsed + .map((item) => (typeof item === 'string' ? item.trim() : '')) + .filter((item) => item.length > 0); + } + } catch { + // fallthrough to legacy parser below. + } + } + + return trimmed + .split(',') + .map((item) => item.trim()) + .filter((item) => item.length > 0); +} + +function toResponseItem(row: PlayAppRegistryRecord): PlayAppRow { + return { + id: row.id, + name: row.name, + accentClassName: row.accent_class_name, + statusLabel: row.status_label, + isReady: !!row.is_ready, + iconName: row.icon_name, + usagePriority: row.usage_priority ?? undefined, + supportedEnvironments: normalizeSupportedEnvironments(row.supported_environments), + searchKeywords: parseJsonArrayList(row.search_keywords), + searchDescription: row.search_description ?? '', + }; +} + +function encodeJsonList(values: readonly string[] | null | undefined) { + if (!values || values.length === 0) { + return '[]'; + } + + return JSON.stringify(Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)))); +} + +function toDbRowPayload(input: PlayAppCreateInput | Omit) { + const payload: Record = { + id: 'id' in input ? input.id?.trim() : undefined, + name: input.name?.trim(), + accent_class_name: input.accentClassName?.trim(), + status_label: input.statusLabel?.trim(), + is_ready: input.isReady, + icon_name: input.iconName, + usage_priority: input.usagePriority ?? null, + supported_environments: input.supportedEnvironments ? encodeJsonList(input.supportedEnvironments) : undefined, + search_keywords: input.searchKeywords ? encodeJsonList(input.searchKeywords) : undefined, + search_description: input.searchDescription ? input.searchDescription.trim() : undefined, + }; + + Object.entries(payload).forEach(([key, value]) => { + if (value === undefined) { + delete payload[key]; + } + }); + + if ('is_ready' in payload && payload.is_ready === undefined) { + payload.is_ready = false; + } + + return payload; +} + +function isDbUpdateResultEmpty(result: unknown) { + if (Array.isArray(result)) { + return result.length === 0; + } + + return typeof result === 'number' ? result === 0 : false; +} + +function parsePlayAppErrorWithCode(error: unknown, fallbackMessage: string) { + if (error instanceof Error) { + const code = (error as { code?: string }).code; + if (code === 'ER_DUP_ENTRY' || code === '23505') { + const duplicateError = error as Error & { statusCode?: number; details?: string }; + duplicateError.statusCode = 409; + duplicateError.message = '이미 등록된 앱 ID입니다.'; + return duplicateError; + } + } + + if (error instanceof Error) { + const duplicateError = error as Error & { statusCode?: number; details?: string }; + duplicateError.message = fallbackMessage; + return duplicateError; + } + + const next = new Error(fallbackMessage) as Error & { statusCode?: number }; + next.statusCode = 500; + return next; +} + +async function ensurePlayAppTable() { + const exists = await db.schema.hasTable(PLAY_APP_TABLE); + if (!exists) { + await db.schema.createTable(PLAY_APP_TABLE, (table) => { + table.string('id', 100).primary(); + table.string('name', 120).notNullable(); + table.string('accent_class_name', 80).notNullable(); + table.string('status_label', 80).notNullable(); + table.boolean('is_ready').notNullable().defaultTo(false); + table.string('icon_name', 80).notNullable(); + table.integer('usage_priority').nullable(); + table.text('supported_environments').nullable(); + table.text('search_keywords').nullable(); + table.text('search_description').nullable(); + table.index('is_ready', 'play_apps_is_ready_idx'); + }); + } + + const existingRows = await db(PLAY_APP_TABLE).select('id'); + const existingIds = new Set(existingRows.map((row) => row.id)); + + const rowsToInsert = DEFAULT_ENTRIES.filter((entry) => !existingIds.has(entry.id)).map((entry) => ({ + id: entry.id, + name: entry.name, + accent_class_name: entry.accentClassName, + status_label: entry.statusLabel, + is_ready: entry.isReady, + icon_name: entry.iconName, + usage_priority: entry.usagePriority, + supported_environments: encodeJsonList(entry.supportedEnvironments), + search_keywords: encodeJsonList(entry.searchKeywords ?? []), + search_description: entry.searchDescription ?? '', + })); + + if (rowsToInsert.length === 0) { + return; + } + + await db(PLAY_APP_TABLE).insert(rowsToInsert); +} + +async function listPlayAppEntries(environment?: PlayAppEnvironment | null) { + await ensurePlayAppTable(); + + const rows = (await db(PLAY_APP_TABLE) + .select('*') + .orderBy('usage_priority', 'desc') + .orderBy('id', 'asc')) as PlayAppRegistryRecord[]; + + const normalizedRows = rows.map(toResponseItem); + const filteredRows = environment ? normalizedRows.filter((row) => row.supportedEnvironments.includes(environment)) : normalizedRows; + + return filteredRows; +} + +async function createPlayAppEntry(body: unknown) { + await ensurePlayAppTable(); + + const payload = playAppCreatePayloadSchema.parse(body); + const dbPayload = toDbRowPayload(payload); + + try { + await db(PLAY_APP_TABLE).insert(dbPayload); + } catch (error) { + throw parsePlayAppErrorWithCode(error, `앱 등록에 실패했습니다: ${payload.id}`); + } + + const insertedRow = await db(PLAY_APP_TABLE) + .where({ id: payload.id }) + .first(); + + if (!insertedRow) { + const notFoundError = new Error('등록된 앱을 조회하지 못했습니다.') as Error & { statusCode?: number }; + notFoundError.statusCode = 500; + throw notFoundError; + } + + return { + ok: true, + item: toResponseItem(insertedRow), + }; +} + +async function updatePlayAppEntry(params: unknown, body: unknown) { + await ensurePlayAppTable(); + + const { id } = playAppIdParamsSchema.parse(params); + const payload = playAppUpdatePayloadSchema.parse(body); + + if (payload.id && payload.id !== id) { + const invalidError = new Error('요청 경로 ID와 본문 ID가 일치하지 않습니다.') as Error & { statusCode?: number }; + invalidError.statusCode = 409; + throw invalidError; + } + + const dbPayload = toDbRowPayload(payload); + const updated = await db(PLAY_APP_TABLE).where({ id }).update(dbPayload as Record); + + if (isDbUpdateResultEmpty(updated)) { + const notFoundError = new Error(`수정할 앱을 찾을 수 없습니다: ${id}`) as Error & { statusCode?: number }; + notFoundError.statusCode = 404; + throw notFoundError; + } + + const updatedRow = await db(PLAY_APP_TABLE).where({ id }).first(); + if (!updatedRow) { + const notFoundError = new Error(`수정한 앱을 조회할 수 없습니다: ${id}`) as Error & { statusCode?: number }; + notFoundError.statusCode = 404; + throw notFoundError; + } + + return { + ok: true, + item: toResponseItem(updatedRow), + }; +} + +async function deletePlayAppEntry(params: unknown) { + await ensurePlayAppTable(); + + const { id } = playAppIdParamsSchema.parse(params); + const deleted = await db(PLAY_APP_TABLE).where({ id }).delete('*'); + if (isDbUpdateResultEmpty(deleted)) { + const notFoundError = new Error(`삭제할 앱을 찾을 수 없습니다: ${id}`) as Error & { statusCode?: number }; + notFoundError.statusCode = 404; + throw notFoundError; + } + + if (Array.isArray(deleted) && deleted[0]) { + return { + ok: true, + deletedId: id, + item: toResponseItem(deleted[0] as PlayAppRegistryRecord), + }; + } + + return { + ok: true, + deletedId: id, + }; +} + +export async function registerPlayAppRoutes(app: FastifyInstance) { + app.get('/api/play-apps', async (request) => { + const query = listQuerySchema.parse(request.query); + + const items = await listPlayAppEntries(query.environment); + + return { + ok: true, + items, + }; + }); + + app.post('/api/play-apps', async (request) => { + return createPlayAppEntry(request.body); + }); + + app.put('/api/play-apps/:id', async (request) => { + return updatePlayAppEntry(request.params, request.body); + }); + + app.delete('/api/play-apps/:id', async (request) => { + return deletePlayAppEntry(request.params); + }); +} diff --git a/src/app/main/PlayAppOverlay.tsx b/src/app/main/PlayAppOverlay.tsx index 10ed4b9..991e56c 100644 --- a/src/app/main/PlayAppOverlay.tsx +++ b/src/app/main/PlayAppOverlay.tsx @@ -7,6 +7,7 @@ import { PhotoPuzzleAppView } from '../../views/play/apps/photo-puzzle/PhotoPuzz import { PhotoPrismAppView } from '../../views/play/apps/photoprism/PhotoPrismAppView'; import { TheQuestAppView } from '../../views/play/apps/the-quest/TheQuestAppView'; import { TetrisAppView } from '../../views/play/apps/tetris/TetrisAppView'; +import { Template1PlayAppView } from '../../views/play/apps/template1/Template1PlayAppView'; type PlayAppOverlayProps = { appId: string; @@ -41,6 +42,10 @@ function renderPlayApp(appId: string, onClose: () => void) { return ; } + if (appId === 'template1') { + return ; + } + return null; } diff --git a/src/app/main/mainChatPanel/ChatPromptCard.tsx b/src/app/main/mainChatPanel/ChatPromptCard.tsx index e3e9c2b..cd196e5 100644 --- a/src/app/main/mainChatPanel/ChatPromptCard.tsx +++ b/src/app/main/mainChatPanel/ChatPromptCard.tsx @@ -1,4 +1,5 @@ import { + CopyOutlined, CodeOutlined, CheckCircleOutlined, CloseOutlined, @@ -21,7 +22,6 @@ import { StepperUI } from '../../../components/stepper'; import { InlineImage } from '../../../components/common/InlineImage'; import { MarkdownPreviewContent } from '../../../components/markdownPreview/MarkdownPreviewContent'; import { FullscreenPreviewModal, ZoomablePreviewSurface } from '../../../components/previewer'; -import { renderEditorBlock } from '../../../components/previewer/renderers'; import { ChatPreviewBody } from './ChatPreviewBody'; import { isMarkdownContentType, isMarkdownResourceUrl, normalizeChatResourceUrl } from './chatResourceUrl'; import { sharePreviewLink } from './chatUtils'; @@ -507,7 +507,7 @@ function canShowHtmlPreviewActions(preview: PromptPreview | null | undefined) { return false; } - if (preview.type === 'html') { + if (preview.type === 'editable' || preview.type === 'markdown' || preview.type === 'html') { return true; } @@ -516,7 +516,10 @@ function canShowHtmlPreviewActions(preview: PromptPreview | null | undefined) { } if (preview.content?.trim()) { - return /<(?:!doctype\s+html|html|head|body|main|section|article|div)\b/i.test(preview.content); + return ( + /<(?:!doctype\s+html|html|head|body|main|section|article|div)\b/i.test(preview.content) || + isMarkdownPromptPreview(preview) + ); } return Boolean(preview.url && isHtmlLikeUrl(preview.url)); @@ -651,7 +654,7 @@ function usePromptPreviewContent(preview: PromptPreview | null | undefined) { setLoadError(''); const shouldFetchTextPreview = - previewType === 'markdown' || previewType === 'html'; + previewType === 'markdown' || previewType === 'html' || previewType === 'editable'; const shouldInspectResourcePreview = previewType === 'resource' && normalizedPreviewUrl && canRenderFramePreview(normalizedPreviewUrl); @@ -732,15 +735,37 @@ export function PromptPreviewSurface({ preview, compact = false, htmlMode = 'preview', + sourceContent, + onSourceContentChange, }: { preview: PromptPreview; compact?: boolean; htmlMode?: 'preview' | 'source'; + sourceContent?: string; + onSourceContentChange?: (content: string) => void; }) { const { remoteContent, remoteContentType, isLoading, loadError } = usePromptPreviewContent(preview); const normalizedPreviewUrl = resolvePromptPreviewUrl(preview.url); const shouldRenderAsHtml = shouldRenderAsHtmlDocument(preview, remoteContentType, remoteContent); const htmlDocument = shouldRenderAsHtml ? buildHtmlFrameDocument(remoteContent || '', normalizedPreviewUrl || preview.url) : null; + const defaultSourceContent = remoteContent ?? preview.content ?? ''; + const sourceValue = sourceContent ?? defaultSourceContent; + const markdownValue = remoteContent ?? '표시할 markdown preview가 없습니다.'; + const [editableSourceContent, setEditableSourceContent] = useState(defaultSourceContent); + + useEffect(() => { + if (!onSourceContentChange || htmlMode !== 'source') { + return; + } + + if (sourceContent === undefined || sourceContent.length === 0) { + onSourceContentChange(defaultSourceContent); + } + }, [defaultSourceContent, htmlMode, onSourceContentChange, sourceContent]); + + useEffect(() => { + setEditableSourceContent(defaultSourceContent); + }, [defaultSourceContent]); if (preview.type === 'image' && normalizedPreviewUrl) { const imageNode = ( @@ -776,9 +801,41 @@ export function PromptPreviewSurface({ } if (preview.type === 'markdown') { + if (htmlMode === 'source') { + return ( +
+ onSourceContentChange?.(event.currentTarget.value)} + autoSize={false} + className="app-chat-prompt-card__preview-source-editor" + placeholder="표시할 markdown 소스가 없습니다." + /> +
+ ); + } + return (
- + +
+ ); + } + + if (preview.type === 'editable') { + return ( +
+ { + const nextValue = event.currentTarget.value; + setEditableSourceContent(nextValue); + onSourceContentChange?.(nextValue); + }} + autoSize={false} + className="app-chat-prompt-card__preview-source-editor" + placeholder="편집 가능한 소스 블록입니다." + />
); } @@ -804,8 +861,14 @@ export function PromptPreviewSurface({ if (htmlMode === 'source') { return ( -
- {renderEditorBlock(htmlContent || '표시할 HTML 코드가 없습니다.', 'html', 'code')} +
+ onSourceContentChange?.(event.currentTarget.value)} + autoSize={false} + className="app-chat-prompt-card__preview-source-editor" + placeholder="표시할 HTML 소스가 없습니다." + />
); } @@ -1200,6 +1263,7 @@ export function ChatPromptCard({ const [submittedFreeText, setSubmittedFreeText] = useState(''); const [expandedOptionValue, setExpandedOptionValue] = useState(null); const [expandedHtmlMode, setExpandedHtmlMode] = useState<'preview' | 'source'>('preview'); + const [expandedPreviewSource, setExpandedPreviewSource] = useState(''); const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed); const [attachments, setAttachments] = useState([]); const [isUploadingAttachment, setIsUploadingAttachment] = useState(false); @@ -1242,6 +1306,7 @@ export function ChatPromptCard({ useEffect(() => { setExpandedHtmlMode('preview'); + setExpandedPreviewSource(expandedOption?.preview?.content ?? ''); }, [expandedOptionValue]); const activeStep = steps[Math.min(activeStepIndex, Math.max(steps.length - 1, 0))] ?? steps[0]; const activeSelection = activeStep ? stepSelections[activeStep.key] : undefined; @@ -1274,6 +1339,7 @@ export function ChatPromptCard({ const progressPayload = buildPromptSelectionPayloadWithAttachments(target, stepSelections, attachments); const expandAllOptionPreviews = shouldExpandAllPromptPreviews(activeStep, activeSelection, isLocked); const expandedOptionPreviewUrl = expandedOption?.preview ? resolvePromptPreviewUrl(expandedOption.preview.url) : ''; + const isExpandedEditablePreview = expandedOption?.preview?.type === 'editable'; const onSelectionChangeRef = useRef(onSelectionChange); useEffect(() => { @@ -1364,6 +1430,19 @@ export function ChatPromptCard({ }); }; + const handleCopyExpandedEditablePreview = async () => { + if (!expandedOption?.preview || !isExpandedEditablePreview) { + return; + } + + try { + await navigator.clipboard.writeText(expandedPreviewSource); + message.success('편집 내용을 복사했습니다.'); + } catch { + message.error('편집 내용을 복사할 수 없습니다.'); + } + }; + const uploadAttachments = async (files: File[]) => { if (!allowAttachments || !onUploadAttachment || isLocked || isSubmitting || isUploadingAttachment || files.length === 0) { return; @@ -1914,7 +1993,7 @@ export function ChatPromptCard({ setExpandedOptionValue(null)} - title={expandedOption?.preview?.title?.trim() || expandedOption?.label || 'preview'} + title={expandedOption?.preview?.title?.trim() || expandedOption?.label || 'preview'} actions={ canShowHtmlPreviewActions(expandedOption?.preview) ? ( <> @@ -1925,20 +2004,32 @@ export function ChatPromptCard({ icon={} onClick={handleShareExpandedPreview} /> - + ))} +
+ + ); +} + +function Template1SectionScreen({ title, chips, cards, onItemSelect }: Template1SectionScreenProps) { + return ( + <> +
{chips.join(' · ')}
+
+
+

{title}

+
+ {cards.map((item) => ( + + ))} +
+ + ); +} + +function Template1SettingsDropdown({ + onItemSelect, +}: { + onItemSelect: (item: Template1MenuItem) => void; +}) { + return ( +
+
+ {settingsItems.map((item) => ( + + ))} +
+
+ ); +} + +export function Template1PlayAppView({ onBack, launchContext = 'direct' }: Template1PlayAppViewProps) { + const [activeSection, setActiveSection] = useState('home'); + const [isSettingsOpen, setIsSettingsOpen] = useState(false); + void launchContext; + + const activeSectionItem = useMemo( + () => TEMPLATE1_SECTIONS.find((item) => item.id === activeSection) ?? TEMPLATE1_SECTIONS[0], + [activeSection], + ); + + const menuItems = TEMPLATE1_MENUS[activeSection]; + + const homeMenuItems = useMemo( + () => + TEMPLATE1_SECTIONS.filter((item) => item.id !== 'home') + .map((item) => ({ + title: item.label, + description: item.description, + icon: + item.id === 'projects' ? : + item.id === 'resources' ? : + , + screen: item.id, + actionLabel: '열기', + chips: item.chips, + actionType: 'navigate', + })), + [], + ); + + const goSection = (section: Template1SectionId) => { + setActiveSection(section); + setIsSettingsOpen(false); + }; + + const openItem = (item: Template1MenuItem) => { + if (item.actionType === 'exit') { + onBack(); + setIsSettingsOpen(false); + return; + } + + if (item.settingAction === 'reset-state') { + goSection('home'); + setIsSettingsOpen(false); + return; + } + + if (item.actionType === 'local') { + setIsSettingsOpen(false); + return; + } + + if (item.screen) { + goSection(item.screen); + } + }; + + const handleHomeIconClick = () => { + goSection('home'); + }; + + const renderActiveScreen = () => { + if (activeSection === 'home') { + return ; + } + + return ( + + ); + }; + + return ( +
+
+
+ +
+

Template1 앱 레이아웃

+

다음 앱에 바로 적용 가능한 기본 배치 예시

+
+
+ +
+ + {isSettingsOpen ? ( + + ) : null} + +
+
+
+ {renderActiveScreen()} +
+
+
+
+ ); +}