AI를 업무에 적용할 때 가장 먼저 기대하는 것은 속도입니다. 보고서를 빠르게 만들고, 엑셀을 자동으로 검수하고, 반복적인 데이터 가공을 줄이고 싶습니다. 하지만 실제 업무에서는 결과를 빨리 만드는 것만큼 결과를 믿고 사용할 수 있는지가 중요합니다. AI가 만든 결과가 그럴듯해 보여도 숫자가 틀렸거나, 일부 행이 누락됐거나, 맥락과 다른 해석이 포함될 수 있습니다. 사람이 매번 처음부터 끝까지 확인한다면 자동화의 의미가 줄어들고, 반대로 아무런 검수 없이 사용하면 업무 리스크가 커집니다. 그래서 AI 자동화에는 결과를 믿기 위한 검수 구조가 필요합니다. AI 결과를 그대로 믿기 어려운 이유 AI는 입력된 데이터를 바탕으로 결과를 만듭니다. 입력 데이터가 누락됐거나 기준이 모호하면 결과도 달라질 수 있습니다. 같은 보고서라도 원천 데이터의 기준일이 다르거나, 빈 값이 다른 방식으로 처리되거나, 예외 행이 포함되면 결과가 달라집니다. AI가 문장을 자연스럽게 만들어도 계산 과정이 올바르다는 뜻은 아닙니다. 특히 업무 결과에는 세 가지가 섞여 있습니다. 원천 데이터에서 가져온 사실 데이터를 바탕으로 한 계산과 집계 사실을 해석한 문장과 제안 이 세 가지를 같은 수준으로 검수하면 무엇을 확인해야 하는지 모호해집니다. 먼저 결과를 세 종류로 나눈다 검수 구조를 만들 때는 AI가 만든 결과를 먼저 분류하는 것이 좋습니다. 사실 검수 원천 데이터에 실제로 존재하는 값인지 확인합니다. 숫자, 날짜, 항목명, 건수처럼 원본과 대조할 수 있는 결과입니다. 계산 검수 합계, 평균, 증감률, 비율처럼 규칙에 따라 계산되는 결과를 확인합니다. 계산식과 대상 범위가 올바른지 봅니다. 해석 검수 “매출이 개선됐다”, “특정 지역의 수요가 높다”처럼 데이터를 해석한 문장을 확인합니다. 숫자만으로 충분히 뒷받침되는지, 다른 원인이 있을 수 있는지 검토합니다. 사실과 계산은 자동 검증 비중을 높일 수 있지만, 해석과 제안은 사람의 맥락 확인이 더 필요할 수 있습니다. 검수는 단계별로 나눌수록 명확해진다 모든 결과를 마지막에 한 번에 확인하는 방식은 효율적이지 않습니다. 오류가 생길 수 있는 지점을 단계별로 나누는 편이 좋습니다. 입력 검수 : 파일이 정상적으로 들어왔는지, 기준일과 필수 항목이 맞는지 확인합니다. 전처리 검수 : 중복, 빈 값, 형식 오류가 어떻게 처리됐는지 확인합니다. 계산 검수 : 합계와 비율, 필터 조건, 집계 범위를 확인합니다. 결과 검수 : 보고서의 숫자와 원천 데이터가 맞는지 대조합니다. 해석 검수 : 결과 문장과 제안이 데이터의 범위를 넘어가지 않는지 확인합니다. 이렇게 나누면 “AI 결과가 틀렸다”는 막연한 문제를 “입력 단계에서 누락이 발생했다”거나 “해석 단계에서 원인까지 단정했다”처럼 구체적인 문제로 바꿀 수 있습니다. 모든 결과를 똑같이 검수할 필요는 없다 검수에 필요한 시간과 강도는 결과의 위험도에 따라 달라져야 합니다. 단순한 형식 변환이나 내부 참고용 목록은 자동 검증과 일부 샘플 확인만으로 충분할 수 있습니다. 반면 외부에 공유되는 보고서, 비용이나 정산에 영향을 주는 결과, 의사결정의 근거가 되는 분석은 더 엄격하게 확인해야 합니다. 결과별로 다음 기준을 정해둘 수 있습니다. 오류가 발생했을 때 영향이 얼마나 큰가 원천 데이터와 자동으로 대조할 수 있는가 결과를 누가 보고 어떤 결정을 내리는가 사람이 반드시 확인해야 하는 예외가 있는가 이 기준이 있으면 모든 작업을 똑같이 수작업 검수하지 않고, 중요한 결과에 사람의 시간을 집중할 수 있습니다. 좋은 검수 구조는 실패를 숨기지 않는다 자동화가 항상 성공한다고 가정하면 검수 구조를 만들기 어렵습니다. 오히려 실패했을 때 어떻게 알리고, 어디까지 되돌리고, 누가 확인할지를 먼저 정해야 합니다. 예를 들어 필수 데이터가 없으면 보고서 생성을 멈추고 오류를 알려야 합니다. 계산 결과가 이전 기간과 크게 다르면 경고를 표시할 수 있습니다. AI가 해석을 만들더라도 근거가 되는 지표와 원천 데이터를 함께 보여줘야 합니다. 검수 결과는 성공과 실패의 표시로 끝나지 않습니다. 어떤 항목이 잘못됐는지, 수정 후 다시 실행할 수 있는지, 같은 오류가 반복되지 않도록 기준을 바꿔야 하는지까지 남겨야 합니다. 사람은 최종 버튼을 누르는 역할만 하지 않는다 사람의 검수는 AI가 만든 결과를 눈으로 읽고 승인하는 일에만 머물지 않습니다. 사람은 어떤 결과가 중요한지 정하고, 예외 상황을 정의하고, 결과가 실제 업무 맥락에 맞는지 판단해야 합니다. 반복되는 오류를 발견하면 자동화 규칙과 입력 기준을 개선하는 역할도 합니다. AI가 잘하는 일과 사람이 잘하는 일을 나누면 검수의 질이 좋아집니다. AI는 많은 행을 빠르게 비교하고 규칙 위반을 찾을 수 있습니다. 사람은 데이터에 기록되지 않은 상황과 결과의 의미를 확인할 수 있습니다. 믿을 수 있는 자동화는 검수부터 설계한다 AI 자동화를 도입할 때 결과 생성 기능부터 만들기 쉽습니다. 하지만 실제 업무에 오래 사용하려면 입력 기준, 오류 감지, 결과 대조, 사람의 승인, 실패 기록까지 함께 설계해야 합니다. 결과를 믿는다는 것은 AI가 틀리지 않는다고 가정하는 일이 아닙니다. 틀릴 수 있다는 전제 아래 어디에서 오류를 발견하고, 어떻게 멈추고, 어떤 방식으로 수정할지 준비하는 일에 가깝습니다.
BGF리테일 관점 2025년에 비해 영업이익 수익성 개선 리센느 광고 효과 경쟁종목 카테고리에서 저평가 되고 있다는 점 유튜브 대본 BGF리테일 — 리센느 효과, 주가도 살아날까? BGF리테일! 이 회사 이름만 들으면 뭐 하는 회사인지 아십니까? 잘 모르시는 분들 많을 겁니다! 그런데! CU 편의점을 운영하는 회사라고 하면? 아! 그 회사구나! 하실 겁니다. 그런데 최근 CU가 제대로 한 건 했습니다! 바로! 걸그룹 리센느! 요즘 화제성이 상당한 이 걸그룹을 광고 모델로 기용했는데, 이게 단순히 광고 영상 하나 찍고 끝난 게 아닙니다! 리센느 협업 빵이 출시 나흘 만에 무려 10만 개! 팔렸습니다! CU 전체 빵 매출도 같은 기간 전년 대비 20% 증가! 포토카드는 정가의 6~8배 가격에 거래되는 사례까지 나왔습니다. 이 정도면 광고 모델이 그냥 사진만 찍고 간 건 아닙니다! 실제로 상품을 팔아준 겁니다! 그런데 여기서 중요한 건, 리센느가 잘 나간다는 이야기가 아닙니다. 이 효과가 CU의 매출과 이익으로 이어지고, 결국 BGF리테일의 주가까지 바꿀 수 있느냐! 이걸 봐야 합니다. 그럼 BGF리테일이 뭐 하는 회사인지부터 시작해서, 리센느 효과! 실적 개선! 그리고 앞으로 주가 전망까지 한번 보겠습니다. BGF리테일, 뭐 하는 회사냐? 간단합니다! CU 편의점을 운영하는 회사입니다. 전국의 CU 편의점에서 판매되는 상품과 가맹사업을 기반으로 돈을 법니다. 그런데 편의점이라고 하면, 그냥 물건 가져다 놓고 파는 사업이라고 생각하기 쉽습니다. 하지만 중요한 건 따로 있습니다. 같은 편의점이라도 어떤 상품을 팔고, 얼마나 많이 팔고, 얼마나 높은 이익을 남기느냐! 이게 핵심입니다. 특히 편의점은 매출 규모가 커도 상품 원가와 인건비, 물류비, 점포 운영비 부담이 있기 때문에, 매출이 늘었다고 이익까지 똑같이 늘어나는 사업이 아닙니다. 실제로 BGF리테일도 이런 문제를 겪었습니다. 매출은 늘었는데, 영업이익은 왜 제자리였을까? 2022년부터 2025년까지 매출을 보겠습니다. 2022년! 약 7조 6천억 원! 2023년! 약 8조 2천억 원! 2024년! 약 8조 7천억 원! 그리고 2025년에는? 약 9조 600억 원! 매출은 꾸준히 성장했습니다. 그런데 영업이익은 어떨까요? 2022년 약 2,524억 원! 2023년 약 2,532억 원! 2024년 약 2,516억 원! 2025년 약 2,539억 원! 이게 뭡니까! 매출은 계속 커졌는데, 영업이익은 4년 동안 거의 제자리였습니다. 그러니까 시장 입장에서는 이런 생각이 드는 겁니다. “매출은 늘어나는데, 이익은 왜 이렇게 안 늘어나는 거야?” 이게 BGF리테일의 성장성에 대한 의문으로 이어졌던 겁니다. 그런데! 2026년 들어서 변화가 나타나고 있습니다. 2026년, 영업이익이 달라지기 시작했다! 2026년 2분기! 매출은 약 2조 4,268억 원! 전년 동기 대비 6% 증가했습니다. 그런데 영업이익은? 무려 849억 원! 전년 동기 대비 22.3% 증가했습니다. 여기서 재미있는 점이 하나 있습니다. 매출은 6% 늘었는데, 영업이익은 22.3%나 늘었다는 겁니다! 게다가 시장 예상치였던 약 755억 원도 크게 웃돌았습니다. 상반기 전체로 보면, 매출은 약 4조 5,472억 원! 영업이익은 약 1,230억 원! 전년 동기 대비 영업이익이 33.7% 증가했습니다. 이건 단순히 매출만 늘어난 게 아닙니다. 매출 증가와 함께 수익성까지 개선되고 있다는 점! 이 부분이 중요합니다. 그렇다면 도대체 뭐가 달라진 걸까요? 음료와 아이스크림 같은 여름철 상품 판매가 늘었고, 간편식과 자체브랜드 상품 등 차별화 상품의 판매도 호조를 보였습니다. 식품과 가공식품의 매출 비중이 커지면서 상품 구성도 개선됐습니다. 쉽게 말해서, 무조건 많이 파는 것보다, 이익을 더 남길 수 있는 상품을 많이 파는 방향으로 바뀌고 있다는 겁니다. 물론 날씨와 소비지원금 같은 일시적인 요인도 있었습니다. 그래서 이익 증가가 앞으로도 계속되는지는 확인해야 합니다. 하지만 적어도 2026년 상반기 실적에서는 긍정적인 변화가 나타났습니다. 그런데 여기서 등장하는 게 바로 리센느! CU는 2026년 7월 리센느를 브랜드 모델로 선정했고, 9월에는 본격적으로 브랜드 캠페인과 협업 상품을 선보였습니다. 광고 영상은 공개 하루 만에 누적 조회수 60만 회를 기록했습니다. 그런데 진짜 중요한 건 그다음입니다. 리센느 멤버들의 취향을 반영한 협업 빵 5종! 원이의 옥수수 크림빵, 미나미의 메론빵, 메이의 시나몬롤, 제나의 딸기 샌드, 리브의 초코 호떡! 여기에 멤버 이미지가 들어간 한정판 투명 포토카드 27종 가운데 하나를 랜덤으로 넣었습니다. 이러면 어떻게 되겠습니까? 빵이 먹고 싶어서 사는 사람도 있겠지만, 좋아하는 멤버의 포토카드를 얻으려고 사는 사람도 생기는 겁니다. 그리고 원하는 카드를 얻지 못하면? 다시 구매할 이유가 생깁니다! 실제로 CU 모바일 앱의 예약 판매 물량은 판매 시작 직후 소진됐고, 첫 협업 상품은 출시 24시간이 지나기도 전에 판매율 99%를 기록했습니다. 출시 나흘 만에 판매량 약 10만 개! 이건 광고에 대한 관심이 실제 상품 구매로 이어졌다는 점에서 의미가 있습니다. 그런데 제가 여기서 주목하는 건, 리센느가 빵을 많이 팔았다는 사실 하나가 아닙니다. CU가 팬덤을 활용해서 고객을 매장으로 끌어들이고, 그 관심을 실제 상품 판매로 연결하는 마케팅을 보여줬다는 겁니다. 앞으로 이런 협업이 반복되고, 다른 상품으로까지 확대된다면 CU만의 차별화 경쟁력이 될 수도 있습니다. 다만! 협업 상품이 많이 팔렸다고 해서 그 판매량 전체가 신규 매출인 것도 아니고, CU 전체 빵 매출 증가분을 전부 리센느 효과라고 볼 수도 없습니다. 앞으로 재구매가 이어지는지, 다른 상품까지 구매가 확대되는지, 실제 이익에 얼마나 기여하는지를 확인해야 합니다. 그럼 앞으로 영업이익은 얼마나 늘어날까? NH투자증권은 2026년 BGF리테일의 연간 영업이익을 약 2,952억 원으로 전망했습니다. 전년 대비 약 16.2% 증가하는 수준입니다. 최근 몇 년간 2,500억 원 안팎에서 정체됐던 영업이익이 다시 성장할 수 있다는 겁니다. 여기에 기존점 매출 회복과 점포 운영 효율화, 상품 구성 개선까지 이어진다면 긍정적인 흐름이 나올 수 있습니다. 그리고 리센느 같은 협업 상품이 반복적으로 흥행한다면? 매출을 끌어올리는 추가적인 성장 동력이 될 수도 있습니다. 하지만 여기서 착각하면 안 됩니다. 리센느 효과가 좋다고 해서 회사 전체 이익이 갑자기 폭발적으로 늘어나는 건 아닙니다. 결국 CU 전체 매출에서 얼마나 큰 비중을 차지하는지, 상품을 팔아서 얼마나 많은 이익이 남는지가 중요합니다. 그런데! 주가는 왜 이렇게 평가받고 있을까? 토스증권 비교 화면을 보면, BGF리테일의 PER은 약 10.3배! 편의점 업종 중앙값은 약 12.3배입니다. 단순 비교하면 업종 평균보다 낮은 평가를 받고 있는 겁니다. 그동안 영업이익이 정체됐던 만큼, 시장이 성장성을 낮게 평가했을 가능성이 있습니다. 그런데 지금은 상황이 조금 달라지고 있습니다. 2026년 영업이익 회복이 예상되고 있고, 2분기 실적도 시장 전망을 웃돌았습니다. 앞으로 이익 증가가 이어진다면, 시장이 BGF리테일을 다시 평가할 가능성도 있습니다. 다만 PER이 낮다고 무조건 저평가인 건 아닙니다. 이익이 다시 정체되거나 소비 둔화와 비용 부담이 커진다면, 낮은 PER이 계속 유지될 수도 있습니다. 차트는 어떨까? 현재 주가는 약 12만 8천 원! 제가 앞서 살펴본 차트에서는 11만 2천 원 부근이 주요 지지선, 15만 6천 원 부근이 박스권 상단 저항으로 보입니다. 현재 주가는 박스권 하단 쪽으로 내려오는 모습입니다. 일봉 RSI도 약 35 수준까지 내려왔습니다. 단기 반등이 나올 수 있는 구간이지만, 아직 바닥이 확인됐다고 단정하기는 어렵습니다. 우선 11만 2천 원 부근에서 지지를 받는지, 그리고 반등할 때 거래량이 붙는지를 확인해야 합니다. 이 가격대를 지켜내고 주가가 다시 상승한다면, 박스권 상단을 향한 반등 시나리오를 생각해 볼 수 있습니다. 반대로 지지선이 무너지면, 9만 8천 원대 장기 저점까지도 열어둬야 합니다. 결론! BGF리테일은 CU 편의점을 운영하는 회사입니다. 과거에는 매출이 늘어도 영업이익이 정체되면서 성장성에 대한 의문이 있었습니다. 그런데 2026년 들어 영업이익이 개선되고 있고, 리센느 협업 상품도 출시 초기에 상당한 판매 성과를 보여줬습니다. 여기에 업종 중앙값보다 낮은 PER까지 고려하면, 앞으로 실적 회복이 이어질 경우 주가 재평가 가능성도 있다고 봅니다. 하지만 중요한 건 세 가지입니다. 첫 번째! 영업이익 증가가 2027년에도 이어질 수 있느냐! 두 번째! 리센느 같은 차별화 마케팅이 일회성 흥행으로 끝나지 않고 지속적인 매출과 이익으로 연결되느냐! 세 번째! 주가가 11만 2천 원 부근의 지지선을 지켜내고 박스권 상단으로 향할 수 있느냐! 저는 BGF리테일을 단순히 편의점 회사로만 볼 게 아니라, 본업의 수익성이 회복되고 있는지, 그리고 CU만의 상품 경쟁력을 강화할 수 있는지 확인해야 할 종목이라고 생각합니다. 과연 BGF리테일은 이번 실적 회복을 계기로 다시 성장하는 회사가 될 수 있을까요? 앞으로 실적과 주가 흐름을 함께 지켜보겠습니다. 계속해서 기업정보, 주가전망을 받고 싶으신 분들은 구독 좋아요 알림설정 부탁드립니다! 이상 골든 엉클이었습니다!
무슨 일이 있었나 AI 3대 '대부(godfather)' 중 한 명으로 꼽히는 얀 르쿤(Yann LeCun, 메타 수석 AI 과학자)이 인류 멸종 수준의 AI 위험론을 정면으로 반박했다. 르쿤은 최근 인터뷰에서 AI가 인류를 전멸시킬 수 있다는 시나리오에 대해 "전혀 걱정하지 않는다"고 말했고, 최근 보도된 일련의 '폭주(rogue)' AI 사고들에 대해서도 "걱정이 전혀 없다"고 밝혔다. 특히 르쿤은 앤스로픽 CEO 다리오 아모데이를 직접 거론하며 "그는 완전히 망상에 빠져 있다(completely deluded)"고 말했고, 이어진 발언에서는 아모데이를 "미쳤다(crazy)"고까지 표현했다. 르쿤은 아모데이와 오픈AI CEO 샘 올트먼이 "AI가 우리 모두를 죽일 수 있다"는 식의 경고를 내놓는 것에 대해 "모두에게 극도로 파괴적인 행태"이자 "상상할 수 있는 최악의 마케팅 캠페인"이라고 강하게 비판했다. 지난 7월 오픈AI의 AI 에이전트들이 자율적으로 허깅페이스를 해킹한 사건에 대한 평가도 상반됐다. 르쿤은 이를 AI 자체의 위험성이 아니라 "인간의 허술한 관리와 설계 결함" 탓으로 돌렸다. 그는 "그 에이전트들은 지시받은 대로 정확히 행동했을 뿐이다. 샌드박스 안에 있어야 했지만, 그 샌드박스가 구멍투성이로 형편없게 설계됐을 뿐"이라고 설명했다. 왜 중요한가 이번 발언은 AI 업계를 이끄는 핵심 인물들 사이에서 'AI 위험성'을 둘러싼 인식 차가 얼마나 큰지를 단적으로 보여준다. 아모데이를 비롯해 올트먼 등 주요 AI 기업 수장들이 최근 백악관 등에서 자율규제를 약속하며 안전 우려에 선제 대응하는 모습을 보인 것과 달리, 메타 소속의 르쿤은 이런 경고 자체를 '마케팅'으로 규정하며 업계 내 균열을 공개적으로 드러냈다. 이 논쟁은 단순한 설전이 아니라 실질적 파급력을 가진다. AI 위험을 과장된 공포로 보는 입장은 규제 완화와 개방형 AI 개발을 지지하는 논리로 이어지고, 반대로 아모데이식 경고는 강력한 안전장치와 규제 강화를 뒷받침하는 근거로 쓰인다. 최근 금융권을 덮친 AI 기반 해킹 사고처럼 'AI 오남용'이 현실화되는 사례가 늘어나는 가운데, 이런 사고의 책임을 AI 자체의 위험성으로 볼지 혹은 인간의 관리 실패로 볼지에 대한 입장차는 앞으로 AI 안전 규제의 방향을 가르는 중요한 분기점이 될 전망이다. 원문: https://fortune.com/2026/10/01/ai-godfather-yann-lecun-has-zero-concerns-about-human-extinction-says-anthropic-ceo-dario-amodei-is-deuded/
프로그래밍을 처음 배울 때 보안은 보통 비밀번호를 암호화하거나 로그인하지 않은 사용자의 접근을 막는 기능이라고 배운다. if (!currentUser) { throw new UnauthorizedError(); } 로그인하지 않은 요청을 거부하면 보호된 페이지에 접근할 수 없다. 기본 개념을 이해하기에는 충분한 설명이다. 하지만 실제 서비스를 개발하면 로그인 검사 하나만으로 해결할 수 없는 문제가 생긴다. 요청으로 받은 가격과 할인 금액을 믿어도 되는가? 로그인한 사용자가 다른 사람의 주문을 조회할 수 있는가? 레스토랑이 업로드한 파일을 그대로 공개해도 되는가? 결제 서비스가 보낸 웹훅인지 어떻게 확인하는가? 데이터베이스 비밀번호는 어디에 저장하고 언제 교체하는가? 오류와 로그에는 어떤 정보를 남겨도 되는가? 취약한 패키지와 잘못된 운영 설정은 어떻게 발견하는가? 보안은 개발이 끝난 뒤 추가하는 기능이 아니다. 보안은 입력이 들어와 처리되고 저장되며 다른 시스템으로 전달되고 운영 기록에 남는 전체 흐름에서, 허용된 주체만 허용된 행동을 수행하도록 위험을 제한하는 설계 원칙이다. 무엇을 지킬지 모르면 보호 방법도 정할 수 없다 크리스가 음식 배달 서비스를 개발한다고 생각해 보자. 서비스에는 고객, 레스토랑 운영자, 배달 기사, 관리자, 결제 제공업체가 참여한다. 각 주체가 중요하게 여기는 데이터도 다르다. type DeliveryServiceAssets = { customerAddress: string; restaurantBankAccount: string; orderHistory: Order[]; courierLocation: GeoPoint; paymentProviderToken: string; adminSession: string; }; 주소, 계좌 정보, 주문 이력, 위치, 외부 결제 토큰, 관리자 세션은 서로 다른 이유로 보호해야 한다. 보안 설계는 먼저 다음 질문에서 시작한다. 무엇을 보호해야 하는가? 누가 정상적으로 사용할 수 있는가? 어떤 경로로 접근하는가? 잘못 노출되거나 변경되면 어떤 피해가 발생하는가? 시스템이 사용할 수 없게 되면 어떤 업무가 멈추는가? 이를 기밀성, 무결성, 가용성이라는 세 가지 관점으로 나눌 수 있다. 관점 질문 배달 서비스 예시 기밀성 허용되지 않은 사람이 읽을 수 있는가 다른 고객의 주소 노출 무결성 허용되지 않은 방식으로 바뀔 수 있는가 주문 금액이나 환불 계좌 변경 가용성 필요한 때 사용할 수 있는가 주문 API 과부하로 결제 불가 모든 데이터를 같은 수준으로 보호할 필요는 없다. 그러나 데이터의 중요도와 실패 영향을 분류하지 않으면 보호 비용을 어디에 집중해야 하는지도 결정하기 어렵다. 외부에서 들어온 값은 출처와 상관없이 검증해야 한다 주문 생성 API가 클라이언트의 요청을 그대로 사용한다고 생각해 보자. await orderRepository.create({ customerId: request.body.customerId, restaurantId: request.body.restaurantId, totalPrice: request.body.totalPrice, status: request.body.status, }); 사용자는 다른 사람의 customerId , 더 낮은 totalPrice , 허용되지 않은 status 를 직접 보낼 수 있다. 외부 입력은 검증 전까지 신뢰할 수 없다. 브라우저 폼뿐 아니라 다음 값도 외부 입력이다. URL 경로와 쿼리 HTTP 헤더와 쿠키 모바일 애플리케이션의 요청 외부 결제 서비스의 웹훅 메시지 큐의 이벤트 업로드 파일 다른 내부 서비스의 응답 운영자가 입력한 관리 데이터 먼저 요청의 구조를 검증한다. import { z } from "zod"; const CreateOrderSchema = z.object({ restaurantId: z.string().uuid(), deliveryAddressId: z.string().uuid(), items: z .array( z.object({ menuItemId: z.string().uuid(), quantity: z.number().int().min(1).max(20), }) ) .min(1) .max(50), couponCode: z .string() .trim() .max(40) .optional(), }); const input = CreateOrderSchema.parse(request.body); 이 검증은 허용된 필드, 타입, 길이, 수량 범위를 제한한다. 고객 ID, 가격, 주문 상태는 클라이언트가 결정할 값이 아니므로 요청 스키마에 포함하지 않는다. 형식이 올바르다고 비즈니스 의미까지 올바른 것은 아니다. const restaurant = await restaurantRepository.findOpenById( input.restaurantId ); if (!restaurant) { throw new RestaurantUnavailableError(); } UUID 형식이 맞더라도 실제 영업 중인 레스토랑인지 확인해야 한다. 입력 검증은 두 단계로 확장된다. 문법적 검증은 타입, 형식, 길이, 범위를 확인한다. 의미적 검증은 현재 서비스 상태에서 허용되는 값인지 확인한다. 검증만으로 입력이 안전한 명령이 되지는 않는다 메뉴 검색어의 길이와 타입을 검증했다고 생각해 보자. const SearchSchema = z.object({ keyword: z.string().trim().min(1).max(100), }); 이 검증은 비정상적으로 긴 입력을 막지만 문자열이 SQL의 일부로 실행되는 문제까지 해결하지는 않는다. 다음 코드는 검색어를 SQL 문자열에 직접 연결한다. const query = ` SELECT * FROM menu_items WHERE name LIKE '%${keyword}%' `; 입력값이 데이터가 아니라 SQL 문법으로 해석될 수 있다. 매개변수화된 쿼리를 사용해야 한다. const menuItems = await database.query( ` SELECT * FROM menu_items WHERE name ILIKE $1 `, [`%${keyword}%`] ); 검색어는 SQL 명령이 아니라 하나의 데이터 값으로 전달된다. 화면 출력도 사용하는 위치에 맞게 처리해야 한다. <p>{restaurant.description}</p> React처럼 기본적으로 텍스트를 이스케이프하는 렌더링 방식을 사용하면 설명에 포함된 HTML이 코드로 실행되는 것을 줄일 수 있다. 반대로 검증되지 않은 HTML을 직접 삽입하는 방식은 위험을 만든다. <div dangerouslySetInnerHTML={{ __html: restaurant.description, }} /> 입력 검증, 매개변수화된 쿼리, 출력 인코딩은 서로 다른 경계를 보호한다. 하나를 적용했다고 나머지가 필요 없어지는 것은 아니다. 가격의 Source of Truth는 사용자의 화면이 아니다 프론트엔드는 주문 예상 금액을 계산해 보여줄 수 있다. const displayedTotal = cartItems.reduce( (total, item) => total + item.price * item.quantity, 0 ); 이 값은 사용자에게 예상 금액을 빠르게 보여주는 데 유용하다. 그러나 사용자는 브라우저의 상태와 요청 본문을 변경할 수 있다. { "restaurantId": "restaurant-123", "totalPrice": 1 } 서버가 이 금액을 신뢰하면 사용자가 임의로 가격을 정할 수 있다. 서버가 현재 메뉴 가격과 할인 정책으로 다시 계산해야 한다. const pricedItems = await menuRepository.findOrderableItems( input.items.map((item) => item.menuItemId) ); const orderTotal = calculateOrderTotal({ requestedItems: input.items, pricedItems, coupon, deliveryFeePolicy, }); 서버의 메뉴 정보와 할인 정책이 주문 금액의 Source of Truth다. 프론트엔드의 계산값은 표시를 위한 파생 값이다. 보안 문제는 특수문자를 입력하는 공격만을 의미하지 않는다. 정상적인 API를 비정상적인 순서나 값으로 사용해 비즈니스 규칙을 우회하는 것도 보안 문제다. 다음 규칙도 서버에서 다시 확인해야 한다. 쿠폰이 현재 사용자에게 발급되었는가? 쿠폰이 해당 레스토랑에 적용되는가? 최소 주문 금액을 만족하는가? 같은 쿠폰을 이미 사용하지 않았는가? 메뉴가 주문 가능한 상태인가? 요청한 수량이 구매 제한을 넘지 않는가? 보안은 입력의 모양뿐 아니라 사용자가 서비스의 약속을 우회할 수 있는지도 확인해야 한다. 인증과 권한은 모든 중요한 행동에서 다시 만난다 고객이 로그인했다는 사실만으로 모든 주문을 조회할 수 있는 것은 아니다. const order = await orderRepository.findById( request.params.orderId ); 다른 고객의 주문 ID를 전달하면 주소와 주문 내역이 노출될 수 있다. 현재 사용자의 범위를 함께 적용해야 한다. const order = await orderRepository.findOne({ id: orderId, customerId: currentUser.id, }); if (!order) { throw new OrderNotFoundError(); } 고객은 자신의 주문만 조회할 수 있다. 레스토랑 운영자는 같은 주문을 다른 관계로 조회할 수 있다. const order = await orderRepository.findOne({ id: orderId, restaurantId: currentRestaurantMembership.restaurantId, }); 배달 기사에게는 자신에게 배정된 주문만 보여줄 수 있다. const delivery = await deliveryRepository.findOne({ orderId, courierId: currentCourier.id, }); 같은 주문이라도 주체마다 허용된 행동과 필드가 다르다. 주체 허용할 수 있는 행동 제한할 정보 고객 자신의 주문 조회·취소 내부 운영 메모 레스토랑 주문 접수·조리 상태 변경 전체 결제 정보 배달 기사 배정 주문과 배송지 확인 고객의 다른 주문 이력 고객 지원 문의 해결을 위한 제한 조회 결제 비밀값 관리자 정책상 필요한 관리 작업 불필요한 비밀번호·토큰 원문 인증은 사용자가 누구인지 확인한다. 권한은 그 사용자가 해당 주문에 특정 행동을 할 수 있는지 결정한다. 최소 권한은 사고가 발생했을 때 피해 범위를 줄인다 주문 서비스가 하나의 데이터베이스 계정으로 모든 테이블을 읽고 수정한다고 생각해 보자. order-service → users: read/write → restaurants: read/write → orders: read/write → payments: read/write → audit_logs: read/write 주문 서비스가 침해되면 필요하지 않은 사용자와 감사 로그 데이터까지 변경할 수 있다. 업무에 필요한 권한만 제공하는 편이 낫다. order-service → menu_items: read → orders: read/write → payment_records: create/read-status → audit_logs: append-only 애플리케이션 코드에서도 같은 원칙이 필요하다. type RestaurantOrderView = { orderId: string; items: OrderItem[]; requestedDeliveryTime: string; deliveryAddressSummary: string; }; 레스토랑 화면에 전체 고객 프로필이나 결제 토큰을 전달하지 않는다. 최소 권한은 정상 업무를 어렵게 만드는 것이 아니다. 계정, 서비스, 기능, 데이터 필드가 실제 책임보다 넓은 접근권을 가지지 않게 하는 일이다. 민감한 데이터는 수집하기 전부터 삭제까지 책임이 생긴다 배달 서비스를 만들 때 필요할 가능성이 있다는 이유로 모든 정보를 수집할 수 있다. type CustomerProfile = { fullName: string; dateOfBirth: string; homeAddress: string; workAddress: string; phoneNumber: string; locationHistory: GeoPoint[]; }; 그러나 수집한 데이터마다 저장, 권한, 암호화, 보존, 삭제, 사고 대응 책임이 생긴다. 서비스에 생년월일과 전체 위치 이력이 필요하지 않다면 수집하지 않는 편이 안전하다. type DeliveryAddress = { recipientName: string; phoneNumber: string; streetAddress: string; deliveryInstructions: string | null; }; 현재 배송에 필요한 정보만 저장한다. 데이터별 책임도 구분해야 한다. 데이터 보호 방법 보존 기준 비밀번호 전용 비밀번호 해싱 계정 자격 증명 갱신까지 배송지 암호화·접근 통제 사용자 설정과 법적 요구에 따라 결제 카드 제공업체 토큰 사용 원문 카드 저장 회피 주문 내역 권한·무결성·감사 거래 및 법적 보존 정책 실시간 기사 위치 최소 접근·짧은 보존 배송 수행에 필요한 기간 세션 토큰 안전한 저장·만료·철회 세션 생명주기 데이터를 보호하는 가장 단순한 방법 중 하나는 필요하지 않은 데이터를 보유하지 않는 것이다. 통신 경계마다 상대방과 메시지를 검증해야 한다 고객의 브라우저와 서버 사이에서 HTTPS를 사용하더라도 서버와 다른 시스템 사이의 통신이 자동으로 안전해지는 것은 아니다. flowchart TD A[고객 앱] --> B[배달 서비스 API] B --> C[결제 제공업체] B --> D[알림 서비스] B --> E[레스토랑 시스템] 각 연결에는 별도의 인증, 암호화, 권한, 시간 제한이 필요하다. 결제 웹훅이 들어왔다고 생각해 보자. await paymentService.markPaid( request.body.orderId ); 요청을 보낸 주체를 확인하지 않으면 누구나 주문을 결제 완료 상태로 바꿀 수 있다. 웹훅 서명을 검증해야 한다. const event = paymentProvider.verifyWebhook({ rawBody: request.rawBody, signature: request.headers["payment-signature"], }); 이 코드는 결제 제공업체의 공식 검증 방식으로 요청의 출처와 변경 여부를 확인한다. 그다음 이벤트의 의미를 검증한다. if (event.type !== "payment.completed") { return; } const payment = await paymentRepository.findByProviderId( event.paymentId ); if ( !payment || payment.expectedAmount !== event.amount ) { throw new PaymentVerificationError(); } 서명이 유효해도 이벤트 유형, 주문과의 관계, 금액, 통화, 중복 처리 여부를 확인해야 한다. 외부 서비스에서 왔다는 사실과 현재 비즈니스 작업에 사용할 수 있다는 사실은 다르다. 비밀값은 코드에 숨기는 문자열이 아니라 생명주기를 가진 자격 증명이다 데이터베이스 비밀번호와 외부 API 키를 코드에 작성하면 저장소와 배포 결과에 남는다. const paymentApiKey = "live_payment_secret"; 환경변수로 옮기면 코드와 설정을 분리할 수 있다. const paymentApiKey = process.env.PAYMENT_API_KEY; 하지만 환경변수라는 위치만으로 비밀 관리가 완성되지는 않는다. 다음 질문도 필요하다. 값은 누가 생성하는가? 개발자 개인에게 원문이 필요한가? 어느 서비스와 환경에서 사용할 수 있는가? 언제 만료되고 교체되는가? 노출되었을 때 어떻게 철회하는가? 사용 기록을 확인할 수 있는가? 이전 값에서 새 값으로 어떻게 전환하는가? 비밀 관리 시스템에서 실행 시점에 값을 받을 수 있다. const paymentApiKey = await secretManager.getSecret( "production/payment-api-key" ); 애플리케이션은 필요한 비밀만 읽을 수 있어야 한다. await authorizationPolicy.assertServiceCanRead({ service: "payment-worker", secret: "production/payment-api-key", }); 비밀값을 로그에 남기지 않아야 한다. logger.info("Payment client configured", { provider: "payment-provider", keyVersion, }); 어떤 제공업체와 키 버전을 사용했는지는 기록하되 원문 키는 기록하지 않는다. 오류는 내부 구조를 숨기면서도 복구 가능해야 한다 데이터베이스 오류를 그대로 사용자에게 반환하면 내부 정보가 노출될 수 있다. return response.status(500).json({ error: error.stack, query: error.query, }); 스택, SQL, 테이블 이름, 서버 경로가 외부 응답에 포함될 수 있다. 외부에는 안정적인 오류 형식을 제공한다. return response.status(500).json({ code: "ORDER_PROCESSING_FAILED", message: "주문을 처리하지 못했다. 잠시 후 다시 시도해 달라.", requestId, }); requestId 를 사용하면 사용자는 내부 세부정보 없이 고객 지원에 문제를 전달할 수 있다. 내부 로그에는 조사에 필요한 정보를 남긴다. logger.error("Order processing failed", { requestId, orderId, errorName: error.name, }); 그러나 다음 값은 로그에서 제외해야 한다. 비밀번호와 인증 토큰 결제 카드 원문 API 키와 암호화 키 전체 배송지와 불필요한 개인정보 쿠키와 세션 ID 원문 요청 본문 전체 보안 오류 처리는 정보를 모두 숨기는 작업이 아니다. 사용자에게는 안전한 복구 정보를, 운영자에게는 민감정보를 제외한 조사 정보를 제공하는 일이다. 로그는 공격을 발견할 수 있어야 하지만 새로운 유출 경로가 되어서는 안 된다 정상 요청만 기록하면 공격 시도를 추적하기 어렵다. 다음 사건은 보안 로그의 후보가 된다. 반복된 로그인 실패 다른 고객 주문에 대한 접근 거부 관리자 역할 변경 쿠폰 중복 사용 시도 웹훅 서명 검증 실패 비정상적으로 많은 주문 생성 비밀값 접근과 교체 민감한 데이터 내보내기 구조화된 보안 이벤트를 남길 수 있다. securityLogger.warn( "order_access_denied", { actorId: currentUser.id, orderId, requestId, ipAddressHash: hashForSecurityAnalysis(ipAddress), occurredAt: new Date().toISOString(), } ); 이 로그는 누가 어떤 주문에 접근하려 했는지 조사할 수 있게 한다. 원본 인증 토큰과 전체 요청은 포함하지 않는다. 로그도 보호 대상 데이터다. 로그를 읽을 수 있는 사람을 제한한다. 로그의 변경과 삭제를 통제한다. 서버 시간을 동기화한다. 보존 기간을 정한다. 경고 기준과 대응 담당자를 정한다. 민감정보 마스킹을 테스트한다. 기록만 하고 아무도 확인하지 않는 로그는 탐지 체계가 아니다. 파일 업로드는 저장 기능이 아니라 새로운 실행 경계를 여는 기능이다 레스토랑 운영자가 메뉴 이미지를 업로드할 수 있다고 생각해 보자. await fileStorage.save({ fileName: upload.originalName, content: upload.buffer, }); 사용자가 정한 파일명을 그대로 사용하고 파일 내용을 확인하지 않으면 경로 조작, 실행 파일 업로드, 과도한 크기의 파일 같은 문제가 생길 수 있다. 허용 범위를 명시해야 한다. const MenuImageSchema = z.object({ size: z.number().max(5 * 1024 * 1024), detected
Some business owners still treat design as a final touch, something to sort out once the product is ready and the sales start coming in. That order rarely works. Buyers form a view long before they read your prices or your story. They look at how things are arranged, how the colors sit, and whether the whole thing feels calm or rushed. This is where creative design earns its place, not as decoration, but as the first layer of trust a business builds. A brand is not built once. It is built every time someone lands on your page, opens your email, or picks up your card. The look either supports that moment or works against it. Small choices carry more weight than most owners expect. A clear heading, steady colors, and a layout that guides the eye all send the same quiet message. Someone here pays attention. That message lands before a single sentence is read, and it shapes how the rest of the visit feels. Where things often go wrong is treating each piece as a separate job. A logo made in isolation, a website built months later, and social pages filled in whenever there is time. The result feels stitched together instead of whole. A provider of wordpress website design UK usually starts with the brand, then builds the site around it, so fonts, colors and tone match from the first page to the last. When the pieces agree, the brand feels solid, and solid brands get remembered. That memory is what turns a quick visit into a returning customer, and it lasts far longer than any short lived trend.
커리어를 여러 줄로 적어보면 자주 이런 질문을 받습니다. “개발자였다가 왜 사업관리를 하게 됐나요?” 저도 한동안 그 질문에 답하기 어려웠습니다. 환경시스템공학을 공부했고, AI·IoT 교육을 수강했고, IoT 소프트웨어 개발자로 일을 시작했습니다. 이후에는 친구와 사업을 해봤고, 쏘카에서 운영과 사업관리를 경험했습니다. 지금은 주차장 업체에서 매출과 손익, 카셰어링 운영, AI와 데이터 자동화 업무를 하고 있습니다. 직함만 보면 방향이 자주 바뀐 것처럼 보입니다. 하지만 각각의 일을 지나오며 반복해서 재미를 느꼈던 장면을 모아보면, 조금 다른 흐름이 보입니다. 처음에는 기술이 재미있었다 환경시스템공학과에서 Python으로 미분과 적분을 계산해보고, R로 데이터 분석과 통계를 배웠습니다. 숫자와 코드를 이용해 무언가를 확인하는 일이 흥미로웠습니다. 6개월 AI·IoT 교육에서는 센서에서 데이터를 수집하고, 소프트웨어로 다루고, 분석과 인공지능으로 활용하는 과정을 배웠습니다. 데이터를 만들어내는 앞단을 경험한 셈입니다. 첫 회사에서는 IoT 소프트웨어 개발자로 일했습니다. 당시에는 개발자가 되는 것이 가장 분명한 다음 단계처럼 보였습니다. 실제 장치와 데이터가 연결되는 일을 배울 수 있었고, 관심이 직업으로 이어졌다는 점도 의미 있었습니다. 직접 사업을 해보니 숫자가 다르게 보였다 개발자로 약 5~6개월 일한 뒤에는 대학 동기와 스마트스토어와 유튜브 채널을 운영했습니다. 상품을 고를 때 데이터를 봤고, 영상을 만들고 업로드한 뒤 사람들의 반응을 확인했습니다. 직접 매출과 비용을 고민하고, 어떤 콘텐츠가 전달되는지도 살펴봤습니다. 사업을 정리한 뒤 남은 것은 큰 성공 경험이 아니었습니다. 대신 사업이 어떻게 돈을 벌고 쓰는지, 어떤 숫자를 봐야 다음 결정을 할 수 있는지 궁금해졌습니다. 그 질문이 쏘카로 이어졌습니다. 운영을 하며 문제의 모양을 알게 됐다 쏘카에서는 현장의 문제를 처리하고, 반복되는 업무의 흐름을 정리하고, 대시보드로 운영 현황을 확인했습니다. 지역사업팀에서는 차량을 어디에 배치할지 고민했습니다. 지역별 매출과 손익, 차량 재배치, 주차비를 함께 보며 한 지역의 운영이 어떻게 움직이는지 배웠습니다. 사업운영팀에서는 여러 팀에 차량을 배분하고, 재배치 실적을 관리했습니다. 그 과정에서 숫자를 모으는 것보다, 무엇을 같은 실적으로 볼지 기준을 정하는 일이 먼저라는 것도 알게 됐습니다. 이때 제가 재미있어하는 일이 조금 더 분명해졌습니다. 이미 있는 데이터를 보기 좋게 정리하는 일보다, 사람들이 실제로 판단하고 움직일 수 있도록 기준과 흐름을 만드는 일이었습니다. 지금은 사업과 자동화를 함께 보고 있다 현재는 주차장 업체에서 매출과 손익 보고 자료를 만들고, 주차장 안에서 운영하는 카셰어링의 운영과 정산을 관리하고 있습니다. AI 에이전트 개발, 엑셀 검수 자동화, 스크래핑과 데이터 가공 자동화, 엑셀 가공 자동화도 진행하고 있습니다. 아직 현재 진행 중인 업무가 많아 모든 내용을 자세히 공개할 수는 없습니다. 그래도 지금 맡고 있는 일에는 제가 그동안 경험한 요소들이 함께 들어 있습니다. 사업의 결과를 숫자로 정리하고, 현장의 운영을 이해하고, 반복되는 작업을 자동화하고, 더 나은 판단을 위한 구조를 만드는 일입니다. 개발에서 배운 기술적 감각, 작은 사업에서 얻은 사업 감각, 쏘카에서 경험한 운영과 데이터 정리가 서로 따로 떨어져 있지 않다는 것을 요즘 더 자주 느낍니다. 커리어는 직선보다 질문에 가까웠다 처음부터 BA나 AX 업무를 목표로 했던 것은 아닙니다. 그때그때 궁금한 일을 직접 해봤고, 경험을 쌓으며 다음 질문이 생겼습니다. 코드로 데이터를 다룰 수 있다는 것에서 시작해, 어떤 상품과 콘텐츠가 반응을 얻는지 궁금해졌습니다. 사업이 실제로 어떻게 운영되는지 알고 싶어졌고, 차량과 주차장 같은 자원이 어디에 배치되어야 하는지도 고민했습니다. 이제는 반복되는 업무를 AI와 자동화로 어떻게 줄일지 생각하고 있습니다. 돌아보면 직무가 바뀐 것이 아니라 질문의 범위가 넓어진 것에 가깝습니다. 무엇을 만드는지에서 시작해, 왜 만드는지, 어디에 배치할지, 어떻게 더 효율적으로 운영할지로 관심이 이동했습니다. 앞으로도 새로운 일을 하게 될 수 있습니다. 다만 어떤 직함을 갖게 되든 데이터를 바탕으로 문제를 구조화하고, 사람과 시스템이 더 잘 움직일 수 있는 방법을 찾는 일은 계속 좋아할 것 같습니다.
문제 해결 문제에 답이 나와있다. 문제를 자세히 보면 칸이 4칸일때 5가지 조합중 3가지 조합이 n이 3일때의 방법으로부터 파생된 걸 알 수 있다. 즉, 어떤 경우가 와도, i개 칸 건너기 = (1칸 & i-1칸을 뛰는 모든 경우의 수) + (2칸 & i - 2칸을 뛰는 모든 경우의 수)가 답이다. 혹시 겹치는 영역이 있나 했지만, 순서가 다르면 다른 경우이기 때문에 바로 점화식을 세울 수 있었다. d[i] = i개의 칸을 1칸과 2칸의 조합으로 뛸 수 있는 경우의 수. 라고 한다면 d[i] = d[i-1] + d[i-2]; 이다. 다만 1234567만큼 나눠줘야한다. 소스코드 int dp[2001]; long long solution(int n) { long long div = 1234567; dp[1] = 1; // 1 dp[2] = 2; // 2 | 1 + 1 for(int i=3; i<=n;++i) { dp[i] = (dp[i-1]%div + dp[i - 2]%div)%div; } return dp[n]; }
무슨 일이 있었나 신한·KB국민·하나·부산은행 등 시중은행을 연쇄적으로 뚫은 해킹 공격이 지난 주말 새 제2금융권까지 번졌다. 예가람저축은행에서는 신원 미상의 해커가 서버에 접근해 고객 약 4만 명의 성명·생년월일·연락처 등 개인정보가 유출됐고, 현대캐피탈에서는 주택대출 모집인 146명의 정보가 빠져나갔다. KB국민은행 119명, 하나은행 89명의 정보 유출도 추가로 확인됐다. 여기에 정부24 등 공공 시스템 정보 유출까지 겹치면서 금융·공공 보안망이 전방위로 흔들리고 있다는 우려가 커지고 있다. 공격의 특징으로는 '자동화'와 '동시다발성'이 꼽힌다. 보안 전문가들은 공격 패턴과 속도로 볼 때 AI가 침투 경로 탐색과 공격 코드 생성에 동원됐을 가능성이 높다고 보고 있다. 사안의 심각성에 경찰은 입건 전 조사(내사)에 착수했다. 금융당국의 대응도 급박하게 돌아가고 있다. 금융위원회와 금융감독원은 당초 각 금융사의 자체 점검 결과를 모아 10월 7일 회의를 열 계획이었으나, 주말 사이 2금융권 피해가 속속 추가 보고되자 소집 일정을 앞당겼다. 10월 4일 오후 정부서울청사에서 이억원 금융위원장 주재로 '금융권 긴급 상황대응 회의'가 열리며, 은행·금융투자·보험·여전·저축은행·상호금융·가상자산·핀테크 등 전 업권 협회장과 침해사고가 발생한 금융사 CEO가 총출동한다. 금융위는 AI 보안테스트·패치 과정에서 생기는 전산장애에 대해 일정 요건 충족 시 제재를 면책하기로 하고, '프런티어 AI 보안위협 금융분야 대응요령'도 마련해 배포했다. 왜 중요한가 이번 사태는 공격자가 AI를 '무기'로 삼아 금융권 보안의 약한 고리를 순차적으로 찾아내는 양상을 보여준다는 점에서 기존 해킹 사고와 결을 달리한다. 시중은행에서 저축은행·캐피탈사로 공격이 확산된 흐름은, 상대적으로 보안 투자 여력이 적은 2금융권이 AI 기반 공격의 다음 목표가 될 수 있음을 보여준다. 개별 금융사 단위의 방어만으로는 이런 자동화·동시다발 공격에 대응하기 어렵다는 것이 이번 사태로 드러난 셈이다. 또한 금융당국이 'AI 보안테스트 중 생기는 장애에 대한 제재 면책'까지 꺼내든 것은, 공격 속도에 맞춰 금융사들이 더 적극적으로 AI 보안 점검에 나설 수 있도록 유인하려는 의도로 해석된다. 이는 앞으로 금융권 보안 체계가 '사후 대응'에서 'AI 대 AI'의 상시 방어 체계로 전환되는 신호로도 볼 수 있다. 업계에서는 이번 사고를 계기로 금융권 전반의 보안 투자와 규제 프레임워크가 한 단계 강화될 가능성이 높다는 전망이 나온다. 원문: https://fnnews.com/news/202610032147279321
현업에서 데이터 분석을 요청할 때는 대개 질문이 아주 짧게 들어옵니다. “왜 매출이 떨어졌지?” “이번 달 실적이 좋은 편인가?” 질문은 짧지만, 바로 데이터를 열어본다고 답을 찾을 수 있는 것은 아닙니다. 질문 안에 어떤 상황을 말하는지, 무엇과 비교해야 하는지, 어떤 결정을 내리려는지가 충분히 담겨 있지 않기 때문입니다. 그래서 BA 업무에서 중요한 일 중 하나는 현업의 질문을 분석 가능한 문제로 바꾸는 것입니다. 질문 그대로 데이터를 찾으면 생기는 일 예를 들어 “매출이 떨어진 이유를 알려달라”는 요청을 받았다고 해보겠습니다. 매출 데이터를 월별로 그려볼 수 있습니다. 지역별로 나눠볼 수도 있고, 차량별 이용량을 확인할 수도 있습니다. 하지만 어디까지 봐야 하는지는 여전히 모호합니다. 전월과 비교해야 할까요? 지난해 같은 달과 비교해야 할까요? 전체 매출이 줄었는지, 특정 지역에서만 줄었는지 확인해야 할까요? 매출이 줄었다는 말이 이용 건수 감소인지, 건당 매출 감소인지도 확인해야 합니다. 질문을 그대로 데이터에 던지면 차트는 많이 만들 수 있지만, 의사결정에 필요한 답은 얻지 못할 수 있습니다. 먼저 질문의 목적을 확인한다 분석을 시작하기 전에 가장 먼저 확인해야 하는 것은 “무엇을 알고 싶은가”보다 “알아서 무엇을 하려는가”입니다. 같은 매출 감소를 분석하더라도 목적에 따라 필요한 분석이 달라집니다. 목표 달성률을 설명하려는 것인지 가격이나 상품 구성을 바꾸려는 것인지 일시적인 변동인지 구조적인 문제인지 확인하려는 것인지 목적이 다르면 같은 데이터에서도 봐야 할 기준과 분석 범위가 달라집니다. 성과를 설명하려는 상황이라면 목표 대비 실적과 전년·전월 비교가 먼저일 수 있습니다. 분석 질문을 구성하는 네 가지 요소 현업의 질문을 분석 문제로 바꿀 때는 다음 네 가지를 구체화합니다. 1. 분석 대상 무엇의 변화를 보려는지 정합니다. 전체 사업인지, 특정 지역인지, 특정 차량군인지, 특정 고객군인지 구분합니다. 2. 비교 기준 무엇과 비교할지 정합니다. 전월, 전년 동월, 목표값, 유사 지역, 도입 전후 등 비교 기준에 따라 결과 해석이 달라집니다. 3. 기간 언제부터 언제까지 볼지 정합니다. 하루 단위 변동을 볼지, 주간·월간 추세를 볼지, 특정 이벤트 전후를 볼지 결정합니다. 4. 판단 지표 무엇을 기준으로 좋고 나쁨을 판단할지 정합니다. 매출만 볼지, 손익·이용률·유휴율·비용까지 함께 볼지 정의합니다. 질문을 분석 문제로 다시 써보기 “왜 매출이 떨어졌지?”라는 질문을 그대로 두지 않고 다음처럼 바꿔볼 수 있습니다. 2025년 3월의 지역별 매출 감소가 전월 대비 어느 지역에서 크게 나타났는지 확인하고, 이용 건수·건당 매출·유휴 차량 비율 중 어떤 요인이 가장 크게 변했는지 분석한다. 이제 분석 대상은 지역별 매출이고, 비교 기준은 전월입니다. 기간은 2025년 3월이며, 판단 지표는 이용 건수·건당 매출·유휴 차량 비율입니다. 질문이 구체화되면 필요한 데이터도 달라집니다. 매출 합계만으로는 부족하고, 이용 건수와 차량 상태, 지역 정보가 필요할 수 있습니다. 분석 결과가 나왔을 때 어떤 행동을 할지도 조금 더 분명해집니다. 분석 결과는 다음 행동까지 연결되어야 한다 BA 업무에서 분석은 보고서 제출로 끝나지 않습니다. 결과를 본 뒤 무엇을 결정할 수 있는지가 중요합니다. 예를 들어 특정 지역의 매출 감소가 유휴 차량 증가와 연결돼 있다면 차량 재배치를 검토할 수 있습니다. 이용 건수는 유지되는데 건당 매출만 줄었다면 가격이나 상품 구성을 살펴볼 수 있습니다. 특정 기간에만 감소했다면 계절성이나 이벤트 영향을 확인해야 합니다. 분석 전에 다음 행동을 미리 생각하면, 불필요한 지표를 줄이고 실제 의사결정에 필요한 데이터에 집중할 수 있습니다. 좋은 분석 질문은 혼자 만들지 않는다 현업의 질문을 분석 문제로 바꾸는 과정에서 분석가가 혼자 모든 것을 결정할 필요는 없습니다. 질문을 보낸 사람에게 어떤 결정을 하려는지 다시 묻고, 현장 담당자에게 데이터에 기록되지 않은 맥락을 확인하고, 결과를 사용할 사람에게 어떤 형태가 편한지 물어봐야 합니다. 데이터에는 현장의 모든 이유가 들어 있지 않습니다. 숫자가 변한 이유가 시스템에 기록되지 않았을 수도 있고, 특정 기간의 운영 방식이 달랐을 수도 있습니다. 그래서 좋은 분석은 데이터만 보는 일과 현업의 맥락을 듣는 일이 함께 있을 때 만들어집니다. 질문을 바꾸면 분석의 결과도 달라진다 현업의 질문은 처음부터 완성된 분석 과제가 아닙니다. 분석가가 해야 할 일은 질문을 평가하는 것이 아니라, 질문 안에 있는 목적과 판단 기준을 함께 꺼내는 것입니다. “왜 떨어졌지?”를 “어디에서, 무엇이, 언제부터, 어떤 기준으로 변했는가?”로 바꾸면 분석의 방향이 생깁니다. “어디로 옮길까?”를 “어떤 지역의 수요와 공급 불균형을 어떤 기간 동안 해결하려는가?”로 바꾸면 필요한 데이터가 보입니다. 결국 데이터 분석의 시작은 데이터를 여는 일이 아니라 질문을 다시 쓰는 일에 가깝습니다. 질문이 구체해질수록 분석 결과는 보고서에 머무르지 않고 실제 사업 의사결정으로 이어질 가능성이 커집니다.
무슨 일이 있었나 독일 AI 기업 알레프 알파(Aleph Alpha)가 10월 3일, 자국어·영어 특화 대형언어모델 '콜리브리(Kolibri)'를 공개했다. 콜리브리는 총 781억 개 파라미터 중 토큰당 약 34.6억 개만 활성화하는 혼합전문가(MoE) 구조로, 최대 100만 토큰까지 처리 가능한 컨텍스트(기본 지원은 약 26만 토큰)를 갖췄다. 50개 레이어 중 40개는 512토큰 슬라이딩 윈도우 방식, 나머지는 전체 컨텍스트를 처리하는 하이브리드 어텐션 구조를 채택해 성능과 효율을 동시에 노렸다. 학습에는 약 24조 토큰이 사용됐고, 이 중 21.3%는 독일어 원문 및 재구성 텍스트로 채워 독일어의 언어적·문화적 정합성을 높였다. 모델 가중치 전체와 설정 파일은 아파치 2.0 라이선스로 허깅페이스에 공개됐으며, 훈련 전 과정이 독일과 핀란드 내 인프라에서만 이뤄져 EU AI법과 GDPR을 처음부터 준수하도록 설계됐다는 점이 강조됐다. 공공행정, 제조업, 항공우주 등 규제가 엄격한 '미션 크리티컬' 영역에서 자체 호스팅(셀프호스팅)이 가능하도록 특화됐다. 왜 중요한가 콜리브리는 성능 면에서 최상위 오픈웨이트 모델들과 경쟁하기보다는, '주권(sovereign) AI'라는 다른 축을 겨냥하고 있다. 미국 빅테크의 클라우드와 모델에 의존하지 않고 자국 인프라에서 학습·운영되는 LLM을 유럽 공공기관과 규제 산업에 공급하겠다는 전략으로, EU AI법 시행이 본격화되는 시점과 맞물려 있다는 점에서 시사하는 바가 크다. 그동안 오픈웨이트 모델 경쟁은 주로 성능과 비용 효율을 둘러싼 미국·중국 기업들의 경쟁으로 흘러왔다. 콜리브리는 유럽이 '최고 성능'이 아니라 '데이터 주권과 규제 준수'를 앞세운 독자 노선으로 이 경쟁에 끼어들려는 시도로 볼 수 있다. 공공조달과 규제산업에서 해외 모델 사용에 제약이 커지는 흐름을 감안하면, 성능 지표상 선두권은 아니더라도 유럽 내 공공·방산·금융 분야 수요를 흡수할 여지가 있다. 이는 앞으로 AI 패권 경쟁이 '누가 가장 강력한 모델을 만드는가'를 넘어 '누가 신뢰할 수 있는 자국산 AI 인프라를 갖추는가'로 확장될 수 있음을 보여주는 사례다. 원문: https://aleph-alpha.com/en/blog/kolibri-has-landed-a-sovereign-open-weight-model/
안녕하세요! IT 인프라 고도화와 클라우드 전환을 고민하시는 공공기관 및 국가 산하 연구원의 IT 리더 여러분. 최근 N2SF(국가망보안체계) 도입과 망 분리 규제 완화 소식에 기대감과 함께 깊은 고민에 빠지셨을 텐데요. "한정된 예산으로 어떻게 지능형 클라우드를 도입하지?" "부서마다 단절된 데이터 사일로(Silo)는 어떻게 해결할까?" "망 분리가 완화되면 엄격한 보안 규정은 어떻게 충족해야 하지?" 현장에서 이런 페인 포인트(Pain Point)를 겪고 계신다면, 오늘 이 글이 완벽한 해답이 될 것입니다. 과거의 경직된 물리적 망 분리에서 벗어나 데이터 중요도에 기반한 유연하고 안전한 인프라를 구축하기 위한 '뉴타닉스(Nutanix) 기반 차세대 고가용성(HA) 및 제로트러스트 보안 전략'을 지금부터 상세히 알아보겠습니다. 1. 물리적 망 분리의 종언과 지능형 클라우드 시대의 개막 글로벌 기술 패권 경쟁의 중심이 인공지능(AI)과 하이브리드 클라우드로 급격히 이동하고 있습니다. 대한민국 공공 부문 역시 'AI 네이티브 공공 서비스'로 패러다임을 전환하고 있죠. 하지만 지난 20여 년간 국가 안보의 절대적 기준이었던 일률적인 물리적 망 분리 정책은 클라우드 자원의 유연한 활용을 가로막는 장벽이 되어 왔습니다. 여기에 2025년에 발생한 국정자원 대전센터 화재 사고는 폐쇄적인 레거시 정보화 시스템의 취약성을 여실히 보여주었습니다. 단일 데이터센터 장애로 수백 개의 핵심 정부 시스템이 마비되었던 뼈아픈 경험은, 무중단 비즈니스 연속성의 중요성을 다시금 일깨워 주었습니다. 이러한 위기감 속에서 등장한 것이 바로 국가망보안체계(N2SF)입니다. 무조건적인 차단에서 벗어나, 데이터 중요도에 따라 보안 수준을 차등 적용하는 혁신적인 프레임워크입니다. 특히 2026년 말까지 국가정보원은 미국 국립표준기술연구소(NIST)의 SP 800-60을 참고하여 N2SF 데이터 분류 가이드라인을 더욱 구체화하여 배포할 예정입니다. 2. N2SF의 핵심: C/S/O 데이터 등급 분류 전략 공공기관 인프라 현대화의 첫걸음은 N2SF의 철학을 정확히 이해하는 것입니다. 보유한 모든 정보와 시스템은 그 중요도에 따라 세 가지 등급으로 명확히 분류되며, 이에 따라 최적화된 인프라 배치 전략이 달라집니다. 등급 데이터 특성 및 정의 인프라 및 클라우드 배치 전략 C (기밀) 국방, 외교, 수사 등 국가 안보 직결 비공개 핵심 정보 강력한 망 분리 유지. 정부 전용 데이터센터 내 폐쇄형 프라이빗 클라우드 구축 S (민감) 개인정보, 인사 등 유출 시 심각한 침해를 유발하는 정보 CSAP 인증 민간 클라우드 또는 마이크로세그멘테이션이 적용된 하이브리드 클라우드 활용 O (공개) 대국민 공개 가능한 일반 행정 정보 및 비식별 통계 개방성과 활용성 극대화를 위해 퍼블릭 클라우드 적극 연계 현장에서는 엄청난 양의 데이터를 수작업으로 분류하기가 매우 어렵습니다. 그래서 광학문자인식(OCR)과 AI 기반 자연어 처리(NLP)를 활용해 문서 내 민감 정보를 자동으로 식별하고 라벨링하는 전용 솔루션의 도입이 적극 검토되고 있습니다. 3. 레거시의 한계, 왜 공공 클라우드 표준으로 '뉴타닉스(Nutanix)'인가? N2SF가 요구하는 유연성과 확장성, 그리고 고도의 보안성을 달성하려면 기존의 3-Tier(서버-SAN-스토리지) 아키텍처에서 벗어나야 합니다. 낡은 구조는 관리의 복잡성을 가중시키고 클라우드 전환 시 막대한 비용을 발생시키기 때문입니다. 뉴타닉스(Nutanix) 하이퍼컨버지드 인프라(HCI)는 이러한 복잡성을 단번에 해결하는 '초융합' 소프트웨어 플랫폼입니다. 탁월한 보안성 인증: 뉴타닉스는 글로벌 최고 수준의 보안 무결성을 증명하는 국제 공통평가기준인 CC인증(Common Criteria) EAL2+ 등급을 획득하여 N2SF 보안성 검토 통과에 강력한 신뢰를 제공합니다. 공공기관의 신뢰: 이미 글로벌 공공기관의 96%가 자사 애플리케이션을 컨테이너화하고 있으며, 68%는 생성형 AI 환경을 구동할 만큼 그 안정성과 민첩성을 인정받았습니다. 4. 성능과 보안을 모두 잡는 하드웨어 & 스토리지 설계 연구원의 대규모 데이터 분석과 AI 워크로드를 처리하려면 강력한 하드웨어 뒷받침이 필수입니다. 공공기관 맞춤형 차세대 스토리지 기준에 부합하기 위해, 하드웨어는 PCIe Gen4/Gen5를 지원하는 End-to-End NVMe 아키텍처로 구성되어 병목 현상을 원천 제거해야 합니다. 구성 요소 추천 사양 및 기대 효과 초고성능 프로세서 Intel Xeon-Gold 5세대 6544Y 이상을 탑재하여 대규모 가상화 집적도와 복잡한 연산 병목 제거 펌웨어 보안 (Secure Boot) 위협 식별 단계에서 하드웨어 수준의 서명 검증으로 악의적인 루트킷 로딩을 원천 차단 All-NVMe 스토리지 100% NVMe 컨트롤러 기반으로 구성하여 데이터 중복 제거 및 압축 시에도 혼합 IOPS 최소 60,000 이상 보장 5. RTO 'Zero'의 기적: 액티브-액티브(Active-Active) 재해복구(DR) 국가 안보와 직결된 A1 등급 시스템의 경우, 다운타임은 곧 재난입니다. RTO(목표 복구 시간) 1시간 이내, RPO(목표 복구 시점) 실시간 복구가 필수적이죠. 이를 달성하기 위한 궁극의 무기가 바로 Nutanix Metro Availability 입니다. 지리적으로 떨어진 두 데이터센터를 동기식(Synchronous) 스토리지 미러링으로 연결하여 하나의 클러스터처럼 동작하게 만듭니다. 주 센터에 화재가 발생하더라도, 독립된 제3의 공간에 위치한 Witness VM이 상황을 감지하고 1-Click 자동 장애 조치를 수행하여 대국민 서비스의 중단을 완벽히 막아냅니다. 6. N2SF를 완성하는 제로트러스트(Zero Trust) 보안 아키텍처 망 분리가 완화된 환경에서는 '내부망에 있는 사용자도 결코 신뢰하지 않는다'는 제로트러스트(Zero Trust)가 필수입니다. 마이크로세그멘테이션: 뉴타닉스의 Flow Network Security(FNS)는 하이퍼바이저 커널에 내장된 소프트웨어 정의 방화벽입니다. 동일한 물리적 서버 내에서도 S등급 개인정보 DB와 O등급 웹 서버를 논리적으로 완벽히 격리하여, 해커의 횡적 이동(Lateral Movement)을 철저히 차단합니다. 불변성 스냅샷을 통한 랜섬웨어 방어: 데이터 백업본이 랜섬웨어에 감염되는 것을 막기 위해, Nutanix Objects 스토리지에 WORM(Write Once Read Many) 기능을 적용합니다. 한 번 기록된 백업 이미지는 지정된 기간 동안 관리자조차 삭제나 변조가 불가능해 가장 강력한 최후의 방어선이 됩니다. 결론: 성공적인 N2SF 안착을 위한 다음 단계 기술 진보의 가속도에 발맞춰 행정 효율성을 극대화하고 국가 데이터를 보호하는 것은 매우 중차대한 과제입니다. N2SF 체계로의 전환은 단순한 시스템 업그레이드가 아닌, 가장 회복 탄력적인 '디지털 대한민국'을 만들기 위한 필수적인 여정입니다. 그 든든한 파트너로서, 관리의 복잡성을 제거하고 강력한 제로트러스트 보안과 무중단 DR을 동시에 제공하는 뉴타닉스(Nutanix) 플랫폼의 도입을 강력히 제안합니다. 🚀 지금 바로 전문가와 함께 IT 인프라 혁신을 시작해 보세요! 데이터 등급 분류부터 무중단 DR 설계까지, 뉴타닉스 솔루션이 귀 기관의 예산과 환경에 맞춰 어떻게 적용될 수 있는지 궁금하시다면 망설이지 말고 상담을 요청해 주세요. 성공적인 디지털 전환의 든든한 멘토가 되어 드리겠습니다.
쏘카에서 여러 업무를 경험한 뒤, 또 한 번의 변화를 선택했습니다. 이번에는 업무의 작은 변화가 아니라 회사를 옮기는 변화였습니다. 쏘카를 떠나 주차장 업체에 합류했습니다. 이직을 결정할 때는 커리어를 한 방향으로만 쌓아야 한다는 생각과, 한 번쯤 삶에 변화를 주고 싶다는 마음이 함께 있었습니다. 지금 하던 일을 계속 확장하는 방법도 있었지만, 다른 사업과 다른 환경에서 다시 배워보고 싶은 마음이 커졌습니다. 삶에 변화를 주고 싶었다 쏘카에서 일하며 사업운영과 사업관리의 여러 장면을 경험했습니다. 차량을 배치하고, 지역의 매출과 손익을 보고, 팀의 실적을 관리했습니다. 반복되는 업무를 정리하고 데이터를 대시보드로 만드는 일도 해봤습니다. 그 경험들이 싫어서 떠난 것은 아닙니다. 오히려 여러 일을 해본 덕분에 제가 어떤 문제를 풀 때 재미를 느끼는지 조금 더 알게 됐습니다. 다만 어느 순간 새로운 환경에서 다시 시작해보고 싶다는 생각이 들었습니다. 익숙한 업무를 더 잘하는 것도 중요하지만, 다른 사업의 구조를 처음부터 이해해보는 경험도 필요하다고 느꼈습니다. 주차장 사업이 매력적으로 다가왔다 새로운 회사에서 하는 주차장 사업은 흥미로웠습니다. 주차장은 일상에서 자주 접하는 공간이지만, 그 안에는 공간 운영, 차량 흐름, 이용자 경험, 매출과 비용 관리가 함께 들어 있습니다. 쏘카에서 차량과 지역 운영을 경험했던 저에게는 익숙한 부분과 새롭게 배울 부분이 동시에 보였습니다. 기존 경험을 그대로 반복하는 것이 아니라, 다른 산업의 운영 구조에 적용해볼 수 있다는 점이 매력적으로 느껴졌습니다. 커피챗에서 본 새로운 과제 커피챗을 하면서 새로운 회사가 어떤 고민을 하고 있는지 들을 수 있었습니다. 사업을 더 깊게 분석할 필요가 있었고, 반복적인 업무를 AI로 효율화할 필요도 있었습니다. 단순히 데이터를 보고서를 만드는 수준을 넘어, 사업의 구조를 깊게 이해하고 업무 방식 자체를 개선해야 하는 상황처럼 느껴졌습니다. 그 이야기를 들으며 제가 쏘카에서 해왔던 경험과 연결되는 지점이 보였습니다. 사업 데이터를 정리하고, 운영 기준을 만들고, 대시보드와 자동화로 반복 업무를 줄이는 일입니다. 동시에 주차장이라는 새로운 사업을 배워야 한다는 점도 분명했습니다. 익숙한 문제 해결 방식을 가져가되, 새로운 현장의 언어를 다시 배워야 했습니다. 주차장 업체에서 맡고 있는 일 현재 주차장 업체에서는 매출과 손익 보고 자료를 작성하고 있습니다. 사업의 결과를 정리해 공유하고, 숫자가 어떤 의미인지 설명하는 일입니다. 카셰어링 운영도 맡고 있습니다. 해당 주차장 안에서 운영하는 카셰어링의 운영과 정산을 관리합니다. 주차장 사업과 카셰어링 사업이 만나는 지점에서 필요한 업무를 경험하고 있습니다. 운영효율화 업무도 진행하고 있습니다. AI 에이전트를 개발하고, 엑셀 검수를 자동화하고, 스크래핑과 데이터 가공을 자동화하고, 반복적인 엑셀 가공 업무를 줄이는 일을 하고 있습니다. 아직 진행 중인 업무가 많기 때문에 구체적인 성과나 내부 수치를 지금 모두 설명하기는 어렵습니다. 다만 지금까지 해온 데이터 구조화와 운영 개선 경험이 새로운 환경에서도 이어지고 있다는 점은 분명히 느끼고 있습니다. 완전히 다른 길이라기보다, 다음 단계에 가깝다 쏘카에서 주차장 업체로 이동하면서 업종은 달라졌습니다. 하지만 제가 계속 해온 일에는 공통점이 있습니다. 사업에서 발생하는 데이터를 정리하고, 운영 과정의 문제를 찾고, 사람들이 더 빠르게 판단할 수 있도록 기준과 도구를 만드는 일입니다. 쏘카에서는 차량과 쏘카존, 지역 운영 데이터를 봤다면 지금은 주차장과 카셰어링, 매출과 손익 데이터를 보고 있습니다. 여기에 AI와 자동화를 활용해 반복 업무를 줄이는 과제가 더해졌습니다. 처음부터 이 흐름을 계획한 것은 아닙니다. 개발을 배웠고, 작은 사업을 해봤고, 쏘카에서 사업운영을 경험했고, 이제는 주차장 사업에서 새로운 문제를 풀고 있습니다. 현재의 업무가 모두 정리되면, 이 회사에서 어떤 문제를 어떻게 해결했는지도 별도의 글로 자세히 남겨보려고 합니다. 지금은 새로운 환경에서 배우고 시도하는 과정 자체를 기록해둡니다. 다음 글에서는 지금까지의 커리어를 한 번에 돌아보겠습니다. 개발, 창업, 쏘카 운영, 주차장 업체의 데이터와 자동화 업무를 거치며 제 관심이 어떻게 ‘기술을 만드는 일’에서 ‘사업을 더 잘 움직이게 하는 일’로 넓어졌는지 정리해보겠습니다.