묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
ConstantBuffer에 대해서 질문이 있습니다.
안녕하세요 ConstantBuffer에 관련되어 강의를 듣는도중 질문이 3가지 정도 생겼습니다.VertexBuffer에 있는 내용을 직접 변경해서 다시 랜더링하기 위해선 처음 설정할때 GPU에서 초기화하고 읽기 전용으로만 생성했기때문에 VertexBuffer를 다시 생성하고 GPU로 다시 복사해줘야 한다고 말하셨는데 GPU에서 읽기, 쓰기 둘다 가능한 D3D11_USAGE_DEFAULT 타입으로 생성해준 뒤 GPU내부에 VertexBuffer를 다시 생성할 필요가 없이 쓰기 작업만 해주면 안되는 건가요? 1번 경우가 어떤 이유때문에 안될것이지만 왜 저렇게 하면 안될까 이유가 궁금해서 쓴 것이고 VertexBuffer를 ReadOnly로 설정하고 Offset을 더해주어 모델링이 움직일때 이러한 개념으로 생각해도 되나요?우선 현재 렌더링 되고있는 Enemy 100마리가 존재하고 100마리 전부의 위치를 각기 다르게 수정해준다고 가정.2-1. VertexBuffer를 통해 위치 정보를 직접 수정하는 경우첫 번재, 현재 VRAM에 100마리 만큼의 모델링 정보가 있는 상태에서 100마리 만큼의 위치변환 정보만 전송해주는 방법.두 번째, CPU가 GPU로 정보를 보내줄때 아예 그냥 100마리만큼의 모델링 정보 + 100마리 만큼의 위치변환 정보를 전부 전달해주는 방법.이 있는데 첫 번째 경우로 한다하면 VRAM에 100마리 만큼의 모델링 정보를 감당할 메모리가 존재하지 않아 불가능하고 두 번째 경우로 한다면 보내주는 용량이 너무 많아 전송 시간이 너무 오래 걸리기 때문에 힘들다라고 이해했습니다.그래서 제가 이해해본 강사님께서 말한 방식이 2-2 방법인데2-2. ConstantBuffer를 통해 위치 정보를 간접 수정하는 경우CPU에서 GPU로 정보를 보내줄때 100마리의 위치 정보만 보내주고 VRAM에 존재하는 하나의 모델링에 100개의 각기 다른 위치 정보를 더해주어 렌더링함으로써 C++에서 l-value 하나에 여러 상수를 더하면서 여러 r-value를 쓰듯이 사용하는 방법.이 경우를 통해 1개의 모델링과 100개의 위치변화 정봅만 있으면 100개의 Enemy를 렌더링 할 수 있다 라고 이해했습니다 혹시 이게 맞나요? 마지막 질문입니다 Update 함수에서 memcpy를 사용해서 subResource.pData에 들어온 데이터를 통해 constantBuffer의 상수 데이터를 변경시킨다고 알고 있는데 이 함수 내용에선 직접적으로 constantBuffer에 subResource.pData의 데이터를 할당하는 부분이 없는데 어디서 할당이 되는 건가요? 혹시 몰라서 subResource.pData와 constantBuffer.Get()의 포인터 정보도 찍어봤는데 서로 다른 곳이였어서 deviceContext에서 자동으로 알아서 전달해주는 건가요?제가 궁금한게 생기면 못 넘어가는 성격이라 질문이 길어서 죄송합니다.
-
해결됨Next.js 시작하기(feat. 지도 서비스 개발)
상태관리 질문 있습니다!
안녕하세요 용주님swr 대신에 React-query랑 Recoil로 상태관리를 하고 있는데, map에 대한 data를 setMapInfo에 저장하고 있고, Markers에서 mapInfo에 대한 값을 useRecoilValue로 가져오고 있는 상황입니다. const [mapInfo, setMapInfo] = useRecoilState(mapState) const initializeMap = () => { const mapOptions = { center: new window.naver.maps.LatLng(...initialCenter), zoom: initialZoom, minZoom: 9, scaleContorl: false, mapDataControl: false, logoControlOptions: { position: naver.maps.Position.BOTTOM_LEFT, }, } let map = new window.naver.maps.Map(mapId, mapOptions) mapRef.current = map setMapInfo(map) } 그런데 계속 아래와 같이 Type error가 발생하고 있는 상황입니다. 어떤 문제 때문에 발생하는지 알 수 있을까요? 수업과 무관한 질문이여서 죄송합니다! ㅜ참고로 @types/navermaps : 3.6.5 버전입니다.
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
페이지 반복문 오류
아래와 같이 1페이지까지는 제대로 출력이 되나 2페이지 이후로는 뉴스 제목과 링크가 가져와지지 않아요.왜 이런 오류가 발생하는 건가요.??
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Map 함수로 실전적용!
final numbers = [123, 456, 789];print(numbers.map((x) => x.toString().split('').map((y) => '$y.jpg',).toList(),),([1.jpg, 2.jpg, 3.jpg], [4.jpg, 5.jpg, 6.jpg], [7.jpg, 8.jpg, 9.jpg])print(numbers.map((x) => x.toString().split('').map((y) => '$y.jpg',),).toList(),[(1.jpg, 2.jpg, 3.jpg), (4.jpg, 5.jpg, 6.jpg), (7.jpg, 8.jpg, 9.jpg)]소괄호와 대괄호가 무슨차이죠.처음에 첫번째 처럼하면 list될것같았는데요. 같은줄 알았는데 다르더라구요. 2번째는 그냥 해본거예요.무슨차이인지 알고싶어요. final number = 123; print(number.toString().split('')); print(number.toString().split('').map((x)=> '$x.jpg'));[1, 2, 3](1.jpg, 2.jpg, 3.jpg)위에는 대괄호, 밑에는 소괄호 괄호가 같는결과는 아니네요.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Xilinx Vivado 설치에서 sudo apt install gcc -y 설치가 계속 안됩니다
자꾸만 위와 같은 에러가 발생하여 해결 방법을 문의드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 문제에 대한 질문입니다.
http://boj.kr/53d3d972829a47cc80be8c0da3a25fa0안녕하세요 선생님!문제에 대한 코드를 작성한 뒤 예제에 있는 반례와질문하기에 다른 학생들이 질문하고 선생님께서 찾으신반례 모두 입력에 넣어봐도 정답으로 나오는데 백준에선 계속 틀리다고 합니다ㅠ문법적인 오류인지 간단한 실수 인지 잘 모르겠습니다.
-
미해결CloudNet@ - AWS 네트워킹 입문
로그 그룹을 삭제하려 하는데 애초에 로그 그룹이 없네요
제목 그대로 입니다.Cloudformation 스택까지 지우는 것 까지 모든 과정을 따라했고 로그 그룹을 삭제하려 했더니 로그 그룹이 애초에 없습니다.스택을 삭제함으로써 같이 지워진건지 애초부터 안만들어진건지 모르겠네요..분명히 CloudWatch로 필터링까지 하면서 로그들을 확인했었는데 말이죠..일단 지금 당장은 로그 그룹이 없으니 자원 미삭제로 인한 불이익을 보진 않겠죠?
-
미해결
five points of digital sales room
five points of digital sales room Digital Sales Software for Streamlined Growth: Elevate your business with cutting-edge digital sales software that empowers your team to drive revenue like never before. Harness the potential of advanced analytics, automated workflows, and real-time insights to optimize your sales strategies. Our digital sales software lets you close deals faster, nurture leads efficiently, and provide an exceptional customer experience.Unlock Success with Digital Sales Software: Transform your sales approach with our innovative digital sales software. Seamlessly manage leads, track customer interactions, and monitor sales performance all in one place. Our platform integrates powerful tools to enhance collaboration, improve forecasting accuracy, and drive revenue growth. Elevate your sales game and stay ahead in the competitive digital landscape.Revolutionize Your Sales with Digital Sales Software: Discover a game-changing solution for modern sales teams – digital sales software designed to boost efficiency and results. From lead generation to deal closure, our platform offers a comprehensive suite of tools to streamline your processes, enhance customer engagement, and increase your bottom line.Digital Sales Software: Your Path to Success: Embrace the future of sales with our state-of-the-art digital sales software. Elevate your sales performance through dynamic lead tracking, personalized communication, and data-driven insights. Stay in control of your pipeline, nurture relationships, and close deals faster, all while redefining your digital sales strategy.Experience Growth with Digital Sales Software: Amplify your sales potential using digital sales software that redefines how you engage customers. Empower your team with tools that optimize communication, automate tasks, and prioritize leads. Our solution integrates seamlessly into your workflow, fostering collaboration and paving the way for accelerated growth.
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
HttpExceptionFilter에 단순 HttpException 예외처리도 필요하지 않나요?
HttpExceptionFilter에서 에러처리시exception.getStatus() 로 err 변수값을 넣을떄HttpException 의 경우 string 타입BadRequestException, UnauthorizedException 와 같이 미리 정의된 경우 { message: any; statusCode: number } 타입class-validator의 경우 { error: string; statusCode: 400; message: string[] } 타입의 3가지 형태가 되는데이번강의에서 string 타입 자체를 제거하셧는데 HttpException 를 사용하게되면 에러 메시지가 제대로 안 날라 가게 됩니다. class-validator를 도입하면서 HttpException 케이스를 제거 하신거 같은데 해당 예외도 포함은 되어있어야 하지 않나요?class-validator 가 완전히 HttpException 를 대체하게 한다면 HttpException를 사용못하게 막을 방법이 있을까요?import { ExceptionFilter, Catch, ArgumentsHost, HttpException, } from '@nestjs/common'; import { Response } from 'express'; @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse<Response>(); const status = exception.getStatus(); const err = exception.getResponse() as | string | { message: any; statusCode: number } | { error: string; statusCode: 400; message: string[] }; //class-validator if (typeof err !== 'string' && err.statusCode === 400) { return response.status(status).json({ success: false, code: err.statusCode, data: err.message, }); } //HttpException if (typeof err == 'string') { return response.status(status).json({ success: false, code: status, data: err, }); } //BadRequestException, UnauthorizedException return response.status(status).json({ success: false, code: status, data: err.message, }); } }
-
미해결[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
공변성과 반공변성
제가 공변성과 반공변성을 공부하는데 너무 큰 어려움이 있었어서, 원리가 너무 궁금해서 나름대로 결론을 내려보았습니다.저는 개인적으로 함수의 동작 과정인,input - process - output 의 방향대로,타입을 만족하기 위하여 이런 순서로 검사하는게 아닐까... 생각해보았습니다. function a(x: string | number): number { return 0;}type B = (x: string) => number | string;let b: B = a;강의 속 코드를 가져와봤습니다. 제가 하고 싶은 말의 요지는,다음 순서를 만족하기 위해서 타입의 크기 비교가 달라진다는 것이지요.1) b의 매개변수 타입을 검사2) a의 매개변수 타입을 검사3) a의 리턴 타입을 검사4) b의 리턴 타입을 검사 검증해보기 위해서,b("1") 이라는 코드를 입력하면, b("1") 실행 :먼저 b의 타입인 B의 매개변수가 검사되어,(x: string) 를 만족하는지 확인 (b = a이므로)b("1")에 의해 a("1")가 실행 :따라서 a의 매개변수 타입이 검사되어,(x: string | number) 를 만족하는지 확인. a("1")의 결과인 0 :a의 리턴 타입을 검사하여,number를 반환하는 지 확인. b("1")의 결과인, a("1")의 결과인 0 :b의 리턴 타입을 검사하여,number | string을 반환하는 지 확인. 타입스크립트가 실제로 이런 식으로 추론하는지는 알지 못하지만, 흥미로운 생각인 것 같아서 나누어보았습니다.개인적인 의견이고,옳지 않은 내용이 있다면 삭제하겠습니다!
-
미해결[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
코틀린 프로젝트를 생성하였는데 자바 프로젝트가 생성됩니다
안녕하세요 조이스선생님안드로이드 스튜디오 개발 환경설정 강의를 보고 그대로 따라 프로젝트를 생성해 보았는데 자바 프로젝트가 생성됩니다 무엇이 잘못된 걸까요?너무 기초적인 질문인 것 같아 민망하지만 혼자서는 도저히 답이 나오지 않아 질문 드립니다좋은 강의 만들어 주셔서 감사합니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
stock_quantity 동시성 해결하는 방법에 대해
@Test public void 상품_주문() { //given Member member = new Member(); member.setName("회원1"); member.setAddress(new Address("서울", "강가", "123-123")); em.persist(member); Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); book.setAuthor("kim"); em.persist(book); //when int orderCount = 2; // 두권 주문 Long orderId = this.orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = this.orderRepository.findOne(orderId); Assertions.assertEquals(OrderStatus.ORDER, getOrder.getStatus()); }강의 내용 중 테스트 코드//==생성 메서드==// public static OrderItem createOrderItem(Item item, int orderPrice, int count) { OrderItem orderItem = new OrderItem(); orderItem.setItem(item); orderItem.setOrderPrice(orderPrice); orderItem.setCount(count); item.removeStock(count); // 해당 상품의 재고 수량 차감 return orderItem; }강의 내용 중 OrderItem 엔티티 내 생성 메서드 createOrderItem()강의에서는 위와 같이 OrderItem 엔티티의 생성 메서드라는 것을 통해 주문상품을 만들고 상품의 재고를 감소시키는데요. jpa가 상품 수량(stock_quantity) 감소시킬 때 사용한 UPDATE 쿼리를 보니까 UPDATE item SET stock_quantity = 8; 과 같이 되어있더라고요. 이러면 여러 클라이언트가 동시에 해당 상품 주문할 때 덮어쓰는 문제가 발생하니까 따로 해결 방법을 찾아봤습니다.JPA에 낙관적 락이라는 게 있길래 적용해봤더니 다른 트랜잭션이 중간에 상품 수량을 변경하고 커밋하면 해당 트랜잭션에서 변환된 스프링 예외(ObjectOptimisticLockingFailureException)가 올라오며 덮어쓰는 문제는 막을 수 있었습니다(테이블 데이터 생성 후 ddl-auto: none 모드로 실행, h2 콘솔과 함께 테스트). 예외를 잡고 새 스냅샷으로 다시 호출할 수 있겠지만, db에 stock_quantity 데이터만 정확히 맞추면 되는 게 목적이어서 createOrderItem 로직을 별도의 리포지토리로 대체해보았습니다.@Slf4j @Repository @RequiredArgsConstructor public class OrderItemRepository { private final EntityManager em; /** * 주문 상품 생성 * @param item * @param orderPrice * @param count * @return */ public OrderItem createOrderItem(Item item, int orderPrice, int count) { OrderItem orderItem = new OrderItem(); orderItem.setItem(item); orderItem.setOrderPrice(orderPrice); orderItem.setCount(count); int restStock = item.getStockQuantity() - count; if (restStock < 0) { log.info("need more stock for {}.{}", item.getId(), item.getName()); throw new NotEnoughStockException("need more stock"); } // 해당 상품의 재고 수량 차감 em.createQuery("UPDATE Item i " + "SET stock_quantity = stock_quantity - :count " + "WHERE item_id = :item_id") .setParameter("count", count) .setParameter("item_id", item.getId()) .executeUpdate(); // em.refresh(item); return orderItem; }em.createQuery()로 item.removeStock(count); 부분을 바꿨습니다. SET stock_quantity = stock_quantity - :count /** OrderService 내 order 메서드 */ @Transactional(readOnly = false) public Long order(Long memberId, Long itemId, int count) { //엔티티 조회 Member member = this.memberRepository.findOne(memberId); Item item = this.itemRepository.findOne(itemId); //배송 정보 생성 Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); //주문 상품 생성 OrderItem orderItem = this.orderItemRepository.createOrderItem(item, item.getPrice(), count); //주문 생성 Order order = Order.createOrder(member, delivery, orderItem); //주문 저장 this.orderRepository.save(order); return order.getId(); }기존에 호출하던 OrderItem.createOrderItem(item, item.getPrice(), count); 대신에 orderItemRepository.createOrderItem()를 호출하도록 OrderService 코드를 변경강의에서 작성한 상품_주문() 테스트를 단일 실행했을 때도 em.createQuery.executeUpdate()할 때 보니까, flush인가 그것도 호출안했는데 jpa가 그전에 persist한 book이랑 member까지는 실제로 인서트하고 업데이트 쿼리를 실행하는 것을 확인했습니다.[질문]1. 강의에선 OrderItem 엔티티 자체에서 createOrderItem()을 처리해주기 때문에 OrderItem의 기본 생성자도 protected로 지정해서 막았는데, 글에서 적용한 방식으로 해결하려면 public으로 바꿔야 했습니다. 지금처럼 OrderItemRepository를 따로 만들어서 처리하는 게 구조상 문제가 없는 건지 리포지토리의 역할이 맞는지 모르겠고, 문제가 생길 수 있는지 궁금합니다.(예측되는 문제점: 주문/주문 취소/상품 수정 등 stock_quantity와 얽혀있는 로직마다 쿼리를 작성해야 됨) 2. JPA의 기본적인 변경 감지 방식을 유지하면서 낙관적 락 없이도 간단하게 해결할 수 있는 방법이 있는지 알고 싶습니다.
-
미해결
코틀린 Binding 설치후 Unsolved referece 에러
코틀린 예제를 책대로 하다가 binding이 안 먹혀서 보니까4.0버전에선 다른 코드이길래, 일단 최신 걸로 넣고 설치하고 나니ImageView 부분이 읽혀지지 않는다고 에러가 뜨네요.ㅠㅠcache 지워도 재빌드해도, 에러가 고쳐지지 않는데,원인이 버전인지 아닌 import가 부족한 건지 혹시 원인을 알 수 있을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
회원가입 과제
infor_box를 css에서 인식?을 못하는데 html 어디에 문제가 있는걸까요?ㅠㅠㅠ
-
해결됨Spring Boot JWT Tutorial
new User 생성자 오류 발생하는 분들...
아래 코드와 같이 에러 발생하는 분들...바보 같았네요.User principal = new User(claims.getSubject(), "", authorities);import me.{..}.jwttutorial.entity.User;이 아니고import org.springframework.security.core.userdetails.User;입니다
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
github 권한 추가해주세요
인프런 아이디: hyzcore@gmail.com인프런 이메일: hyzcore@gmail.com깃허브 아이디: hyzcore@gmail.com깃허브 username: HyungJun Lee
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
혹시 강의 중에 PDF 파일 관련해서는 다운 받을 수 없나요?
혹시 pdf 파일은 어디서 다운 받을 수 있나요?
-
미해결홍정모의 따라하며 배우는 C언어
예제 풀이 이렇게 하면 틀린 건가요?
while문을 한번만 써서int main(){ const int secret_code = 337; int guess = 0; while (guess != secret_code) { printf("Enter secret code :"); scanf("%d", &guess); } printf("Great!"); return 0;} 이렇게 쓰니까 결과는 잘 나오던데 틀린 방법인가요?아니면 for문으로int main(){ for (int code = 0;code != 337;printf("Enter secret code :"), scanf("%d", &code)) ; printf("Great!"); return 0;} 이렇게 하는 것도 안되나요?? 잘 돌아가긴 해서 질문 남깁니다!
-
미해결스프링 시큐리티
child_name,parent_name
계층권한에서 저 둘의 관계는 왜@ManyToOne로 설정 되어 있을까요 ??현재 프로젝트는 1:1로 해도 문제가 없지 않나요 ?!
-
해결됨웹 애니메이션을 위한 GSAP 가이드 Part.02
안녕하세요 수업자료를 다운받았는데 중간중간 파일이 없어요 ㅠㅠ
영상 우측상단에 수업자료를 다운받고 열어보니 중간중간 없는 파일들이 있습니다 ㅠㅠ 저만 그런건지..