이번 주 평가  이번주는 C언어 디버깅 주차였다. 이번주 새로 바뀐 자리는 정중앙이었는데 개인적으로 너무 만족스러웠다. 모르는게 있으면 동료에게 물어보려 사방팔방 의자를 끌고 움직일수있었고 머리를 싸매고 문제를 어려워하고 있으면 어느새 동료들이 하나둘 찾아와 함께 고민해주었다. 저번주 내 학습에서 개인적으로 아쉬웠던 부분들이 있어 이번주는 보충하려고 더 노력했고 노력하니 결과도 자연스레 따라왔다. 상당히 뿌듯한 한 주였다. 저번주의 목표 C언어 디버깅 접근법 위주로 익히기 자료구조, 알고리즘 인프런 완강 C언어 기초문법 숙달 프로그래머스 기초 완료 CS:AP 3장 완독 달성률 평가  1, 3, 4, 5번 완료, 2번 미완료. 2번은 이제 정규학습시간이 끝나고 남는 시간에 롱텀으로 진행하기로 마음먹었다. 차주엔 정규교육과정인 malloc Lab에 더욱 집중할 생각이다. 1번은 특히 동료학습에 도움을 많이 받았다. 늦은 시간까지 같이 남아 문제를 고민하고 알려준 동료들에게 감사의 말을 전한다. 차주 목표 CS:AP 9.9 ~ 9.11절 완독 malloc 구현하되 global solution에 집중) 파이썬 감각 잊지않게 하루 1문제씩 leet code 풀기
5주차 디버깅 랩을 마무리하며... 이번 주차의 디버깅 주제가 거의 메모리 관련해서 발생하다보니 메모리 관련 공부를 많이 했던 느낌이다. 메모리 구조 스택 프레임 그리고 오늘의 LIFETIME 발표까지 거의 메모리 관련된 내용으로 구성되었던 것 같다. C언어가 저수준 언어다 보니 메모리 관리가 조금 더 빡센 느낌이다. 특히 malloc 이후 free 해줘서 메모리 누수를 막는 것 또한 중요한데, 컴파일이나 런타임에서 잡아주지 않고 방치되기 때문에 파악하기 어려운 점은 조금 난해한 것 같다. 이런 strdup 함수는 내부적으로 malloc 을 호출하는데, 이런 함수의 구조를 모르는 개발자 입장에서는 free 해주어야 한다는 사실을 알기 정말 어렵다. 함수 하나하나의 사용에 주의해야 한다는 생각이 들게 되었다. 이번 주차는 명절이 껴있어서 긴데 짧은 느낌이었다. 생각보다 문제는 쉬웠는데, 깊게 파고자 하면 끝도 없이 들어갔던 것 같다. 앞으로는 적당히 파보는걸로. +다음 주차 malloc lab 이 조금 두렵긴 하다.
[JPA] ORM, JPA, Hibernate 개념 정리: 영속성 컨텍스트까지 save() 한 줄에 쿼리가 나가는 이유가 궁금해서, JPA의 핵심 개념만 입문자 눈높이부터 정리했습니다. 1. ORM이란? 객체지향 언어와 관계형 DB는 데이터를 다루는 방식이 다릅니다. 구분 객체 관계형 DB 관계 표현 참조 ( order.getMember() ) 외래 키 ( member_id ) 상속 있음 없음 식별 == , equals() PK 탐색 객체 그래프 탐색 JOIN ORM(Object-Relational Mapping) 은 이 간극을 메워주는 기술입니다. 객체와 테이블을 매핑해서 SQL 대신 객체 중심으로 DB를 다루게 해줍니다. 2. JPA vs Hibernate vs Spring Data JPA 처음에 가장 헷갈리는 부분입니다. 한 줄씩 정리하면 이렇습니다. 용어 정체 ORM 객체와 테이블을 매핑하는 개념/기술 JPA 자바 ORM의 표준 명세 (인터페이스 모음) Hibernate JPA 명세의 구현체 , 사실상 표준 Spring Data JPA JPA를 더 쉽게 쓰게 해주는 Spring 모듈 ( JpaRepository ) List (인터페이스)와 ArrayList (구현체)의 관계를 떠올리면 JPA 와 Hibernate 의 관계가 쉽게 이해됩니다. @Entity , EntityManager 는 JPA 것이고, 실제 SQL 생성은 Hibernate가 합니다. 3. 영속성 컨텍스트 (Persistence Context) JPA를 한 문장으로 요약하면 "엔티티를 영속성 컨텍스트라는 공간에서 관리해주는 기술" 입니다. 이 개념만 이해하면 JPA의 동작 대부분이 설명됩니다. Spring에서는 보통 @Transactional 하나가 영속성 컨텍스트 하나 와 대응합니다. 트랜잭션이 시작되면 생기고, 끝나면 사라집니다. 3-1. 엔티티의 생명주기 상태 설명 비영속 (new) 객체를 생성만 했고 JPA와 무관한 상태 영속 (managed) 영속성 컨텍스트가 관리 중인 상태 준영속 (detached) 영속이었다가 분리된 상태. 값을 바꿔도 DB에 반영되지 않음 삭제 (removed) 삭제가 예약된 상태 3-2. 영속성 컨텍스트가 주는 이점 1 1차 캐시와 동일성 보장 같은 트랜잭션에서 같은 id를 조회하면 DB를 다시 가지 않고 같은 인스턴스 를 반환합니다. Member a = em.find(Member.class, 1L); // SELECT 실행 Member b = em.find(Member.class, 1L); // 1차 캐시에서 반환 (쿼리 없음) a == b; // true 2 변경 감지 (Dirty Checking) ⭐ Member member = em.find(Member.class, 1L); member.changeName("new"); // save() 호출 없이도 UPDATE 실행 조회 시점의 스냅샷 을 보관했다가, flush 시점에 현재 상태와 비교해서 달라졌으면 UPDATE를 자동으로 만들어 실행합니다. 그래서 영속 상태의 엔티티는 save() 가 필요 없습니다. 3 쓰기 지연 SQL을 바로 보내지 않고 저장소에 모아뒀다가 커밋 시점에 한 번에 전송 합니다. 덕분에 batch 같은 최적화가 가능합니다. IDENTITY 전략은 INSERT를 해야 PK를 알 수 있어서 persist() 즉시 INSERT가 나갑니다. 이 경우 쓰기 지연의 이점이 줄어듭니다. 3-3. flush란? 영속성 컨텍스트의 변경 내용을 DB에 동기화 하는 작업이고, 커밋과는 다릅니다. 발생 시점: em.flush() 직접 호출 / 트랜잭션 커밋 직전 / JPQL 실행 직전 flush 후에도 커밋 전이면 롤백이 가능 하고, 1차 캐시도 유지됩니다. 4. 연관관계 매핑 4-1. 연관관계의 주인 객체는 단방향 참조 두 개 로 양방향 관계를 표현하지만, DB는 외래 키 하나 로 양쪽을 표현합니다. 그래서 둘 중 FK를 관리할 쪽(주인) 을 정해야 합니다. // Member(N) : Team(1) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") // FK를 가진 쪽 → 연관관계의 주인 private Team team; @OneToMany(mappedBy = "team") // 주인이 아님 → 읽기 전용 private List<Member> members = new ArrayList<>(); 주인 : @JoinColumn 이 있는 쪽. 값을 바꾸면 DB에 반영됩니다. mappedBy 쪽 : 조회 전용. 값을 바꿔도 DB에 반영되지 않습니다. 기준: N:1 관계에서는 N(FK가 있는 쪽)이 주인 입니다. 4-2. 지연 로딩과 즉시 로딩 방식 동작 LAZY (지연 로딩) 연관 엔티티를 실제로 사용할 때 조회 (프록시 객체로 대기) EAGER (즉시 로딩) 엔티티를 조회할 때 연관 엔티티도 함께 조회 @ManyToOne , @OneToOne 은 기본값이 EAGER 라서, 실무에서는 모든 연관관계를 LAZY 로 지정 하고 필요할 때만 함께 조회하는 방식을 권장합니다. EAGER는 예상하지 못한 쿼리를 만들어내기 쉽기 때문입니다. 4-3. N+1 문제 JPA를 쓰다 보면 가장 먼저 만나는 성능 문제입니다. List<Member> members = memberRepository.findAll(); // 쿼리 1번 (회원 N명 조회) for (Member m : members) { m.getTeam().getName(); // 회원마다 Team 조회 쿼리 추가 → N번 } 회원 100명이면 쿼리가 1 + 100번 나갑니다. LAZY든 EAGER든 연관 데이터를 한 번에 가져오지 않으면 발생합니다. 해결 방법 방법 설명 fetch join JPQL에서 join fetch 로 연관 엔티티를 한 번의 쿼리로 함께 조회 @EntityGraph 메서드에 붙여서 fetch join과 같은 효과 batch size default_batch_fetch_size 설정으로 N번을 IN 쿼리 몇 번으로 줄임 5. 정리 개념 한 줄 요약 ORM 객체와 테이블의 간극을 메워주는 기술 JPA / Hibernate 자바 ORM의 표준 명세 / 그 구현체 영속성 컨텍스트 엔티티를 관리하는 공간. 1차 캐시, 변경 감지, 쓰기 지연을 제공 연관관계의 주인 FK를 관리하는 쪽. N:1에서는 N쪽 N+1 문제 연관 데이터를 건건이 조회하는 문제. fetch join 등으로 해결 다음 글에서는 직접 엔티티와 Repository를 만들어보면서 사용법을 정리해보겠습니다.
당근마켓 채용 페이지에는 지금 몇 개의 공고가 있나요 채용 페이지를 새로고침하며 기다리던 공고가 올라왔을 때의 반가움을 기억하시나요. 당근마켓 채용 페이지(about.daangn.com)에는 총 31건의 개발 직무 공고가 열려 있습니다. 백엔드 분야가 14건으로 가장 많고, 그 뒤를 프론트엔드 5건, 모바일 3건, AI·머신러닝 3건, 보안 2건, 인프라·DevOps 2건이 잇고 있습니다. 경력별로 어떤 공고가 주로 보이나요 연차에 따라 당근마켓이 필요로 하는 인재상은 다양합니다. 경력 분포를 보면 3 4년 이상 경력을 요구하는 공고가 14건으로 가장 큰 비중을 차지하며, 5 7년 이상 경력자도 6건을 찾고 있습니다. 1~2년 차 혹은 신입도 각각 4건씩 공고가 열려 있어 폭넓은 연차의 개발자를 기다리고 있습니다. 공고명 경력 원티드 유무 Network Engineer - 인프라 (네트워크, Cloud) 8년 이상 없음 Software Engineer, Backend - 광고 5~7년 이상 없음 Software Engineer, Machine Learning - ML 인프라 5~7년 이상 없음 Software Engineer, Backend - 인프라 (공통 서비스 개발, 콘텐츠 서빙) 5~7년 이상 없음 Software Engineer, Backend - 로컬 잡스 (레슨/과외 팀) 5~7년 이상 없음 Software Engineer, Backend - 부동산 5~7년 이상 없음 Software Engineer, Backend - 로컬 잡스 5~7년 이상 없음 Security Engineer - 인프라 (보안, Detection & Response) 3~4년 이상 없음 Software Engineer, iOS 3~4년 이상 없음 Software Engineer, Machine Learning - 검색 (품질) 3~4년 이상 없음 Software Engineer, Backend - 서비스 코어 (Identity Service) 3~4년 이상 없음 Software Engineer, Backend - 나의당근 3~4년 이상 없음 Software Engineer, Frontend - Cross Product Growth (Engagement Part) 3~4년 이상 없음 Software Engineer, Frontend - 커뮤니티 3~4년 이상 없음 Software Engineer, Frontend - 로컬 잡스 3~4년 이상 없음 Software Engineer, Frontend - 로컬 비즈니스 (로컬 콘텐츠) 3~4년 이상 없음 Software Engineer, Frontend - 로컬 잡스 (레슨/과외 팀) 3~4년 이상 없음 Software Engineer, Android 1~2년 이상 없음 Software Engineer, Backend (경력) - 피드 (ML Data Platform) 1~2년 이상 없음 Security Engineer - 인프라 (보안, AI Security) 1~2년 이상 없음 Software Engineer - 테크코어 (AI Platform) 1~2년 이상 없음 Software Engineer, Data - 데이터 가치화 표기 없음 없음 Software Engineer, Machine Learning 표기 없음 없음 Network Engineer (인턴) 인프라 (네트워크) 신입·무관 Software Engineer, Backend (신입) - 피드 (ML Data Platform) 신입·무관 없음 Software Engineer, Android (인턴) 신입·무관 없음 Software Engineer, Backend (전환형 인턴) - 커뮤니티 신입·무관 없음 당근마켓이 주목하는 기술은 무엇인가요 가장 많이 언급되는 기술 스택은 Go(12건)와 Python(11건)입니다. 이어 Kotlin(10건), Kubernetes(9건), AWS, Kafka, Redis, BigQuery(각 8건) 순으로 자주 보입니다. 특히 인프라와 데이터 관련 공고가 많아지면서 컨테이너 관리와 대용량 데이터 처리를 위한 기술 역량이 중요하게 다뤄지고 있습니다. 지난 14일 동안 어떤 변화가 있었나요 최근 2주간 새롭게 올라온 공고는 총 3건입니다. 주로 로컬 잡스와 커뮤니티 관련 서비스 성장에 필요한 엔지니어를 찾고 있습니다. 공고명 경력 게시일 Software Engineer, Frontend - 로컬 잡스 (레슨/과외 팀) 3~4년 이상 2026-09-21 Software Engineer, Backend - 로컬 잡스 5~7년 이상 2026-09-21 Software Engineer, Backend (전환형 인턴) - 커뮤니티 신입·무관 2026-09-30 원티드에서 보이는 공고와는 어떻게 다른가요 원티드 채용 플랫폼을 통해 확인한 당근마켓의 공고는 2건이었으나, 실제 회사 채용 페이지에는 31건의 공고가 올라와 있습니다. 이는 외부 플랫폼에는 모든 공고가 공유되지 않을 수 있음을 시사합니다. 제 판단입니다. 이 숫자로 말하지 않는 것 이 분석은 2026년 10월 1일 16시 47분 기준으로 당근마켓 채용 페이지를 직접 긁어온 데이터에 기반합니다. 원티드 한 곳과의 비교만 수행하였으며, 외부 플랫폼에 등록되지 않은 공고의 정확한 사유는 데이터에 없습니다. 그래서 무엇을 하면 좋을까 당근마켓 채용 페이지의 기술 스택을 참고하여 본인의 이력서에서 가장 강조하고 싶은 Go, Python, Kotlin 중 하나의 기술과 관련된 프로젝트 성과를 기술적으로 정리해 보시기 바랍니다. tailf는 개발자가 원하는 기술 스택을 설정하면 지난 30일간 올라온 공고 수를 가입 없이 바로 확인할 수 있습니다. 잠금화면에서 바로 소식을 받아볼 수 있는 내 기술로 지난 30일 공고 세어 보기 → 를 통해 매일 바뀌는 채용 소식을 놓치지 마세요. 다음 화에서는 또 다른 회사의 채용 페이지를 샅샅이 파헤쳐 보겠습니다. 보고 싶은 회사가 있다면 댓글로 남겨 주세요.
A dependable Courier Service in Delhi makes it easier to send documents, parcels, business materials, and personal packages from one location to another. Whether you need a local delivery or an overseas shipment, choosing the right courier partner can save time and provide greater convenience. Convenient Courier Services in Delhi A professional Courier Company in Delhi can offer doorstep pickup, shipment tracking, secure handling, and delivery options based on your requirements. These services are useful for individuals, offices, online sellers, and businesses. For customers across the region, Courier Services in Delhi NCR can provide delivery solutions between Delhi and nearby areas such as Noida, Gurgaon, Ghaziabad, and Faridabad, depending on service availability. International Courier Service in Delhi For overseas shipments, an International Courier Service in Delhi can help send eligible documents and parcels to destinations around the world. An International Courier Service from Delhi may offer express and standard delivery options depending on the destination, shipment size, and urgency. Customers should provide accurate sender and recipient details and check the destination's requirements before booking. Overseas Courier Service in Delhi An Overseas Courier Service in Delhi can be useful for students, families, professionals, exporters, and online businesses. Important documents, permitted personal belongings, samples, and other eligible parcels can be shipped internationally. Proper packaging and accurate documentation can help reduce avoidable shipping issues. International Parcel Delivery from Delhi With International Parcel Delivery from Delhi, customers can send eligible packages to international destinations. Shipping charges generally depend on destination, weight, dimensions, contents, and delivery speed. Tracking is also useful for monitoring the parcel after dispatch. Choose the Right Courier Company When selecting a Courier Company in Delhi, consider delivery coverage, tracking, pickup facilities, customer support, pricing, and international shipping experience. A reliable courier provider should offer a service that matches your shipment type, destination, and delivery requirements. Conclusion A professional Courier Service in Delhi can make domestic and international shipping simpler and more convenient. Whether you need local delivery or an International Courier Service in Delhi, choosing a courier company with suitable coverage, tracking, and pickup options can help ensure a smoother delivery experience. visit ourwebsite : https://vsruniversalexpress.in/international-courier-service
" According to the latest report published by Data Bridge Market Research, the Oil and Gas Data Monetization Market CAGR Value Getting thoughtful about competitive landscape is another significant aspect of the wide ranging Oil and Gas Data Monetization Market report. Therefore, the moves or actions of major market players and brands are analysed in the business report that range from product developments, product launches, acquisitions, merges, joint ventures, and future products to technologies. This market research report is sure to assist businesses for the long lasting accomplishments in terms of better decision making, revenue generation, prioritizing market goals and profitable business. Target driven generation of report, loyalty for the quality and transparency in research method are few of the features with which Oil and Gas Data Monetization Market analysis report can be adopted with confidence. Stay informed with our latest keyword market research covering strategies, innovations, and forecasts. Download full report: https://www.databridgemarketresearch.com/reports/global-oil-and-gas-data-monetization-market Oil and Gas Data Monetization Market Segmentation and Market Companies Segments By Component: Software, Services By Data Type: Customer Data, Operational Data, Financial Data, Vendor Data By Application: Predictive Maintenance, Asset Management, Customer Analytics By Deployment Mode: Cloud, On-Premises By Industry Vertical: Upstream, Midstream, Downstream The global oil and gas data monetization market is segmented based on various factors to provide a comprehensive analysis of the industry landscape. By component, the market is categorized into software and services, allowing companies to choose solutions that align with their specific needs. In terms of data type, the segmentation includes customer data, operational data, financial data, and vendor data, catering to different aspects of the oil and gas value chain. Additionally, the market segments by application, deployment mode, and industry vertical, offering a detailed breakdown of how data monetization solutions are utilized across various sectors within the oil and gas industry. Market Players Schlumberger Limited Tata Consultancy Services Limited Accenture IBM Corporation Oracle SAP SE Microsoft Corporation Hitachi Vantara OSIsoft, LLC Dataiku The global oil and gas data monetization market features a competitive landscape with key players driving innovation and development in the industry. Companies such as Schlumberger Limited, Tata Consultancy Services Limited, Accenture, and IBM Corporation are at the forefront of providing cutting-edge solutions to enable data monetization for oil and gas companies. Other significant market players include Oracle, SAP SE, Microsoft Corporation, Hitachi Vantara, OSIsoft, LLC, and Dataiku, each contributing expertise and technology to enhance data utilization and monetization strategies in the oil and gas sector. The global oil and gas data monetization market continues to witness significant growth and evolution driven by the increasing demand for advanced data analytics solutions within the industry. One of the emerging trends in this market is the growing focus on predictive maintenance applications. Oil and gas companies are increasingly adopting predictive maintenance strategies to optimize operational efficiency, reduce downtime, and enhance overall asset performance. By leveraging advanced data analytics tools, companies can proactively identify equipment failures or maintenance needs, leading to cost savings and improved productivity. Another key trend shaping the oil and gas data monetization market is the emphasis on customer analytics. With the rise of digital transformation initiatives in the industry, companies are looking to utilize customer data effectively to enhance engagement, personalize services, and drive customer loyalty. By analyzing customer behavior, preferences, and feedback, oil and gas companies can tailor their offerings and marketing strategies to meet the evolving needs of their customers. This focus on customer analytics not only improves customer satisfaction but also helps companies gain a competitive edge in the market. Furthermore, the adoption of cloud-based deployment models is gaining traction in the oil and gas sector. Cloud deployment offers scalability, flexibility, and cost-efficiency, making it an attractive option for companies looking to leverage data monetization solutions. With the increasing volume of data generated in the oil and gas industry, cloud platforms enable companies to store, process, and analyze large datasets more efficiently. Additionally, cloud-based solutions facilitate real-time data access and collaboration, empowering organizations to make informed decisions quickly and effectively. In terms of industry verticals, the upstream segment holds significant potential for data monetization solutions. Upstream operations in the oil and gas industry involve exploration, drilling, and production activities, generating vast amounts of data that can be leveraged for strategic insights and decision-making. By implementing data monetization solutions in the upstream sector, companies can optimize production processes, mitigate risks, and improve resource allocation. With the rising focus on operational efficiency and cost reduction in upstream operations, data monetization plays a crucial role in driving innovation and competitiveness in the sector. Overall, the global oil and gas data monetization market is poised for continued growth and innovation as companies across the industry embrace advanced analytics, cloud technologies, and industry-specific applications to unlock the value of their data assets. The market is expected to witness further developments in areas such as artificial intelligence, machine learning, and IoT integration, providing opportunities for industry players to drive operational excellence, improve decision-making, and enhance overall business performance.The global oil and gas data monetization market is undergoing significant transformations driven by the increasing adoption of advanced data analytics solutions within the industry. One notable trend shaping the market is the shift towards predictive maintenance applications. Oil and gas companies are increasingly focusing on proactive maintenance strategies to optimize operational efficiency, reduce downtime, and enhance asset performance. By utilizing predictive maintenance tools and analytics, companies can anticipate equipment failures, prioritize maintenance activities, and ultimately achieve cost savings and improved productivity. Customer analytics is also emerging as a key trend in the oil and gas data monetization market. With the digital transformation sweeping the industry, companies are leveraging customer data to enhance engagement, personalize services, and foster customer loyalty. By analyzing customer behavior, preferences, and feedback, oil and gas companies can tailor their offerings and marketing strategies to meet evolving customer needs. Effective customer analytics not only enhances customer satisfaction but also enables companies to gain a competitive edge in the market by providing personalized experiences and services. Furthermore, the adoption of cloud-based deployment models is gaining momentum in the oil and gas sector. Cloud deployment offers scalability, flexibility, and cost-efficiency, making it an attractive option for companies seeking to leverage data monetization solutions. With the exponential growth of data in the industry, cloud platforms enable efficient storage, processing, and analysis of large datasets. Real-time data access, collaboration, and decision-making are facilitated through cloud-based solutions, empowering organizations to make informed decisions swiftly and effectively. In terms of industry verticals, the upstream segment holds significant promise for data monetization solutions within the oil and gas sector. Upstream operations encompass exploration, drilling, and production activities, generating vast amounts of data that can be harnessed for strategic insights and decision-making. Implementing data monetization solutions in the upstream sector can lead to streamlined production processes, risk mitigation, and improved resource allocation. As upstream operations place a premium on operational efficiency and cost reduction, data monetization technologies play a pivotal role in fostering innovation and competitiveness in the sector. Overall, the global oil and gas data monetization market is poised for continued growth and innovation, with companies leveraging advanced analytics, cloud technologies, and industry-specific applications to extract maximum value from their data assets. Anticipated developments in artificial intelligence, machine learning, and IoT integration are expected to provide avenues for industry players to drive operational excellence, enhance decision-making processes, and elevate overall business performance in the evolving oil and gas landscape. Frequently Asked Questions About This Report How are Smart Factories changing the Oil and Gas Data Monetization Market landscape? Who are the primary end-users of the Oil and Gas Data Monetization Market? What is the impact of Freemium models on Oil and Gas Data Monetization Market revenue? What are the upcoming trends in the Oil and Gas Data Monetization Market? What is the impact of IoT on the Oil and Gas Data Monetization Market landscape? What are the strategic recommendations for stakeholders in the Oil and Gas Data Monetization Market? What is the long-term future outlook for the Oil and Gas Data Monetization Market (2033 and beyond)? How are companies diversifying their supply chains to drive growth? What is the Replacement Rate for Oil and Gas Data Monetization Market hardware? What are the bottlenecks in the Oil and Gas Data Monetization Mark
시작 Next.js로 만든 사이트에서 DevTools의 Elements 탭을 열었는데, <body> 맨 아래에 script 태그가 수십 개 붙어 있었다. 정말 당황스러웠다; <script>self.__next_f.push([1,"e:I[622,[],\"IconMark\"]\n"])</script> <script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script> <script>self.__next_f.push([1,"16:T225d,"])</script> <script>...</script> <script>...</script> <!-- 이하 수십 개 --> 직접 넣은 코드가 아니라서 뭔지 찾아봤다. 찾다 보니 App Router 와 Pages Router 가 어떻게 다른지까지 이어졌다. 이 글은 그 차이와 각각의 장점을 정리한 것이다. script 태그의 정체 self.__next_f.push(...) 는 App Router 가 넣는 RSC Payload 다. 서버 컴포넌트가 렌더링한 결과를 React가 읽을 수 있게 직렬화한 데이터다. e:I[622,[],"IconMark"] ← I : 클라이언트 컴포넌트 참조 c:"$7:metadata" ← 다른 줄을 가리키는 참조 16:T225d, ← T : 텍스트. 225d(16진수) = 8,797 바이트가 뒤에 온다 script 태그 안에 있지만 하는 일은 배열에 문자열을 넣는 것이다. 여러 개로 나뉜 건 Next 가 조각 단위로 내보내서 그렇다. 왜 필요한가 서버에서 만든 HTML은 문자열이다. 브라우저에서 React가 이 화면을 이어받으려면(hydration) DOM이 어떤 컴포넌트 트리에서 나왔는지 알아야 하는데, HTML만으로는 알 수 없다. 그래서 그 정보를 같이 보낸다. 크기 페이지 하나를 재봤다. 값 script 태그 49개 그중 __next_f 40개 __next_f 크기 (raw) 106 KB gzip 전송 기준 약 11 KB raw 로는 크지만 HTML에 이미 있는 내용이 한 번 더 나오는 거라 압축이 잘 된다. 문서 맨 아래에 있어서 화면을 그리는 것도 막지 않는다. Pages Router 에는 이 태그가 없다. 대신 <script id="__NEXT_DATA__"> 하나가 있다. 이 차이가 두 라우터의 동작 방식 차이에서 나온다. Pages Router 는 이렇게 동작한다 pages/ 폴더의 파일 하나가 페이지 하나다. 데이터는 페이지 파일의 전용 함수에서 가져와서 props 로 내려준다. // pages/products.tsx export async function getStaticProps() { const products = await getProducts() return { props: { products } } } export default function Page({ products }) { return ( <> <ProductTable products={products} /> <Footer /> </> ) } 여기서 Page , ProductTable , Footer 는 서버에서 한 번, 브라우저에서 한 번 실행된다. 서버에서 HTML을 만들고, 브라우저에서 같은 컴포넌트를 다시 실행해서 hydration 한다. 그래서 두 가지가 브라우저로 간다. 페이지에 넘긴 props ( __NEXT_DATA__ 에 JSON으로 들어간다) 페이지에 쓰인 모든 컴포넌트의 코드 Footer 처럼 클릭할 게 없는 컴포넌트도 코드가 내려간다. App Router 는 이렇게 동작한다 app/ 폴더를 쓰고, 컴포넌트는 기본이 서버 컴포넌트 다. 서버에서만 실행되고 브라우저에서는 다시 실행되지 않는다. // app/products/page.tsx — 서버 컴포넌트 export default async function Page() { const products = await getProducts() return ( <> <ProductTable products={products} /> <ProductFilter products={products} /> <Footer /> </> ) } 'use client' // 브라우저에서도 실행해야 하는 컴포넌트만 표시한다 export default function ProductFilter({ products }) { const [keyword, setKeyword] = useState('') // ... } 브라우저로 가는 것이 달라진다. 서버 컴포넌트( Page , ProductTable , Footer )는 코드가 가지 않는다. 렌더 결과만 RSC Payload 로 간다 클라이언트 컴포넌트( ProductFilter )는 코드가 가고, 넘겨받은 props 도 payload 에 실린다 처음에 본 script 태그가 이 payload 다. Pages Router 는 props 만 실으면 되지만 App Router 는 서버 컴포넌트의 렌더 결과를 실어야 해서 양이 더 많다. 대신 JS 파일이 작아진다. 차이 정리 Pages Router App Router 폴더 pages/ app/ 라우트 파일 pages/products.tsx app/products/page.tsx 컴포넌트 기본값 서버 + 브라우저 둘 다 실행 서버에서만 실행 브라우저로 가는 JS 페이지의 모든 컴포넌트 'use client' 붙인 것만 데이터 가져오기 getStaticProps · getServerSideProps 컴포넌트 안에서 await 공통 레이아웃 _app.tsx 하나 폴더마다 layout.tsx 중첩 로딩 처리 직접 구현 loading.tsx · Suspense 스트리밍 메타 태그 next/head metadata · generateMetadata 데이터 변경 API Route 를 만들어 호출 Server Actions HTML에 싣는 데이터 props ( __NEXT_DATA__ ) 렌더 결과 ( __next_f ) App Router 의 장점 1. 브라우저로 가는 JS 가 줄어든다 서버 컴포넌트는 코드가 내려가지 않는다. 약관, 푸터처럼 보여주기만 하는 부분이 많을수록 차이가 커진다. 서버 컴포넌트에서만 쓰는 라이브러리(마크다운 파서, 날짜 포맷터 등)도 번들에 들어가지 않는다. 2. 데이터를 쓰는 곳에서 가져온다 Pages Router 는 페이지 파일에서만 데이터를 가져올 수 있어서, 깊은 컴포넌트가 쓰는 데이터도 페이지에서 받아 props 로 계속 내려줘야 한다. App Router 는 필요한 컴포넌트가 직접 await 한다. async function ProductTable() { const products = await getProducts() return <table>...</table> } 3. 레이아웃을 중첩할 수 있다 폴더마다 layout.tsx 를 둘 수 있고, 페이지를 이동해도 공통 레이아웃은 다시 렌더링되지 않는다. Pages Router 에서는 _app.tsx 하나로 처리하거나 페이지마다 getLayout 같은 패턴을 직접 만들어야 했다. 4. 준비된 부분부터 보여준다 loading.tsx 나 <Suspense> 로 감싸면 느린 데이터를 기다리는 동안 나머지 화면을 먼저 보낸다. Pages Router 는 getServerSideProps 가 끝나야 페이지 전체가 나온다. 5. 새 기능이 여기에 들어온다 서버 컴포넌트, Server Actions 처럼 React 의 서버 쪽 기능은 App Router 에서만 쓸 수 있다. Next.js 문서도 새 프로젝트에는 App Router 를 권한다. Pages Router 의 장점 1. 구조가 단순하다 모든 컴포넌트가 같은 방식으로 동작한다. 서버 컴포넌트와 클라이언트 컴포넌트를 구분할 필요가 없고, useState 나 useEffect 를 어디서든 쓸 수 있다. App Router 는 경계를 계속 신경 써야 한다. 서버 컴포넌트에서는 훅과 이벤트 핸들러를 못 쓰고, 클라이언트 컴포넌트로 넘기는 props 는 직렬화가 되는 값이어야 한다(일반 함수는 넘길 수 없다). 2. 라이브러리가 그대로 동작한다 Context 를 쓰는 라이브러리(상태 관리, UI 키트, 스타일 라이브러리)는 App Router 에서 'use client' 로 감싸거나 Provider 를 따로 분리해야 한다. Pages Router 에서는 그런 작업이 없다. 3. 데이터 흐름이 눈에 보인다 데이터를 가져오는 곳이 페이지 파일의 함수 하나로 정해져 있어서, 이 페이지가 어떤 데이터를 쓰는지 한 곳에서 확인할 수 있다. App Router 는 캐싱과 재검증 규칙까지 알아야 해서 익히는 데 시간이 더 든다. 4. 여전히 지원된다 Pages Router 는 계속 지원되고, 한 프로젝트 안에서 app/ 과 pages/ 를 같이 쓸 수도 있다. 기존 프로젝트를 급하게 옮길 이유는 없다. 어떤 경우에 무엇을 쓰나 상황 선택 새 프로젝트 App Router 정적인 내용이 많은 사이트 (마케팅, 블로그, 문서) App Router. 서버 컴포넌트 비중이 커서 JS 가 많이 줄어든다 화면 대부분이 인터랙션인 앱 (대시보드, 에디터) 어느 쪽이든 큰 차이가 없다. 대부분 클라이언트 컴포넌트가 된다 잘 돌아가는 Pages Router 프로젝트 그대로 둔다. 필요하면 새 페이지만 app/ 에 만든다 Context 기반 라이브러리 의존이 큰 프로젝트 옮기기 전에 해당 라이브러리의 App Router 지원 여부를 먼저 확인한다 정리하면 script 태그 수십 개는 App Router 의 RSC Payload 다. gzip 으로는 작고, 그대로 둬도 된다 Pages Router 는 모든 컴포넌트를 브라우저에서 다시 실행한다. props 만 싣고 코드를 전부 보낸다 App Router 는 서버 컴포넌트를 브라우저에서 실행하지 않는다. 렌더 결과를 싣고 코드는 보내지 않는다 App Router 는 JS 가 줄고 데이터·레이아웃·로딩 처리가 편해진다. 대신 서버와 클라이언트의 경계를 관리해야 한다 Pages Router 는 단순하고 라이브러리 호환이 좋다. 대신 보여주기만 하는 컴포넌트도 코드가 내려간다 마무리 script 태그가 왜 많은지 찾아보다가 두 라우터의 동작 방식까지 보게 됐다. App Router 에서 HTML 에 script 가 많아 보이는 건 JS 파일에 있던 것이 HTML 쪽으로 온 결과였다. Elements 탭에 보이는 양과 실제 전송량은 차이가 컸다. 비슷한 걸 다시 보면 gzip 크기부터 확인하려고 한다. 🔗 Server and Client Components : https://nextjs.org/docs/app/getting-started/server-and-client-components 🔗 App Router : https://nextjs.org/docs/app 🔗 Pages Router : https://nextjs.org/docs/pages
What would an AI agent do when a required file is missing or an API refuses access? The expected response is to explain the limitation... essentially, coming out with it. OpenAI’s latest disclosures shed light in another direction. Models sometimes take another route: hiding failures, using credentials without permission, or publishing files to finish the [...] The post OpenAI Model Misalignment Explained Through Six Real Incidents appeared first on Analytics Vidhya .