🗺️ 전체 학습 지도 단계 챕터 핵심 주제 확인할 결과 서버 간 통신 2-1 ~ 2-4 RestTemplate, GET·POST·exchange URL·헤더·본문을 구성해 다른 서버 호출 외부 서비스 연동 2-5 네이버 쇼핑 검색 API 검색 결과를 우리 서비스 DTO로 변환 관계 매핑 2-6 ~ 2-10 방향·주인, 1:1·N:1·1:N·N:M 객체 관계를 외래 키와 중간 테이블에 연결 조회·생명주기 2-11 ~ 2-13 LAZY·EAGER, Cascade, orphanRemoval 조회 시점과 저장·삭제 전파 구분 관심상품 구현 2-14 ~ 2-16 프로젝트 설계, 상품 API, Scheduler 검색·등록·희망 가격·가격 갱신 연결 회원별 데이터 2-17 ~ 2-18 JWT 회원 기능, 상품 소유자 인증된 회원의 관심상품만 조회 조회 확장 2-19 페이징·정렬·역할별 조회 필요한 페이지와 정렬 결과 반환 분류 구조 설계 2-20 Folder·ProductFolder 상품과 폴더의 다대다 관계를 중간 Entity로 표현 폴더 기능 구현 2-21 ~ 2-23 생성·선택·연결·폴더별 페이징 회원 소유권과 중복을 확인해 분류 기능 완성 배포 숙제 2-24 EC2·RDS 배포 접속 URL에서 서비스 기능 확인 Chapter 1에서 이어지는 변화 항목 Chapter 1 Chapter 2 서버의 역할 사용자 요청을 받아 인증·처리 외부 서버에도 요청해 데이터를 활용 데이터 모델 회원 중심 회원·상품·폴더와 연결 정보 JPA 사용 기본 저장·조회 연관관계·로딩 전략·영속성 전이 사용자 정보 인증 객체 구성 인증 정보를 상품 소유자와 연결 JWT 전달 쿠키에서 추출하는 실습 응답·요청 Authorization 헤더로 전달 목록 조회 전체 List 반환 회원 조건·페이지·정렬을 적용 먼저 기억할 서비스 흐름 사용자가 검색어를 보냅니다. 우리 서버가 네이버 쇼핑 검색 API를 호출합니다. 외부 응답을 ItemDto로 변환합니다. 사용자가 선택한 검색 결과를 관심상품으로 저장합니다. 관심상품을 인증된 회원과 연결합니다. 회원별 목록을 페이징·정렬해 보여줍니다. 스케줄러가 저장된 상품의 최저가 정보를 갱신합니다. 폴더와 중간 Entity로 관심상품을 분류하고 폴더별로 조회합니다. 완성한 서비스를 배포하고 접속 URL을 확인합니다. 💡 핵심 구분 : 외부 검색 결과인 ItemDto , DB에 저장된 관심상품인 Product , 화면에 반환할 ProductResponseDto 는 역할이 다릅니다. 01 · RestTemplate이란 무엇일까? 💡 한 줄 요약 : RestTemplate은 우리 서버가 다른 서버로 HTTP 요청을 보내고 응답을 받도록 돕는 HTTP 클라이언트입니다. Server To Server 지금까지는 브라우저의 요청을 받는 서버를 만들었습니다. 외부 검색·주소·결제 등의 서비스를 사용하려면 우리 서버도 다른 서버에 요청해야 합니다. 통신 구간 요청하는 쪽 응답하는 쪽 사용자 → 우리 서비스 브라우저 우리 서버 우리 서비스 → 외부 서비스 우리 서버 외부 서버 Client와 Server는 프로그램의 고정된 이름이 아니라 통신에서의 역할입니다. 우리 서버는 브라우저에는 서버이고, 외부 API에는 클라이언트가 됩니다. 실습 환경 애플리케이션 역할 구분 spring-resttemplate-client 다른 서버에 요청 클라이언트 역할의 Spring 서버 spring-resttemplate-server 요청을 받아 결과 반환 서버 역할의 Spring 서버 두 애플리케이션은 동시에 실행할 때 서로 다른 포트를 사용합니다. 요청 대상 예제는 localhost:7070 입니다. RestTemplate 준비 @Service public class RestTemplateService { private final RestTemplate restTemplate; public RestTemplateService(RestTemplateBuilder builder) { this.restTemplate = builder.build(); } } 주입받은 것은 RestTemplateBuilder 이고, RestTemplate은 그 Builder로 생성합니다. 생성된 RestTemplate을 서비스의 여러 요청에 활용합니다. 주요 메서드 메서드 중심 기능 getForEntity() GET 요청 후 상태·헤더·본문을 포함한 응답 반환 postForEntity() POST 요청과 요청 본문 전달 exchange() 요청 메서드·헤더·본문 등을 직접 구성 RestTemplate은 일반적으로 응답이 올 때까지 기다리는 동기 방식입니다. 외부 응답이 느리면 우리 요청 처리도 영향을 받으므로 연결·응답 대기 시간과 오류 처리를 구분해 이해합니다. 복습 체크 우리 서버가 외부 API에 요청할 때 클라이언트 역할이 되는 이유를 설명할 수 있습니다. Controller의 요청 수신과 RestTemplate의 요청 전송을 구분할 수 있습니다. 실습 서버 두 개를 서로 다른 포트로 실행할 수 있습니다. 02 · RestTemplate의 GET 요청 💡 한 줄 요약 : GET 요청의 URL과 쿼리 파라미터를 만들고 응답을 DTO 또는 문자열로 받습니다. 요청 URL 만들기 URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .path("/api/server/get-call-obj") .queryParam("query", query) .build() .encode() .toUri(); 구성 역할 기본 주소 대상 서버 path 요청할 API 경로 queryParam ?query=... 형식의 검색 조건 encode URI에 맞게 값의 문자 표현 처리 검색어에 공백·한글 등이 있을 수 있으므로 주소 문자열을 무작정 이어 붙이는 대신 URI 구성 기능을 활용합니다. 객체 응답 받기 ResponseEntity<ItemDto> response = restTemplate.getForEntity(uri, ItemDto.class); HttpStatusCode status = response.getStatusCode(); ItemDto body = response.getBody(); ItemDto.class 는 응답 본문을 변환할 타입입니다. JSON 필드와 DTO가 맞으면 메시지 변환기를 통해 객체로 변환됩니다. ResponseEntity 는 본문뿐 아니라 상태 코드와 헤더도 담습니다. 응답에 본문이 없다면 getBody() 는 null일 수 있습니다. 여러 상품이 담긴 JSON 응답 { "items": [ {"title": "Mac", "price": 3888000}, {"title": "iPad", "price": 1230000} ] } 이 응답의 최상위 값은 배열이 아니라 items 배열을 가진 객체입니다. 배열이 들어 있다는 이유만으로 객체 변환을 사용할 수 없는 것은 아닙니다. 처리 방법 설명 String → JSON 파싱 본문을 문자열로 받고 items 배열을 직접 순회 응답용 DTO items 필드를 가진 DTO에 바로 매핑 @Getter @Setter public class ItemListResponseDto { private List<ItemDto> items; } // ItemDto에도 응답 변환에 필요한 생성자·접근자를 준비합니다. ResponseEntity<ItemListResponseDto> response = restTemplate.getForEntity(uri, ItemListResponseDto.class); 요청을 받는 서버 @GetMapping("/api/server/get-call-obj") public Item getCallObject(@RequestParam("query") String query) { return itemService.getCallObject(query); } 보내는 쪽의 queryParam("query", ...) 와 받는 쪽의 @RequestParam("query") 가 연결됩니다. 복습 체크 GET URL에 검색어를 쿼리 파라미터로 넣을 수 있습니다. ResponseEntity와 응답 Body를 구분할 수 있습니다. 단일 객체·배열·배열을 감싼 객체의 JSON 구조를 구분할 수 있습니다. 응답 구조에 맞는 DTO를 선택할 수 있습니다. 03 · RestTemplate의 POST 요청 💡 한 줄 요약 : POST 요청에서는 경로 변수와 요청 본문을 함께 전달할 수 있습니다. GET 예제와 달라지는 부분 항목 이번 POST 예제 메서드 POST 검색어 위치 경로의 {query} 사용자 데이터 위치 요청 Body 받는 서버의 처리 @PathVariable · @RequestBody 경로 변수와 Body 전달 URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .path("/api/server/post-call/{query}") .encode() .buildAndExpand(query) .toUri(); UserRequestDto requestDto = new UserRequestDto("sample-user", "sample-value"); ResponseEntity<ItemDto> response = restTemplate.postForEntity(uri, requestDto, ItemDto.class); @PostMapping("/api/server/post-call/{query}") public Item postCall(@PathVariable("query") String query, @RequestBody UserRequestDto requestDto) { return itemService.postCall(query, requestDto); } postForEntity의 인자 인자 의미 URI 요청 대상 requestDto 요청 본문으로 보낼 객체 ItemDto.class 응답 본문을 변환할 타입 객체는 사용 가능한 메시지 변환기와 설정에 따라 JSON 등의 본문으로 변환됩니다. 서버가 기대하는 Content-Type과 필드 구조를 맞춥니다. 📝 구분 : POST라서 모든 값이 본문에만 들어가는 것은 아닙니다. 경로·쿼리·헤더·본문 중 어디에 어떤 값을 보낼지는 API 규약으로 정합니다. 이 예제의 검색어는 쿼리가 아니라 경로 변수입니다. 복습 체크 {query} 에 실제 값을 넣어 URI를 만들 수 있습니다. POST의 요청 DTO와 응답 DTO를 구분할 수 있습니다. 경로 데이터와 본문 데이터를 각각 올바르게 받을 수 있습니다. 04 · RestTemplate의 exchange 💡 한 줄 요약 : exchange는 HTTP 메서드·헤더·본문을 명시적으로 구성한 요청을 전송합니다. 헤더가 필요한 상황 외부 API를 호출할 때 인증 키·토큰·데이터 형식 등을 헤더에 넣어야 할 수 있습니다. 요청 정보를 하나의 객체로 구성하면 각 값의 위치를 명확하게 표현할 수 있습니다. RequestEntity 구성 URI uri = URI.create("http://localhost:7070/api/server/exchange-call"); UserRequestDto body = new UserRequestDto("sample-user", "sample-value"); RequestEntity<UserRequestDto> request = RequestEntity .post(uri) .header("X-Authorization", token) .contentType(MediaType.APPLICATION_JSON) .body(body); ResponseEntity<String> response = restTemplate.exchange(request, String.class); 객체 담는 정보 RequestEntity 요청 메서드·URI·헤더·본문 ResponseEntity 응답 상태·헤더·본문 받는 서버의 처리 @PostMapping("/api/server/exchange-call") public ItemResponseDto exchangeCall( @RequestHeader("X-Authorization") String token, @RequestBody UserRequestDto dto) { return itemService.exchangeCall(token, dto); } 보내는 헤더 이름과 받는 헤더 이름이 같아야 합니다. 커스텀 헤더를 추가하는 것만으로 토큰 검증이 자동 실행되는 것은 아닙니다. 받는 서버가 해당 값을 어떻게 검증할지도 구성합니다. 메서드 선택 비교 선택 활용 getForEntity GET을 간단하게 호출 postForEntity POST 본문을 간단하게 전달 exchange 헤더·메서드·요청 객체를 세밀하게 구성 복습 체크 헤더와 본문을 구분해 요청을 구성할 수 있습니다. RequestEntity와 ResponseEntity의 방향을 설명할 수 있습니다. 외부 API의 인증 헤더를 추가할 수 있습니다.
A Brother printer that refuses to print can stall a workday fast. The cause is usually simple, and most fixes take only a few minutes. Work through the steps below in order. Start With the Basics According to a Driver Easy guide, the first fix is to check the connection, which for a USB printer means looking at the cable. A troubleshooting summary adds that you should first check for paper jams and low ink or toner levels, then restart both devices. Another source explains that wireless printers must be on the same Wi-Fi network as the computer. How to Fix Brother Printer Not Printing on Windows 11/10 - Driver Easy +2 If the printer has been idle, sleep mode may be the culprit. One support thread suggests pressing the power button to confirm the printer is not asleep, and checking that the WiFi connection is active. justanswer Check Ink and Cartridges A printer can fail even when it appears to have ink. One retailer's guide lists cartridge errors, print heads clogged by dry ink, very low consumables, a bad computer connection, a damaged cable, and a jammed print queue as possible causes. After a cartridge change, a support summary advises making sure the cartridge is properly seated and that no protective tape was left on it. The same source notes that gently cleaning the cartridge contacts can resolve recognition problems. My Brother printer does not print and has ink: how to fix it? +2 Set the Printer as Default Your computer may be sending jobs to the wrong device. Driver Easy recommends that you right-click the Brother printer and choose "Set as default printer." Another guide also tells readers to turn off the "Use Printer Offline" option. drivereasytrueimagetech Restart the Print Spooler and Clear the Queue Two Windows-side fixes come up repeatedly. First, your computer won't send print jobs to the printer if the Print Spooler service isn't working properly, and restarting it can get things running again. Second, a failed or stuck print queue can also block the printer, and clearing the queued jobs can resume printing right away. To do this manually, one guide says to select the stuck job and click "Delete" or "Cancel Printing." How to Fix Brother Printer Not Printing on Windows 11/10 - Driver Easy +2 Update or Reinstall the Driver Drivers are a common weak point. One source states that outdated or corrupted printer drivers can lead to printing issues, and the fix is to download the latest driver for your exact model from Brother's website. Driver Easy adds that you should match the driver to your specific version of Windows, such as 32-bit. vocaldrivereasy For Windows 11, a Microsoft Q&A answer outlines a fuller process: remove the printer under Printers & scanners, uninstall the device in Device Manager, then install the latest driver from Brother's support site for your model and Windows 11. It then suggests that you print a test page to confirm it works. microsoftmicrosoft Check Firmware Software on the printer itself matters too. One guide advises you to make sure the printer's firmware is up to date by following the instructions on Brother's support website. vocal Try a Power Reset If nothing works, a hard reset may help. A support expert on JustAnswer recommends that you unplug the printer from the wall outlet while it is on, leave it unplugged for at least 5 minutes, and connect it directly to the wall rather than a surge protector. Another answer on the same site suggests leaving the printer unplugged for about 30 seconds. The sources disagree on timing, so the longer wait is the safer choice. For a model-specific reset, one guide says to consult the printer manual or Brother's support website. Brother Printer Not Printing: Expert Solutions & Troubleshooting +2 Preventing Future Problems Regular upkeep reduces repeat failures. One troubleshooting guide recommends that you regularly clean the print head and keep the firmware current to avoid recurring errors. justanswer Final Thoughts Most Brother printing failures come down to connections, a stuck queue, the default-printer setting, or a driver problem. Work through the steps in order, starting with the simplest. If the printer still won't respond after a driver reinstall and a power reset, check Brother's official support pages for your exact model. ~
이벤트루프란 JavaScript의 런타임 모델은 코드 실행, 이벤트 수집과 처리, 큐에 대기 중인 하위 작업을 처리하는 이벤트 루프 에 기반하고 있어요. 이벤트 루프의 구조부터 살펴볼게요. 핵심은 이벤트루프가 콜스택이 비었을 때만 큐에서 콜백을 가져온다는 점입니다. 꺼내는 순서는 마이크로태스크큐가 가장 먼저 에요. Promise.then이나 queueMicrotask 콜백이 여기에 들어가요. 이들은 큐가 완전히 빌 때까지 전부 실행 돼요. 그다음 매크로태스크큐(이제부터 태스크큐라고 할게요)에서 setTimeout이나 이벤트 콜백을 딱 하나만 꺼내 실행 해요. 그 사이 브라우저가 렌더링 기회를 가진 뒤 처음부터 반복해요. 실행순서 예측해보기1 개념을 가볍게 잡았으니 코드로 실행순서를 예측해볼게요. console.log('1'); setTimeout(() => log('2'), 0); Promise.resolve().then(() => log('3')); console.log('4'); 먼저 동기코드가 1순위로 실행돼요. 그럼 1과 4가 가장 먼저 출력되겠죠. 두 번째로는 마이크로태스크큐를 끝까지 비워요. Promise.then 안에 있는 코드가 실행될테니 3이 출력돼요. 마지막으로 태스크큐에서 딱 하나만 실행해요. 태스크큐에는 setTimeout하나만 있으니 그걸 꺼내어 실행하면 2가 출력돼요. 헷갈리는 지점 바로 setTimeout의 0ms 부분인데요. 0ms면 지연없이 바로 실행되는 게 아닌가 생각하실 수도 있지만, 여기서 0ms는 "0ms 뒤 실행이 아니에요. 최소 0ms뒤에 태스크큐에 넣기 라는 뜻으로, 동기적 코드와 마이크로태스크가 다 끝날 때까지 기다려요. 여기서 기억할 점은 Promise가 setTimeout 뒤에 있지만, 큐의 우선순위로 Promise가 먼저 실행된다는 점이에요. 실행순서 예측해보기2 async function foo() { console.log('A'); await bar(); console.log('B'); } async function bar() { console.log('C'); } console.log('1'); setTimeout(() => console.log('2'), 0); foo(); Promise.resolve().then(() => console.log('3')); console.log('4'); 1을 출력해요. setTimeout 콜백이 태스크큐로 들어가요. foo()를 호출해 A를 출력해요. await bar()에서 bar()가 실행되면서 C를 출력해요. await 때문에 foo()의 마지막 부분 ( .log('B') )가 마이크로태스크큐에 들어가고, foo는 빠져나와요. Promise의 log('3') 이 마이크로태스크큐에 들어가요. (마이크로태스크큐 상태: [B, 3]) 4를 출력하고 콜스택이 비어요. 마이크로태스크큐를 들어온 순서대로 처리해서 B,3을 출력해요. 마지막으로 매크로큐에서 2를 꺼내어 출력해요. 출력결과: 1 → A → C → 4 → B → 3 → 2 여기서 헷갈리는 부분은 await bar가 왜 바로 실행되느냐인데요. await이 기다리는 건 bar()의 결과일 뿐이라서, bar()를 호출하는 것은 즉시 일어나요. 추가로 await이 없는 async 함수는 동기 함수처럼 실행되고, 반환값만 Promise로 감싸져요. 왜 이벤트루프가 React에서 중요할까 React는 브라우저의 메인 스레드 하나에서 돌아가요. JS실행, React렌더링, 브라우저 layout과 paint, 사용자 입력 처리가 모두 같은 이벤트루프를 통해 처리돼요. 그래서 React는 이벤트루프 안에서 언제 일하고 언제 양보할지 를 세심하게 처리해요. 1. 같은 태스크 안의 setState는 한 번만 렌더링된다 setState(count+1); console.log(count); // 아직 이전값 setState 는 상태를 즉시 바꾸지 않아요. 업데이트를 큐에 쌓아두고, 렌더링은 나중에 예약해둡니다. 같은 동기 실행 구간에서 호출한 setState 여러 개는 한 번의 렌더링으로 묶이는데, 이걸 bathing 이라고 해요. React17까지는 이벤트 핸들러 안에서만 batching이 됐고, 이로 인해 setTimeout이나 promise 콜백 안에서는 setState마다 렌더링이 일어났어요. 그 결과 같은 콜백에서 상태를 N번 바꾸면 렌더링도 N번 실행되어 성능이 낭비됐고, 렌더링과 렌더링 사이 "일부만 바뀐 상태"가 코드에 노출됐어요. 참고로 사용자 화면에는 변함이 없었어요. 이 모든 과정이 하나의 Task 안에서 끝났기 때문에 브라우저가 페인트할 틈이 없었어요. React18에서 Auto batching 이 생기면서 어디서든 호출해도 하나의 렌더링으로 묶어주기 시작했어요. 17에서는 비동기 콜백 안에서 setState 17번이 일어나면 렌더링이 17번 일어나지만, 18은 1번만 일어나요. 렌더링 비용이 비싼 이유 setState 한 번에 많은 과정을 거치는데요. 상태가 바뀐 컴포넌트와 그 하위 트리의 함수를 다시 호출 (memo로 막지 않으면) 새 결과를 이전 Fiber 트리와 비교 (reconciliation) 바뀐 부분을 실제 DOM에 반영 (commit) 의존성이 바뀐 effect의 클린업과 재실행을 처리 React17에서는 이 과정들이 N번 실행되니 중간 결과들은 필요가 없지만 순수하게 낭비되고 있었던거죠. 특히 useLayoutEffect 에서 DOM 크기를 읽는 코드가 있으면, 렌더링마다 브라우저가 레이아웃을 강제 계산해 비용이 더 커졌어요. 비용을 줄인 React18 setState 호출 시 바로 렌더링하지 않아요. 업데이트를 해당 컴포넌트의 업데이트 큐에 넣어요. "이 루트를 렌더해야 한다"는 작업을 예약해요. 이미 같은 우선순위의 작업이 예약돼 있으면 새로 만들지 않고 그걸 재사용해요. setTimeout(() => { setCount(c => c + 1); // 큐에 넣고 렌더 작업 예약 setFlag(f => !f); // 큐에 넣고, 예약은 이미 있으니 그대로 }, 1000); 여기서 클릭 같은 급한 업데이트는 마이크로태스크큐로, 일반 업데이트는 Scheduler의 Task(MessageChannel)로 예약돼요. 2. 우선순위에 따라 다른 큐를 사용 브라우저가 개발자에게 주는 선택지는 두 가지뿐이에요. 마이크로태스크 큐: 지금 하던 일이 끝나자마자 바로 실행 매크로태스크 큐: 브라우저가 화면을 그리거나 입력을 처리할 틈을 준 뒤 실행 HTML 스펙은 태스크 큐를 여러 개 두는 것을 허용해서, Chrome은 사용자 입력 Task를 다른 Task보다 먼저 꺼내기도 해요. 하지만 그건 브라우저에서 하는 일이고, 개발자는 "지금 바로인지, 다음인지"만 고를 수 있어요. React 순서를 제어하기 위해 자신만의 우선순위 큐를 하나 더 만들었어요. React Scheduler의 큐 Scheduler는 작업마다 마감시간을 붙여요. 급한 작업일수록 마감이 짧아요. 우선순위 마감 시간 Immediate 즉시 UserBlocking 250ms Normal 5초 Low 10초 Idle 없음 마감이 가장 가까운 작업부터 꺼내 처리해요. 이러면 급한 작업이 자연스럽게 먼저 처리되고, 오래 밀려 있던 작업도 마감이 다가오면 차례가 와서 처리돼요. 급한 일만 처리돼서 덜 급한 일이 처리되지 않는 것을 방지하는거죠. 왜 MessageChannel일까 마이크로태스크 큐가 빌 때까지 연달아 실행돼요. 그래서 그 사이에 브라우저가 화면을 그릴 틈이 없어요. setTimeout 0ms로 걸어도 중첩 호출이 5번을 넘으면 브라우저가 최소 4ms를 기다리게 해요. 5ms 일하고 4ms 쉬면 시간의 절반 가까이 버리게 돼요. requestAnimationFrame 다음 화면을 그리기 지전에만 실행돼서, 최대 한 프레임(16ms) 기다려야 해요. requestIdleCallback 브라우저가 한가할 때만 실행돼서 언제 돌 지 예측이 안 돼요. Safari는 지원하지 않아요. MessageChannel postMessage()를 호출하면 지연 없이 바로 다음 Task로 콜백이 예약돼요. 매크로태스크라서 그 사이 브라우저가 화면을 그릴 수 있어요. 3. 타임슬라이싱 타임슬라이싱은 긴 렌더링 작업을 잘게 쪼개서, 조각 사이마다 브라우저에게 차례를 넘겨줘요. JS는 한 번에 하나의 일만 할 수 있기 때문에, 렌더링 도중 아무것도 못 하는 상황을 방지하기 위해서 5ms마다 브라우저에게 차례를 넘기는 거에요. 모든 렌더링이 쪼개지진 않아요. startTransition 이나 useDeferredValue 로 표시한 업데이트만 타임슬라이싱으로 처리돼요. 클릭이나 입력처럼 즉시 보여야 하는 업데이트는 쪼개지 않고 한 번에 처리해요. 정리 React가 이벤트루프를 다루는 방식은 세 가지로 정리할 수 있어요. Automatic Batching : 같은 태스크 안에서 일어난 setState를 모아 한 번만 렌더링. 우선순위별 스케줄링 : 급한 업뎃은 마이크로태스크로, 일반 업데이트는 Scheduler의 큐에 넣어 MessageChannel로 처리. 타임슬라이싱 : 급하지 않은 렌더링은 5ms 단위로 쪼개서, 조각 사이마다 브라우저가 처리. 참고 https://github.com/reactwg/react-18/discussions/21 https://react.dev/blog/2022/03/29/react-v18#new-feature-automatic-batching
Trust in news around the world has dropped to the lowest level its biggest tracker has recorded. The Reuters Institute's Digital News Report 2026, published on 16 June, found overall trust at 37%, down three points in a year and below anything seen since measurement began in 2015. The more interesting finding sits underneath the headline: people have not turned on the news brands they actually use, and that gap says a good deal about where the problem really lies. What the Report Measured The Reuters Institute's Digital News Report 2026 surveys roughly 2,000 people in each of 48 markets, close to 100,000 respondents in total. Trust in news fell significantly in 29 of those markets and by five points or more in 19. In the United States only a quarter of people (25%) say they trust the news most of the time, and concern about fake news online rose by four points to 62% on average. The result ends a period of relative calm. Global trust had held at 40% for three years before this year's fall. The authors describe audiences reacting with unease to political, economic and technological turbulence, and they expect trust in news overall to fall further in future. Why Individual Brands Held Up Better Than the Sector The report draws a careful distinction. Trust in the most widely used individual news brands is holding up better than trust in news overall, and in the five countries where trust fell the most, the drop in overall trust was much larger than any change in ratings for individual brands. Some of the decline reflects wider anxiety about institutions and political leaders rather than anything a particular newsroom did. Edelman's Trust Barometer, cited in the report, shows a similar movement: a 16 point net fall this year in trust in national government leaders. News organisations are caught in the same current as other institutions, and readers appear to distinguish between the brands they know and the sector as a whole. The Platform Effect on Trust A second explanation is structural. For the first time, social media and video networks (54%) are the most widely used route to online news globally, ahead of publishers' own websites and apps (51%). News seen on those platforms is trusted less: 22% trust news on social media and 20% trust news from AI chatbots, against 37% for news overall. As more people drift towards third-party platforms, the average level of trust falls even if nobody's opinion of their favourite outlet changes. Multi-topic publications such as Article Orbit sit on the receiving end of that drift, where a reader may meet an article through a feed or a summary before ever seeing the site that published it. Where Trust Fell the Most The fall was not evenly spread. The countries with some of the biggest drops, including the Philippines, Thailand, Peru and Poland, share political instability, divisive elections and a noisier, more fragmented information environment. The report links some of the decline to direct attacks on news outlets and individual journalists, whose cumulative effect is to weaken confidence in journalism overall. The United States shows how political division can compound the problem. Trust there fell another five points this year to 25%, the seventh lowest in the survey, and among politically right-leaning Americans it sits at just 15%. Those figures are a reminder that trust in news is shaped as much by the wider climate as by anything a single newsroom does, and that rebuilding it will take consistent behaviour over time. Why Interest Is Falling Alongside Trust Trust is not the only measure moving. The share of people who say they are extremely or very interested in the news has fallen by an average of 13 percentage points since 2021, and a quarter of respondents are now casual or passive users who consume news about once a week and say they have little interest in it. That is up from 16% in 2021. The two trends feed each other. People who trust less read less, and people who read less have fewer chances to see journalism earning back their confidence. The engaged core of heavy readers is smaller but durable, which suggests that depth, rather than reach, is where publishers have the most to gain. What Readers Can Do About It Individual readers cannot repair institutional trust, but they can make better decisions about what to believe. Check who wrote a piece and when it was published. Look for named sources and links to primary documents. Compare a surprising claim across two outlets before sharing it. When a story reaches you through a feed, open the original article rather than relying on the preview text. Publications that make those checks easy deserve credit for it. Article Forge Hub says every article is read by a named editor before it goes live, which gives readers a person to hold to account, and that is a more concrete basis for trust than a logo alone. What Smaller Publishers Can Learn From the Gap The finding that brand trust outperforms sector trust is encouraging for smaller outlets, because it suggests trust is earned close to the reader. The report is explicit that simply telling people what to believe belongs to a more hierarchical past, and that news organisations can instead help audiences interpret events and broker trust where people feel divided. For independent publications such as News Vortix , that means showing the working: who wrote this, where the figures come from, and what happens when something turns out to be wrong. Corrections policies, clear bylines and primary-source links cost little and signal a lot. In a year when overall trust has reached a record low, they are among the few things a publisher fully controls. Rebuilding trust is slow, and the report offers no shortcut. What it does show is that people still value news at its best, and that the brands they know well are still trusted. For anyone publishing online, that points to a modest but dependable programme: name the author, show the sources, correct errors openly and write for the reader who will come back. Over time, those habits are what make a record low recoverable.
The cost of developing a travel application depends heavily on what the product needs to do. A simple travel website with enquiry forms requires a different amount of development work than a platform offering live hotel and flight bookings, payments, supplier integrations, customer accounts, and administrative tools. For this reason, businesses should avoid treating travel app development as a fixed-price project. A professional travel app development company should first understand the product requirements and then prepare an estimate based on the required features and platforms. Type of Travel Product The first factor affecting cost is the type of product. A travel business may need a package website where customers browse destinations and submit enquiries. Another company may need an itinerary application where users create and manage trips. A larger OTA may require live flight and hotel search, supplier connections, payments, booking confirmation, cancellations, agent accounts, and reporting. The more complex the business model, the more development and testing work is usually required. Platform Selection A website, Android application, iOS application, and admin dashboard all require different development considerations. A business starting with a responsive web platform may have a lower initial development requirement than one launching separate native mobile applications. Cross-platform frameworks can also be considered when the business wants to support Android and iOS through a shared codebase. The best choice depends on performance requirements, device features, budget, and long-term maintenance. UI and UX Design Travel applications often contain search interfaces, destination pages, package details, maps, itineraries, booking screens, payment pages, account sections, and dashboards. Each screen needs to be planned and tested. The number of screens and complexity of the user journey can therefore affect project cost. A simple enquiry flow is less complex than a booking system containing multiple supplier responses, fare changes, payment states, and cancellation conditions. Booking Features One of the largest differences in travel product cost comes from the booking workflow. A quote-based website may only need an enquiry form. A booking platform may need to search supplier availability, display current pricing, collect traveller information, process payment, receive supplier confirmation, issue vouchers, and manage cancellations. During travel booking app development, each of these steps needs to be defined. API Integrations External integrations can add development and testing requirements. Travel platforms may connect with flight providers, hotel systems, activity suppliers, payment gateways, maps, email services, SMS providers, or CRM systems. Each integration can have its own documentation, authentication method, data structure, testing environment, approval requirements, and commercial terms. The business should also budget for supplier or API charges separately where applicable. Admin and CRM Features A customer-facing application needs internal tools to manage its operations. An admin dashboard may include package management, customer records, enquiries, quotations, bookings, payments, staff permissions, reports, and support tools. A more advanced travel company may require separate agent and supplier portals. The number of user roles and management features can significantly affect development scope. AI Features AI can be included in travel products for itinerary generation, natural-language search, recommendations, or customer assistance. However, AI development costs depend on the selected use case and the amount of custom integration required. A simple AI assistant connected to existing travel content may be less complex than a system requiring extensive personalization and external data connections. AI service usage can also create ongoing operational costs. Security Requirements Travel applications handle customer information and booking records, so security should be considered during development. Authentication, role-based access, protected APIs, secure payment handling, database security, and appropriate monitoring may all be required. Security testing and implementation can add to the development scope but should not be treated as optional for a production travel platform. Testing Requirements Travel applications require testing across many possible scenarios. A booking can succeed, fail, remain pending, or be cancelled. A payment can succeed while supplier confirmation fails. A supplier can return a different price during checkout. A customer can lose their internet connection during payment. These situations should be tested before launch. The number of integrations and workflows directly affects testing requirements. Approximate Cost Categories Digittrix's current travel development page presents three broad product categories: travel websites and enquiry portals, travel MVP or itinerary products, and supplier-connected booking platforms. Its published estimates are approximately 1,500–3,500 for an enquiry website, 3,500–8,000 for a basic travel or itinerary product, and 8,000–25,000+ for a supplier-connected booking platform. These figures are planning estimates rather than universal market prices. The final cost depends on the exact scope, platforms, integrations, design requirements, testing, and post-launch support. Development Timeline Project duration is also related to complexity. A smaller travel website can generally be completed faster than a platform containing multiple supplier integrations. The current Digittrix page estimates approximately 3–6 weeks for an enquiry website, 6–12 weeks for a travel MVP or itinerary product, and 12–20+ weeks for a supplier-connected booking platform. Actual timelines can change based on design approvals, content readiness, supplier access, testing, and app-store review. Additional Running Costs Businesses should budget for more than development. Possible ongoing expenses include hosting, domain services, payment gateway fees, supplier access, maps, SMS, email, software licenses, maintenance, app-store fees, and marketing. These expenses may not be included in the development quotation. How to Control Development Costs The simplest way to control cost is to define a focused first release. Businesses can start with package browsing and enquiries before adding live booking. They can begin with one supplier integration instead of several. They can launch a responsive web application before developing separate mobile apps. They can also postpone advanced AI, loyalty programs, complex analytics, and additional languages until there is a business reason to add them. Conclusion Travel app development costs vary because travel products vary. A simple package website, itinerary application, and supplier-connected booking platform are three very different products. The best way to estimate the investment is to define the customer journey, platforms, integrations, admin requirements, and first-release features before development begins. Experienced travel app developers can then prepare a scope that separates essential development work from optional future features. visit our website : https://www.digittrix.com/travel-app-development
포춘 비즈니스 인사이트에 따르면, 전 세계 음료 포장 시장 규모는 2025년 938억 1천만 달러에 달했습니다. 음료 포장 시장은 2026년 981억 9천만 달러에서 2034년 1,477억 4천만 달러로 성장할 것으로 예상되며, 예측 기간 동안 연평균 성장률(CAGR)은 5.24%를 기록할 것으로 전망됩니다. 음료 제조업체들이 제품 보호, 편의성, 휴대성 및 매력적인 디자인을 제공하는 포장 솔루션을 모색함에 따라 청량음료 포장 시장은 수요가 증가하고 있습니다. 포장은 청량음료의 품질을 유지하는 동시에 운송, 보관, 브랜딩 및 소비자 편의성을 지원하는 데 중요한 역할을 합니다. 탄산음료, 주스, 에너지 드링크, 스포츠 드링크, 향미 음료 및 기타 RTD(Ready-to-Drink) 제품의 소비 증가가 효과적인 포장 솔루션에 대한 필요성을 뒷받침하고 있습니다. 제조업체들은 변화하는 소비자 선호도와 지속가능성에 대한 기대에 부응하기 위해 경량, 재활용 가능, 내구성 및 편의성을 갖춘 포장 방식에 점점 더 집중하고 있습니다. 음료 회사들이 소매 및 디지털 채널 전반에서 소비자의 관심을 끌기 위해 경쟁함에 따라 포장 디자인을 통한 제품 차별화 또한 점점 더 중요해지고 있습니다. 현대식 소매점, 편의점, 외식업체 및 전자상거래 유통망의 확장은 효율적인 청량음료 포장 솔루션에 대한 수요를 더욱 촉진하고 있습니다. 자세한 내용은 계속 읽어보세요. https://www.fortunebusinessinsights.com/soft-drinks-packaging-market-119147 시장 세분화 음료 포장 시장은 재질, 포장 유형, 제품 유형 및 지역별로 세분화될 수 있습니다. 재질별로는 플라스틱, 유리, 금속, 종이 및 판지, 기타 재질이 포함됩니다. 플라스틱 포장은 가볍고 유연하며 내구성이 뛰어나고 다양한 음료 형태에 적합하여 널리 사용됩니다. 유리 포장은 고급스러운 외관과 제품 보호 기능으로 가치가 높으며, 금속 포장은 다양한 음료에 내구성과 편의성을 제공합니다. 종이 및 판지는 음료 제조업체들이 지속가능성을 향상시킨 포장 옵션을 모색함에 따라 주목받고 있습니다. 포장 유형별로는 병, 캔, 카톤, 파우치 및 기타 형태가 포함됩니다. 병은 다양한 음료에 널리 사용되며 소비자에게 편리함을 제공합니다. 캔은 휴대성이 뛰어나 이동 중에도 간편하게 마실 수 있습니다. 카톤과 파우치는 특정 음료 종류 및 소비 상황에 맞는 대안적인 포장 형태를 제공합니다. 제품 유형별로는 탄산음료, 주스, 에너지 드링크, 스포츠 드링크, 생수 및 기타 음료가 포함됩니다. 포장 요구 사항은 음료의 특성, 유통 조건, 소비자 선호도 및 제품 포지셔닝에 따라 다릅니다. 제조업체들은 기능성, 시각적 매력, 제품 보호 및 지속가능성을 결합한 맞춤형 포장 솔루션을 점점 더 많이 개발하고 있습니다. 주요 인물 암코르 주식회사 테트라팩 인터내셔널 SA 볼 코퍼레이션 크라운 홀딩스 주식회사 베리 글로벌 주식회사 몬디 주식회사 국제 종이 소노코 제품 회사 스머핏 웨스트록 CANPACK SA 시장 성장 음료 포장 시장은 포장 음료 소비 증가와 편리한 포장 형태에 대한 수요 증가로 성장하고 있습니다. 소비자들은 휴대, 보관, 개봉 및 음용이 간편한 음료를 선호하는 경향이 커지고 있습니다. 이러한 추세는 음료 제조업체들이 제품 품질을 유지하면서 편의성을 제공하는 포장 디자인에 투자하도록 유도하고 있습니다. RTD(Ready-to-Drink) 음료 카테고리의 성장 또한 음료 포장 시장 성장을 뒷받침하고 있습니다. 제조업체들은 새로운 음료 제품을 출시하고 있으며, 다양한 소매 환경에서 제품을 차별화하기 위해 포장을 활용하고 있습니다. 매력적인 모양, 뚜껑, 라벨, 그래픽 및 기타 디자인 요소는 브랜드의 시각적 정체성을 강화하고 소비자 인지도를 높이는 데 도움이 됩니다. 지속가능성 또한 시장 발전에 영향을 미치는 주요 요인입니다. 음료 회사와 포장 제조업체들은 재활용 가능한 소재, 경량 디자인, 재활용 소재 함유, 자원 효율적인 제조 공정 등을 점점 더 많이 모색하고 있습니다. 환경 문제에 대한 소비자 인식이 높아짐에 따라 기업들은 포장 소재를 재고하고 순환 경제 목표를 지원할 수 있는 솔루션을 개발하고 있습니다. 기술 혁신 또한 음료 포장 시장에 새로운 기회를 창출하고 있습니다. 제조업체들은 음료 생산자의 요구 사항을 충족하기 위해 차단성, 마개 시스템, 인쇄 기술, 충전 호환성 및 포장 성능을 개선하고 있습니다. 스마트 패키징과 향상된 라벨링 기능은 제품 식별, 브랜드 커뮤니케이션 및 소비자 참여를 지원할 수 있습니다. 현대적인 유통망의 확장은 시장 성장을 더욱 뒷받침하고 있습니다. 청량음료는 슈퍼마켓, 편의점, 외식 채널, 자동판매기 시스템 및 온라인 플랫폼을 통해 유통되므로 운송 및 취급 조건에 견딜 수 있는 포장이 필요합니다. 따라서 제조업체들은 포장 내구성과 물류 효율성에 집중하고 있습니다. 자동화된 포장 공정에 대한 투자 증가는 첨단 포장 장비 및 생산 기술의 도입을 촉진하고 있습니다. 음료 제조업체들이 편의성, 브랜딩, 지속가능성 및 운영 효율성을 지속적으로 중시함에 따라 청량음료 포장 시장은 주요 음료 생산 지역 전반에 걸쳐 성장을 지속할 것으로 예상됩니다. 제약 요인 음료 포장 시장은 환경 문제, 원자재 비용, 규제 요건, 변화하는 소비자 기대치 등 여러 가지 과제에 직면해 있습니다. 플라스틱 포장은 여전히 업계에서 중요한 부분을 차지하지만, 플라스틱 폐기물과 환경 오염에 대한 우려가 커지면서 정부, 소비자, 음료 제조업체들은 보다 지속 가능한 대안을 모색하고 있습니다. 따라서 포장 제조업체들은 재활용률을 높이고 포장재의 전 생애주기에 걸쳐 환경 영향을 줄여야 한다는 압력을 점점 더 많이 받고 있습니다. 원자재의 가용성과 가격 변동 또한 생산 운영에 영향을 미칠 수 있습니다. 포장 제조업체는 경쟁력 있는 가격을 유지하면서 원자재 조달, 생산 효율성, 공급망 관리에 만전을 기해야 합니다. 포장재, 재활용, 라벨링, 폐기물 관리, 식품 접촉 안전과 관련된 규제 요건은 제조업체의 규정 준수 부담을 더욱 가중시킬 수 있습니다. 기업들은 다양한 시장에서 변화하는 규정을 충족하기 위해 재료, 생산 공정, 포장 디자인을 수정해야 할 수도 있습니다. 지속 가능한 포장으로의 전환은 기술적, 운영적 과제를 수반하기도 합니다. 대체 재료는 적절한 내구성, 차단 성능, 제품 보호 기능, 기존 충전 및 유통 시스템과의 호환성을 제공해야 합니다. 따라서 포장 제조업체는 지속 가능성 목표와 기능적, 경제적 요구 사항 사이에서 균형을 맞춰야 합니다. 소비자 선호도 또한 빠르게 변화하기 때문에 음료 브랜드는 포장 디자인과 형태를 지속적으로 업데이트해야 합니다. 포장재 공급업체 간의 경쟁은 제조업체들이 생산 비용을 관리하면서 혁신에 투자하도록 더욱 부추깁니다. 소재 혁신, 재활용 인프라 구축, 효율적인 생산 공정, 지속 가능한 포장 개발을 통해 이러한 과제를 해결하는 것은 음료 포장 시장에서 사업을 운영하는 기업들에게 중요한 과제로 남을 것입니다. 지역 분석 음료 포장 시장은 음료 소비 증가, 라이프스타일 변화, 도시화, 포장 음료 보급 확대 등으로 주요 지역 전반에 걸쳐 성장하고 있습니다. 북미는 기존 음료 제조업체, 선진 포장 인프라, 편리한 음료 포장에 대한 높은 수요를 바탕으로 중요한 시장을 형성하고 있습니다. 소비자들은 다양한 소비 상황에 맞춰 휴대하기 쉽고 사용하기 편리한 포장을 선호하며, 이는 병, 캔 등 다양한 포장 형태에 대한 수요를 견인하고 있습니다. 유럽 또한 기존 음료 산업과 재활용 및 지속 가능한 포장 솔루션에 대한 관심 증가로 음료 포장 시장에서 중요한 지역으로 자리매김하고 있습니다. 유럽 전역의 포장 제조업체와 음료 회사들은 자원 효율성, 순환 경제, 경량화, 재료 회수율 향상에 주력하고 있습니다. 아시아 태평양 지역은 도시화, 가처분 소득 증가, 소매 네트워크 확장, 소비자 라이프스타일 변화로 포장 음료 수요가 증가하면서 상당한 성장 기회를 맞이하고 있습니다. 이 지역의 성장하는 음료 산업은 제조업체들이 생산량을 확대하고 다양한 소비자 선호도에 맞는 포장 솔루션을 도입하도록 장려하고 있습니다. 라틴 아메리카 역시 음료 소비 증가, 소매 개발, 포장 음료 보급 확대와 함께 성장 기회를 얻고 있습니다. 제조업체들은 증가하는 소비자 시장에 맞춰 비용 효율적이고 편리한 포장 형태 개발에 집중하고 있습니다. 중동 및 아프리카 지역은 음료 산업의 발전과 현대적인 소매 인프라 확장에 따라 새로운 기회를 맞이하고 있습니다. 편리한 포장 음료에 대한 수요 증가로 제조업체들은 이 지역 전반에 걸쳐 포장 역량을 강화하고 있습니다. 모든 지역에서 지속가능성, 포장 편의성, 제품 보호 및 브랜드 차별화는 중요한 고려 사항으로 남을 것으로 예상됩니다. 음료 시장과 포장 기술의 지속적인 발전은 전 세계 음료 포장 시장의 성장을 견인할 것으로 전망됩니다. 일본 시장의 기회를 살펴보세요 - 최신 음료 포장 시장 분석 https://www.fortunebusinessinsights.com/jp/%E6%B8%85%E6%B6%BC%E9%A3%B2%E6%96%99%E5%8C%85%E8%A3%85%E5%B8%82%E5%A0%B4-119147
England Drops Wildfire Plan as Whale Risks Draw Scrutiny (10.4) Table of contents Overview Details Overview England dropped a countryside wildfire preparedness plan, and a separate survey found gaps in protective gear at many fire services. More than 1,200 Colorado students have earned a climate education seal through coursework and community service. Images of injured humpback whales along Australia’s east coast have renewed concern about boat and propeller strikes. A 20-garden Australian awards shortlist puts fire resilience, flood resilience and biodiversity among the questions facing residential landscapes. Details England Drops Countryside Wildfire Plan as Gear Concerns Emerge The Guardian reported that the government dropped a plan to prepare England’s countryside for wildfires. A freedom of information request brought the decision to light. The report did not establish, in the material available here, when the plan was dropped or what measures it would have contained. A separate survey cited by The Guardian found that many fire services lack suitable protective gear for wildfire response. The two findings concern different parts of preparedness: reducing risk across the landscape and protecting crews when fires occur. Neither finding, on its own, measures the country’s overall ability to contain a wildfire. The report followed a summer of record-breaking UK wildfires. That context makes the decision consequential, but it does not prove that climate change caused any particular fire. The immediate policy question is what, if anything, replaced the abandoned scheme and how fire services will address the equipment gaps. Key takeaway: The canceled plan and reported gear gaps warrant separate scrutiny. The available evidence does not show how much either has changed England’s wildfire risk. Colorado Climate Seal Reaches More Than 1,200 Students More than 1,200 Colorado students have earned a climate education “seal,” The Guardian reported. The statewide initiative combines climate-focused coursework with community service and is spreading to other states. The count shows participation, though it does not measure changes in students’ knowledge or communities’ emissions. The Guardian described a project by Anthony Muñoz, a student at Vista Academy near Denver’s main airport. Concerned about aircraft flying above his campus, he worked with a local university to plant a garden with native species that could detect ground-level ozone. The project turned a question about local air quality into work students could carry out with outside expertise. That example needs a careful distinction. The garden’s purpose does not establish that jet fuel harmed living things at the school, and ground-level ozone is not itself a measurement of aircraft fuel exposure. The reported achievement is the student project and the broader education program, not a confirmed finding about the airport. Key takeaway: Colorado’s seal has reached more than 1,200 students. Its wider value will depend on evidence of learning and project results, beyond the number of credentials awarded. Boat Strike Injuries Raise Concern for Australia’s Humpback Whales Photographs of humpback whales along Australia’s east coast show cuts and damage to tails and fins associated with boats and propellers, The Guardian reported. The images include adult and juvenile whales. They document injuries, while the supplied account does not give a count of strikes or a measured change in their frequency. Experts quoted by The Guardian warned that migrating whales often cannot avoid a collision. The report described the problem as growing as the humpback population has recovered since the ban on whaling. More whales in the water can mean more encounters, but the material provided does not separate that factor from changes in vessel traffic or reporting. This is a wildlife management issue with an immediate, visible effect: an injured animal may survive a strike yet carry damage to a fin or tail. Establishing the scale of the problem would require systematic records, including where collisions happen and how many injured whales are observed over time. Key takeaway: The reported images establish serious injuries to individual whales. Consistent collision data are needed to determine the trend and the most effective response. Australian Garden Shortlist Puts Resilience on the Awards Agenda The first Landscape Australia residential garden awards shortlist includes 20 gardens, The Guardian reported. The projects range from urban rooftops to working cattle farms. Jury chair Emily Wong linked the entries to questions about fire and flood resilience and biodiversity loss. Wong also noted the amount of space private gardens occupy in Australian cities. That makes decisions about planting and layout relevant beyond an individual property. The awards, however, are a selection of projects. The supplied account gives no measurements showing that the shortlisted gardens reduced flood damage, fire risk or biodiversity loss. The shortlist offers a view of what designers and judges are prioritizing. It does not establish that the same choices would work equally well in every setting. A rooftop, a suburban plot and a farm have different constraints; each needs to be assessed against its own conditions and intended purpose. Key takeaway: The 20-garden shortlist gives resilience and biodiversity a place in residential design. The supplied evidence does not yet show how the gardens perform against those aims. In depth England wildfire preparedness — in depth Wildfire preparation involves decisions made well before a crew reaches a fire. A countryside plan could have coordinated work across landowners, public bodies and emergency services. Because the available report does not describe the dropped scheme’s provisions, its likely effect cannot be quantified. The loss of a named plan is clear; the loss of any specific protection is not. The gear survey raises a more immediate operational issue. Protective equipment affects the conditions under which crews can work, while a preparedness scheme would address how risks are identified and managed. Treating the two findings as separate helps avoid a misleading conclusion that one canceled plan caused the equipment shortfall. The report supplies no evidence for that causal link. Record-breaking fires can expose weaknesses in arrangements built around past conditions. They also create pressure for a policy response. Judging that response requires more than a new pledge: it requires a description of the measures, who must carry them out and whether fire services have the resources to do so. Those details were not established in the supplied account. The next useful evidence would be the government’s explanation of the canceled scheme, any replacement work and a fuller breakdown of the survey. Those records would show whether the reported gaps are concentrated in particular services or reflect a wider problem. Until then, the strongest conclusion is narrower: a planned prevention measure was dropped while concerns about responder protection remained. Colorado climate education — in depth The seal links classroom study to service, giving students a reason to apply climate and environmental concepts outside an assignment. Muñoz’s project illustrates the approach: he started with a concern close to school, then involved a university in a response. The supplied account does not say what the garden detected, so its scientific result remains unknown. That distinction matters for evaluating programs that encourage student research. Asking a useful question, choosing an appropriate measure and interpreting the result are different steps. An ozone indicator can help investigate ozone conditions. Establishing where any pollution came from would require additional evidence. Describing the project accurately preserves its educational value without claiming a result it has not reported. The figure of more than 1,200 seal recipients gives the initiative a measurable reach. It does not show how many students were eligible, how long they studied or whether the service projects produced lasting changes. As other states adopt similar programs, those questions will help distinguish a growing credential from a demonstrated educational outcome. For families and schools, the practical effect is a route for students to connect climate study with local work. For policymakers, the next test is whether programs can document what participants learn and what their projects accomplish. The available report establishes participation and an example of the work; it leaves those longer-term results open. Humpback whale injuries — in depth A photograph can establish that a whale has an injury consistent with a strike. It cannot, by itself, establish how common such injuries are across the migrating population. Images tend to capture animals that people see and photograph. Whales that are not observed, or whose injuries are less visible, do not enter that record in the same way. Population recovery adds another complication. A rise in the number of injured whales seen by people could reflect more whales, more encounters, better observation or some combination of those factors. The Guardian’s account conveys expert concern, but the supplied evidence does not include a time series that would assign weight to each explanation. The distinction does not diminish the injuries shown. It tells decision-makers what evidence would sharpen a response. Consistent reporting of vessel incidents and whale injuries could identify places where encounters recur. Information about vessel activity in those areas would help assess exposure. The supplied account does not establish such a map or announce a policy change. For now, the report connects a conservation success with a management challenge. More humpbacks are present after decades of protection from whaling, according to The Guardian, while some face h
05 · Naver Open API 💡 한 줄 요약 : 네이버 쇼핑 검색 결과를 서버에서 받아 우리 서비스의 상품 검색 데이터로 변환합니다. 호출 흐름 브라우저가 우리 서버의 /api/search 에 검색어를 보냅니다. 우리 서버가 네이버 검색 API용 URI를 만듭니다. Client ID·Client Secret을 요청 헤더에 넣습니다. 네이버가 반환한 JSON에서 items 배열을 읽습니다. 필요한 상품 정보를 ItemDto로 변환해 브라우저에 반환합니다. 인증 설정과 요청 naver.client.id=${NAVER_CLIENT_ID} naver.client.secret=${NAVER_CLIENT_SECRET} @Value("${naver.client.id}") private String clientId; @Value("${naver.client.secret}") private String clientSecret; public List<ItemDto> searchItems(String query) { URI uri = UriComponentsBuilder .fromUriString("https://openapi.naver.com") .path("/v1/search/shop.json") .queryParam("display", 15) .queryParam("query", query) .build().encode().toUri(); RequestEntity<Void> request = RequestEntity.get(uri) .header("X-Naver-Client-Id", clientId) .header("X-Naver-Client-Secret", clientSecret) .build(); ResponseEntity<String> response = restTemplate.exchange(request, String.class); return fromJSONtoItems(response.getBody()); } display=15 는 이번 실습에서 요청하는 검색 결과 개수입니다. API 키는 서버 설정에서 사용하고 브라우저에 전달하지 않습니다. ItemDto로 변환할 데이터 필드 의미 title 검색된 상품명 link 상품 상세 페이지 주소 image 이미지 주소 lprice 검색 응답의 최저가 public List<ItemDto> fromJSONtoItems(String body) { if (body == null) { throw new IllegalStateException("검색 응답 본문이 없습니다."); } JSONObject json = new JSONObject(body); JSONArray items = json.getJSONArray("items"); List<ItemDto> result = new ArrayList<>(); for (int i = 0; i < items.length(); i++) { result.add(new ItemDto(items.getJSONObject(i))); } return result; } DTO 생성자에서 외부 JSON의 필요한 필드를 읽습니다. 외부 응답을 그대로 모든 계층에 흘려보내기보다 서비스에서 쓸 형태로 정리합니다. 검색과 DB 저장 구분 검색 결과를 받는 것만으로 Product가 DB에 저장되지는 않습니다. 사용자가 관심상품으로 선택할 때 별도 등록 API를 호출합니다. 인증 오류·잘못된 요청·응답 없음·외부 장애를 정상적인 검색 결과와 구분합니다. RestTemplate의 기본 오류 처리에서는 4xx·5xx 응답이 예외로 처리될 수 있습니다. 복습 체크 브라우저 요청과 외부 API 요청의 URL을 구분할 수 있습니다. Client ID·Client Secret을 서버에서 헤더로 전송할 수 있습니다. items 배열을 서비스 DTO 목록으로 변환할 수 있습니다. 상품 검색과 관심상품 저장이 별도 처리임을 설명할 수 있습니다.