inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

이번 강의를 듣고

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

이번에 신규 오픈하신 DX11 강의를 또 들어야 할까요 아니면 이것만으로도 충분할까요?

  • directx
  • 게임수학
Aiden 댓글 1 좋아요 0 조회수 486

SwapChain에 대해서 질문이 있습니다

해결됨

[게임 프로그래머 도약반] DirectX11 입문

SwapChain에 대해서 제대로 알고있는게 맞는지 개념 확인좀 부탁드립니다. SwapChain 사용 이유 SwapChaine을 생성할시 프론트버퍼와 백버퍼가 생성이되고 프론트버퍼에 있는 데이터가 모니터로 복사가되고 백버퍼에 다음 장면을 렌더링 하는식으로 돌아가게 된다. 이렇게 하는 이유는 버퍼에서 모니터로의 비트 데이터 복사 속도가 매우 느리기 때문에 버퍼를 하나만 쓰다간 모니터에 모든 버퍼의 데이터가 복사되기 전에 먼저 다음 프레임의 비트 데이터가 버퍼에 갱신되어서 모니터에 이전 프레임의 비트 데이터가 복사되던 도중 갑자기 갱신된 현재 프레임의 비트 데이터 복사될수도 있기 때문이다. SwapChain Present 동작 원리 비트 데이터를 전부 화면에 복사한 프론트버퍼를 가리키는 포인터와 현재 프레임의 비트 데이터로 갱신된 백버퍼의 포인터가 서로 가리키고 있는 버퍼를 교체하면서 화면 복사와 다음 프레임 데이터 갱신을 이어나가게 한다. SwapChain을 만들때 BufferCount를 1개로 설정해주던데 이거는 백버퍼의 개수이고 프론트 버퍼는 개수를 지정해줄 수 없고 자동으로 한개만 생성된다

  • c++
  • directx
김도형 댓글 1 좋아요 0 조회수 503

ConstantBuffer에 대해서 질문이 있습니다.

해결됨

[게임 프로그래머 도약반] DirectX11 입문

안녕하세요 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에서 자동으로 알아서 전달해주는 건가요? 제가 궁금한게 생기면 못 넘어가는 성격이라 질문이 길어서 죄송합니다.

  • c++
  • directx
김도형 댓글 1 좋아요 0 조회수 328

렌더링 파이프라인 front buffer, backbuffer 질문

미해결

[게임 프로그래머 도약반] DirectX11 입문

RenderBegin()과 RenderEnd() 사이의 렌더링 파이프라인 단계를 거쳐서 다 그리고 나면은 _swapChain→Present함수 호출을 통해 ‘고속복사’가 발생한다고 강의에서 말씀하셨는데 조금 이해가 안되었던 부분이 매 틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()를 거치게 되는 버퍼가 _swapChain의 front buffer ↔ back buffer로 순서가 왔다 갔다 바통터치 하듯이 바뀌면서 렌더링 파이프라인이 진행되는 것인가요? 아니면 전면버퍼는 모니터 화면에 계속보여주고 backbuffer가 매틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()거쳐서 다 그려진 완성물(보여줄 데이터)을 front Buffer에 ‘고속 복사’를 하는 방식인가요? 문서를 보면 포인터로 빠르게 front buffer, back buffer를 왓다 갔다 한다는데 햇갈리네요…

  • c++
  • directx
starkshn 댓글 1 좋아요 0 조회수 560

Constant buffer 질문있습니다

미해결

[게임 프로그래머 도약반] DirectX11 입문

질문 1. Constant 상수 변하지 않는 이라고 생각하는대 offset을 변경한다는게 이해가 잘안갑니다.. 질문 2. (CPU 메모리) 버퍼를 생성하고 GPU Video Memory에 복사한다 가 맞는건가여?

  • c++
  • directx
슝슝이 댓글 1 좋아요 0 조회수 515

JPA 최적화 강의 수강 후, 개인 프로젝트 수행하면서 생긴 질문입니다.

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요. JPA 최적화 강의를 수강하고, 개인적으로 DDD를 책으로 공부해본 후에 개인 토이 프로젝트를 진행하던 중, 뜻밖에 의문이 생겼는데 여쭐 곳이 없어서 이렇게 질문 올리게 되었습니다. 맨 땅에 헤딩으로 이런저런 강의, 책, 다른 분들의 소스를 참고 하려다보니 여러 개념이 뒤섞여서 혼동이 옵니다.. ㅠㅠ 현재 프로젝트에서는 크게 에그리거트를 CUSTOMER, EXTERNAL, SECURITYMEDIA 3개로 나누어 설계했는데요. 강의에서도, 책에서도 DOMAIN 계층에 있는 서비스는 해당 도메인에 대한 순수한 CRUD를 수행하는 것으로 보았습니다. DDD 책에서는 여러 에그리거트가 필요로 하는 기능을 구현할 때는 도메인 서비스로 구현하라고 이야기 했구요. 처음에는 책에서 조언하는 대로 도메인 서비스로 구현해보고자 하다가, 좀처럼 구현이 안되어서 다른 분들이 구현한 소스를 참조하다 보니 application(응용)영역을 FACADE라는 상위 계층을 두는 것을 방식을 알게 되었습니다. 소스를 따라가보니 각 애그리거트의 DOMAIN 영역에 있는 서비스를 주입하여, 각 도메인 영역에 있는 서비스를 적절히 호출하기에 책에서 본 도메인 서비스와 같은 역할을 하겠구나 하여,, 해당 프로젝트 구성 방식을 따라 개발해보기로 했습니다. 그런데 개발을 하다보니,, 참조하는 소스에서 메소드 단위의 트랜잭션의 적용을 facade 영역이 아닌, 도메인 영역의 서비스 구현체에서 하는 것을 알게 되었습니다. 제가 개발하고자 기능은 여러 애그리거트를 생성, 변경하는 하나의 행위가 하나의 트랜잭션으로 묶여야 하는데 말이죠. 이러한 이유 때문에 현재 소스는 FACADE에서는 하나의 도메인 영역의 서비스를 주입하여 하나의 메소드를 호출하도록 되어있고, 도메인 영역에 있는 해당 서비스의 구현체에서 여러 애그리거트의 서비스, 레포지토리를 주입받아 하나의 메소드에서 트랜잭션 단위로 수행하도록 구현되어있습니다.. @Service @RequiredArgsConstructor public class SecurityMediaFacade { private final SecurityMediaService securityMediaService; public SecurityMediaInfo.Main registerOtp(SecurityMediaCommand.RegisterSecurityMediaRequest req) { //디지털otp 발급 // 디지털 otp 발행 return securityMediaService.issueSecurityMedia(req, SecurityMediaType.DIGITAL_OTP); } ... } public interface SecurityMediaService { public SecurityMediaInfo.Main issueSecurityMedia(SecurityMediaCommand.RegisterSecurityMediaRequest req, SecurityMediaType type); ... } @Slf4j @Service @RequiredArgsConstructor public class SecurityMediaServiceImpl implements SecurityMediaService { private final CustomerReader customerReader; private final SecurityMediaStore securityMediaStore; private final TokenStore tokenStore; private final ExternalClientService externalClientService; @Override @Transactional public SecurityMediaInfo.Main issueSecurityMedia(SecurityMediaCommand.RegisterSecurityMediaRequest req, SecurityMediaType type) { // 요청고객 찾기 Customer customer = customerReader.findCustomerByRnn(req.getRnn()); SecurityMedia newOtp = null; if(!customer.existActiveSecurityMedia()) { // otp 신규 SecurityMedia initOtp = req.toEntity(SecurityMediaType.DIGITAL_OTP, customer); newOtp = securityMediaStore.store(initOtp); // 토큰 발급 요청 Token newToken = externalClientService.getToken(customer, newOtp); newOtp.addToken(newToken); tokenStore.store(newToken); } return new SecurityMediaInfo.Main(newOtp); } 위에는 프로젝트의 구성인데.. 첫 단추부터 잘못 끼운 것도 같아서 시작 단계인 지금에서라도 좀 개선을 해보려고 하는데요. 사실 도메인 서비스가 제가 의도로 하는 여러 애그리거트의 서비스 기능을 묶어서 하는 건지 아무리 읽어봐도 혼선이 옵니다. 혹시 DDD 책에서 이벤트라는 개념이 나오는데 도메인 서비스가 아니라, 이 이벤트를 통해 다른 애그리거트의 응용 서비스를 호출하도록 핸들링 하는게 올바른 방법일까요? 지금과 같은 구조를 유지해도 된다면.. facade 영역의 메소드를 트랜잭션으로 묶고, 각 도메인 계층의 서비스들에서 선언된 해당 도메인에 대한 crud 메소드를 적절히 호출해가면서 facade 영역에서 비즈니스 로직을 처리해도 될까요? 너무 글이 장황하고 기네요.. ㅠㅠ 혹시 도움을 주신다면 너무나도 감사드리겠습니다.

  • java
  • spring
  • spring-boot
  • jpa
인생은회전목마 댓글 1 좋아요 0 조회수 510

버텍스 버퍼를 잘이해못한거같습니다

미해결

[게임 프로그래머 도약반] DirectX11 입문

현재 정점4개를 만든이유는 단순 2D 이미지 띄우기 위함인가여? 3D 모델의 정점은 모델 마다 다를테니 정점 데이터를 읽어 오는 방식으로 동작 하는 건 가여?

  • c++
  • directx
슝슝이 댓글 1 좋아요 0 조회수 523

Animation 보간 관련 질문드립니다

미해결

[게임 프로그래머 도약반] DirectX11 입문

애니메이션 보간 결과물이 너무 어색해 생각해보니 각 키프레임 데이터에서 꺼내온 SRT를 보간 한 후에 애니메이션 트랜스폼을 결정해줘야 의도처럼 되더라구요. 근데 애니메이션의 Transform을 SRV로 만들어 셰이더로 던져줘서 보간 계산을 할 수 있는 적절한 위치를 모르겠습니다. 셰이더에서 하기에는, BONE INDEX를 처음부터 돌면서 현재 프레임의 Transform을 구하는 동일한 과정을 vertex마다 계속 하게되고, CPU에서 처리하기에는 텍스처를 사용하는 의미가 퇴색되는 것 같아 질문드립니다. Transform을 Texture화 하면서 정확한 보간을 할 수 있는 방법이 있나요

  • c++
  • directx
정윤성 댓글 1 좋아요 0 조회수 412

비쥬얼스튜디오에서 디버그할땐 실행되는대 exe파일로는 실행이안되요

미해결

[게임 프로그래머 도약반] DirectX11 입문

1.실행파일로 시작했을때 오류 2.비쥬얼스튜디오에서 디버그 했을때 모습 제가 잘못한건지 보려고 선생님 프레임워크 실행해봐도 똑같은 문제가 납니다 장치 생성하는 라인인거같은대 왜다른걸까요..?

  • c++
  • directx
슝슝이 댓글 1 좋아요 0 조회수 1283

객체가 스스로의 리스트를 가지고, 양방향 매핑을 해도 될까요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 악! 스프링 웹 개발은 즐거워! 김영한 선생님 질문있습니다. 선생님의 두 로드맵을 거의 다 듣고 그를 바탕으로 포폴용 게시판을 만들어보고 있습니다. 와중 댓글과 대댓글 기능을 구현하는 과정에서 Comment라는 객체를 만들고 객체의 타입을 Comment와 reply로 나누었습니다. 특정 게시판에 관한 데이터를 불러올 때 댓글과 대댓글을 편리하게 불러오기 위해 타입이 Comment인 객체가 reply에 해당하는 객체를 리스트로 갖도록 설계했습니다. 이후 테스트를 진행해보았는데 fetch join을 통한 데이터 로드는 문제 없이 진행되었습니다. 다만 이러한 설계 방식이 올바른지에 대한 질문을 스스로 해결할 수 없어서 글 남깁니다. 아래는 코드와 테스트 코드 및 실행 결과이고, 마지막에 질문이 있습니다. package toy.board.domain.post; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.util.StringUtils; import toy.board.domain.BaseDeleteEntity; import toy.board.domain.user.Member; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) @EqualsAndHashCode(callSuper = true) public class Comment extends BaseDeleteEntity { public static final int CONTENT_LENGTH = 1000; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "comment_id", nullable = false) private Long id; @Column(name = "content", nullable = false, length = CONTENT_LENGTH) private String content; @Column(name = "type", nullable = false, updatable = false) private CommentType type; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "post_id", nullable = false, updatable = false) private Post post; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", nullable = false, updatable = false) private Member member; @OneToMany(mappedBy = "parent") private List<Comment> replies = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_comment_id", updatable = false) private Comment parent; /** * 양방향 관계인 Member와 Post에 대해 자동으로 양방향 매핑을 수행한다. */ public Comment( @NotNull final Post post, @NotNull final Member member, @NotNull final String content, @NotNull final CommentType type ) { this.post = post; this.member = member; this.content = content; this.type = type; } public boolean update(final String content) { if (!StringUtils.hasText(content)) { return false; } this.content = content; return true; } public void leaveReply(Comment reply) { if (areTypesCorrectThisAnd(reply)) { throw new IllegalArgumentException("주어진 댓글과 대댓글의 타입이 올바르지 않습니다."); } if (hasComment(reply)) { throw new IllegalArgumentException("대댓글이 이미 다른 댓글에 포섭되어 있습니다."); } if (isNew(reply)) { throw new IllegalArgumentException("댓글이 이미 해당 대댓글을 포함하고 있습니다."); } this.replies.add(reply); reply.parent = this; } private boolean isNew(Comment reply) { return this.replies.contains(reply); } private static boolean hasComment(Comment reply) { return reply.parent != null; } private boolean areTypesCorrectThisAnd(Comment reply) { return this.type != CommentType.COMMENT || reply.type != CommentType.REPLY; } } @Transactional @DisplayName("comment가 List<comment>를 갖고, fetch join으로 가져올 수 있는가?") @Test public void comment_has_comments_fetch_join() throws Exception { //given Member member = Member.builder( "member", new Login("password"), Profile.builder("nickname").build(), LoginType.LOCAL_LOGIN, UserRole.USER ).build(); em.persist(member); Post post = new Post(member, "title", "content"); em.persist(post); Comment comment = new Comment(post, member, "comment", CommentType.COMMENT); em.persist(comment); for (int i = 0; i < 5; i++) { Comment reply = new Comment(post, member, "reply" + String.valueOf(i), CommentType.REPLY); comment.leaveReply(reply); em.persist(reply); } em.flush(); em.clear(); //when QComment reply = new QComment("reply"); List<Comment> findComments = queryFactory .selectFrom(QComment.comment) .leftJoin(QComment.comment.replies, reply).fetchJoin() .where( QComment.comment.post.id.eq(post.getId()), QComment.comment.type.eq(CommentType.COMMENT) ) .fetch(); System.out.println("============================================="); for (Comment findComment : findComments) { System.out.println("findComment.getId() = " + findComment.getId()); System.out.println("findComment.getContent() = " + findComment.getContent()); } //then Comment findComment = findComments.get(0); for (Comment findReply : findComment.getReplies()) { System.out.println("findReply content = " + findReply.getContent()); } } [테스트 실행 시 create query] create table comment ( is_deleted boolean default false not null, type tinyint not null check (type between 0 and 1), comment_id bigint generated by default as identity, created_date timestamp(6), deleted_date timestamp(6), last_modified_date timestamp(6), member_id bigint not null, parent_comment_id bigint, post_id bigint not null, content varchar(1000) not null, created_by varchar(255), last_modified_by varchar(255), primary key (comment_id) ) [테스트 실행 결과] select c1_0.comment_id, c1_0.content, c1_0.created_by, c1_0.created_date, c1_0.deleted_date, c1_0.is_deleted, c1_0.last_modified_by, c1_0.last_modified_date, c1_0.member_id, c1_0.parent_comment_id, c1_0.post_id, r1_0.parent_comment_id, r1_0.comment_id, r1_0.content, r1_0.created_by, r1_0.created_date, r1_0.deleted_date, r1_0.is_deleted, r1_0.last_modified_by, r1_0.last_modified_date, r1_0.member_id, r1_0.post_id, r1_0.type, c1_0.type from comment c1_0 left join comment r1_0 on c1_0.comment_id=r1_0.parent_comment_id where c1_0.post_id=? and c1_0.type=? ===================== findComment.getId() = 1 findComment.getContent() = comment findReply content = reply0 findReply content = reply1 findReply content = reply2 findReply content = reply3 findReply content = reply4 [질문] 제가 궁금한 것을 자세히 말하자면, 테이블이 만들어질 때, comment 테이블의 특정 row(대댓글인 컬럼)가 해당 테이블의 다른 row(댓글인 row)의 PK값을 FK로 갖는데, 댓글에 해당하는 row는 객체가 생성되고 DB에 저장될 때 해당 컬럼에 null이 저장됩니다. 이는 Comment 객체의 ID에 @GenerateValue 설정을 주어서 그렇습니다. 위의 상황은 실무에서 사용할만큼 적절한가요? 아니라면 대안이 있을까요? jpa와 관련된 질문을 읽다보니, 다대일 관계에서 left join fetch의 경우 where문의 결과에 따라 데이터 일관성의 오류가 나타날 수 있다는 답변이 있었습니다.(해당 글: https://www.inflearn.com/questions/15876/fetch-join-%EC%8B%9C-%EB%B3%84%EC%B9%AD%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4 ) 제가 작성한 테스트 코드의 쿼리문은 일대다 관계에서 일에 해당하는 엔티티에 별칭을 주어 where문을 적용한 것이므로 일관성의 문제가 발생하지 않는다고 생각했는데 이것이 옳은 생각인가요? 마지막으로 쿼리의 복잡도와 쿼리 개수는 trade off 관점에서, 특정 게시물에 관한 데이터를 반환해야 하는 api 요청이 들어왔을 때, 게시물과 댓글 엔티티가 단방향 관계일 경우 게시물에 관한 데이터와 댓글 및 대댓글에 관한 데이터를 각각의 저장소를 통해 가져오는 것이 좋을까요 혹은 쿼리가 다소 복잡해지더라도 한 번에 가져오는 것이 좋을까요? 아니면 단방향 관계를 양방향으로 만드는 것이 더 나은 선택일까요? 혼자 공부하니 올바른 방식을 찾는게 참으로 어려운 것 같습니다. 답변 기다리겠습니다. 감사합니다.

  • java
  • jpa
김민규 댓글 1 좋아요 0 조회수 388

카메라 위치에 따른 색상 변화

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

카메라가 light의 volume mesh 안에 있는 경우와 밖에 있는 경우에 따라 오브젝트의 색이 변합니다. 안에 있는 경우 어두워지고, 밖에 있는 경우 밝아집니다. 정확한 원인을 모르겠습니다. 혹시 알려주실 수 있나요?

  • directx
  • 게임수학
김원래 댓글 1 좋아요 0 조회수 452

선행 강의 수강 질문

미해결

[게임 프로그래머 도약반] DirectX11 입문

안녕하세요. 이번에 신규가입 얼리버드 25% 할인으로 DirectX11 강의를 구매해서 수강 중인 학생입니다. 강의를 들어보니 Windows API와 STL 부터 선행이 필요하다고 생각이 들어 [게임 프로그래머 입문 올인원] 강의도 수강하려고 했는데 할인 기간이 종료되었더군요... 혹시 [게임 프로그래머 입문 올인원] 할인쿠폰을 받아 수강할 수는 없는 지 문의드립니다.

  • c++
  • directx
레일레이 댓글 1 좋아요 0 조회수 369

연결요소개수 - 파이썬 풀이 공유

해결됨

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

안녕하세요 저는 강사님 강의로 공부하고 파이썬으로 코테를 준비하고 있습니다. 저와 같은 상황에 계신분들과 공유하고 싶어 글을 올립니다. 파이썬 풀이에서 부족한 부분 알려주시면 수정하겠습니다.~ import sys sys.setrecursionlimit(10 ** 6) N, M = map(int, sys.stdin.readline().split()) MAX = 1000 + 10 graph = [[False for in range(MAX)] for in range(MAX)] visited = [False for in range(MAX)] for in range(M): x, y = map(int, sys.stdin.readline().split()) graph[x][y] = True graph[y][x] = True def dfs(idx): visited[idx] = True for j in range(1, N + 1): if not visited[j] and graph[idx][j]: dfs(j) cnt = 0 for i in range(1, N + 1): if not visited[i]: dfs(i) cnt += 1 print(cnt)

  • 코딩-테스트
  • 알고리즘
  • dfs
  • python
8055kjh 댓글 1 좋아요 1 조회수 335

Part1: C++ 프로그래밍 입문 강의듣고 넘어왔습니다

미해결

[게임 프로그래머 도약반] DirectX11 입문

질문 1. [게임 프로그래머 도약반] DirectX11 입문 들어 가기 전 혹시 미리 공부해가야 되는 것 이 있을까요? 질문 2. 다이렉트x가 처음이라면 물방울책 구매해서 섹션 11부터 시작하는게 좋을까요?

  • c++
  • directx
슝슝이 댓글 1 좋아요 0 조회수 498

좋아요나 조회수 등 동시성 처리 질문입니다.

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

사용자가 많지 않고 일반 커뮤니티 같은 경우에는 좋아요 개수가 많이 몰릴 일이 없다고 생각해서 PessimisticLock을 적용하려고 합니다. 제가 생각했을 땐 인스타나 그런 대규모 사이트의 좋아요는 PessimisticLock을 적용하면 성능 저하가 뚜렷하게 나타난다고 생각합니다. -> 레디스 사용이 베스트 토이프로젝트 규모의 SNS는 PessimisticLock으로 구현하는게 비용도 들지 않고 데이터 정합성이 보장된다고 판단했습니다. 혹시 제가 틀린 거나 더 나은 방법이 있을까요? 항상 감사합니다! 아 추가로 newFixedThreadPool은 왜 32로 설정하는지도 궁금합니다!!

  • java
  • spring
  • 동시성
진짜 잘하고싶다 댓글 1 좋아요 1 조회수 954

SwapChain이 만들어질때 생성되는 버퍼 생성 영역

해결됨

[게임 프로그래머 도약반] DirectX11 입문

강의를 보다 렌더링 될때 입력될 Vertex 데이터가 그래픽 카드 내부에 있는 VRAM 내부에 생성된다는 사실을 알게되었니다. 그래서 궁금한게 생겼는데 혹시 Swap Chain이 만들어질때 생성되는 백 버퍼들또한 VRAM 내부에 만들어지는 건가요? 아니면 RAM에 만들어지는 건가요?

  • c++
  • directx
김도형 댓글 1 좋아요 0 조회수 382

CreateInputLayout 도중 Offset 관련하여

미해결

[게임 프로그래머 도약반] DirectX11 입문

강의를 듣고 있는 도중 질문이 하나 생겼습니다 강의 16:05 부분입니다. 강사님께서 CreateInputLayout을 하기 위해 이전 작업으로 D3D11_INPUT_ELEMENT_DESC라는 구조체를 만드셨고 내부의 요소로 UINT AlignedByteOffset; 이러한 변수가 있었습니다. 강의에서 강사님께서 이 부분은 변수가 시작되는 지점을 적는 변수라고 알려주시고 Color가 시작되는 지점이 12Byte라고 하셨는데 이 D3D11_INPUT_ELEMENT_DESC라는 구조체로 설명하려하는 것이 이 전에 선언해두었던 struct Vertex { Vec3 position; Color color; }; 라는 구조체였다면 구조체의 메모리 패딩에 따라 제일 큰 변수의 메모리 크기씩 영역이 쪼개져서 16Byte씩 끊어지니깐 position은 0 ~ 12구간 그리고 12 ~ 16 구간은 메모리 패딩으로 인해 비어져 있고 16 ~ 32까지가 color가 있는 구간으로 알고있었습니다 그래서 제가 잘못 생각하고 있는건가해서 12대신 16을 넣어봤는데 정상적인 색이 안나오지 않더라고요. 제가 개념을 잘못 알고있는건가 아니면 제대로 알고 있는데 이 부분만 특수한 케이스로 12라고 입력이 된건가를 잘 모르겠어서 개념을 확실히 잡고 가야된다고 생각해서 질문 드립니다 혹시 어디가 잘못된 건지 알려주실 수 있으신가요?

  • c++
  • directx
김도형 댓글 1 좋아요 0 조회수 418

완전탐색 강의 1090번 문제 풀이 방법 의문

미해결

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

완전탐색 강의 마지막 문제 1090번 문제 풀이 방법에 의문이 생겨서 질문 올려봅니다. 강의에서는 우리의 집 중에서 한 곳에 모이면 된다고 풀이를 하셨는데, 예시에 나온 4 15 14 15 16 14 15 16 15 4명이 모이기 위한 최적의 장소는 (15,15)입니다. 백준에서도 이것이 정답 좌표이고. 그래서 혹시 제가 1번 2번 3번 아이디어를 이해하는데에서 잘못 이해한 부분이 있을까 싶어 질문을 올립니다. (15 14) (15 16) (14 15) (16 15) 중에 하나에 모인다는 말이 아닌것인가요?

  • python
  • 코딩-테스트
  • 알고리즘
migaele98 댓글 2 좋아요 4 조회수 987

Tessilation 질문입니다

미해결

[게임 프로그래머 도약반] DirectX11 입문

tessilation 을 통해서 displacement mapping 을 좀 복잡한 mesh 에 적용을 해봤는데 gpu 가 갈리는 소리가 나서요. 아무래도 삼각형 개수가 기하급수적으로 늘다보니 gpu load 가 클거 같은데 tessilation 이 실제로 필요사양이 높은가요? 그리고 현업에서도 tessilation 사용하는데 제약이 많은지 궁금합니다.

  • c++
  • directx
밍캬캬 댓글 1 좋아요 0 조회수 190

fetch join alias

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

fetch join 시 alias를 사용해서 필터링하는게 왜 안되는걸까요? 이거에 대한 답변으로 디비상태와 객체상태의 일관성이 깨지게 됨을 보통 얘기하시는것같아요 alias를 사용해서 필터링해버리면 실제 디비에 있는 데이터보다 적은 개수가 나오게 되니까요. 근데 어차피 그 필터링된 결과만을 결과로 리턴해주어야한다면 사용해도 괜찮을 것 같은데 디비상태와 객체상태의 일관성이 깨지는게 왜 문제가될까요? 그래서 생각을 해봤는데 크게 다음인것같아요 - 유지관리어려울 수 있음 - 캐싱문제 근데 저 두 문제가 정말 큰 문제가 되는지를 잘 모르겠어요...; 유지관리 어려울수야 있겠지만 그렇게 까지 어려울지도 잘 모르겠고, 캐싱문제(쿼리결과캐싱)도 저 코드에 의해 영향이 얼마나 많이 갈지..도 잘 모르겠어요 저 유지관리/캐싱 문제가 아니라.. 2차캐시때문인가요? 예를들어서 team과 member가 일대다 연관이고 team을 select해온다는 sql이 있다고 가정 1. fetch join + on 절 : 디비에 있는 일부 데이터 불러옴 2. fetch join 만있어서 디비에있는 모든 데이터 불러옴 하나의 트랜잭션에서 1호출 뒤에 2를 호출하면 디비에 쿼리를 날리긴하지만 이미 team_id에 해당하는 객체가 영속성 컨텍스트에있어서 가져온거버림 그래서 추후에 문제가생길 수 있음 --- 인건가요?

  • java
  • jpa
김민지 댓글 2 좋아요 2 조회수 494

인기 태그

인프런 TOP Writers

주간 인기글