application.properties vs application.yml(작성중)
velog
aaaa
Score: 54.4Confidence: 49%
View offerLoading the catalog…
THE AI OPPORTUNITY INDEX
Find your next AI tool. Explore free access, trials, and credits — all in one place.
velog
aaaa
Score: 54.4Confidence: 49%
View offervelog
2026년 9월 22일, 미국 국제무역위원회(ITC)가 웨어러블 유축기에 대한 미 관세법 제337조 조사를 개시했다(사건번호 337-TA-1522, 연방관보 2026년 9월 24일 게재). 제소인은 미국 Willow Innovations와 영국 관계사 Willow Blossom Holdco다. Willow는 2017년 브라 안에 넣는 착용형 유축기를 처음 내놓은 회사로, 2025년 3월에는 영국의 유축기 브랜드 Elvie를 인수해 제품군을 넓혔다. 제소인 Willow의 착용형 유축기(왼쪽)와 앤커가 eufy 브랜드로 판매하는 착용형 유축기(오른쪽). ITC는 2026년 9월 22일 이 제품군에 대한 관세법 제337조 조사를 개시했다. (이미지 출처: 각 사 공식 자료) 피제소인은 열두 곳이다. 중국 광둥성 선전·포산·산터우의 소형가전·육아용품 업체들, 미국에 주소를 둔 법인들, 말레이시아 법인, 그리고 충전기로 잘 알려진 앤커(Anker)의 홍콩 법인과 미국 유통법인이 섞여 있다. 앤커는 eufy 브랜드로 웨어러블 유축기를 판매한다. 앤커 계열은 그중 두 곳이고, 나머지는 미국 시장에서 각자의 브랜드나 제조 물량으로 같은 제품군을 공급하는 주체들이다. 조사 개시는 침해가 인정됐다는 의미가 아니다. 담당 행정판사도 아직 지정되지 않았고, 침해 여부와 권리의 유효성 판단은 이제부터 시작된다. 이 사건에서 한국의 소비재·디바이스 기업이 먼저 볼 것은 결론이 아니라 제소인이 들고 나온 권리의 구성이다. 주장된 다섯 건 가운데 두 건이 제품의 외관에 관한 권리, 즉 디자인특허다. 제소장에 오른 다섯 건의 권리 실용특허는 미국특허 제11,660,380호 「Breast pump system with collection container」(2023년 5월 30일 등록), 제12,370,292호 「Breast pump assembly」(2025년 7월 29일 등록), 제11,813,388호 「Breast pump system」(2023년 11월 14일 등록) 세 건이다. 여기에 디자인특허 제D1,053,344호 「Container for a breast pump」(2024년 12월 3일 등록)와 제D1,031,993호 「Breast pump bottle」(2024년 6월 18일 등록)이 더해졌다. 미국 디자인특허 제D1,053,344호 「Container for a breast pump」의 도면 (출처: USPTO 공보) 다섯 건의 출처는 한 곳이 아니다. 제11,813,388호와 디자인특허 제D1,031,993호는 원래 영국 Chiaro Technology, 즉 Elvie의 출원이었다. Willow가 2025년 3월 Elvie의 제품 포트폴리오를 인수했고, 제D1,031,993호에는 2025년 6월 20일 Willow Blossom Holdco로 권리가 이전된 기록이 남아 있다. 인수 자산에 실용특허와 디자인특허가 함께 담겼고, 그렇게 모인 권리가 1년여 뒤 이번 제소의 근거가 됐다. 미국의 디자인특허와 한국의 디자인권은 같은 대상을 다른 그릇에 담은 것이다 미국은 특허법 안에 디자인특허(design patent)를 두고 있다. 우리가 흔히 특허라고 부르는 실용특허(utility patent)와 나란히, 물품의 장식적 외관을 보호하는 권리를 같은 법률 체계에 둔 것이다. 한국에서 외관에 관한 권리는 특허법이 아니라 디자인보호법이라는 별도의 법률에 따른 디자인권으로 존재한다. 그래서 같은 대상을 두고 미국 사건을 말할 때는 디자인특허, 한국 제도를 말할 때는 디자인권이라고 부르게 된다. 이름과 그릇이 다를 뿐 보호하려는 것은 제품의 겉모습으로 같다. 법이 나뉘어 있다고 해서 전략까지 나뉘는 것은 아니다. 미국에서 한 사건에 실용특허와 디자인특허를 함께 주장하듯, 한국에서도 같은 제품을 두고 특허권과 디자인권을 각각 확보해 함께 행사할 수 있다. 글로 그린 권리와 도면으로 그린 권리 특허의 권리범위는 청구항의 글로 정해지고, 디자인권의 권리범위는 도면으로 정해진다. 보호 대상이 갈린다는 뜻은 아니다. 제품 밖으로 드러나는 구조적 특징도 글로 적어 특허로 받을 수 있고, 그 구조가 이루는 외관은 디자인권으로 받을 수 있다. 같은 제품의 같은 부분을 두 권리가 각각 다른 방식으로 붙잡는 셈이다. 미국 디자인특허 제D1,031,993호 「Breast pump bottle」의 도면. 디자인권의 권리범위는 도면으로 정해진다. (출처: USPTO 공보) 차이는 붙잡는 방식에서 나온다. 글은 구성요소를 세우고 그 조합으로 경계를 긋는다. 도면은 형태를 그대로 제시하고 그 형태를 기준으로 경계를 긋는다. 디자인권이 유사한 형태에까지 미치듯 특허에도 균등한 구성까지 미치는 법리가 있어, 어느 쪽이 더 넓다고 말할 수 있는 문제는 아니다. 중요한 것은 두 권리가 만드는 금지영역의 모양이 다르다는 점이다. 상대가 청구항의 구성 하나를 바꿔 특허를 비켜 갔더라도 외관이 그대로라면 디자인권에 걸리고, 외관을 손봤더라도 구성이 남아 있으면 특허에 걸린다. 둘을 함께 확보해 둔 기업은 상대가 빠져나갈 길을 두 번 좁힌다. 이번 제소장이 실용특허 세 건과 디자인특허 두 건을 나란히 올린 구성도 같은 맥락에서 읽힌다. 입증 단계에서 보여야 할 것도 권리마다 다르다. 청구항이 내부 구조를 담고 있으면 제품을 분해하고 작동을 분석해야 할 수 있고, 외부로 드러난 구조나 배치를 담고 있으면 제품을 늘어놓고 대비하는 쪽이 빠르다. 디자인권은 도면과 제품의 형태를 대비하는 데서 출발한다. 어느 쪽이 더 수월하다고 일반화할 일은 아니지만, 권리를 둘 다 갖춘 쪽은 사안에 따라 입증의 경로를 고를 수 있다. 유효성 판단도 따로 간다. 실용특허가 무효 공방에 휘말려도 디자인권은 별개의 권리로 남는다. 이번 사건에서 어느 권리가 어떻게 판단될지는 지금 알 수 없다. 다만 특허만 준비한 기업과 외관까지 함께 준비한 기업은 분쟁의 출발선에서 쥐고 있는 카드가 다르다. 외관만이 아니라 화면도 대상이 된다 디자인권의 대상은 제품의 겉모습에서 끝나지 않는다. 한국의 디자인보호법은 디자인의 정의에 물품과 그 부분, 글자체와 함께 화상을 포함하고 있다. 기기의 조작이나 기능 수행을 위해 화면에 표시되는 도형과 기호를 그 자체로 등록받을 수 있다는 뜻이다. 미국에서도 화면 사용자 인터페이스는 디자인특허의 대상이고, 애플과 삼성전자 사건에서 다뤄진 디자인특허 세 건 가운데 하나가 화면 UI에 관한 것이었다(제D604,305호). 화면에 표시되는 사용자 인터페이스도 디자인권의 대상이 된다. (출처: USPTO 공보) 하드웨어를 만드는 회사는 제품 외관까지는 챙기면서 함께 쓰는 앱 화면은 권리로 남기지 않고, 소프트웨어 회사는 디자인권을 자기 영역이 아니라고 여긴다. 제품의 첫인상이 화면에서 결정되는 경우가 늘어나는데도 그 화면만 권리 없이 놓여 있는 셈이다. 그래서 지금 점검할 것 점검 항목은 세 가지다. 제품의 외관을 권리로 확보했는가, 함께 쓰이는 화면을 권리로 확보했는가, 그리고 그 권리들이 특허와 같은 관리 체계 안에 들어와 있는가. 크라우드펀딩이나 SNS로 제품을 먼저 보여준 경우에는 신규성 상실의 예외를 주장할 수 있는 기간이 정해져 있으므로, 공개 시점과 출원 시점의 간격을 함께 확인해야 한다. 디자인권은 등록까지 걸리는 기간이 특허보다 짧아, 출시 일정이 촉박할수록 먼저 손에 쥘 수 있는 권리이기도 하다. 자유실시(FTO) 검토에 경쟁사 디자인권의 도면 대비가 들어가 있는지도 봐야 한다. 실용특허만 훑고 넘어간 FTO 보고서는 이번 사건과 같은 구조에서 절반만 답한 자료가 된다. 국내 ODM·부품 제조사도 마찬가지다. 최종 브랜드를 걸고 파는 회사가 아니어도 같은 제품 경로에 놓여 있으면 피제소인 명단에 함께 오를 수 있다는 것이 이번 목록이 보여주는 구조다. 337-TA-1522는 이제 담당 행정판사 지정과 목표일정 설정 단계로 들어간다. 결론이 어느 쪽으로 향할지는 지금 말할 수 없다. 다만 제소장이 짜인 방식은 이미 하나를 보여주고 있다. 미국에서 모방품에 대응하겠다고 나선 기업이 기술 기반 실용특허와 나란히 도면 기반 디자인특허를 꺼내 들었다는 사실이다. 당신 회사의 제품은 디자인권으로 남아 있는가. BLT 칼럼은 BLT 파트너변리사가 작성하며 매주 1회 뉴스레터를 통해 발행됩니다. 뉴스레터 구독신청 필자 소개 정태균 파트너변리사는 BLT 전략본부장으로 스타트업들의 IP전략, BM전략, 시장진출(GTM) 전략 수립을 지원하고 있습니다. 필자는 연세대학교 전기전자공학과를 졸업하고, 2011년 48기 변리사 시험에 합격했으며, 현재 여러 분야의 스타트업의 IP(특허, 상표, 디자인)업무 뿐만 아니라 비즈니스 참여하여 성장을 지원하고 있습니 다. 특허법인 BLT 누군가는 특허를 만들 때, BLT는 당신의 사업의 성공을 만들어 냅니다. The Only Firm for Your Success!! ** 원문 보러가기 **
Score: 54.4Confidence: 49%
View offervelog
When it comes to choosing rice grains to decorate your dining table, the options available can be a little daunting, and because of this, we receive inquiries about what sets our Oscar Basmati Rice apart from others, especially what makes the Noor Rice variety different in quality, flavor, and value. Our staff at Kuber Agro, the parent firm behind the Oscar Basmati Rice brand, has taken the initiative to make this detailed FAQ on Noor Basmati Rice . You will come to know many things about Oscar Noor rice, such as where it is sourced from, how to cook it, how it is aged, and what is current noor rice price in the market. Quick Facts About Noor Basmati Rice What is Noor basmati rice? The tree is a premier offering from the Oscar Basmati Rice range manufactured by Kuber Agro. Noor Basmati rice has long, slender grains and an alluring natural aroma. Basmati rice is among the most favored rice grown, since more than 85% of the rice consumers everywhere use aged basmati, as it is known for its good cooking properties. Highlights of Noor Basmati Rice 1. Extensive Cooking Options The grain does well while preparing meals for every occasion; its incredibly firm texture allows it to soak in spices very well. 2. Etymology and Origin The paddy we use comes from the fertile and snow-fed areas of the Himalayan foothills. The best climate provides unique flavor and aroma to every single grain. 3. Natural Aging Method We use natural aging for this premium basmati rice. Aging helps in removing moisture from the grain, resulting in the elongation of the grain to double its size without breaking while cooking. Comparison of rice features and advantages The cooked grains are long and thin and can elongate by double without breaking. Cooked rice is fluffy and non-sticky. Paddy is sourced from authentic Himalayan regions. Natural aging of rice before sale to remove excess moisture from the rice. Expert Suggestion: It’s important to treat this premium Basmati rice with cold water for about 20–30 minutes before cooking. This process provides an opportunity for the rice to soak and absorb water slowly, maximizing elongation and fluffiness! Conclusion At Kuber Agro, we think meals should always be celebrated. The Oscar Noor Basmati Rice comes with its unique fragrance, long grains, and tastiness and is available to cook. Ready to spice up your cooking process? Get Oscar Noor Premium Basmati Rice now and enjoy the results.
Score: 54.4Confidence: 49%
View offervelog
Order pickers and reach trucks are both common electric warehouse machines, and both can operate in narrow aisles and access elevated racking. Because of these similarities, warehouse managers frequently ask the same question: Should I buy an order picker or a reach truck? The simplest answer is: Choose an order picker when workers need to pick individual cartons, cases or items directly from the rack. Choose a reach truck when the primary task is storing and retrieving complete pallets. That difference sounds simple, but the right decision also depends on rack height, aisle width, SKU profile, order volume, load weight and warehouse workflow. This guide compares order pickers vs reach trucks in detail and explains which type of equipment is better for different warehouse applications. Order Picker vs Reach Truck: Quick Comparison Feature Order Picker Reach Truck Primary purpose Individual item, carton or case picking Full pallet storage and retrieval What is elevated? Operator and picking platform Forks and pallet Operator reaches products directly Yes Normally no Full pallet handling Limited/model dependent Yes High-rack access Yes Yes Narrow aisle operation Yes Yes Best for e-commerce picking Excellent Limited Best for pallet put-away Limited Excellent Typical warehouse role Order fulfillment Pallet storage Common power source Electric Electric Best SKU profile Many SKUs / smaller picks Palletized inventory Typical work pattern Pick many items from different locations Move complete pallets between locations The key difference is therefore not simply how high each machine can lift. It is what you are trying to lift. What Is an Order Picker? An order picker is a warehouse vehicle designed to raise the operator to the level of stored inventory. Instead of bringing an entire pallet down from the rack, the operator travels to the correct location, elevates with the platform and selects the required products directly from the shelf. This makes order pickers particularly useful when a warehouse fulfills orders containing individual units, cartons or cases from many different storage locations. Common applications include: E-commerce fulfillment Retail distribution Spare-parts warehouses Pharmaceutical distribution Electronics warehouses Apparel distribution Wholesale warehouses Small-component storage Shelf replenishment Inventory counting Order pickers are available in several formats, ranging from compact self-propelled picking platforms for moderate rack heights to large high-level order picker trucks. Current conventional warehouse order pickers can also reach substantial heights. Toyota, for example, lists order picker lift heights of up to 390 inches for selected models and describes them specifically as equipment that allows operators to reach elevated rack positions for case picking. Compact self-propelled order pickers serve a somewhat different application. Rather than handling very large palletized loads, they can provide powered travel and elevated operator access for smaller and medium-sized warehouses. WIZPLUS, for example, offers self-propelled order picker configurations designed to allow a single operator to travel between pick locations and select items directly from racking. Its OPC-03 and OPC-04 configurations provide 3 m and 4 m lift-height options for lower- and medium-height warehouse picking applications. What Is a Reach Truck? A reach truck is an electric warehouse forklift designed primarily for storing and retrieving palletized loads from high racking. Unlike a conventional counterbalance forklift, a reach truck uses a compact chassis and supporting baselegs to operate in relatively narrow warehouse aisles. Its forks can extend forward—or “reach”—into pallet racking. That reach mechanism allows the truck to position pallets at substantial heights while maintaining a relatively compact footprint. Toyota describes reach trucks as narrow-aisle electric forklifts intended for high-density warehouse storage and notes that many configurations can operate in approximately 8–10 ft aisles depending on the load and machine setup. Modern reach trucks can also achieve considerable lift heights. Toyota's current standard Reach Truck lineup includes configurations with capacities from approximately 2,500 to 4,500 lb, while its broader range includes high-capacity machines capable of reaching significantly higher warehouse racking. The important point is that the operator stays in the truck while the forks and pallet rise. That is fundamentally different from an order picker. What Is the Main Difference Between an Order Picker and a Reach Truck? The main difference is what happens at the rack. With an order picker, the operator rises to the inventory. With a reach truck, the forks rise to the pallet. Imagine a rack containing 50 cartons. A customer order requires only three cartons. With an order picker, the operator can rise to the correct rack level, select three cartons and continue to the next pick location. A reach truck would normally retrieve the complete pallet. Now consider a different situation. The warehouse receives a pallet containing 800 kg of packaged products and needs to store the entire pallet on an upper rack. That is a reach truck application. This leads to a useful rule: Item or case picking → Order picker Full pallet handling → Reach truck Order Picker vs Reach Truck for Narrow Aisles Both machines can be suitable for narrow warehouse aisles, so it is incorrect to assume that one category automatically wins. The correct choice depends on the exact machine and warehouse layout. Reach trucks were specifically developed to combine high pallet storage with narrower aisle requirements than conventional counterbalance forklifts. Toyota currently describes typical reach-truck aisle requirements as approximately 8–10 ft depending on configuration. Order pickers are also commonly used in narrow-aisle warehouses. However, there is a major range of machine sizes within the category. A high-level forklift-style order picker is significantly different from a compact self-propelled stock-picking platform. Compact machines may be especially attractive for: Small warehouses Retail stockrooms Parts storage E-commerce facilities Facilities transitioning from ladders Mixed-layout warehouses Medium-height racking Before buying either machine, measure: Aisle width Rack-to-rack clearance Turning space Cross aisles Door openings Elevator dimensions Maximum rack height Floor conditions Do not rely solely on a manufacturer's use of the phrase “narrow aisle.” Compare the actual dimensions of the machine with your warehouse. Order Picker vs Reach Truck for High Racking Both can reach high warehouse racking, but they solve different problems at height. A reach truck allows the operator to place or retrieve a complete pallet from an elevated rack position. An order picker raises the operator so products can be selected directly. Some modern reach trucks can achieve extremely high lift heights. Toyota states that its standard and high-capacity reach truck ranges can reach approximately 37 ft and 45 ft respectively in selected configurations. High-level order pickers can also operate at substantial rack heights. The difference is therefore not: Which machine can go higher? The better question is: What needs to happen when the machine reaches that height? If a pallet needs to come down, use pallet-handling equipment. If an employee needs to pick individual products, use order-picking equipment. Which Is Better for E-Commerce Warehouses? For many e-commerce fulfillment operations, the order picker is the more relevant machine. E-commerce warehouses frequently store thousands of SKUs and receive orders containing small quantities of several different products. A typical employee might need to retrieve: Two cartons from aisle A One product from aisle C Three units from aisle F Another item from aisle H Taking down a full pallet at every location would be extremely inefficient. An order picker allows the employee to move through the warehouse and select only what is required. Compact self-propelled order pickers can be especially useful in smaller and medium-sized e-commerce facilities where rack heights do not justify a large high-level warehouse truck. However, e-commerce distribution centers still need reach trucks. Why? Because inventory first needs to be placed into reserve storage. A common workflow is therefore: Reach truck → pallet put-away and replenishment Order picker → customer order fulfillment Large fulfillment centers frequently use both. Which Is Better for Pallet Handling? The reach truck wins clearly. Reach trucks are specifically designed to transport, lift, store and retrieve palletized loads. Current commercial reach trucks commonly offer load capacities measured in thousands of pounds. Crown, for example, lists current reach-truck configurations with capacities up to 4,500 lb and lift heights exceeding 400 inches depending on model. If your warehouse primarily handles: Full pallets Palletized raw materials Bulk inventory Manufacturing inputs Reserve storage Inbound palletized products Outbound pallet loads a reach truck will generally provide much greater utility. An order picker should not be selected as a substitute for dedicated pallet-handling equipment simply because both machines operate around warehouse racks. Can an Order Picker Move Pallets? Some conventional order picker trucks incorporate forks and can carry pallets or picking platforms. However, their primary purpose is still different from a reach truck. The pallet on an order picker often functions as the surface onto which the operator places picked cases or products while completing the order. A reach truck is specifically engineered around manipulating complete pallets into and out of racking. So if the primary objective is moving pallets, choose a reach truck. If the objective is building orders from products stored on pallet
velog
MMD MIkumikudance 미쿠미쿠댄수웅. 프로토타이핑으로 생각하고 접근했으나 이미 유니티짱이 있다.   2D, 3D, SD(?) 다 있다. 음성도 있고 툰쉐이더 도 준다. 미국 미국 댄스 모델은 대부분 니코입체, 브로우롤에서 배포을 하는데 다운로드를 받아 보면 각종 규약들에 묶여 있는데 팔아 먹을려고 한다면 결국 처음부터 다시 모델링 하거나 사와야 한다. 컨버팅 과정은 구글 검색은 자료가 많아서 보고 따라하면 되지만 불러온 모델들의 세세한 부분을 유니티에 맞게 고치려 핟다면 돈을 써서 잘하는 사람들의 결과물을 사오거나 돈 없는 사람들은 결국 모든걸 다시 배워야 한다. 결국 팔아먹지는 못하고 취미로 해야돠는데 돈벌이가 안되면 대부분 동기는 사라진다. 도파민도 보상 기대 심리가 큰 영향을 미친다고 들었는데 이렇게 괴면 대부분은 그냥 포기한다. 아니 어찌보면 포기하는게 맞다. 같이 생활하는 식구라도 있는 일반적인 사고를 가진 사람이라면... 결국 미쿠미쿠댄스용은 미쿠미쿠댄스용으로 블렌더용은 블렌더용으로 유니티, 블렌더용 모델은 블렌더로 만들어서 쓰거나 디지털 어셋을 사서 쓰는게 내가 내린 결론이다. 모델링 공부도 비용(돈 / 시간) 들어가고 프로그래밍 하나도 제대로 못하는놈이 다른 작업 가지고 끙끙 대면 고민 하고 있으니 시간만 잘 가고 뭐 하나 남기는게 없다. 그러다 대 AI 시대라고 해서 해 시험을 해보는데... Continue?
Score: 54.4Confidence: 49%
View offervelog
최종 프로젝트 회고 사실 이미 7월에 프로젝트를 마무리하고 포트폴리오도 완성을 했지만, 취준을 핑계로 내팽겨쳤던 프로젝트에 대한 회고를 이제야 해보려한다. Full Architecuter UtterAI — EKS 클러스터 편 언어재활사(SLP)가 상담 음성을 올리면 STT·화자분리 → 언어 지표 계산 → 리포트 생성까지 처리하는 AI 서비스의 인프라를, EKS 위에서 어떻게 설계하고 무엇을 깨뜨려 가며 고쳤는지 정리한다. EKS cluster 들어가며 이 글은 "EKS를 이렇게 구성했다"는 소개보다 " 이렇게 구성했더니 이게 터졌고, 이렇게 고쳤다 "에 가깝다. 아키텍처 문서는 결과만 남지만, 회고에는 그 결과에 도달하기까지 틀렸던 판단이 남아야 한다고 생각한다. 먼저 요약. API·CPU Worker·GPU Worker·Batch Worker를 하나의 EKS 클러스터 에서 운영했다. 고정 capacity는 System Managed Node Group , 변하는 워크로드는 전부 Karpenter NodePool 로 분리했다. Pod 수는 KEDA(SQS backlog 기준) , 노드 수는 Karpenter 가 결정한다. GPU·Batch는 scale-to-zero , CPU Worker는 warm Pod 1개를 유지한다. prod 부하 시험에서 CPU 1→10(168초), GPU 0→4(306초), Batch 0→5(347초) 확장을 확인했다. 인스턴스 사용시간이 47% 늘어난 구간에서도 EC2 비용은 33.8% 줄었다. 그리고 그 과정에서 Pod가 16시간 동안 ContainerCreating 에 멈춰 있기도 했다. 1. 왜 EKS였나 솔직히 처음에는 "쿠버네티스를 써 보고 싶어서"가 없었다고는 못 한다. 하지만 끝까지 EKS를 유지한 이유는 워크로드가 서로 너무 달랐기 때문이다. 워크로드 특성 필요한 자원 확장 기준 Backend API 동기 HTTP, 짧은 응답 일반 CPU/메모리 항상 준비된 replica CPU Worker 오디오 전처리, Bedrock 리포트 CPU/메모리 SQS backlog GPU Worker STT, 화자분리 GPU 1개 SQS backlog, 유휴 시 0 Batch Worker RAG 문서 ingest CPU/메모리 SQS backlog, Spot 우선 처리 경로는 이렇다. 사용자 → Backend API │ audio-preprocess SQS ▼ CPU Worker │ gpu-inference SQS ▼ GPU Worker → transcript │ (사용자 확정 후) report-analysis SQS ▼ CPU Worker → Bedrock → report 한 가지 짚고 넘어갈 점: EKS를 골랐다고 EC2를 안 쓰는 게 아니다. EKS의 노드도 결국 EC2다. 선택지는 "EC2냐 아니냐"가 아니라 운영 모델이었다. EC2 직접 운영 : control plane 비용은 없지만, "SQS가 쌓이면 worker를 늘리고, 그 worker를 담을 서버를 띄우고, 다 끝나면 GPU 서버를 끈다"를 CloudWatch alarm + Lambda + ASG로 직접 조립해야 한다. ECS Fargate : API만 있었다면 가장 단순했을 것이다. 하지만 가장 비싼 GPU 워크로드를 같은 모델로 다룰 수 없었다. ECS on EC2 : 기술적으로는 가능했다. 다만 KEDA·Karpenter·Argo CD·External Secrets가 해 주는 일을 ECS 방식으로 다시 조합해야 했다. 결국 가장 비싼 GPU 워크로드가 플랫폼 선택을 결정했다. 반대로 말하면 GPU가 없고 API 한두 개뿐인 서비스였다면 EKS는 과했을 것이다. control plane 비용, system 노드, add-on 운영, "어느 controller가 이 필드를 소유하는가" 같은 문제를 전부 떠안아야 하기 때문이다. 이 글의 절반은 그 대가에 대한 이야기다. 2. 클러스터 구조 2-1. System은 Managed Node Group, 나머지는 Karpenter 영역 프로비저닝 배치 대상 System Managed Node Group (On-Demand, 고정) CoreDNS, KEDA, Karpenter, Argo CD, ESO 등 api Karpenter NodePool Backend blue/green cpu-worker Karpenter NodePool 오디오 전처리·리포트 Worker batch-worker Karpenter NodePool RAG ingest Worker gpu Karpenter NodePool STT·화자분리 Worker Karpenter controller 자신은 Karpenter가 만든 노드 위에 올리면 안 된다. 그래서 CriticalAddonsOnly taint가 걸린 고정 system 노드에 controller들을 모으고, 수요가 변하는 워크로드만 Karpenter에 맡겼다. NodePool은 워크로드별로 성격을 다르게 줬다. NodePool 인스턴스 capacity consolidation api t3.medium Spot + On-Demand WhenEmptyOrUnderutilized, 30초 cpu-worker m5/m5a/m6i/m6a xlarge Spot + On-Demand WhenEmptyOrUnderutilized, 5분 batch-worker c5/c6i/c6a/m5/m6i large·xlarge Spot + On-Demand WhenEmptyOrUnderutilized, 30초 gpu g4dn/g5 xlarge·2xlarge Spot + On-Demand WhenEmpty, 10분 consolidation 시간이 제각각인 데는 전부 사연이 있다. 4장에서 다룬다. 2-2. 격리는 nodeSelector + taint/toleration으로 GPU 노드에는 dedicated=ai-gpu , nvidia.com/gpu taint를 걸고, GPU Worker만 toleration과 nvidia.com/gpu: 1 request를 갖는다. 이 조합 덕분에 일반 Pod가 비싼 GPU 노드에 올라가 노드 회수를 막는 일이 없다. resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 nodeSelector: workload: ai-gpu tolerations: - key: dedicated value: ai-gpu effect: NoSchedule 2-3. Terraform은 레이어로, 앱은 GitOps로 00-iam → 01-network → 02-eks → 03-services → 04-addons → 05-agentcore │ ▼ Argo CD (Kustomize overlay dev/prod) VPC·EKS처럼 느리고 파괴 영향이 큰 것과, 하루에도 몇 번씩 바뀌는 Deployment를 같은 state에 넣지 않는 게 핵심이다. Terraform은 클러스터와 controller(Helm)까지만 책임지고, NodePool·ScaledObject·Deployment는 Argo CD가 Git의 Kustomize overlay를 따라가게 했다. 3. 오토스케일링: 두 개의 오토스케일러 3-1. CA + HPA로 갔다가 돌아왔다 지금 구조는 KEDA + Karpenter지만, 직선으로 온 게 아니다. 초기에 KEDA를 도입 비교 기준선을 만들려고 Cluster Autoscaler + CPU 기반 HPA 로 전환 다시 KEDA + Karpenter 로 복귀 CPU 기반 HPA를 직접 써 보고 확실히 알게 된 건, 비동기 worker에서 CPU 사용률은 작업량을 대표하지 못한다 는 점이다. 큐에 메시지가 쌓여도 worker가 Bedrock 응답을 기다리는 중이면 CPU는 낮다. GPU 작업량은 애초에 CPU 사용률로 보이지 않는다. 스케일 신호는 "지금 얼마나 바쁜가"가 아니라 "얼마나 밀려 있는가"여야 했다. 3-2. 제어 루프 SQS backlog → KEDA가 queue depth 조회 → (KEDA가 만든) HPA가 replica 조정 → Pod가 Pending → Karpenter가 NodeClaim 생성 → EC2 기동 → Node Ready → Pod Running KEDA/HPA : Pod가 몇 개 필요한가 Karpenter : 그 Pod를 담을 EC2가 몇 대, 어떤 타입으로 필요한가 이 둘은 별개의 타이머와 별개의 상한 을 가진다. 이걸 머리로는 알았지만 몸으로 이해한 건 장애를 몇 번 겪은 뒤였다. 3-3. 현재 prod 값 Worker min max queueLength cooldown CPU 1 10 5 300초 GPU 0 4 1 600초 Batch 0 5 3 300초 queueLength 는 큐의 최대 길이가 아니라 Pod 하나가 담당하길 기대하는 메시지 수 다. desired = ceil(메시지 수 / queueLength) . GPU queueLength=1 : GPU Worker는 작업을 하나씩 직렬 처리하므로 "메시지 1개 = Pod 1개"가 처리 모델과 일치한다. CPU min=1 : 오디오 전처리와 리포트는 호출 빈도가 높아, 매번 0에서 깨우면 cold start가 사용자 경로에 들어온다. 비용보다 응답 안정성을 택했다. GPU/Batch min=0 : 유휴 GPU 비용을 없애는 대신 첫 요청의 cold start를 감수했다. prod GPU Worker의 ScaledObject는 이렇게 생겼다. apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: utterai-ml-gpu-worker-scaledobject namespace: utterai-ai-gpu spec: scaleTargetRef: name: utterai-ml-gpu-worker minReplicaCount: 0 maxReplicaCount: 4 cooldownPeriod: 600 advanced: horizontalPodAutoscalerConfig: behavior: scaleDown: stabilizationWindowSeconds: 600 triggers: - type: aws-sqs-queue authenticationRef: name: keda-aws-pod-identity kind: ClusterTriggerAuthentication metadata: queueURL: "https://sqs.ap-northeast-2.amazonaws.com/<ACCOUNT_ID>/utterai-prod-gpu-inference-queue" queueLength: "1" activationQueueLength: "0" awsRegion: ap-northeast-2 identityOwner: operator 4. 깨뜨리면서 배운 것들 4-1. 첫 메시지가 GPU를 깨우지 못했다 activationQueueLength: 1 로 뒀더니 메시지 1개로는 scale-to-zero 상태에서 깨어나지 않았다. 활성화 조건이 queue > activationQueueLength 라서 1 > 1 은 거짓이기 때문이다. 0으로 바꿔 해결했다. "1개부터 깨운다"는 의도로 1을 적었는데 정확히 반대로 동작했다. 임계값은 >= 인지 > 인지부터 확인해야 한다. 4-2. KEDA와 Argo CD가 서로를 되돌렸다 KEDA: 큐가 비었다 → replicas 0 Argo CD selfHeal: Git에는 replicas 1 → 다시 1 KEDA: 다시 0 (반복) GitOps는 Git 상태로 되돌리려 하고, 오토스케일러는 런타임에 replica를 바꾼다. 같은 필드의 주인이 둘 이었던 것이다. Argo CD Application에서 replica를 무시하게 해서 소유권을 KEDA에 넘겼다. ignoreDifferences: - group: apps kind: Deployment jsonPointers: - /spec/replicas 부끄러운 후일담: 이 문제를 dev에서 먼저 고쳤는데, prod에는 3일 뒤에야 같은 수정이 들어갔다. dev/prod overlay를 분리해 환경 독립성은 얻었지만, "dev에서 고친 게 prod에 자동으로 따라가지 않는다"는 비용도 같이 얻었다. 4-3. 일하는 중인 노드를 Karpenter가 치워 버렸다 CPU Worker : Bedrock 응답을 기다리는 동안 CPU 사용률이 낮았고, Karpenter는 그 노드를 underutilized로 판단해 30초 뒤 정리했다. 작업 중인 Pod가 eviction되고 SQS 재시도로 이어졌다. consolidateAfter 를 30초 → 5분으로 늘렸다. GPU Worker : 더 미묘했다. GPU Pod terminationGracePeriodSeconds = 300초 GPU NodePool consolidateAfter = 5분 두 타이머가 같은 값이라 동시에 만료되면, kubelet이 Pod를 정리하기 전에 EC2가 먼저 종료되어 Pod가 Terminating 에 고착됐다. consolidateAfter 를 10분으로 올리고 규칙을 하나 만들었다. consolidateAfter > terminationGracePeriodSeconds 여기서 얻은 교훈은, "scale-in이 너무 급하다"는 증상의 원인이 HPA가 아니라 노드 계층 에 있을 수 있다는 것이다. Pod 안정화 값만 계속 만지고 있었다면 못 찾았을 문제다. 4-4. 아무도 요청하지 않는데 10분마다 GPU 노드가 떴다 GPU 처리 시간을 고려해 큐의 visibility timeout을 600초 → 1800초로 올렸다. 그런데도 약 10분 주기로 GPU 노드가 계속 생겼다. 원인은 worker 코드였다. sqs.receive_message(QueueUrl=..., VisibilityTimeout=600) # 큐 기본값을 덮어쓴다 per-call 파라미터가 Terraform으로 설정한 큐 기본값을 이긴다. 처리 중이던 메시지가 10분 뒤 다시 visible이 되고, KEDA는 그걸 새 작업으로 보고 GPU 노드를 또 띄웠다. 하드코딩을 제거해 해결했다. 인프라 설정을 바꿨다고 끝이 아니다. 그 설정을 소비하는 코드가 덮어쓰고 있지 않은지 같이 봐야 한다. 4-5. maxReplicaCount=10인데 4개만 떴다 prod 큐에 메시지 100개를 넣자 KEDA는 CPU Worker 10개를 요청했다. 그런데 4개만 Running, 6개는 계속 Pending이었다. Karpenter 로그: all available instance types exceed limits for nodepool cpu-worker ScaledObject의 maxReplicaCount 는 선언상의 상한 이고, 실제 상한은 NodePool limits 였다. xlarge 노드에 DaemonSet overhead까지 올리면 노드당 Worker Pod가 1개씩만 들어갔고, NodePool 한도가 먼저 소진됐다. 2xlarge로 올려서 bin-packing을 개선하려 했다 → 조직 SCP가 2xlarge launch 자체를 차단 해서 롤백 xlarge를 유지하고 NodePool limits를 10대 수준으로 상향 → 10/10 Running maxReplicaCount × Pod request 가 NodePool limits, 허용 인스턴스 타입, DaemonSet overhead, 계정 쿼터·정책 안에 들어가는지 확인하지 않으면 그 숫자는 그냥 희망 사항이다. 4-6. 16시간 동안 ContainerCreating 이번 프로젝트에서 가장 오래 붙잡고 있었던 장애. CPU Worker Pod가 ContainerCreating 에서 16시간 정지 FailedCreatePodSandBox 이벤트 4,569회 그런데 서브넷에는 가용 IP가 112개 남아 있었다 IP가 남았는데 왜 할당이 안 됐을까. 원인은 Prefix Delegation의 단편화 였다. Prefix Delegation은 ENI에 IP를 하나씩이 아니라 /28 (16개) 블록 단위로 붙여서 노드당 Pod 밀도를 올린다. 문제는 이 블록이 연속·정렬된 16개 여야 한다는 점이다. 당시 private subnet은 AZ별 /24 하나였고, 그 안에서 노드 ENI + Pod IP + VPC Interface Endpoint ENI가 IP를 나눠 쓰고 있었다. 숫자로는 112개가 남았지만 정렬된 /28 블록은 하나도 없었다. 결과는 InsufficientCidr . 해결은 Pod 대역을 통째로 분리하는 것이었다. 노드 primary ENI → 10.20.11.0/24 (private app subnet) Pod secondary ENI → 100.64.0.0/17, 100.64.128.0/17 (AZ별 Pod 전용 subnet) VPC에 secondary CIDR 100.64.0.0/16 추가 AZ별 /17 Pod subnet 생성 (AZ당 usable 32,766개) VPC CNI Custom Networking + AZ별 ENIConfig 적용 두 기능의 역할은 다르다. Prefix Delegation은 노드당 Pod 밀도 를 올리고, Custom Networking + secondary CIDR는 Pod 대역을 분리해 단편화를 막는다. 그런데 이걸 적용하자마자 후속 장애가 두 번 왔다. 1 DNS가 안 됐다. Pod가 RDS hostname도, 클러스터 내부 DNS도 resolve하지 못했다. 라우팅과 iptables는 정상이었다. 노드에서 tcpdump 를 떠 보니 DNS query는 Pod 쪽 secondary ENI에서 나가는데, CoreDNS가 있는 노드에는 패킷이 하나도 도착하지 않았다. Custom Networking에서 Pod는 node SG를 쓰고, 관리형 노드의 CoreDNS는 cluster SG를 쓰는데 두 SG 사이에 허용 규칙이 없었던 것 이다. SG 규칙을 추가하자 Pod 재시작 없이 바로 복구됐다. 2 SQS 요청이 15초 뒤 타임아웃됐다. VPC Endpoint SG가 VPC CIDR만 허용하고 새 Pod CIDR( 100.64.0.0/16 )는 허용하지 않았다. Pod IP 대역을 바꾸는 건 쿠버네티스 매니페스트의 일이 아니다. subnet, CNI 환경 변수, ENIConfig, node SG, cluster SG, Endpoint SG, route table이 하나의 전송 경로 로 묶여 있고, 그중 하나만 빠져도 조용히 끊긴다. 4-7. 모니터링이 자기가 감시하던 노드 정리에 같이 쓸려 나갔다 부하 시험 결과를 Grafana로 보는데 그래프가 5분간 비어 있었다. scale-in 과정에서 Karpenter가 노드를 정리할 때 Prometheus와 Grafana도 같이 축출된 것이다. replica 1, PDB 없음, taint 없는 일반 노드에 배치돼 있었다. system 노드로 고정하고 PDB를 추가했다. 그런데 Prometheus PDB는 여전히 적용되지 않았는데, Helm values에서 PDB 설정을 prometheusSpec 하위에 넣어 조용히 무시 되고 있었기 때문이다. 위치를 고친 뒤 재시험에서 재시작 0회, 결측 0분을 확인했다. 관측 도구도 워크로드다. 그리고 "Helm release 성공"과 "설정이 실제로 적용됨"은 다른 사실이다. 5. 실측 결과 5-1. prod scale-out Worker 변화 투입량 전체 Ready까지 CPU 1 → 10 메시지 100개 168초 (재현 시 212초) GPU 0 → 4 메시지 5개 306초 Batch 0 → 5 메시지 20개 347초 GPU 306초를 뜯어보면 Pod 생성 +50초, 노드 생성 시작 +76초, 첫 Pod Ready +265초다. 노드가 Ready된 뒤 Pod가 Ready되기까지가 가장 길었다 (약 3분). GPU 드라이버 초기화, 큰 이미지 pull, 모델 로딩이 겹치는 구간이다. scale-to-zero는 공짜가 아니라, 유휴 비용을 첫 요청의 5분과 맞바꾼 결정이다. 이 cold start를 줄이려고 EFS에 모델을 캐싱하는 구조를 실제로 구현했다가, 결국 전부 롤백하고 모델을 컨테이너 이미지에 내장 하는 쪽으로 정리했다. 구현까지 한 걸 걷어내는 건 아깝지만, 공유 볼륨이라는 장애 지점을 하나 더 운영하는 것보다 단순함을 택했다. 5-2. 우연히 관찰한 Spot 중단 Batch 부하 시험 도중 실제 Spot interruption이 한 건
velog
Next.js 공식 Learn의 Dashboard App을 따라가며 풀스택 대시보드를 만드는 스터디를 시작했다. 이번 글에서는 Chapters 1~3에 등장하는 프로젝트 구조, CSS 적용 방식, 폰트와 이미지 최적화를 정리한다. 1. 프로젝트 생성과 실행 공식 과정에서는 화면 구성 요소와 예시 데이터가 준비된 starter 프로젝트를 사용한다. npx create-next-app@latest nextjs-dashboard --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example" --use-pnpm create-next-app 은 Next.js 프로젝트 생성 도구다. --example으로 학습용 예제를 지정하고, --use-pnpm으로 패키지 관리 도구를 선택한다. 프로젝트 폴더로 이동한 뒤 필요한 패키지를 설치하고 개발 서버를 실행한다. cd nextjs-dashboard pnpm i pnpm dev pnpm i 는 의존성을 설치하고, pnpm dev 는 package.json에 정의된 개발용 스크립트를 실행한다. 개발 서버 실행과 프로덕션 빌드는 목적이 다르다. 명령에 pnpm dev * - 코드 수정 반영과 오류 확인을 위한 개발 서버 실행 * pnpm build - 실제 서비스에 사용할 최적화된 결과물 생성 pnpm start - 빌드한 결과물로 프로덕션 서버 실행 따라서 프로덕션 환경을 로컬에서 확인하려면 pnpm build를 먼저 실행한 뒤 pnpm start를 실행한다. 빌드는 결과물을 만드는 과정이며, 외부 사용자가 접속할 수 있도록 배포하는 작업과는 구분된다. 2. Starter 프로젝트 구조 app - 페이지, 레이아웃 등 애플리케이션 코드 * app/lib * - 공통 함수, 데이터 처리 로직, 타입 정의 * app/ui * - 로고, 카드, 표, 폼 등 UI 컴포넌트 public - 이미지 등 정적 파일 app 은 App Router에서 사용하는 폴더다. 반면 lib 와 ui 는 이 프로젝트에서 코드를 정리하기 위해 사용한 이름이다. app/page.tsx 는 / 경로의 페이지를 정의하고, app/layout.tsx 는 페이지를 감싸는 공통 구조를 정의한다. export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( <html lang="en"> <body>{children}</body> </html> ); } children에는 해당 레이아웃 안에 표시할 페이지나 하위 레이아웃의 내용이 들어간다. 3. Global CSS, Tailwind CSS, CSS Modules Next.js에서는 여러 CSS 방식을 함께 사용할 수 있다. Global CSS 특징: 전역적으로 적용되는 CSS 규칙 작성 활용: 기본 여백, 공통 스타일 공식 예제에서는 Root Layout에서 전역 CSS를 가져온다. import "@/app/ui/global.css"; @/ 는 프로젝트의 경로 설정에 따른 별칭이다. 전역 CSS는 여러 페이지에 공통으로 적용할 규칙에 적합하다. 개별 컴포넌트의 스타일을 모두 전역으로 작성하면 클래스 이름이나 선택자가 충돌할 수 있으므로 적용 범위를 고려해야 한다. Tailwind CSS 특징: 유틸리티 클래스를 조합해 스타일 구성 활용: 요소의 배치, 색상, 여백 Tailwind는 작은 CSS 규칙에 대응하는 클래스를 조합하는 방식이다. <div className="flex flex-col rounded-lg bg-blue-500 p-6"> Dashboard </div> flex : Flexbox 사용 flex-col : 세로 방향으로 배치 rounded-lg : 모서리를 둥글게 설정 bg-blue-500 : 파란색 배경 p-6 : 기본 설정에서 1.5rem의 내부 여백 Tailwind는 CSS 개념을 대신하는 도구가 아니다. 클래스 이름을 읽으려면 배치, 여백, 색상 같은 CSS 속성의 의미를 이해해야 한다. md : 같은 접두사는 화면 너비에 따른 조건을 나타낸다. <div className="flex flex-col md:flex-row"> 기본적으로 세로로 배치하고, md 기준 너비 이상에서는 가로로 배치한다. 특정 기기의 종류를 판단하는 것이 아니라 화면 너비를 기준으로 동작한다. CSS Modules 특징: 클래스 이름을 파일 단위로 구분 활용: 개별 컴포넌트의 사용자 정의 스타일 CSS Modules는 .module.css 파일에 스타일을 작성한다. /* home.module.css */ .panel { padding: 24px; background-color: lightblue; } 컴포넌트에서는 파일을 가져와 적용한다. import styles from "@/app/ui/home.module.css"; <div className={styles.panel}>Dashboard</div> styles.panel은 생성된 고유 클래스 이름과 연결된다. 다른 CSS Module에 같은 .panel이 있어도 클래스 이름 충돌을 줄일 수 있다. 4. clsx로 조건부 스타일 적용하기 송장의 결제 상태에 따라 색상을 다르게 표시하려면 조건에 따라 클래스 이름을 선택해야 한다. clsx 는 이러한 클래스 이름 조합을 간단하게 만들어준다. import clsx from "clsx"; export default function StatusBadge({ status, }: { status: "pending" | "paid"; }) { return ( <span className={clsx("rounded px-2 py-1", { "bg-green-500 text-white": status === "paid", "bg-gray-100 text-gray-500": status === "pending", })} > {status} </span> ); } 공통 클래스는 항상 적용되고, 객체에서는 조건이 참인 항목의 클래스만 추가된다. status가 "paid"이면 초록색 배경이, "pending"이면 회색 배경이 적용된다. clsx는 CSS를 생성하거나 상태를 관리하지 않는다. 조건에 맞는 클래스 이름들을 합친 문자열을 반환한다. 5. 웹 폰트와 CLS 웹 폰트가 로딩되기 전에는 브라우저가 기본 글꼴로 텍스트를 표시할 수 있다. 이후 웹 폰트로 교체되면 글자의 폭과 높이가 달라져 줄바꿈이나 주변 요소의 위치가 바뀔 수 있다. 예를 들어 제목이 한 줄에서 두 줄로 바뀌면 아래 버튼도 밀려 내려간다. CLS(Cumulative Layout Shift) 는 이러한 예상하지 못한 레이아웃 이동을 평가하는 지표다. next/font 는 폰트 제공과 로딩을 최적화하고, 대체 글꼴 조정을 통해 폰트 교체에 따른 레이아웃 이동을 줄여준다. next/font/google은 빌드 시점에 Google Fonts의 폰트 파일과 CSS를 받아 프로젝트의 정적 자산으로 제공한다. 사용자의 브라우저가 페이지를 볼 때 Google 서버에 직접 폰트를 요청하지 않는다. 브라우저의 폰트 다운로드 자체가 없어지는 것은 아니다. 폰트를 프로젝트에서 제공한다는 점이 핵심이다. 공식 예제에서는 사용할 폰트를 fonts.ts에 모아둔다. import { Inter, Lusitana } from "next/font/google"; export const inter = Inter({ subsets: ["latin"], }); export const lusitana = Lusitana({ subsets: ["latin"], weight: ["400", "700"], }); subsets는 미리 불러올 문자 묶음을 지정한다. weight는 사용할 굵기를 지정하며, 400은 보통 굵기, 700은 굵은 글꼴에 해당한다. 6. next/image와 이미지 최적화 큰 원본 이미지를 작은 화면에 그대로 전달하면 불필요한 데이터를 다운로드하게 된다. 이미지가 로딩되기 전에 공간이 확보되지 않으면 화면 내용이 밀리는 문제도 생긴다. next/image의 Image는 이미지 크기 최적화, 기본 지연 로딩, 이미지 비율을 활용한 공간 확보 등을 지원한다. 일반 img도 srcset, loading, 크기 지정 등으로 최적화할 수 있지만, Image는 이 작업을 Next.js에서 편리하게 구성하도록 돕는다. import Image from "next/image"; <Image src="/hero-desktop.png" width={1000} height={760} alt="데스크톱용 대시보드 화면" /> 여기서 width 와 height 는 이미지의 원본 크기 정보를 제공한다. 브라우저는 이를 바탕으로 가로·세로 비율을 계산하고 이미지가 나타날 공간을 확보할 수 있다. 화면에서 반드시 1000 × 760px로 표시된다는 뜻은 아니다. 실제 표시 크기는 CSS로 조절할 수 있다. className="w-full h-auto" 이렇게 설정하면 사용 가능한 너비에 맞추면서 이미지 비율을 유지한다. 7. 화면 너비에 따른 이미지 표시 공식 예제에는 데스크톱용과 모바일용 이미지가 각각 준비되어 있다. <Image src="/hero-desktop.png" width={1000} height={760} className="hidden md:block" alt="데스크톱용 대시보드 화면" /> <Image src="/hero-mobile.png" width={560} height={620} className="block md:hidden" alt="모바일용 대시보드 화면" /> 화면 너비 데스크톱 이미지 모바일 이미지 md 미만 숨김 표시 md 이상 표시 숨김 hidden md:block은 기본적으로 숨기고, md 이상에서 표시한다. block md:hidden은 반대로 동작한다. 이는 동일한 이미지를 작게 만드는 방식과 달리, 화면 너비에 맞춰 서로 다른 구성의 이미지를 보여주는 방식이다. hidden은 CSS로 숨기는 것이므로 요소 자체를 DOM에서 삭제하지는 않는다. 반응형 이미지에서는 표시 크기와 다운로드할 이미지 크기도 구분해야 한다. CSS는 화면에 표시할 크기를 정하고, sizes는 브라우저가 적절한 이미지 후보를 선택하는 데 사용할 정보를 제공한다. 학습 정리 이번 범위에서는 Next.js 프로젝트의 기본 구조와 첫 화면을 구성하는 방법을 살펴봤다. 특히 스타일을 적용하는 방식마다 범위와 작성 방법이 다르고, 폰트와 이미지는 디자인뿐 아니라 로딩 성능과 레이아웃 안정성에도 영향을 준다는 점이 중요했다.
velog
이번에는 회사에서 이미 가지고 있는 데이터를 Biz Assist에서도 활용하고 싶었다. 사업 정보나 계약 정보 실적이나 인력 관련 데이터가 이미 따로 관리되고 있었기 때문이다. 처음에는 그냥 회사 DB를 연결해서 필요한 데이터를 가져오면 되지 않을까 싶었다. 근데 생각해 보니까 이건 지금까지 외부 API 붙이던 거랑은 조금 달랐다. 회사 DB를 잘못 건드리면 안 된다. 그래서 이번에는 데이터를 가져오는 것보다 먼저 어떻게 안전하게 연결할지 부터 생각했다. 기존 DB랑 섞이면 안 됐다 Biz Assist는 이미 자체 DB를 사용하고 있었다. 공지나 알림 이력처럼 Biz Assist에서 직접 만드는 데이터는 여기에 저장하고 있다. 근데 회사 DB까지 연결하면 한 애플리케이션 안에 DB가 두 개가 된다. 이때 그냥 DataSource를 하나 더 추가하면 기존 Repository가 어느 DB를 사용하는지 헷갈릴 수도 있다. 특히 Biz Assist에서 사용하는 schema.sql 이 회사 DB에서 실행되면 큰일이다. 그래서 처음부터 두 DB의 역할을 명확하게 나눴다. Biz Assist DB → 기존 기능에서 계속 사용 → schema.sql 적용 → 읽기 / 쓰기 가능 회사 DB → 별도 연결 → 조회 전용 → Biz Assist 테이블 생성 안 함 기존 H2는 그대로 기본 DB로 두고 회사 DB는 별도의 DataSource로 분리했다. 회사 DB 연결 때문에 기존 기능이 영향을 받으면 안 됐다. 회사 DB는 조회만 하자 회사 DB에서 필요한 건 기존 데이터를 가져오는 기능이다. Biz Assist에서 회사 데이터를 수정할 이유는 없었다. 그래서 처음부터 read-only 로 연결하기로 했다. SELECT → 가능 INSERT UPDATE DELETE → 사용하지 않음 연결 풀도 크게 잡지 않았다. 회사 DB를 주 DB처럼 사용하는 게 아니라 필요한 정보를 조회하는 용도니까 최대 연결 수도 2개로 제한했다. 조회가 너무 오래 걸리는 상황을 막기 위해 쿼리 시간과 최대 조회 건수도 제한했다. 연결할 수 있다는 것보다 얼마나 제한해서 사용할지가 더 중요했다. 기본값은 아예 연결 안 함 또 하나 고민한 건 애플리케이션을 실행할 때마다 회사 DB에 붙어야 하냐는 거였다. 개발할 때는 회사 DB가 필요 없는 경우도 많다. 네트워크가 안 되는 환경에서 실행할 수도 있고 테스트할 때까지 외부 DB에 연결할 필요도 없다. 그래서 회사 DB 기능은 기본적으로 꺼두었다. company-db.enabled = false 필요할 때만 환경변수로 활성화한다. DB 주소나 계정 정보도 코드에 직접 넣지 않고 환경변수로 받도록 했다. 회사 DB 설정이 없다고 Biz Assist 자체가 실행되지 않는 구조는 피하고 싶었다. 일단 데이터부터 보지 않았다 회사 DB에 연결했으면 바로 실제 업무 데이터를 조회해 볼 수도 있었다. 근데 첫 단계부터 실제 데이터를 읽는 건 조금 부담스러웠다. 그래서 먼저 DB 구조만 확인하기로 했다. JDBC metadata를 이용해서 테이블 컬럼 Primary Key Foreign Key Index 같은 구조 정보만 확인하도록 했다. 실제 업무 데이터 행은 읽지 않는다. 그리고 모든 테이블을 다 보는 대신 사업이나 계약 실적이나 인력처럼 Biz Assist와 관련 있을 만한 이름만 찾도록 했다. 이 단계의 목적은 회사 DB에 어떤 데이터가 있는지 먼저 구조부터 파악하는 것 이었다. 쓰기 권한도 한번 확인해 보기로 했다 코드에서 read-only로 설정했더라도 DB 계정 자체에 쓰기 권한이 있을 수도 있다. 그래서 metadata를 확인할 때 현재 계정의 권한도 같이 확인하도록 했다. INSERT UPDATE DELETE TRUNCATE TRIGGER REFERENCES 이런 쓰기 권한이 있는지도 확인한다. 애플리케이션에서는 조회 전용으로 사용하더라도 계정 권한까지 같이 확인해 두는 게 나을 것 같았다. 기존 DB와 정말 분리됐는지도 확인했다 DB를 두 개 연결하는 구조를 만들었으니 이 부분도 테스트를 추가했다. 확인하고 싶었던 건 간단했다. Biz Assist DB → 기존 EXTERNAL_NOTICE 테이블 존재 회사 DB → Biz Assist 테이블 없음 즉 schema.sql 이 기존 DB에만 적용되고 회사 DB에는 영향을 주지 않는지 확인하는 테스트다. 회사 DB 연결 기능을 추가하면서 기존 DB 구조까지 바뀌면 안 되니까 이 부분은 먼저 막아두고 싶었다. 일단 연결보다 경계를 먼저 만들었다 처음에는 회사 DB 데이터도 가져와보자 정도로 시작했다. 근데 실제로 붙이려고 보니까 어떤 데이터를 가져올지보다 먼저 정해야 할 게 많았다. 기존 DB와 분리 ↓ 회사 DB는 조회 전용 ↓ 필요할 때만 연결 ↓ 접속 정보는 환경변수 ↓ 실제 데이터보다 구조부터 확인 이번 작업에서는 아직 회사 데이터를 Biz Assist 화면에 보여주지는 않았다. 대신 회사 DB를 연결할 때 어디까지 허용할지부터 정리했다. 외부 시스템을 붙일 때는 기능부터 만드는 것보다 경계를 먼저 잡는 게 맞는 것 같다.
Score: 54.4Confidence: 49%
View offervelog
DD 공부를 하면서 DD Boost의 존재의 이유에 대해서 공부하다가 전반적인 서버 구성에 대한 정리를 하고자 함! DD Boost DD Boost is a private protocol that is more efficient than CIFS or NFS. DD Boost has a private and efficient data transfer protocol with options to increase efficiencies. CIFS(Common Internet File System) 는 Windows 파일 공유 프로토콜 NFS(Network File System) 는 UNIX/Linux 계열에서 주로 사용하는 파일 공유 프로토콜 보통 DD 를 구매하게 되면 DD Boost 소프트웨어 프로토콜을 사용함 이유는, CIFS 또는 NFS 파일 복사 이외 큰 기능이 없음. 하지만 DD Boost 는 Client Direct / DSP (Distributed Segment Processing) / 복구 최적화 / 로드 밸런싱 / 네트워크 트래픽 감소 와 같은 기능을 함께 가져갈 수 있음! 이전에는 Networker server 을 거쳐서 DD 에 백업을 할 수 있었음. VM1 ↓ NetWorker Server ↓ Data Domain 그래서 아래와 같이 트렌젝션이 일어남. VM1 → NetWorker : 100GB NetWorker → DD : 100GB DD Boost 사용 시 VM1 ↓ Data Domain ' NetWorker (관리만 수행) VM1 → DD : 100GB DD Boost 특징 조금 더 자세히! 백업 서버 또는 애플리케이션 클라이언트가 중복되지 않은(Unique) 데이터 세그먼트만 PowerProtect DD 시스템으로 전송 . 이를 통해 네트워크를 통해 전송되는 데이터 양을 80%~99%까지 감소시킬 수 있습니다. 기존 방식(NFS/CIFS): 서버 → 모든 백업 데이터 전송 → DD에서 중복제거 DD Boost 방식: 서버 → 중복 여부 일부 판단 → 중복되지 않은 데이터만 DD로 전송 → DD에서 최종 저장 중복제거(Deduplication) 과정의 일부를 PowerProtect DD 시스템이 아닌 백업 서버 또는 애플리케이션 서버에서 수행하도록 분산 . 이를 통해 클라이언트 측 중복제거(Client-Side Deduplication) 가 가능해지며, 백업 및 복구 성능이 향상됩니다. 백업 속도를 최대 50% 향상시키고, 시스템 자원을 더욱 효율적으로 활용할 수 있으며, 서버 부하를 20%~40% 감소시킵니다. 다만, 백업 서버 또는 어플리케이션 서버 CPU 사용을 하게 된다는 점~ DD Boost는 백업 서버에서 동작하며, Dell NetWorker, Dell Avamar 및 기타 주요 백업·엔터프라이즈 애플리케이션과 통합됩니다. DD Boost 는 DD 위에서 동작하는게 아니라, 백업 서버에서 동작하는 것임! 또한 PowerProtect DD 시스템에서는 DD Boost를 통해 Storage Unit(SU) 을 백업 애플리케이션에 제공(Expose)하여 백업 대상 저장소로 사용할 수 있도록 합니다. DD 에는 MTree(실제 저장소)가 존재하고, 만약 DD Boost 가 없을 경우에는 백업 서버가 MTree 실제 주소를 알고 직접 찾아가야함. 하지만 DD Boost 는 MTree와 SU 를 맵핑하는 기능이 존재하여, 백업 서버가 SU 이름만 알아도 알아서 실제 MTree 주소로 찾아갈 수 있음. * SU는 DD Boost의 핵심 기능이 아니라 DD Boost를 사용할 때 NetWorker가 볼 수 있는 '저장소 이름' 정도로 생각하시면 됨
Score: 54.4Confidence: 49%
View offervelog
According to Kings Research analysis, the global healthcare virtual assistant market size was recorded at USD 516.7 million in 2025 and is projected to reach USD 2639.1 million by 2033 , growing at a CAGR of 23.01% over the forecast period from 2026 to 2033. The market is witnessing rapid expansion as healthcare providers increasingly adopt artificial intelligence (AI), natural language processing (NLP), machine learning, and conversational technologies to improve patient communication, streamline administrative processes, and enhance access to healthcare services. Get the Full Detailed Insights Report: https://www.kingsresearch.com/report/global-healthcare-virtual-assistant-market-3170 Key Market Highlights The global healthcare virtual assistant market is projected to expand significantly from 2026 to 2033. The market was valued at USD 516.7 million in 2025 and is projected to reach USD 2639.1 million by 2033 . The market is expected to grow at a CAGR of 23.01% during the forecast period. Increasing adoption of AI-powered healthcare technologies is supporting market expansion. Growing demand for automated patient engagement and healthcare accessibility is accelerating the deployment of virtual assistants. Cloud-based healthcare virtual assistants are gaining significant traction due to scalability, flexibility, and lower infrastructure requirements. Hospitals and health systems represent a major end-user segment due to the increasing need to automate patient-facing and administrative workflows. Healthcare Virtual Assistant Market Overview Healthcare virtual assistants are AI-powered conversational systems designed to interact with patients, healthcare professionals, and administrative staff through text or voice-based interfaces. These solutions can perform a broad range of functions, including appointment scheduling, patient registration, medication reminders, symptom assessment, frequently asked questions, clinical support, patient navigation, and administrative assistance. The increasing pressure on healthcare systems to provide efficient, accessible, and patient-centric services has encouraged healthcare organizations to adopt virtual assistant technologies. Traditional healthcare communication often involves long waiting times, manual appointment scheduling, repetitive inquiries, and significant administrative workloads. Virtual assistants can automate several of these processes, allowing healthcare professionals and support teams to focus on more complex activities. The rapid development of AI and NLP technologies has further improved the ability of virtual assistants to understand user queries and deliver personalized responses. Integration with electronic health records (EHRs), healthcare management platforms, patient portals, and scheduling systems is also expanding the functionality of these solutions. As healthcare organizations continue their digital transformation initiatives, virtual assistants are becoming an important component of modern healthcare technology ecosystems. Rising Adoption of AI in Healthcare Drives Market Growth One of the primary factors driving the healthcare virtual assistant market is the increasing adoption of AI across healthcare applications. Healthcare organizations are increasingly utilizing AI to automate repetitive tasks, analyze information, improve operational efficiency, and enhance patient experiences. Virtual assistants can respond to common patient questions, provide information about healthcare services, assist with appointment booking, and send automated reminders. These capabilities help healthcare providers reduce the burden on call centers and administrative personnel. The growing volume of patient interactions is another important factor supporting adoption. Hospitals, clinics, and healthcare networks manage thousands of patient inquiries every day. Automating routine interactions enables organizations to provide faster responses while maintaining service availability beyond traditional working hours. Furthermore, advancements in generative AI and conversational AI are improving the quality and flexibility of interactions. Modern virtual assistants can understand natural language more effectively and provide contextual responses, making them increasingly useful for patient engagement and healthcare navigation. Growing Demand for Patient-Centric Healthcare Services The healthcare industry is undergoing a major transformation toward patient-centric care. Patients increasingly expect convenient access to healthcare information and services through digital channels. Healthcare virtual assistants support this transformation by providing immediate assistance through websites, mobile applications, patient portals, and messaging platforms. Patients can use virtual assistants to schedule appointments, receive reminders, locate healthcare services, understand basic medical information, and access administrative support. These capabilities can improve convenience and reduce friction throughout the patient journey. Healthcare providers are also using virtual assistants to maintain communication with patients before and after appointments. Automated follow-ups, medication reminders, and general health-related notifications can support ongoing engagement. The growing preference for digital healthcare interactions is therefore expected to create substantial opportunities for virtual assistant providers throughout the forecast period. Market Trends Integration of Generative AI and Natural Language Processing The integration of generative AI and advanced NLP technologies is emerging as a significant trend in the healthcare virtual assistant market. Earlier virtual assistants primarily relied on predefined scripts and rule-based responses. Modern systems are increasingly capable of understanding conversational language and responding to more complex queries. Generative AI can support more personalized interactions while NLP enables systems to interpret patient questions more effectively. As these technologies mature, healthcare organizations are expected to deploy more sophisticated virtual assistants across patient engagement and operational workflows. Increasing Use of Cloud-Based Solutions Cloud deployment is gaining popularity because it provides healthcare organizations with scalability and flexibility. Cloud-based virtual assistants can be implemented without requiring extensive on-premise infrastructure, making them attractive to organizations seeking cost-effective digital transformation solutions. Cloud deployment also facilitates system updates, integration with other digital healthcare platforms, and remote accessibility. As healthcare organizations increasingly migrate workloads to cloud environments, demand for cloud-based virtual assistants is expected to increase. Expansion of Omnichannel Patient Engagement Healthcare providers are increasingly seeking to engage patients across multiple digital channels. Virtual assistants can be integrated into websites, mobile applications, messaging platforms, and patient portals, enabling organizations to provide consistent assistance across different touchpoints. This omnichannel approach can improve accessibility while helping healthcare providers create a more seamless patient experience. Healthcare Virtual Assistant Market Segmentation Analysis By Deployment Based on deployment, the market is segmented into Cloud, On-Premise, and Hybrid . The cloud segment is expected to witness strong growth during the forecast period. Cloud-based solutions provide scalability, reduced infrastructure requirements, easier maintenance, and flexible deployment options. These benefits make cloud solutions particularly attractive to healthcare organizations seeking to modernize their digital infrastructure. Cloud platforms can also support integration with healthcare applications and enable organizations to expand virtual assistant capabilities as patient volumes increase. The on-premise segment continues to serve organizations that require greater control over infrastructure and data management. Large healthcare institutions with established IT infrastructure may prefer on-premise deployment for specific applications. Meanwhile, hybrid deployment provides organizations with a combination of cloud flexibility and on-premise control. This model can be particularly useful for healthcare providers managing sensitive information while seeking to utilize cloud-based AI capabilities. By Application Based on application, the market is divided into Patient Engagement and Access, Clinical Support, Healthcare Operations, and Others . The patient engagement and access segment represents an important area of application. Virtual assistants can help patients schedule appointments, access information, navigate healthcare services, and receive reminders. These capabilities can significantly improve the overall patient experience. The clinical support segment is also gaining importance as virtual assistants are increasingly used to support healthcare professionals and patients with information retrieval, symptom-related interactions, and clinical workflow assistance. However, clinical applications require appropriate safeguards, validation, privacy controls, and human oversight. The healthcare operations segment includes administrative applications such as scheduling, registration, communication, and workflow management. Automation of repetitive administrative tasks can help healthcare organizations improve efficiency and reduce operational costs. Other applications include medication reminders, healthcare navigation, insurance-related assistance, and post-treatment communication. By End User Based on end user, the market is segmented into Hospitals and Health Systems, Physicians Practices and Clinics, and Others . The hospitals and health systems segment is expected to maintain a significant position in the market. Large healthcare organizations manag
cnBeta.COM.TW
浏览器市场竞争日趋激烈,各家厂商都在通过新功能吸引用户。在不少浏览器持续加码AI功能的背景下,Opera选择了一条不同的发展路线,推出了一项在浏览器领域颇为罕见的新服务:旅行eSIM。 阅读全文
Score: 53.52Confidence: 49%
View offercnBeta.COM.TW
9月29日,据路透社报道,法国欧洲事务部长本杰明·哈达德(Benjamin Haddad)周二表示, 欧盟应当把对Google处以的数十亿欧元罚款所得,用于减少成员国对欧盟预算的出资。 阅读全文
Score: 53.52Confidence: 49%
View offerScore: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%