JobQueue Flush함수 질문있습니다.
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
jobQueue에 데이터를 넣고 뺄 때 lock을 걸어야하는 것은 이해가 되는데 action에 데이터를 넘겨받고서는 lock이 풀린상황이니 invoke하기 전에 다른 스레드가 action을 바꿔치는 경우도 가능하지 않을까 하는 생각이 들어서 질문드립니다.
- C#
- unity
- network
172만명의 커뮤니티!! 함께 토론해봐요.
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
jobQueue에 데이터를 넣고 뺄 때 lock을 걸어야하는 것은 이해가 되는데 action에 데이터를 넘겨받고서는 lock이 풀린상황이니 invoke하기 전에 다른 스레드가 action을 바꿔치는 경우도 가능하지 않을까 하는 생각이 들어서 질문드립니다.
해결됨
실전! Querydsl
안녕하세요! 초보개발자 명아주입니다. QueryProejction 사용 시, DTO가 QueryDSL 에 의존적인게 단점이라고 하셨습니다. 그 외에는 컴파일 레벨에서 체크할 수 있다는게 정말 큰 장점인 것 같습니다. 그래서 혹시 의존성을 갖지 않으면서 이걸 사용할 방법이 없을까? 라는 의문으로 한가지 테스트를 해보고 찾은 해결 방법은 CustomQUserDto 를 직접 만들어서 쓰면 어떨까 싶습니다. CustomQUserDto는 레포지토리 계층에서만 쓰고, 반환값은 UserDto로 나가니까 서비스에서는 CustomQUserDto를 몰라도 상관이 없을것 같다고 생각했습니다. package study.querydsl.repository.dto ; import com.querydsl.core.types.ConstructorExpression ; import com.querydsl.core.types.Expression ; import com.querydsl.dto.UserDto ; public class CustomQUserDto extends ConstructorExpression<UserDto> { public CustomQUserDto (Expression<String> name , Expression<Integer> age) { super (UserDto. class, new Class<?>[]{String. class, int . class } , name , age) ; //혹은 심플하게 super(UserDto.class, name, age); 라고 해도 됩니다. } } 샘플코드는 자동생성된 QMemberDto를 참고해서 이렇게 짜봤습니다. serialVersionUID는 어떻게 처리해야될지 몰라서 없앴고 없어도 테스트 상에서는 문제없었습니다. @Test public void findUserDtoByManualQueryProjection () throws Exception { //given //when List<UserDto> result = query .select( new CustomQUserDto( member . username , member . age )) .from( member ) .fetch() ; //then for (UserDto userDto : result) { System. out .println( "userDto = " + userDto) ; } } 위처럼 테스트를 진행해봤을때 정상적으로 동작하는걸 확인했는데요. 혹시 이런식으로 QueryProjectionDto를 수동으로 만들어서 사용하시는 경우가 있으신지 궁금합니다. 감사합니다. 명아주 드림 새해 복많이 받으세요~~~~ p.s 한가지 질문드리고 싶은점이 있는데, 강의들으면서 따라 치는 코드를 깃허브에 올리고 있는데 혹시 문제가 된다면 비공개 레포로 변경하려고 합니다. 답변 주시는 대로 원하시는대로 처리하겠습니다!
미해결
실전! 스프링 데이터 JPA
안녕하세요 개발자님 스프링 커리큘럼 수강중인 학생입니다. 다름이 아니라 수업중 헷갈리는 부분이 있어 질문드립니다. 제가 알기로는 일대다 관계에서 left join을 하면 데이터가 뻥튀기(?) 된다고 알고 있는데 이때 join을 안하고 count쿼리를 따로 날리면 의도한 갯수가 안나올것 같다는 생각이 들었습니다. 그럼 team을 기준으로 left join을 할때는 count query를 따로 사용하면 안되는게 맞나요?? 제가 잘 이해한건지 궁금합니다. 글 읽어주셔 감사합니다. 좋은하루 되십시오
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 영한님 서포터즈님들 V4에서 OrderQueryRepository 에 있는 findOrders 메서드에 대한 질문입니다. lazy인데 어떻게 member와 delivery가 같이 조회되는지 이해가 되질 않습니다.. m.name을 알기위해 member 엔티티를 select 해야한다고 생각을 했습니다 혹시 어느 부분이랑 제가 헷갈리는걸까요? 해당 단원 qna에서 해당 질문과 비슷한 게 있었는데 fetch join에 대해서만 말씀해주셔서 궁금해서 여쭤보게됐습니다 감사합니다 안녕하세요!! 질문 드리고 답을 기다리는 동안에 계속 찾아보고 생각해봤는데 아직 저 자신한테 납득이 안되서요,, 혹시 맞는지 여쭤보고 싶습니다 API 개발 고급 - 지연 로딩과 조회 성능 최적화 강의에서 V4를 보고왔습니다 제가 의심한 부분은 "일반적인 SQL을 사용할 대 처럼 원하는 값을 선택해서 조회"입니다. 첫 번째 쿼리에 대한 데이터는 이렇게 되어있습니다 지연로딩은 프록시 객체를 만들어서 해당 엔티티의 필드를 사용할 때 DB에서 엔티티를 조회하는 것인데, 바로 DTO를 조회하는 것은 JOIN된 DB 값에서 member의 이름, delivery address 을 바로 뽑아서 값을 가져오기 때문에 JPA에서 엔티티를 조회하지 않아도 값을 알 수 있으며, 다른 select 쿼리가 나가지 않게 되는걸까요?
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 항상 강의 잘 보고 있습니다. 다름이 아니라 연관관계 편의 메소드와 생성 메소드에 관해 궁금증이 생겨 질문을 드릴려고 합니다. Entity 필드에서 가급적이면 setter 를 지양해야 한다고 알고 있습니다. 그래서 setter 를 쓰지 않고 오직 builder 를 통해 연관관계 편의 메소드와 생성 메소드를 정의할 순 없을까 고민했습니다. 아래는 setter 를 쓰지않고 builder 만 써서 작성해본 코드입니다. <Delivery builder> @Builder private Delivery (Order order , Address address , DeliveryStatus deliveryStatus) { this . order = order ; this . address = address ; this . deliveryStatus = deliveryStatus ; } <OrderItem builder> @Builder private OrderItem (Order order , Item item , int orderPrice , int orderCount) { this . order = order ; this . item = item ; this . orderPrice = orderPrice ; this . orderCount = orderCount ; } <Order builder & createOrder> @Builder private Order (Member member , Delivery delivery , List<OrderItem> orderItems , LocalDateTime orderDate , OrderStatus orderStatus) { this . member = member ; this . delivery = delivery ; this . orderItems = orderItems ; this . orderDate = orderDate ; this . orderStatus = orderStatus ; //== 연관관계 편의 메소드 (?) ==// Delivery. builder ().order( this ).build() ; OrderItem. builder ().order( this ).build() ; } //== 생성 메소드 ==// public static Order createOrder (Member member , Delivery delivery , OrderItem... orderItems) { return builder () .member(member) .delivery(delivery) .orderItems(Arrays.asList(orderItems)) .orderDate(LocalDateTime. now ()) .orderStatus(OrderStatus. ORDER ) .build() ; } 위에서 보시다시피 Delivery 와 OrderItem 에서 builder 를 각각 생성했습니다. 그리고 Order 의 builder 안에 연관관계 편의 메소드(?)를 추가하고, 생성 메소드에서 builder 를 이용하여 order 를 빌드한 후 리턴을 시켜줬습니다. 혹시 이렇게 작성해도 별 문제 없을까요...??? 제 부족한 질문을 읽어주셔서 감사합니다...!
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderItems.size 를 테스트 할때 같은 인스턴스가 orderitem에 중복저장 되는 것 같습니다. 1이 아닌 2가 나와요. List<OrderItem> orderItems = getOrder.getOrderItems(); for(OrderItem orderItem : orderItems) { sout (orderItem); } 하니까 같은 래퍼런스값을 가진 게 2번 똑같이 나왔습니다. 어디서 발생한건지 찾을 수 없어서 질문드려요
해결됨
실전! 스프링 데이터 JPA
안녕하세요. 초보 개발자 명아주입니다. 궁금한게 있어서 문의드립니다. 제가 공부하다가 놓친걸 수도 있는데 아직 잘 이해가 안되는 부분이 하나 있습니다. 예를들어서 Member member = new Member(); member.setName("hello"); em.persist(member); member.setName("jpa"); 이런 코드가 있을때 예상 : member가 영속성 컨텍스트에 들어감 트랜잭션 종료 때, flush할때 변경감지까지 포함해서 한 번의 쿼리만 나감 insert into member values (1, 'jpa'); 실제 : insert into member values (1, 'hello'); update member set name = 'jpa'; 영속성 컨텍스트에 들어가있다가 아직 플러시 되지 않은 상태에서 변경되면 마지막에 변경된 사항으로 insert 한번만 나갈 줄 알았는데 실제 동작은 insert, 그리고 변경감지에 의한 update가 발생하더라구요. 저번에 말씀하셨던 것중 얼핏 기억나는 스냅샷? 같은 걸로 영속성에 들어간 상태를 스냅샷 찍어놓고 그거에 대한 insert 쿼리가 나가고 그 후에 변경감지를 처리하는건가요?? 궁금합니다! 감사합니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. Test 코드에서 public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; 이렇게 돼있던데요. 여기서 @Autowired로 주입을 받아야 하는 이유가 무엇인가요? 그냥 MemberRepository memberRepository = new MemberRepository(); 로 해도 될거같아서 해봤는데 에러가 나더라고요... Member 클래스는 그냥 Member member = new Member(); 이 형태로 쓸 수 있는데, MemberRepository 클래스는 어차피 예제 상황이라 싱글톤으로 안써도 되는 상황인데도 왜 굳이 의존성 주입으로만 해야하는건지 궁금합니다.
미해결
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
vector<MemoryPool*> _pools; // 메모리 크기 <-> 메모리 풀 // 0(1) 빠르게 찾기 위한 테이블 MemoryPool* _poolTable[MAX_ALLOC_SIZE + 1]; 이부분에서 결국에 _pools도 = pool을 할당하고 _poolTable도 크기에 맞게 = pool로 할당하면 _poolTable로 통합해서 사용하면 안되는지 궁금합니다.
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 강의를 듣고 복습하다가 유니크 제약조건에 대해서 궁금한 점이 생겨서 이렇게 질문을 드립니다. 책에서는 @Table(name = "Member", uniqueConstraints = @{UninqueConstraint ~~}) 이런식으로 적혀있는데 그러면 유니크 제약조건을 Member라는 테이블 에 있는 모든 colum에 거는건가요? 그리고 인터넷에서 찾아보니 @Column(unique = true)이렇게도 사용하던것 같던데 이렇게 사용하면 해당 @Column에만 유니크 제약조건을 거는 것이 맞나요?
해결됨
스스로 구축하는 AWS 클라우드 인프라 - 기본편
실습 위주 좋은 강의 항상 감사합니다. NAT 게이트웨이가 꼭 고정된 public ip(EIP)가 필요할까요? 서브넷에서 바라보는 gateway 설정만 있는데 public ip도 필요없지 않을까요?
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 대시보드의 강의자료는 버전 수정이력이 v2021-12-01로 되어있지만 PDF파일 다운받을 시 v 2022-12-01로 오타가 있습니다.
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
환경 OS : Mac M1 Pro macOS Monterey Version 12.1 Intellij : Intellij IDEA 2021.3.1(Ultimate Edition) Build #IU-213.6461.79, built on December 29, 2021 Java Version : openjdk version "11.0.11" 2021-04-20 오류 메시지 Could not load wrapper properties from '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper/gradle-wrapper.properties'. 현상 start.spring.io에서 [프로젝트 환경설정] - [프로젝트 생성] 후 Intellij에서 Open을 통해 프로젝트의 build.gradle Open - 오픈 -> 오픈시 Open as Project를 클릭 Window 10에서는 별다른 설정 없이 Gradle에서 라이브러리를 정상적으로 다운 하였으나, Mac에서는 Build 에러 발생(오류 메시지 참조) 해결을 위한 진행 사항 1. 'Could not load wrapper properties from Intellij' 키워드로 검색결과 gradle 버전 문제로 확인되었으나, 해당 프로젝트로 Window 10환경에서 정상적으로 gradle Build되어 해당 케이스 제외 2. Intellij에서 제공하는 New Project를 사용하여 Gradle 프로젝트 Build가 성공 ※ 정상적으로 build를 성공 하였으나, 원인 확인을 위한 분석 진행 분석 사항 1. start.spring.io에서 생성한 프로젝트(이하 spring)와 Intellij에서 생성한 프로젝트(이하 Intellij)의 gradle-wrapper.properties 비교 spring의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip Intellij의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.1-bin.zip 두 설정의 gradle 버전은 각 7.3.3-bin.zip과 7.1-bin.zip으로 버전차이가 있음 Case 1. Intellij 프로젝트의 설정파일을 spring 프로젝트의 설정파일로 덮어씌웠으나 동일한 에러 발생 Case 2. spring 프로젝트의 설정파일을 Intellij 프로젝트의 설정파일로 덮어씌웠으나 정상 결과 : 설정파일 또는 버전의 문제가 아님. 2. 구글링 중 Intellij와 Gradle sync에러 관련 글 확인결과 블로거가 Intellij의 log를 확인 한것을 따라 Intellij의 로그 체크결과 권한 관련 사항이 문제 에러로그 : java.nio.file.FileSystemException: '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper: Operation not permitted' [결론 및 해결 방안] 권한의 문제로 시스템 환경설정 - 보안 및 개인 정보 보호 - 전체 디스크 접근 권한 - Intellij IDEA.app 권한 부여 [질문사항] 1. 권한 허용을 하지 않아도 Intellij에서 생성된 프로젝트는 Build성공한 이유가 궁금합니다. 2. 추가로 Mac에서는 '전체 디스크 접근 권한'을 허용하고 진행하는 것인지, 혹시 환경의 문제가 있는건지 궁금합니다. 긴 질문사항 읽어주셔서 감사합니다 .
해결됨
스프링 시큐리티
선생님 안녕하세요 강의 무지 잘 보고 있습니다. 주니어 개발자 이기도 하고, 웬만해서는 security 코딩할 기회가 없다보니 소문을 듣고 찾아와서 듣게 되었습니다. 요즘 선생님이 하시는 말씀이나 답변들을 보면서 대단하다고 느끼는 중, 저도 이러한 학식을 배우고 싶어 글을 남기게 되었습니다. 다름 아니라, 혹 공부하시는 방법이 따로 있을까요?? 배워야 할건 많고 영어도 못하여 한계가 느껴져서 어떠한 방식이 있을까 싶어 연락드려봤습니다.. 제가 여러 강의는 몇번 보았는데요..타 강의 선생님이 절대 낮은 수준은 아니신데 개인적으로 한단계 레벨이 더 높은거 같아서 학습방법이라던지, 혹은 제가 따라할 수 있는 방법이 없을까 해서 연락드렸습니다.. 개인적으로는 메일로 소통하고 싶지만 바쁘신거 같아 무례를 범하는거 같지만 이렇게 공개적인 게시판에 남기게 되었습니다. ps.메일 주소 주시면...감사하겠사옵니다..ㅜㅜ올 한해도 대박 나시길 바랍니다. 좋은강의 감사합니다.
미해결
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
페이징의 최소단위가 4KB로 알려주셨습니다 그럼 클래스의 변수가 아무리 많다고 해도 1000Byte가 넘기 힘들 것 같습니다 그상태에서 최소 페이징단위인 4094Byte를 계속 할당하는 방식으로 하면 말씀하신대로 존재하지 않는 메모리는 쉽게 잡을 수 있지만 메모리 낭비가 너무 심한 것 같습니다 제가 계산을 잘못한 것인지 아니면 생각하는 방향성이 잘못된것인지 궁금합니다.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요. 스프링 기본편에서 서버 - 클라이언트 간 데이터 전달을 다음과 같이 정리해 주셨는데요. 클라이언트 -> 서버 1. Request parameter 2. HTML FORM 3. HTTP MESSAGE BODY 서버 -> 클라이언트 1. HTML 정적리소스 2. VIEW 템플릿 3. HTTP MESSAGE BODY 이번 챕터에서 배우는 HTTP API는 위의 6가지랑 비교하면 어디에 해당하는건가요?? 정리하자면, 서버 - 클라이언트 간에 데이터 전송하는 방식을 구체적으로는 알겠는데, HTTP API라는게 어디에 해당하는건지 잘 모르겠습니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] build.gradle 파일에 jdbc 라이브러리를 추가하고, Load Gradle Changes도 해보고 File -> Open -> build.gradle을 선택해서 Open as Project도 해보았는데 JdbcTemplate을 import 못하고 있습니다. 어떤 부분에 문제가 있는 건가요?
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이부분에서 Interlocked.CompareExchange 조건문에 예상값과 비교후에 +1을 해주는데 일반적인 상황은 아니겠지만 ReadCount범위를 초과하게 되면 어떻게 되는거지 라고 생각을 해보니 결국 WriteCount영역에 도달을 하게 되지만 ReadCount최대값의 +1 까지만 접근 가능하고 더이상은 WriteCount가 올랐기 때문에 더이상 접근할수 없게되고, 그 이후에 ReadUnLock() 실행이 되면 WriteCount에서 빠지고 그 뒤로는 이전처럼 동작하게 구조가 맞는거죠 이해한게 맞는지 확인하고 싶어서 글 올려봅니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요, 강의 잘 듣고 있습니다 :) 다름이 아니라, Gradle 설정 후 sourceset 으로 되지 않고 ClassPath 로 뜨더라고요. 왠만한 설정들은 다 똑같은데 버전 차이인지 모양은 조금씩 다른 것 같습니다. 그대로 진행해도 괜찮을까요? 답변 미리 감사드립니다 :)
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요 영한님 전에 들은 강의 복습하던 중에 궁금한게 있어서 질문합니다. 컴퓨터끼리 통신을 할때 인터넷 (인터네트워크 망 ) 을 통해 통신을 하고, 데이터를 보내는 컴퓨터의 경우 응용프로그램의 데이터를 패킷이라고 하는데, 응용프로그램의 소켓 라이브러를 이용해서 TCP 프로토콜을 이용하고, TCP 프로토콜 , IP 프로토콜 로 내려가면서 패킷에 헤더를 씌우고 이 헤더에는 자신의 포트번호, 상대의 포트번호 , 전송방식 등이 들어가 있다. 이러한 과정중에서 DNS 서버를 통해서 도메인 이름으로 IP 주소를 요청해서 받는 등, TCP 는 3 way handshake 등의 물리적 연결의 과정 등 의 여러 과정을 거친다. 데이터를 받는 컴퓨터의 경우 , IP 주소내의 포트번호를 통해서 데이터를 최종적으로 전달받는다고 정리할 수 있다. 라고 제 블로그에 정리를 해놨었는데 , 궁금한 점이 1. 제가 이해한 로직이 맞는지요 ? 2. TCP 계층에서 서로 논리적 연결을 하면서 패킷을 서로 주고받는데, 물리 계층에 내려가서까지는 데이터를 그러면 전송하지 않는것인지? 감사합니다