NVIDIAが「3入力でだけ発火する攻撃」を報告。要約AIのリンク先を承認済み資料に絞る
AIタグが付けられた新着記事 - Qiita
Webページの本文だけでなく、画像や音声もAIに渡して要約している人へ。出力に含まれるURLは、誰がリンクに変えていますか。 2026年9月21日、NVIDIA AI Red Teamは、テキスト・画像・音声の3種類がそろったときだけ狙った出力を引き出すプロンプト注入の実験...
Балл: 57.39Уверенность: 54%
ПодробнееЗагружаем каталог…
НАВИГАТОР ПО ВОЗМОЖНОСТЯМ ИИ
Найдите свой ИИ-инструмент. Бесплатный доступ, пробные периоды и кредиты — в одном месте.
AIタグが付けられた新着記事 - Qiita
Webページの本文だけでなく、画像や音声もAIに渡して要約している人へ。出力に含まれるURLは、誰がリンクに変えていますか。 2026年9月21日、NVIDIA AI Red Teamは、テキスト・画像・音声の3種類がそろったときだけ狙った出力を引き出すプロンプト注入の実験...
Балл: 57.39Уверенность: 54%
ПодробнееAIタグが付けられた新着記事 - Qiita
「改行キーを1万回連打したレスが投稿され、他のユーザーのスマホブラウザがクラッシュした」 令和に自作した2ちゃんねる風掲示板「つゔぁいちゃんねる(2ch.biz)」開発秘話の第13弾。今回は、荒らしが好んで使う「長文コピペ爆弾」や「改行テロ」、名前欄のレイアウト破壊を物理...
Балл: 57.38Уверенность: 54%
ПодробнееAIタグが付けられた新着記事 - Qiita
はじめに こんにちは、やしまです。 先月の記事(Cursorで使えるAIモデル比較 2026/09)から更新です。 今月は本当に動きが激しく、正直ついていくだけで一苦労でした。(実はついていけてない気がします) Claude Opus 5.5・Sonnet 5.5という新...
Балл: 57.38Уверенность: 54%
Подробнее掘金
在 iOS 工程里,Method Swizzling 几乎是所有 Runtime 话题里最容易“会用”,却也最容易“踩坑”的技术之一。
Балл: 57.29Уверенность: 54%
Подробнееvelog
오늘은 영상정보처리기기들에 대해 총체적으로 정리해보려고 한다. 영상정보처리기기는 CCTV, IP카메라, DVR, NVR, 영상회의 시스템 등으로 구분할 수 있다. 또한 기기에 따라 네트워크 설치, IP 주소 할당, ACL/VPN, LAN 설계, 장비 선정, VLAN 및 라우팅 등의 내용이 함께 고려되어야 한다. CCTV·IP Camera·영상정보처리 시스템 이론과 실무 정리 현장 영상 ↓ [렌즈 / 이미지센서] ↓ [ADC / ISP] ↓ [영상 압축 H.264 / H.265] ↓ [Ethernet / PoE / IP Network] ↓ [NVR / VMS / Storage] ↓ [모니터링 / 분석 / 영상인식] CCTV는 단순히 카메라의 종류를 암기하는 문제가 아니다. 최근에는 CCTV가 IP 네트워크에 연결되면서 다음 기술들이 하나의 시스템으로 결합된다. IP Camera Ethernet PoE Switch TCP/IP 영상 압축 NVR 영상인식 네트워크 보안 따라서 CCTV를 공부할 때도 개별 용어보다는 전체 시스템의 데이터 흐름을 이해하는 것이 중요하다. 1. CCTV란? CCTV는 Closed Circuit Television 의 약자로, 특정한 목적과 제한된 사용자 에게 영상을 전달하는 폐쇄형 영상 시스템이다. 일반적인 CCTV 시스템은 크게 다음과 같이 구성된다. 카메라 → 전송망 → 저장장치 → 모니터링 장치 IP CCTV에서는 이를 조금 더 구체적으로 표현할 수 있다. IP Camera → PoE Switch → Ethernet/IP Network → NVR 또는 VMS → Monitoring PC 2. CCTV 시스템의 기본 구성 2.1 카메라 현장의 빛을 전기적 또는 디지털 영상 신호로 변환한다. 주요 구성요소는 다음과 같다. 구성 역할 Lens 빛을 이미지 센서에 집광 CMOS/CCD 광 신호를 전기 신호로 변환 ISP 노출, 색상, 노이즈 등을 영상 처리 Encoder H.264/H.265 등으로 영상 압축 CPU/Memory 카메라의 제어 및 영상 처리 Network Interface Ethernet을 통한 영상 전송 아날로그 CCTV와 IP Camera 아날로그 CCTV 카메라에서 발생한 영상 신호를 동축케이블 등을 이용해 DVR로 전달하는 방식이다. Camera │ Coaxial Cable ▼ DVR │ ▼ Monitor IP Camera 카메라 자체가 영상을 디지털화하고 압축하여 Ethernet/IP 네트워크로 전달한다. IP Camera │ Ethernet / PoE │ ▼ PoE Switch │ ├── NVR ├── VMS └── Monitoring PC 구분 아날로그 CCTV IP Camera 전송 영상 전용 신호 Ethernet/IP 케이블 동축 중심 UTP/Fiber 저장 DVR NVR/VMS 확장성 상대적으로 낮음 높음 원격접속 별도 장비 필요 네트워크 기반 전원 별도 전원 사용 가능 PoE 사용 가능 3. PoE와 IP Camera PoE(Power over Ethernet)는 Ethernet 케이블을 이용하여 데이터와 전원을 동시에 공급하는 기술이다. Data + Power PoE Switch ─────────────── IP Camera UTP Cable IP Camera 설치에서는 다음 3개를 동시에 확인해야 한다. PoE 규격 포트별 공급 가능 전력 스위치 전체 PoE Budget 카메라 1대 소비전력 = 12 W 카메라 수 = 8대 필요 전력 = 12 × 8 = 96 W 스위치가 8포트라고 해서 반드시 8대의 카메라에 충분한 전원을 공급할 수 있는 것은 아니다. 예를 들어 전체 PoE Budget이 65 W이면 필요 전력 96 W > 공급 가능 전력 65 W 이므로 정상 운용이 어렵다. PoE 공급 가능 전력이 CCTV의 소비전력보다 부족하거나, 스위치의 대역폭 부족 및 트래픽 과부하가 발생하면 영상이 불안정해질 수 있다. 4. 영상 압축 Codec IP Camera가 촬영한 원본 영상은 데이터 크기가 매우 크다. 따라서 네트워크로 전송하거나 저장하기 전에 압축 과정이 필요하다. 대표적인 영상 코덱이 H.264와 H.265이다. H.264 / AVC Advanced Video Coding. 현재도 CCTV, 스트리밍, 영상회의 등에서 널리 사용되는 영상 압축 규격이다. H.265 / HEVC High Efficiency Video Coding. H.264보다 높은 압축효율을 목표로 설계된 규격이다. 일반적으로 동일한 화질 조건에서 H.264보다 필요한 비트레이트를 낮출 수 있다. Codec ├─ H.264 ├─ H.265 └─ AAC / G.711 Signaling ├─ SIP └─ H.323 Video Streaming / Control ├─ RTSP └─ ONVIF Web Real-time Communication └─ WebRTC H.264와 WebRTC는 같은 종류의 기술이 아니다. H.264는 영상 압축 코덱, WebRTC는 웹 브라우저 기반 실시간 통신 기술 체계로 구분하는 것이 실무적으로 정확하다. 기술 의미 실제 예 Motion Detection 움직임 검출 침입 감지 Object Detection 객체 검출 사람·차량 탐지 Face Recognition 얼굴 인식 출입통제 LPR / ANPR 차량번호 인식 주차관제 Behavior Analysis 행동 분석 쓰러짐·배회 감지 Pattern Recognition 패턴 인식 이상상황 분류
velog
Hey everyone! I’m an Australian forum user from Adelaide, and my introduction to online casino websites came from an advertisement I noticed while browsing another entertainment page. I wasn’t particularly interested in the advert itself, but it made me curious about how the actual website was organised. After looking around burswood casino , I found myself paying attention to the little practical details. The menus were easy enough to understand, and I liked being able to move through the different areas without feeling overwhelmed. I normally browse from my phone after work, so I appreciated the readable layout. It’s the sort of small thing that makes exploring an unfamiliar platform feel more comfortable.
Балл: 54.4Уверенность: 49%
Подробнееvelog
There are few moments more frustrating than patting down your pockets, checking your bag, and slowly realising your car key is genuinely gone. Whether it's slipped out somewhere on a walk, been left behind at a petrol station, or simply vanished without explanation, a lost car key brings everything to a sudden halt — and modern vehicles make the fix far more complicated than it used to be. For residents across Cobram, Barooga, Tocumwal, and the wider Murray River region, MV Locksmiths has been solving exactly this kind of problem since 1997, combining genuine lost car key replacement expertise with a responsive mobile locksmith service that comes to you rather than the other way around. Why Losing a Car Key Is a Bigger Problem Than It Used to Be Car keys have changed enormously over the past two decades. Where a simple blank key and a cutting machine once solved almost any lost key situation, today's vehicles rely on transponder chips embedded in the key itself, communicating directly with the car's onboard immobiliser system. A lost key today isn't just a physical object that's gone missing — it's also a security credential that needs to be properly replaced and reprogrammed for the vehicle to even start. This added complexity means a lost car key replacement generally can't be solved with a generic hardware store key blank anymore. It requires a locksmith with the right equipment and technical knowledge to cut a new key correctly and program it to communicate properly with the vehicle's immobiliser — otherwise the car simply won't recognise the new key, no matter how perfectly it's been physically cut. MV Locksmiths' Approach to Lost Car Key Replacement MV Locksmiths offers the ability to cut and program most late model auto transponder keys, along with car remotes more broadly — addressing exactly the kind of modern, chip-based key replacement that a lost key situation now demands. For drivers who've lost their only remaining key, this service removes what would otherwise be a genuinely stressful and expensive trip to a dealership, which is often the default (and considerably pricier) option many people assume is their only choice. What Happens When You Lose Your Only Car Key Losing the sole remaining key to a vehicle creates a particular kind of urgency, since there's no backup to fall back on while a replacement is arranged. In this situation, a locksmith capable of cutting and programming a brand-new transponder key directly — without requiring an existing key as a reference — genuinely matters. MV Locksmiths' automotive capability is built around solving exactly this scenario, getting drivers back behind the wheel without the extended wait times that often come with ordering a replacement key through a manufacturer or dealership. Why Proper Programming Matters So Much A poorly cut or improperly programmed key doesn't just fail outright — it can cause intermittent issues, dashboard warning lights, or a car that starts inconsistently, leaving a driver stranded at an unpredictable and inconvenient moment. Working with an experienced, MLAA-accredited locksmith for lost car key replacement gives genuine confidence that a new key will integrate correctly with a vehicle's immobiliser system the first time, rather than requiring repeat visits to iron out ongoing problems. Mobile Locksmith: Help That Comes to You Car keys don't go missing at convenient times or in convenient locations. A lost key might happen at a shopping centre car park, outside a sports ground, or at home late in the evening — and in many of these situations, getting the vehicle itself to a locksmith's workshop simply isn't possible without the key in the first place. This is exactly where MV Locksmiths' mobile locksmith service becomes essential, with a Mobile Workshop bringing the equipment and expertise needed for automotive key cutting and programming directly to wherever the vehicle actually is. Why a Mobile Service Changes the Equation A mobile locksmith service means drivers aren't left stranded waiting for a tow truck simply because they've lost their car key — the locksmith comes to the vehicle's location instead. This matters enormously for anyone stuck away from home, at work, or in an unfamiliar part of the service region, removing one of the most stressful logistical elements of an already frustrating situation. Beyond automotive lockouts and lost key replacement specifically, MV Locksmiths' broader mobile capability extends into general Lockouts for homes and businesses, meaning the same responsive, come-to-you service applies whether the problem is a lost car key, a jammed front door lock, or being locked out of a commercial premises outside of normal hours. Round-the-Clock Availability for Genuine Emergencies Lost keys and lockouts don't restrict themselves to business hours, which is exactly why MV Locksmiths operates a 24/7 Emergency Service, with a dedicated after-hours mobile number available for genuinely urgent situations. Whether a car key goes missing at midnight after a long drive home, or a family is locked out of their house late on a weekend, having access to a trusted, established local provider around the clock removes much of the panic that comes with these situations happening at the worst possible time. Nearly Three Decades of Regional Trust MV Locksmiths, based at 18 Colgan Street, Cobram, has been providing professional locksmithing products and services since 1997 across Cobram, Barooga, Tocumwal, Berrigan, Finley, Numurkah, Jerilderie, Deniliquin, Yarrawonga, Nathalia, Mulwala, Tungamah, Corowa, Shepparton, and Wangaratta. This kind of sustained regional presence across both Victorian and New South Wales border towns reflects a locksmith genuinely embedded in the local community, rather than a short-term or transient operator. As a member of the Master Locksmiths Association of Australasia (MLAA), the company strictly adheres to the MLAA Code of Ethics — giving customers real assurance that lost car key replacement and mobile locksmith work is carried out to recognised industry standards, by technicians with verified training and accountability. A Broader Range of Services for Complete Peace of Mind Beyond lost car key replacement and mobile locksmith callouts specifically, MV Locksmiths' wider service range includes Key Control Storage Systems, Rekeying, Repairs or Replacement of Locks, Supply and Installation of Locks and Window Locks, Safes Supplied, Installed, and Opened, and the ability to Cut All Types of Domestic Keys. This breadth means the same trusted local provider handling a lost car key situation can also address broader home and business security needs, from a straightforward lock rekey through to full security system upgrades. Why Choosing an Established, Mobile-Capable Locksmith Matters When a car key goes missing, the two things that matter most are speed and technical accuracy — getting a properly programmed replacement key sorted quickly, without the complication of needing to transport an immobile vehicle somewhere else first. MV Locksmiths' combination of MLAA accreditation, a dedicated Mobile Workshop, and nearly 30 years of regional experience addresses both of these priorities directly. Getting Help When You Need It Whether the situation is a lost car key leaving you stranded away from home, or a lockout at your house or business outside of normal hours, MV Locksmiths' 24/7 emergency mobile locksmith service and genuine transponder key cutting and programming capability make it a strong first call across Cobram and the wider Murray River region. Frequently Asked Questions 1. Can MV Locksmiths replace a lost car key without an existing key? Yes, MV Locksmiths can cut and program most late model auto transponder keys directly, addressing situations where a driver has lost their only remaining key. 2. Does MV Locksmiths come to my location for a lost car key situation? Yes, the company operates a Mobile Workshop capable of bringing key cutting and programming equipment directly to wherever your vehicle is located. 3. Is MV Locksmiths available outside of normal business hours? Yes, MV Locksmiths provides a 24/7 Emergency Service with a dedicated after-hours mobile number for urgent lost car key and lockout situations. 4. What areas does MV Locksmiths' mobile locksmith service cover? The service covers Cobram, Barooga, Tocumwal, Berrigan, Finley, Numurkah, Jerilderie, Deniliquin, Yarrawonga, Nathalia, Mulwala, Tungamah, Corowa, Shepparton, Wangaratta, and surrounding areas. 5. Is MV Locksmiths accredited by an industry body? Yes, MV Locksmiths is a member of the Master Locksmiths Association of Australasia (MLAA) and strictly adheres to the MLAA Code of Ethics. 6. Can MV Locksmiths help with home or business lockouts too, not just car keys? Yes, alongside automotive lost key replacement, MV Locksmiths' mobile service covers general lockouts for homes and businesses. 7. How long has MV Locksmiths been operating? MV Locksmiths has been in business since 1997, providing locksmithing and security services to the Cobram region for nearly three decades. 8. How can I contact MV Locksmiths for a lost car key emergency? You can reach MV Locksmiths at 03 5871 2622, or for after-hours emergencies, call the mobile line on 0417 512 327.
velog
2. Spring Data JPA 기본 💚 다양한 요청 처리 방식 @Controller vs @RestController SSR 방식이 아닌 이상 Spring MVC 패턴에서 Model 과 View 의 역할을 FE가 처리함에 따라 BE는 데이터만 내려주게 된다. - JSON 형식 @Controller : 전통적인 Spring MVC의 컨트롤러, View 를 반환하기 위해 사용 @RestController : @Controller + @ResponseBody @ResponeBody : Controller 메서드가 반환한 Java 객체를 HTTP 응답 Body* 에 담아서 보내는 어노테이션 Java 객체 → JSON ✨[참고] @RequesetBody @RequestBody : HTTP 요청 Body에 담겨온 데이터를 Java 객체로 변환* 해서 받는 어노테이션 JSON → Java객체 ✨[참고] HttpMessageConverter와 Jackson라이브러리 Spring에서 JSON ↔ Java 실제 변환 작업은 내부의 HttpMessageConverter가 하고, JSON 변환에는 기본적으로 Jackson 라이브러리가 사용된다 @RequestMapping @RequestMapping 은 특정 URL 요청을 Controller의 클래스/메서드에 연결해준다. 사용법1 @ResController @RequestMapping("/users) public class UserController{ @GetMapping @PostMapping @PutMapping @PatchMapping @DeleteMapping } 사용법2 @RestController public class UserController{ @RequestMapping(value = "/users", method = RequestMethod.GET) public void getUser(){ ... } } 💚 데이터 전달 방식과 어노테이션 클라이언트 → 서버 데이터 전달 방식 데이터 전달 방식 어노테이션 주요 속성 / 특징 예시 쿼리 파라미터(쿼리 스트링) @RequestParam required : 필수 여부 지정 defaultValue : 값이 없을 때 기본값 지정 /users?name=kim 경로 변수 @PathVariable URL 경로의 값을 변수로 받음 /users/1 요청 본문 @RequestBody 요청 Body의 JSON 등을 Java 객체로 변환 JSON Body 폼 데이터 @ModelAttribute 폼 데이터를 Java 객체에 바인딩 HTML Form 데이터 @RequestParam 은 디폴트가 required=true 이므로 false 설정을 해주지 않으면 필수값 ✨[참고] 쿼리 파라미터 vs 경로 변수 쿼리 파라미터( @RequestParam ) : URL 경로 ? 뒤에 오는 조건값(선택적) 검색, 필터링, 정렬, 페이징 용도 예시 : /users?id=1 경로 변수( @PathVariable ) : URL 경로 자체에 값이 포함되는 필수값 특정 리소스를 식별하기 위해 사용 예시 : users/1 💚 DTO를 record로 작성기 record 는 데이터 전달 목적의 객체를 간결 하게 만들기 위한 문법으로 DTO의 성질과 부합한다. 또한 record 는 내부 필드가 private final 이기 때문에 불변을 보장 한다. public record UserRequest( String name, int age ) { } 위와 같이 record 를 작성하면 자바가 자동으로 아래 기능을 만들어준다. 생성자 getter 역할 메서드 equals() hashCode() toString() ✨[참고] class vs record 구분 class record 코드 길이 비교적 길음 매우 간결함 생성자 직접 작성 또는 Lombok 사용 자동 생성 Getter 직접 작성 또는 Lombok 사용 자동 생성 Setter 작성 가능 일반적으로 불가능 값 변경 가능 생성 후 변경 불가 equals/hashCode 직접 작성 또는 Lombok 사용 자동 생성 상속 가능 다른 클래스를 상속할 수 없음 주요 용도 일반적인 객체 데이터 전달용 객체 💚 Docker 도커는 소프트웨어 개발과 배포를 도와주는 컨테이너 기술 로 애플리케이션을 빌드, 배포, 실행하는 과정을 쉽게 관리 하게 해준다. Container 애플리케이션과 그 실행 환경을 함께 패키징 하여 어디서든 동일하게 실행될 수 있도록 하는 기술 Docker Image = 게임 CD 코드, 라이브러리, 설정 등을 포함하고 있는 읽기 전용(Read-only) 템플릿 - 변경 불가 실행에 필요한 모든 것을 담고 있는 정적 파일(설계도) !!️하나의 이미지로 여러 개의 컨테이너를 만들 수 있다. Docker Container = 실행되고 있는 게임 도커 이미지를 실행(Run)한 상태 로 독립된 격리 프로세스 이미지를 실제로 실행한 인스턴스 Docker File 도커 이미지를 생성하기 위한 설정 및 명령어 템플릿 파일 Dockerfile 작성 ↓ $ docker build ↓ Docker Image 생성 ↓ $ docker run ↓ Docker Container 생성 및 실행 데이터베이스 데이터 무결성(Data Integrity) 엔티티 무결성 각 행을 유일하게 식별할 수 있어야 한다. PK 는 중복❌, NULL❌ 참조 무결성 테이블 간 관계가 올바르게 유지되어야 한다. FK 는 실제로 존재하는 PK 값을 참조해야 한다. 도메인 무결성 컬럼에 들어가는 값은 정해진 데이터 타입, 범위, 조건 을 만족해야 한다. DROP vs DELTE vs TRUNCATE 3아키텍처 레이어 모든 데이터 클래스는 getter가 필수 스프링 내부적으로 객체를 조작할 때 getter를 사용 영속성 컨텍스트는 트랜잭션 내에서 동작 @Transactional 이 붙이면 그 내부 코드는 트랜잭션으로 관리 및 영속성 컨텍스트가 동작
velog
1. AI의 발전과정 1) AI의 50년 역사 AI기술의 60년 AI는 두 번의 황금기와 암흑기를 거쳐, 딥러닝 이후 세 번째 황금기를 맞이함 AI의 외부적 성공요인 최근 인공지능의 성공요인은 막대한 컴퓨팅 파워, 공개 SW의 확산, 빅데이터의 보급 AI의 60년 역사 인간 뇌 구조를 닮은 ‘인공신경망’을 만들면서 시작됨 뉴런 세포 + 시냅스 인공지능 분야는 컴퓨터 공학, 뇌과학, 유전학, 심리학, 사회문화적 학문들과도 포괄적으로 관계 앨런 튜링(Alan Turing) : 인공지능의 첫 시작을 연 인물 1956년, 인공지능이라는 용어가 등장 2000년대 초반, 딥러닝 기술이 등장하며 새로운 황금기의 장이 열림 AI의 주요 사건으로 본 발전과정 1943: McCulloch와 Pitts가 신경망의 기초 모델을 정립 ‘뉴런들의 간단한 네트워크를 분석하고 이것이 간단한 논리 기능을 수행할 수 있음을 보여주었다. 나중에 연구자들이 인공 신경망(ANN)이라고 부르게 되었다. 1950: 앨런 튜링이 기계 지능의 테스트 방법으로 튜링 테스트를 소개 튜링은 보편적인 계산 기계(컴퓨터)의 개념도 주창하였지만 인공 지능에도 큰 흥미를 가졌다. 영국의 수학자 알란 튜링은 “기계가 생각할 수 있을까?”라는 질문 대신에 기계와 사람을 구분할 수 없다면 인공 지능이 구현되었다고 봐야 한다고 주장 암호해독기 봄(Bombe) 1955: 다트머스 학술대회에서 ‘인공지능(AI)’이란 용어 탄생 다트머스 학술 회의가 Marvin Minsky와 John MacCarthy 등에 의하여 조직 1965: 오틀날 채팅봇의 원조인 ELIZA가 탄생 Weizenbaum은 심리 치료사의 행동을 모방하기 위해 ELIZA를 개발 ELIZA 라고 하는 이 프로그램은 사용자의 문장에서 특정한 키워드가 발견되면 어떤 규칙이 적용하여 답변을 생성한 후에 반환된다. AI의 두번의 겨울 AI는 발전과정에서 크게 2번의 기술적 부침을 겪었다. 1969, XOR 문제와 1차 겨울 1969년 마빈 민스키와 시모어 페퍼트가 퍼셉트론의 문제점과 한계를 수학적 증명으로 발표 퍼셉트론은 XOR에는 적용불가능 1990s, 기울기 소실 문제와 2차 겨울 다층 퍼셉트론의 제한성과 당시 컴퓨터 성능의 한계점 두 번째 암흑기가 도래하며 AI산업도 침체기에 돌입함. 해결점의 도출 1차 겨울 : 1986에 다층 퍼셉트론을 통해 해결되어 AI의 부활. 1980년대 중반 전문가 시스템 열풍으로 2차 AI의 봄이 옴 2차 겨울 : 컴퓨팅 성능과 딥러닝 기술이 급격히 발전하며 3차 AI의 봄이 옴 1980s: Feigenbaum이 인간 전문가의 의사결정을 흉내내는 전문가 시스템 개발 1997: IBM의 컴퓨터 딥블루가 체스 챔피언을 이김 2009: 구글이 자율주행 자동차를 선보임 2011: IBM의 컴퓨터 왓슨이 퀴즈쇼에서 인간을 누르고 우승 2011~2014: 시리나 구글 나우 같은 음성인식 개인 비서 등장 2016: 알파고가 이세돌을 이김 2) AI의 혁신적 발전 알파고(AlphaGo) 2016년 열린 이세돌 9단과의 대결에서 4승 1패로 승리 인공지능의 발전상을 전세계적으로 각인시킨 사건 알파고는 상대가 놓은 수 다음에 놓일 수 있는 수를 검색하고 승률이 높은 수를 선택하는 과정을 거침 알파고 제로 구글 딥마인드가 알파고 등장 1년 뒤, 2017년 10월 세계적인 학술지 ‘네이처(Nature)’에 소개한 알파고 제로는 알파고를 뛰어넘는 성능을 보였다. 알파고 제로(2017 기술 발표)의 알파고에 대비한 특성 형태 알파고 알파고 제로 전력소비를 큰 폭으로 개선 슈퍼컴퓨터급의 장비 사용 컴퓨터 한 대를 활용해 커제9단과 대결하여 승리 바둑경기를 전혀 학습하지 않은 점 대규모 바둑경기 데이터를 학습해 패턴을 예측하였음 개선된 형태의 강화학습을 도입 기술적 기법 2종의 인공신경망을 활용 1 전문 바둑기사의 착수 선호도를 분석함 2 현재 바둑판의 승률을 근사 알파고의 두 가지 신경망을 하나의 신경망으로 통합해 성능을 개선 최근 AI의 활약 (알파고 외의 주목할만한 사건들) 1997년 IBM의 딥블루 체스시합에서 세계 챔피언을 상대로 최초로 승리한 컴퓨터 2011년 IBM의 왓슨 퀴즈쇼 “제퍼디”에서 우승 차지 2022년 ChatGPT ChatGPT, DALL-E 등장 2. AI의 발전과 우리 삶의 변화 AI사회의 변화 AI의 거센 물결 : 초거대 AI 초거대 AI 1 강력한 컴퓨팅 인프라를 바탕으로 대용량 데이터를 학습해 종합적 추론이 가능함 2 OpenAI의 GPT 시리즈, 국내 IT선두기업들도 초거대 AI개발중 알파고와 차이 알파고는 바둑 분야에만 특화돼 있지만, 초거대 AI는 여러 상황에서 역할을 수행할 수 있다. 마치 인간의 능력을 전부 갖춘 AI를 만들려는 시도이다. ChatGPT의 이전 모델 GPT-3에서 생성된 텍스트의 품질은 너무 높아서 사람이 작성했는지 여부를 판별하기 어렵다고 한다. GPT-3는 2020년 9월 영국 가디언에 칼럼 <A robot wrote this entire article. Are you scared yet, human?>을 기고하기도 했다. 신경망의 파라미터 신경망 안에서 학습을 통하여 변경할 수 있는 연결선의 가중치이다. 가중치가 많을수록 더 정교하게 학습 시킬 수 있다. 사람의 뇌와 비교 뇌 안에 있는 파라미터는 약 1000조 개이고, GPT-3는 약 1750억 개 보유 AI사회의 소득 변화 AI의 발전이 이끌어낸 자동화를 이끌었고, 이 같은 사회변동에서 생겨난 사회적 문제가 대두됨 현상1 : 인공지능이 발전할 수록 사람을 대신해 처리할 수 있는 업무 증가 맥킨지 사의 전망으로 2030년까지 8억명의 전세계적 일자리 감소 전망 현상2 : 일자리를 잃은 사람들의 소득 처리 방법이 사회적 문제로 대두 일자리 감소의 속도가 사회변화의 속도처럼 매우 높음. 인공지능으로 인한 일자리 창출보다 감소가 더 클 것이라는 전망 대규모 실업 관련 대책 마련이 필요 기본소득이란 개념은 이미 50년 넘게 논의되어 온 사회문제이지만 최근 들어 인공지능으로 인한 실업 문제가 확산되면서 새롭게 주목 2020년 민주당 대선후보 ‘앤드류 양(Andrew Yang)’은 모든 국민들에게 매달 기본소득 1,000불을 지급하겠다는 공약을 발표 단순노동이나 위험노동에는 AI가 도입되어야 함 AI로 인한 실업인에 대해 최소한의 생활을 할 수 있도록 지원 AI와 로봇 기업이 이에 대한 책임을 나누어야 함 기본소득 재원 마련 방법으로 부가가치세 도입을 제시 페이스북의 마크 저커버그가 기본생활이 가능한 사회구조의 필요성을 강조 우리는 일의 의미로 평가되어야 한다. 마이크로소프트의 빌 게이츠가 기본 소득의 강조 AI는 부를 창출하며 AI의 사회 침투 흐름을 사람이 따라잡을 수 없기 때문에 기본소득을 도입하고 실업자 재고용을 위한 교육도 확충해야 한다. 실리콘밸리에서도 기본소득에 대한 논의가 활발 기술 개발에만 몰두할 것이 아니라, 파생될 문제에 대한 대책을 마련 AI사회의 다양한 응용분야 다양한 추천시스템 : OTT의 영상추천, 쇼핑몰의 상품 추천, 마케팅 추천 등 AI 챗봇 : Google Assistant 및 Amazon Alexa와 같은 가상 어시스턴트 신약 개발, 생물학, 의료분야 : 유전자 데이터, 케이스 리포트, AI분석의 활용 예술분야의 창작 : ‘미드저나’와 같은 AI창작툴에서 키워드를 입력하여 제작 스페이스 오페라 극장 : 2022년 8월에 미국 콜로라도 주립 박람회의 디지털 예술 부문에서 우승을 차지함. ‘미드저나’에서 제작됨 AI사회에서 교육환경의 변화 2016년 <장학퀴즈> 학생 VS 인공지능 시스템 ‘엑소브레인’ : ‘엑소브레인’은 대결 초반에는 학생들보다 우수하지 않았지만, 녹화가 진행되면서 스스로 학습하고 진화해 학생들을 압도 뇌과학자 샘 해리스 : “로봇의 전자회로와 인공지능을 처리하는 여러 가지 전자부품 회로는 인간의 생화학적 뇌, 뉴런으로 이루어진 뇌 구조보다 100만 배 빠르다” 결국 4차 산업혁명 시대를 대비한 교육의 핵심은 ‘문제해결 능력’과 ‘체계적 사고를 할 수 있는 논리력’ 변화하는 교육환경에 발맞춰 학교와 가정에서 함께 변해야 함 3. C++ 언어의 기초 문법 논리 연산자 #include <iostream> using namespace std; int main() { int x = 10; int y = 20; bool is_x = true; bool is_y = false; if (is_x == true && is_y == true) cout << "is_x && is_y = " << "true" << endl; else cout << "is_x && is_y = " << "false" << endl; if (x == 10 || is_x == false) cout << "x가 10이거나 is_x가 true입니다." << endl; else cout << "x는 10이 아니며 is_x가 false가 아닙니다." << endl; if (!is_y) cout << "is_y 원래 값은 false입니다" << endl; else cout << "is_y 원래 값은 true입니다" << endl; return 0; } is_x && is_y = false x가 10이거나 is_x가 true입니다 is_y 원래 값은 false입니다 논리 연산자에는 세 가지 조건이 있음 A&&B : A와 B가 모두 참이면 참 A||B : A와 B중 하나만 참이어도 참 !A : A논리값의 반대값 Is_y는 false이므로 16번 라인이 수행됨 X==10이 참이므로 19번 라인이 수행됨 #include <iostream> #include <string> using namespace std; int main() { int x = 1; int y = 2; int z = 0; z = x > y ? x : y; // 삼항 연산자 cout << "x와 y 중 더 큰 값은 : " << z << endl; return 0; } x와 y중 더 큰 값은 : 2 12번 라인 : 조건부 연산자(삼항 연산자)를 통해 코드를 간결하게 작성가능 X가 y보다 크다면 : 앞에 있는 수x를 z에 대입함 조건 x>y조건이 true이기 때문에 x값을 z에 할당한 것 조건이 맞지 않는다면 false인 y를 z에 할당함 12번 라인 설명 조건부 연산자 : 조건식? 식1 : 식2 조건식이 만족하면 즉 true이면 식1이 선택됨 조건식이 만족되지 않으면 즉 false이면 식2가 선택됨 #include <iostream> using namespace std; int main() { int goguryeo = 37, baekjae = 18, silla = 57; printf("삼국 건국연도\n"); printf("고구려 bc%d년, 백제 bc%d년, 신라 bc%d년\n", goguryeo, baekjae, silla); return 0; } 삼국 건국연도 고구려 bc37년, 백제 bc18년, 신라 bc57년 쉼표 연산자는 비슷한 의미의 코드를 이어 붙이는데 사용된다. Int형 변수를 여러 번 이어 붙여서 한번에 변수를 선언하고 초기화하였음 비트 연산자 #include <iostream> #include <bitset> using namespace std; int main() { bitset<8> bit1; bit1.reset(); bit1 = 127; bitset<8> bit2; bit2.reset(); bit2 = 0x20; // 32 bitset<8> bit3 = bit1 & bit2; bitset<8> bit4 = bit1 | bit2; bitset<8> bit5 = bit1 ^ bit2; bitset<8> bit6 = ~bit1; bitset<8> bit7 = bit2 << 1; bitset<8> bit8 = bit2 >> 1; cout << bit3 << ", " << bit3.to_ulong() << endl; cout << bit4 << ", " << bit4.to_ulong() << endl; cout << bit5 << ", " << bit5.to_ulong() << endl; cout << bit6 << ", " << bit6.to_ulong() << endl; cout << bit7 << ", " << bit7.to_ulong() << endl; cout << bit8 << ", " << bit8.to_ulong() << endl; return 0; } 00100000, 32 01111111, 127 01011111, 95 10000000, 128 01000000, 64 00010000, 16 비트 연산자의 종류 A & B : A와 B를 and연산 A | B : A와 B를 or연산 A ^ B : A와 B를 xor연산 ~A : A 비트를 반전 A >>B : A의 모든 비트를 오른쪽 시프트 A <<B : A의 모든 비트를 왼쪽 시프트 캐스트 연산자(static_cast) #include <iostream> using namespace std; int main() { int x = 2; double y = 4.4; int i = static_cast<int>(y / x); int j = (int)y / x; double k = y / x; cout << "4.4 / 2 = (static_cast<int>) " << i << endl; cout << "4.4 / 2 = (int) " << j << endl; cout << "4.4 / 2 = " << k << endl; return 0; } 4.4 / 2 = (static_cast ) 2 4.4 / 2 = (int) 2 4.4 / 2 = 2.2 static_cast<> dynamic_cast<> const_cast<> reinterpret<> C++에서 자료형을 변경하는 경우 전통적으로 (double)값은 방법을 활용 하지만 무조건적인 변경은 예상하지 못한 오류가 발생하기도 함. 그러므로 C++에서 4가지 자료형 변환 연산자를 제공함
velog
Click To Message My WhatsApp 24/7 https://wa.link/st5uhb Click To Visit My Website https://www.delhifungirl.com/ Calling Number 7703891840 Call Girls In Vasant Kunj Delhi NCR 7703891840 Escort Service Door Step Top Quality Model Escorts Services Women Seeking Men Independent Girls In All Over Delhi Gurgaon,Noida,Gaziabad.All Home/Hotel Delevery Service Doorstep Service In Call & Out Call Service With Many Options Available Delhi Gurgaon & Noida Service In Reasonable Rates From Low to High Profile Staffs..Models• Vip Models• Russian Models• Foreigner Models• TV Actress and Celebrities• Receptionist• Air Hostess• Call Center Working Girls/Women• Hi-Tech Co. Girls/Women• Housewife• Collage Going Girls.• Travelling Escorts.• Ramp-models• Foreigner And Many More.. Incall & Outcall Available...• INDEPENDENT GIRLS / HOUSE WIFES.CALL/WHATSHAPP 84476~52111 Girls in Delhi Bookings Opens Now Excellent High profile Independent Female Model VIP High Class And Top Class Escorts Service with us will be Best part in your Life ever.Escorts Available at all Star Hotels In Delhi Near IGI Airport Mahipalpur, Aerocity Janpath Available Any time Any Star Hotel Delhi
Балл: 54.4Уверенность: 49%
Подробнееvelog
Click To Message My WhatsApp 24/7 https://wa.link/st5uhb Click To Visit My Website https://www.delhifungirl.com/ Calling Number 7703891840 Call Us – 7703891840 Call girls in Shahdara Delhi – We brings offer model independent genuine call girls/Women Seeking Men Justdial Delhi escorts our high class luxury and premium call girl agency service We are the best leading Delhi escorts service providers in Delhi who can provide you with all kinds of hot and sexy female escorts near Oyo 5-star hotels. Suppose you want a unique and memorable experience with a hot and beautiful call girl. in that case, this is the perfect place for you. We offer all types of girls of your choice with space. our escorts are fully cooperative and understand your needs. all types of call girls like Housewives, College girls, Russian girls, Muslim girls, Afghani girls, Working girls, south Indian girls, Punjabi girls, etc
Балл: 54.4Уверенность: 49%
Подробнееvelog
[TIL] LG CNS AM INSPIRE CAMP 37일차 어제 72쪽 구성도에서 칸 하나로만 봤던 서비스 디스커버리가 오늘 실제 프로젝트가 됐다. 유레카 서버를 띄우고, 거기에 서비스 하나를 등록하고, 그 서비스를 네 대까지 늘려봤다. 그 전에 오전 앞부분은 IntelliJ와 메이븐에 썼다. 지금까지 VS Code로 수업해왔기 때문에, 툴을 한 바퀴 둘러보고 빌드한 결과물을 터미널에서 직접 띄워보는 데까지가 먼저였다. 1. 어제를 두 장으로 접고 시작했다 강사님은 어제 내용 중 두 장만 다시 짚어주셨다. 모놀리스와 MSA의 장단점 표, 그리고 MSA 표준 구성도다. 어느 쪽이 더 좋다가 아니라 프로젝트의 성격과 규모에 맞춰 고르는 것이고, 구성도는 규칙이 아니라 선도 기업들이 갖춘 베스트 프랙티스라는 정리였다. 오늘 순서는 셋이었다. IntelliJ로 간단한 스프링 부트 프로젝트를 만들고 메이븐으로 빌드·실행해보는 것, 강의 노트 섹션 2의 서비스 디스커버리 이론, 그리고 오후 내내 유레카 실습이다. 마지막 시간에는 다음 수업인 API 게이트웨이를 위해 공유받은 코드가 잘 뜨는지 확인했다. 명령어로 실행해보는 연습을 하는 이유도 말씀해주셨다. 실제 배포에서는 재생 버튼을 누르는 게 아니라 명령을 입력해야 하고, 나중에 CI/CD를 구축할 때도 이 명령들을 파이프라인에 적어둬야 하기 때문이다. 메모: "명령어를 알아두는 것도 굉장히 중요해요." 2. 오늘 손에 쥔 구문들 IntelliJ와 메이븐 명령, 유레카 서버·클라이언트 설정, 그리고 실행 시점에 포트를 바꾸는 옵션까지가 오늘의 범위였다. 구분 구문 역할 메이븐 mvn clean target 폴더(빌드 산출물)를 지운다 메이븐 mvn compile / mvn package 컴파일 / 배포 가능한 jar로 압축 메이븐 mvn clean compile package -DskipTests 세 단계를 한 번에, 테스트는 건너뜀 메이븐 mvn spring-boot:run jar 없이 빌드부터 돌려 바로 기동 ( pom.xml 위치에서) 자바 java -jar <jar 파일> 패키징된 jar를 직접 실행 JVM 옵션 -Dserver.port=60001 실행 시점에 포트를 덮어쓴다 터미널 ls / dir 파일 목록 (CMD는 dir 만 된다) 어노테이션 @EnableEurekaServer 이 앱을 유레카 서버로 동작시킨다 어노테이션 @EnableDiscoveryClient 이 앱이 디스커버리 클라이언트임을 명시 (생략해도 동작) yml eureka.client.register-with-eureka 내 정보를 유레카에 등록할지 yml eureka.client.fetch-registry 유레카의 등록 목록을 받아올지 yml eureka.client.service-url.defaultZone 유레카 서버 주소 + /eureka yml server.port: 0 랜덤 포트 yml eureka.instance.instance-id 인스턴스마다 고유한 ID yml eureka.instance.prefer-ip-address 호스트 이름 대신 IP로 등록 pom <properties> + ${spring-cloud.version} 버전을 변수로 빼서 참조 용어 구분 용어 의미 디스커버리 서비스 레지스트리 / 서비스 디스커버리 등록한다는 쪽 이름 / 찾아준다는 쪽 이름 (같은 제품) 디스커버리 Spring Cloud Netflix Eureka 넷플릭스가 만들어 기부한 디스커버리 제품 디스커버리 fetch 등록 목록을 주기적으로 받아오는 것 (기본 30초) 디스커버리 heartbeat "살아 있다"를 주기적으로 알리는 신호 패키징 jar / war Java Archive / Web Archive 서버 WAS 웹 애플리케이션 서버. 톰캣이 대표 종료 graceful shutdown 강제 종료가 아니라 순차적으로 정상 종료 프로젝트 Group ID / Artifact ID 조직 도메인을 뒤집은 것 / 결과물(앱)의 고유 ID 환경 프로필 dev·prod처럼 환경별로 설정 파일을 나눠 고르는 것 HTTP 204 No Content 성공했지만 응답 바디에 줄 내용이 없음 HTTP 400 Bad Request 클라이언트가 필요한 값을 빠뜨린 잘못된 요청 IntelliJ 모듈 상위 프로젝트 하나 아래에 여러 프로젝트를 묶는 단위 3. IntelliJ 한 바퀴 새 프로젝트를 만들 때 고르는 것들 New Project 에서 Spring Boot 를 골라 helloworld 라는 프로젝트를 만들었다. 예전에는 무료인 Community 버전에 이 메뉴가 없어서 start.spring.io 에서 프로젝트를 만들어 압축을 받아야 했는데, 버전이 통합된 뒤로 무료 사용자도 IDE 안에서 바로 만들 수 있게 됐다. 메뉴가 잠겨 있던 수강생 분들에게는 start.spring.io (Spring Initializr)에서 같은 항목을 고르고 Generate한 뒤 압축을 풀어 열면 된다 고 하셨다. IDE 안에서 만드는 것도 결국 그 서버에서 만들어 가져오는 것이라 차이가 없다. 항목 오늘 고른 값 이유 Type Maven 요즘은 XML 문법이 복잡한 메이븐보다 그레이들을 더 쓰는 추세다. 그래도 수업에서 메이븐 명령으로 서비스를 여러 대 띄울 것이라 맞춰두면 좋다고 하셨다 JDK · Java 설치된 JDK와 같은 버전 둘이 어긋나면 호환성 오류가 난다. 강사님은 21, 각자 17이면 17 Packaging Jar 스프링 부트에 내장된 톰캣으로 실행하기 때문 Configuration YAML properties는 spring.application.name= 식의 키-값, YAML은 계층 구조라 가독성이 좋아 요즘 더 많이 쓴다 Spring Boot 태그 없는 정식 버전 뒤에 SNAPSHOT 이나 M2 가 붙은 것은 정식 릴리스 전의 실험 단계라 피한다 Dependencies Spring Web 오늘은 실행만 해볼 것이라 하나만 프로젝트를 만들면 오른쪽 아래에서 의존성을 내려받는다. 그게 끝나면 가장 먼저 pom.xml 을 확인 하라고 하셨다. 스프링이든 리액트든 프로젝트를 만들면 설정 파일부터 보는 습관이다. pom.xml을 고쳤다면 싱크까지 pom.xml 의 버전을 0.0.1 에서 1.0 으로 함께 바꿔봤다. ⚠️ 저장했다고 끝나는 게 아니다. 오른쪽 위에 뜨는 M 아이콘(Sync Maven Changes) 을 눌러야 반영된다. 그레이들이라면 같은 자리에 코끼리 아이콘이 뜬다. Spring Web 하나를 골랐더니 pom.xml 에는 웹 MVC 스타터와 그 짝인 테스트 스타터가 들어가 있었다. 그런데 왼쪽의 External Libraries 를 열어보면 스프링 관련 라이브러리가 잔뜩 들어 있다. 스타터 하나가 여러 의존성을 품고, 그 의존성이 또 다른 의존성을 물고 오기 때문이다. 빌드 도구는 빌드만 하는 게 아니라 이런 의존성 관리 까지 맡는다. 툴 창과 단축키 왼쪽과 오른쪽에 붙은 툴 창을 하나씩 짚어주셨다. Project (폴더 구조), Structure (열린 클래스 안의 구조), Commit (Git), TODO , Build , Services , Terminal , Version Control , Problems , 그리고 오른쪽의 Notifications , AI Assistant , Database , Maven 이다. TODO 는 팁으로 알려주셨다. 주석에 TODO 를 남겨두면 그것만 모아 볼 수 있어서 잊어버린 작업을 다시 찾기 좋다. VS Code에는 기본 기능이 없어 Todo Tree 같은 익스텐션을 설치해야 한다고 하셨다. Keymap 에 따라 단축키가 달라진다. 강사님은 기본값이 아닌 다른 키맵을 쓰신다. 기본 키맵에서는 Ctrl+Y 가 되돌리기 취소가 아니라 줄 삭제 라서, Ctrl+Z / Ctrl+Y 습관 때문에 자꾸 줄을 지우게 되어 바꾸셨다고 했다. 기본 키맵에서 되돌리기를 취소하려면 Ctrl+Shift+Z 다. 이클립스나 VS Code 키맵을 불러와 쓸 수도 있다. 하려는 것 IntelliJ 단축키 (강사님 키맵 기준) 프로젝트 전체 검색 Shift 두 번 줄 복제 Ctrl+D (Duplicate) 한 줄 이동 Alt+Shift+↑/↓ 블록 전체 이동 Ctrl+Shift+↑/↓ 같은 키워드 다중 선택 Alt+J 원하는 곳 다중 선택 Alt+Shift+클릭 또는 드래그 꼬였을 때와 설정 받은 의존성은 실제로 사용자 폴더의 .m2/repository 에 쌓인다. 예전에는 의존성이 꼬이면 이 폴더를 통째로 지우고 다시 받기도 했는데, 요즘은 그럴 일이 드물다고 하셨다. 빨간 줄이 이유 없이 뜨면 File → Invalidate Caches 에서 캐시를 지우고 재시작하면 대부분 해결된다. Settings 에서는 테마와 글꼴, 그리고 Change font size with Ctrl+Mouse Wheel 을 켜두는 것을 추천하셨다. 설정은 메뉴를 뒤지는 것보다 검색이 가장 빠르다. 소스 구조와 YAML src/main/java 아래에 main 메서드를 가진 클래스가 있다. 자바 프로그램의 진입점이고, 실행되면 SpringApplication.run 이 내장 톰캣을 띄운다. resources 에는 application.yml , 정적 파일용 static , UI 템플릿용 templates 가 있다. test 에는 기능마다 짝을 이루는 테스트 코드를 두는 것이 권장 사항이고, 이 테스트들이 빌드 과정에서 자동으로 돈다. YAML은 들여쓰기 가 가장 중요하다. 들여쓰기가 어긋나면 값을 못 불러와 제대로 실행되지 않는다. 확장자는 .yml 과 .yaml 둘 다 된다. .jpg 와 .jpeg 처럼, 옛날 운영체제가 확장자를 세 글자로 제한했던 흔적이라고 하셨다. 여기에 server.port: 8080 을 적고 실행했다. IntelliJ는 기본이 자동 저장 이라 Ctrl+S 를 누르지 않아도 된다. 실행은 main 옆 재생 버튼, 파일 우클릭 → Run , 한 번 실행한 뒤에는 오른쪽 위 실행 바 어디서든 된다. 그 옆 벌레 모양이 디버그 모드다. 4. 빌드하고, 터미널에서 띄우기 메이븐 라이프사이클 오른쪽 Maven 창의 Lifecycle 에 있는 항목 하나하나가 메이븐의 기능이다. 여기서 clean 을 더블 클릭하는 것과 터미널에서 mvn clean 을 치는 것은 같은 일이다. IntelliJ 안의 메이븐은 내장된 것이라 명령이 조금 다르게 찍힐 뿐이다. 흐름 — 소스에서 실행까지 두 갈래 소스 코드 (.java) │ clean : target 폴더(이전 산출물)를 지운다 │ compile : .java → .class 바이트코드, target 폴더가 다시 생긴다 │ package : 산출물을 배포 가능한 jar로 압축 (이 과정에서 테스트도 돈다) ↓ target/<artifactId>-<version>.jar ├─▶ java -jar <jar> jar가 있어야 실행된다 │ pom.xml 위치에서 └─▶ mvn spring-boot:run jar 없이 빌드부터 돌려 바로 기동 jar 이름은 pom.xml 의 Artifact ID와 버전 을 조합해 만들어진다. 그레이들을 쓰면 target 대신 build 폴더가 생긴다고 하셨다. 터미널에서 실행 IntelliJ 내장 터미널을 열고 target 폴더로 이동해 jar를 확인한 뒤 java -jar 로 실행했다. 파워셸과 macOS 터미널은 ls 와 dir 이 모두 되지만, 윈도우 명령 프롬프트는 dir 만 된다. 파일 이름은 Tab 으로 자동 완성된다. bash · 터미널 — jar 실행과 메이븐 실행 cd target dir # 또는 ls java -jar <artifactId>-<version>.jar # 루트(pom.xml이 있는 폴더)로 올라와서 cd .. mvn clean mvn spring-boot:run 코드 리뷰 ⚠️ 처음 java -jar 는 포트 충돌 로 실패했다. IntelliJ에서 띄운 것을 멈추지 않아 8080을 두 서버가 쓰려 한 것이다. 앞의 것을 멈추고 방향키 위로 이전 명령을 불러와 다시 실행하니 떴다. jar 하나로 서버가 뜨는 이유는 jar 자체가 실행 가능한 파일이고, 그 안의 스프링 부트에 톰캣이 내장 되어 있기 때문이다. 종료는 Ctrl+C 다. 로그에 찍히는 graceful shutdown 은 강제 종료가 아니라 순차적으로 정상 종료됐다는 뜻이다. 일괄 작업을 끝내겠냐고 물으면 Y . ⚠️ mvn spring-boot:run 은 pom.xml 이 있는 위치 에서 쳐야 한다. 강사님도 처음에 target 에서 치셨다가 루트로 올라와 다시 실행하셨다. pom.xml 을 기준으로 빌드가 먼저 돌고, 끝나면 스프링 부트가 기동된다. ⚠️ mvn 을 인식하지 못한다면 먼저 mvn --version 이 되는지 본다. 안 되면 원인은 둘이다. 어제 bin 폴더를 환경변수에 잘못 넣었거나, 아예 넣지 않았거나다. 5. 서비스 디스커버리 — 주소를 매번 물어볼 수는 없다 여기서부터 강의 노트 섹션 2다. 왜 필요한가 서비스 A, B, C를 한 PC에서 띄우면 IP는 같고 포트만 다르다(8080, 8081, 8082). 각자 다른 PC나 컨테이너에서 띄우면 IP나 호스트 이름이 다르니 포트는 8080으로 같아도 된다. 어느 쪽이든 서로 통신하려면 상대의 IP와 포트를 둘 다 알아야 한다. 서비스가 늘어날 때마다 기존 서비스들이 새 주소를 다 알아야 한다는 뜻이다. 강사님은 편지에 비유하셨다. 친구의 존재는 알아도 집 주소를 모르면 보낼 때마다 물어봐야 한다. 실제 상용 서비스는 수십에서 수백 개이고, IP가 동적으로 할당 되어 계속 바뀌기도 하니 하드코딩으로는 관리할 수 없다. 그래서 서비스들의 등록·삭제·위치 정보를 관리해주는 서비스를 둔다. 등록받는다는 의미에서 서비스 레지스트리 , 위치를 찾아준다는 의미에서 서비스 디스커버리 라고 부르는데, 보통 한 제품이 두 기능을 다 하므로 섞어 써도 된다. 수업에서 쓰는 제품은 넷플릭스가 만들어 스프링 재단에 기여한 Spring Cloud Netflix Eureka 다. 그림과 실제는 다르다 강의 노트 그림에는 클라이언트 요청이 유레카로 들어가는 것처럼 그려져 있다. ⚠️ 강사님은 이해를 돕기 위한 그림일 뿐이라고 분명히 하셨다. 유레카는 바깥에 따로 있고, 요청은 앞단의 게이트웨이 가 받는다. 게이트웨이도 요청마다 유레카에 물어보는 게 아니라 주기적으로 목록을 받아와(fetch) 자기 로컬 메모리에 캐싱 해두고 그것을 보고 보낸다. 주기는 기본값이 30초일 것이라고 하셨다. 프로젝트 설정 항목, 이번엔 의미까지 helloworld 때는 기본값으로 넘겼던 항목을 하나씩 설명해주셨다. Group ID 는 조직이나 회사의 도메인을 뒤집어 쓰는 것이 일반적이다. lg.com 이면 com.lg 다. Artifact ID 는 이 프로젝트의 고유 ID다. artifact가 결과물이라는 뜻이니 곧 스프링 부트 애플리케이션의 ID다. Package name 은 두 값을 조합해 자동으로 만들어지는데, 자바 네이밍 규칙에 따라 하이픈은 빠진다. jar와 war 의 차이도 이때 나왔다. jar는 클래스와 인터페이스 파일을 압축한 Java Archive이고, war는 거기에 웹 애플리케이션 형태를 더한 Web Archive다. 스프링 부트 이전의 스프링 프레임워크는 톰캣이 내장되어 있지 않아서, war를 만들어 외부 톰캣의 webapps 폴더 에 넣고 서버를 띄웠다. 그때는 톰캣 하나에 war 여러 개를 넣어 앱 여러 개를 동시에 돌릴 수 있었다. 스프링 부트는 프로젝트마다 톰캣이 하나씩 내장 되어 있어서 jar만으로 독립 실행된다. 강사님은 레거시 스프링과 스프링 부트의 가장 큰 차이로 이 내장 톰캣 과 의존성 관리의 편리함 을 꼽으셨다. 예전에는 Maven Repository 사이트에서 의존성을 검색해 빌드 도구에 맞는 코드를 복사해 pom.xml 에 붙여 넣었는데, 이제는 프로젝트를 만들 때 클릭으로 고른다. 물론 만든 뒤에 추가하는 의존성은 여전히 직접 넣는다. 스프링 클라우드 버전 스프링 클라우드는 여러 서브 프로젝트를 묶은 패키지라서, 서브 프로젝트마다 버전이 제각각일 수 있다. 중요한 것은 스프링 클라우드 버전을 스프링 부트 버전과 맞추는 것 이다. 공식 사이트의 호환 표를 보고 맞추며, 둘 다 최신을 고르면 크게 문제가 없을 것이라고 하셨다. ⚠️ 강의 노트는 스프링 부트 3.5 기준이지만 지금은 그 버전을 고를 수 없어서, 수업은 최신 버전 으로 진행했다. 강사님 화면에서는 스프링 부트 4 버전대가 선택됐고, pom.xml 에는 스프링 클라우드 2025.1 버전대가 자동으로 들어갔다. 6. 실습 1 유레카 서버 띄우기 service-discovery 라는 프로젝트를 Maven, Java 21(각자 JDK 버전), Jar, YAML로 만들고 의존성은 Eureka Server 하나만 골랐다. 유레카로 검색하면 세 가지가 나오는데, 지금 만드는 것은 전화번호부 쪽이다. pom.xml 에서는 스프링 부트와 스프링 클라우드 버전, 의존성을 확인했다. <properties> 에 버전을 변수로 선언해두고 아래에서 ${spring-cloud.version} 으로 꺼내 쓰는 구조도 함께 봤다. 하드코딩해도 되지만 변수로 빼두면 여러 곳에서 같은 값을 참조할 수 있고, 필요하면 직접 변수를 더 만들어도 된다. 유레카 서버가 되려면 두 가지가 필요하다. 의존성 , 그리고 main 클래스의 @EnableEurekaServer 다. @SpringBootApplication 이 내장 톰캣을 띄우고, 그 위에서 유레카 서버가 기동되는 방식이다. yml · service-discovery/src/main/resources/application.yml — 전화번호부 자신은 등록도 조회도 하지 않는다 server: port: 8761 spring: application: name: service-discovery eureka: client: register-with-eureka: false # 내 정보를 유레카에 등록할 것인가 fetch-registry: false # 유레카의 등록 목록을 받아올 것인가 코드 리뷰 8761 은 유레카가 관례적으로 쓰는 기본 포트 다. 꼭 이 번호일 필요는 없다. ⚠️ 클라이언트 설정을 적지 않으면 두 값의 기본값은 true 다. 유레카 서버는 자기 자신이 전화번호부 라 스스로를 등록할 필요도, 목록을 받아올 필요도 없으므로 둘 다 false 로 끈다. ⚠️ 일반 마이크로 서비스는 반대로 둘 다 true 다. 유레카 서버만 예외다. 실행하면 로그에 활성 프로필을 정하지 않아 기본(default) 프로필 로 돈다는 줄이 찍힌다. 강사님은 프로필을 짧게 짚어주셨다. application-dev.yml 과 application-prod.yml 처럼 환경별로 설정을 나눠두면, 개발 DB와 운영 DB처럼 서로 다른 정보를 프로필만 바꿔 골라 쓸 수 있다. 25일차부터 써온 application-dev.yml 의 그 dev 가 프로필 이름이었다. 자세한 것은 컨피그 서버에서 다시 배운다고 하셨다. 이어서 Started Eureka Server 와 8761 포트가 찍히면 브라우저에서 유레카 대시보드 에 접속할 수 있다. 주소는 localhost:8761 , 자기 자신을 뜻하는 루프백 IP 127.0.0.1:8761 , 또는 실제 PC의 IP 중 무엇을 써도 된다. 대시보드에는 기동 시각과 업타임, 복제본(replicas), 그리고 가장 중요한 Instances currently registered with Eureka 가 있다. 아직 등록한 서비스가 없으니 No instances available 이 정상이다. 7. 실습 2 user-service 등록하기 유레카 서버는 켜둔 채로 새 창에 user-service 프로젝트를 만들었다. 이번에는 서버가 아니라 서버에 등록될 클라이언트 라서 Eureka Discovery Client 를 고르고, 앞으로 기능을 붙여갈 것이라 Spring Boot DevTools, Lombok, Spring Web 까지 네 개를 넣었다. main 클래스에는 @EnableDiscoveryClient 를 붙였다. ⚠️ 사실 의존성과 yml 설정만 있으면 이 어노테이션 없이도 등록된다. 그래도 명시적으로 선언하는 것이 관리 차원에서 명확 하다는 것이 강사님의 권장이다. yml · user-service/src/main/
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%