while(getchar() != '\n') continue; 가 입력 버퍼에 남아있는 개행문자들을 모두 읽어들이며 입력 버퍼를 클리어해주는 것이라고 알고 있는데 왜 그런지 원리를잘 모르겠어요 getchar()에 들어가는 값이 줄바꿈 값이 아니면 다시 반복문으로 돌아가고, 줄바꿈이면 계속 한다는 뜻인 저 while(getchar() != '\n') continue; 라는 코드가 어떻게 그런 기능을 하는 건가요?
는 어떻게 하는 것이 좋은 건가요? PK이자 글 번호인 boardSeq를 가지고 와서 수정과 삭제를 진행하고 있었는데, PK는 최대한 외부로 노출하지 않는 것이 좋다고 하여서 문득 생각이 들었습니다. PK Seq를 따로 두고 UniqueKey로 똑같이 AutoIncrement해서 생성하게 된다면 결국 무슨 차이인가 싶어서 아닌 거 같기도 하고... 어떤 식으로 처리 해야 되는지 궁금하여 질문 남기게 되었습니다.
회원 A테이블과 팀C 테이블의 다대다 양방향 관계를 풀기 위해 중간 테이블을 도입하여 A, B(중간테이블), C 와 같이 일대다/다대일 관계로 풀어낼 때 A와 C 양 쪽 모두 addTemMember와 같은 메소드를 만들어주고, 회원이 팀에 들어갈 때 A.addTeamMember와 C.addTeamMember()둘 다 호출해줘야 하는 게 맞나요? 다대다 양방향 관계를 풀 때 중간 테이블을 설정하는데 이것은 따로 외부에 노출할 필요 없이, 내부적으로 회원 A가 어떤 팀에 속해있는지, 팀C에 어떤 회원이 속해있는지 확인할 때만 사용하는 것이 맞나요?
강의 내용을 보면 상품 목록 화면에서 item.id 값을 뿌려주고 있습니다. 이건 DB 에 저장된 item 테이블의 PK 값 일텐데, 문득 이런 생각이 들었습니다. DB 데이터 관리를 위한 PK 를 클라이언트 단에 노출시켜도 되나요? (가급적 엔티티 객체를 클라이언트 단에 직접 노출시키지 말라고 하셔서, 이것도 비슷한 맥락으로 숨겨야되지 않을까 해서요)
#include <stdio.h> #include <stdalign.h> int main(void) { printf("Alignment of char = %zu\n\n", alignof(char)); char ca; printf("&ca : %p %lld\n", &ca, ((long long)&ca) % 8); printf("&ca : %p %lld\n", &ca, ((long long)&ca) % 16); printf("\n"); char _Alignas(int) cb; printf("&cb : %p %lld\n", &cb, ((long long)&cb) % 8); printf("&cb : %p %lld\n", &cb, ((long long)&cb) % 16); printf("\n"); char alignas(8) cc; printf("&cc : %p %lld\n", &cc, ((long long)&cc) % 8); printf("&cc : %p %lld\n", &cc, ((long long)&cc) % 16); return 0; } [결과] alignas(n) 를 지정하면 주소가 n 의 배수인 메모리 위치에 객체를 할당하도록 하는 것은 이해했습니다. 첫 번째 줄의 출력에서 따로 정렬을 지정하지 않은 ca 는 정렬 값이 1인 것은 확인했습니다. 그러면 ca 의 주소를 8, 16으로 나눈 나머지가 1이므로 &ca : 00000097AA4FF614 1 &ca : 00000097AA4FF614 1 형태의 출력이 나와야 할 것 같은데 왜 4바이트로 정렬을 지정한 cb 와 결과가 같은 것인지 잘 모르겠습니다..
plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } 자바 17 로 잘되어있고 한데 자꾸 무슨 21이 보이고 웹에서는 정상 작동 하는데 테스트에서만 문제가 발생합니다. 해결 부탁드립니다. ㅠㅠ WARNING: A Java agent has been loaded dynamically (C:\Users\ㅋㅋ\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.11\f9cb566608fbac6bc7bf54901a7aa11543a989ee\byte-buddy-agent-1.14.11.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release 2024-01-31T22:27:28.360+09:00 WARN 3716 --- [ main] o.s.test.context.TestContextManager : Caught exception while invoking 'beforeTestMethod' callback on TestExecutionListener [org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener] for test method [public void hello.hellospring.sevice.MemberServiceIntegrationTest.회원가입() throws java.lang.Exception] and test instance [hello.hellospring.sevice.MemberServiceIntegrationTest@7901a5ab] java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84) ~[mockito-core-5.7.0.jar:na] at jdk.proxy2/jdk.proxy2.$Proxy112.getHandler(Unknown Source) ~[na:na] at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) ~[mockito-core-5.7.0.jar:na] at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) ~[mockito-core-5.7.0.jar:na] at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) ~[mockito-core-5.7.0.jar:na] at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) ~[spring-boot-test-3.2.2.jar:3.2.2] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) ~[spring-boot-test-3.2.2.jar:3.2.2] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) ~[spring-boot-test-3.2.2.jar:3.2.2] at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.before:na] at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:103) ~[mockito-core-5.7.0.jar:na] ... 67 common frames omitted Caused by: org.mockito.exceptions.base.MockitoInitializationException: Could not initialize inline Byte Buddy mock maker. It appears as if your JDK does not supply a working agent attachment mechanism. Java : 21 JVM vendor name : Oracle Corporation JVM vendor version : 21.0.1+12-29 JVM name : OpenJDK 64-Bit Server VM JVM version : 21.0.1+12-29 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0 at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:260) ~[mockito-core-5.7.0.jar:na] at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ~[mockito-core-5.7.0.jar:na] at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[na:na] ... 70 common frames omitted Caused by: java.lang.IllegalArgumentException: null at java.instrument/sun.instrument.InstrumentationImpl.appendToClassLoaderSearch0(Native Method) ~[na:na] at java.instrument/sun.instrument.InstrumentationImpl.appendToBootstrapClassLoaderSearch(InstrumentationImpl.java:280) ~[na:na] at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:177) ~[mockito-core-5.7.0.jar:na] ... 72 common frames omitted 2024-01-31T22:27:28.368+09:00 WARN 3716 --- [ main] o.s.test.context.TestContextManager : Caught exception while invoking 'afterTestMethod' callback on TestExecutionListen
keycloak 버전이 제일 낮은 게 20 버전이라서 저는 가장 최근 버전인 23 버전으로 사용했습니다. 23 버전 기준으로, 제가 파악한, 강의와 다른 부분입니다. 20 버전부터는 최초 로그인 할 때 동의 항목이 안 나올텐데요. 관리자 콘솔에서 Clients -> Cliend details에서 Login settings에서 Consent required를 켜면 됩니다. 엑세스 토큰 발급 이후에 userinfo 엔드포인트로 user 데이터를 요청하면 body에 아무 것도 안 나올 겁니다. 응답 헤더 살펴보면 insufficient_scope이며 Missing openid scope이라고 나오는데요. 이렇게만 써있으면 userinfo 요청할 때 param에 scope=openid 넣으면 될 것 같지만 안 됩니다. 토큰에 해당 정보가 없는 거라서, 토큰 발급 전에(code 얻어야할 때) scop에 openid를 추가하면 됩니다. http://localhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=profile email openid&redirect_uri=http://localhost:8081 공식문서 에 나와 있습니다. In case an access token is missing openid scope.
해당 강의에서 보여주시는 메모리 화면에서 메모리 주소 오른쪽에 있는 문자들은 앞에 0x가 따로 없는데도 16진수라고 하셨는데, 저 문자들은 그냥 16진수 읽기로 약속된 문자들 이라고 이해하면 될까요 ?? 그리고 그렇다면 왜 앞에 0x가 붙어있지 않은지도 알려주실 수 있나요 ??
제가 scanf("%s",stringarr)를 이용해서 콘솔 입력(키보드)에 데이터를 이용하면 1. 화면에 커서가 깜빡깜빡 거리면서 콘솔화면(모니터)창에 쓰는 값이 보이는데 이게 입력 버퍼인가요? (그리고 이러한 버퍼는 일반적으로 4kB까지 입력을 칠 수 있는 건가요?) 아니면 입력 버퍼는 저희 눈에 안보이고 "CON"이라는 파일안에 들어가 있는 건가요? 이 부분이 혼동이 옵니다. 리눅스에 man puts 를 쳐서 설명을 보니 개행 문자가 딸려온다고 써져 있습니다. puts("")로 치면 출력버퍼안에 \n이 있다는 말인가요? 그렇다면 출력 버퍼는 \n으로 인해 비워지게 된건지 궁금합니다 질문과는 다른 이야기인데 4kB는 페이지 크기도 4kB인데 이게 무엇을 기준으로 나눈 건가요?? ps/ 수업을 너무 많이 듣고 정리하면서 이러한 개념들이 혼동이 생기네요... 마음은 급하고 배울건 많고, 배운건 또 안보면 까먹고 왕도가 없네요 하하.. 항상 열심히 수업듣고있습니다. 감사합니다.
버퍼 공부하다가 궁금합니다. 제가 이해한 바로는 \n은 I/O 버퍼를 비우기 위해 사용하는 이스케이프 시퀀스 라고 이해했습니다. string에서 char Id[7] = {1} 라고 초기화를 주고 scanf("%s",Id); 이라고하고 코드를 작성합니다. 작성한 코드를 프로그램에 컴파일 한 이후 런 타임때, "null" 을 입력하고 엔터를 치면 Id의 0번 주소의 값은 n 1번 주소의 값은 u 2번 주소의 값은 l 3번 주소의 값은 l 이 됩니다. 그렇게 하고 개행 문자인 엔터를 칩니다. 이때 여기서 궁금증이 생깁니다. 버퍼안에 \0와 \n 어느 게 먼저 들어가는 건가요? \0 을 이용해서 문자열을 모두 읽었다고 표시를 한다고 이해했습니다. 이렇게 하고 엔터를 치면 개행 문자 \n이 들어가는데 실제 메모리 상에서는 null\01\n 으로 찍히는지 궁금합니다.
public: void Initialize(int iAtt) { /* 같은 클래스 내부에 선언된 함수에서는 private 멤버여도 접근가능 */ //this->iAtt = iAtt; iAtt = iAtt; iDef = 7; iHp = 100; iMp = 100; } =============아래는 메인 함수에서 출력한 코드예여=================== CPlayer Player_class; // 클래스 접근 Player_class.Initialize(10); Player_class.Output(); CPlayer Special_Player; Special_Player.Initialize(100); Special_Player.Output(); 제가 직접 친 거라서 코드 내용은 조금 다른데욥 위 멤버 함수 Initialize 코드에서 this->, (*this)가 생략? 된 거라고 하셨자나요 this->iAtt = iAtt; 이렇게 출력하면 정상 출력이 되는데 iAtt = iAtt; 이 코드로 출력 하면 Player_class랑 Special_Player 둘 다 -858993460 이런 값이 나오더라구요! 이유가?? 멀까요???!!! 근데 멤버 함수에서 받는 파라미터? 인자 이름을 바꾸면 정상 출력이 되긴 해여
List<ContentsDtoRes> contents = queryFactory .selectFrom(ParentEntity) .leftJoin(ParentEntity.childList, childEntity) .leftJoin(childEntity.childChildEntity, childchildEntity) .where( systemDelYnEq(condition.getDelYn()), autoDelYnEq(condition.getDelYn()) ) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .transform( groupBy(systemEntity.sysId).list( new QContentsDtoRes( parentEntity.a, parentEntity.b, parentEntity.c, parentEntity.d, parentEntity.e, list( new QChildDto( childEntity.a, childEntity.b ) ), list( new QchildChildDto( childChild.a, childChild.b, childChild.c, childChild.d ) ) ) ) ); 안녕하세요 강사님. ㅎ Querydsl 의 일대다 관계에 대해서 질문이있어 올리게되었습니다. 예를들어 위와 같이 부모엔티티와 자식엔티티의 일대 다 관계가 될 경우 ParentEntity 는 존재하고 childEntity 가 없을 경우 querydsl 에서는 NPE 가 아닌 빈객체를 반환하게 되는데 아래와 같이 @QueryProject 생성자 하위에서 이렇게 빈객체를 체크하고 비워주는 작업을 할 수 밖에 없는건가요.? this.childList.addAll(childList.stream() .filter(child -> child.getId() != null).collect(Collectors.toList())); this.childChildList.addAll(childChildList.stream() .filter(childchild -> childchild.getId() != null).collect(Collectors.toList())); } 혹시 다른 방법이 있다면 어떤 방법이 있을지 궁금합니다. 항상 좋은강의 감사합니다.! 좋은하루되세요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. cascadeType.all! 일단 저장할때 자식 객체를 다 담은 후 이후 부모 를 repository.save (부모) 하면 자식도 함께 저장되는 것을 강의 내용을 통해서 확인했습니다. 그러면 혹시 이 과정에 대해서는 어떻게 생각하시나요 Program program = programRepository.findById(reviewSaveDto.getProgramId()) .orElseThrow(() -> new NotFoundException(ErrorCode.PROGRAM_NOT_FOUND)); Review review = Review.builder() .content(reviewSaveDto.getContents()) .user(user) .program(program) .rating(reviewSaveDto.getRating()) .genre(usersFirstGenre.getName()) .build(); program.addReview(review); 보시면 program 을 리포지토리에서 찾아와서 Review 를 직접 생성한 후 addReview(review) 를 통해서 저장합니다. @OneToMany(mappedBy = "program", cascade = CascadeType.ALL, orphanRemoval = true) private List<Review> reviewList = new ArrayList<>(); public void addReview(Review review) { this.reviewList.add(review); 당연히 cascade가 발라져있고요!. 이러면 코드는 정상동작합니다. 저는 뭔가 ReviewRepository에서 program 세팅하고 이러는 것 보다 위 방법이 더 뭐랄까 직관적이다?(프로그램.addReview가 직관적이라는 느낌) 이라서 이 것을 애용했는데 성능 상의 문제점이라던가 이런게 있을지 궁금합니다. addReview 를 한다고 바로 저장되지 않고 트랜잭션이 끝날때 변경 감지를 통해서 실행되는것 같은데(뇌피셜입니다) . 이렇게 해도 괜찮을지 궁금해요!!! 영한님!!!
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
아마존 리눅스 2023으로 인스턴스를 사용했을 때 지면님과 강사님께서 알려준 el9 버전 레포지토리를 사용하는 명령어 sudo dnf install <https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm> sudo dnf install mysql-community-server 이렇게 하여도 저는 계속 sudo dnf install mysql-community-server 해당 명령어를 통해 설치하려고 하면 The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. 이런 오류가 발생하였습니다. 계속 키가 옳지 않다는 오류가 생겼고 챗지피티랑 구글링을 통해 이것저것 해보다가 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 sudo yum update 위의 두 명령어를 실행하고 sudo dnf install mysql-community-server 해당 명령어로 재설치 해주니 제대로 설치가 되었습니다! 제 추측으로는 KEY를 다시 받아오고 yum update 하는 과정이 필요했던 것 같습니다! 저와 같은 오류를 가지는 분들에게 도움이 되었으면 좋겠네요...!!!
안녕하세요 선생님, 동기 파일 입출력을 설명해주시면서 64KB 단위로 파일을 읽어오는 이유에 대해 말씀해주셨는데, OS가 Page들을 할당한 후에 그 Page들을 묶어서 관리하는 크기의 단위가 64KB이어서 파일에서 읽어온 데이터를 저장할 버퍼가 특정 Page의 시작 주소부터 16개의 Page에 연속 되도록 데이터를 저장하기 위함으로 이해하면 될까요?
fetchResults(), fetchCount()가 deprecated됐는데 강의에서 fetchResults()가 사용되는 QueryResults<Member> queryResults = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) .limit(2) .fetchResults(); 이런 코드들은 어떻게 바꿔야 하나요? 강의자료에 나와있지 않은 것 같습니다.
안녕하세요. 장치파일이 곧 드라이버를 구성요소 중 하나라고 봐도 될까요? 드라이버를 조작하기 위한 인터페이스로 느껴지는데요. 제대로 이해하고 있는것인지 궁금합니다. 아니라면, 드라이버와 장치 파일의 차이점이 궁금하고 각각 어떤 레벨에 위치하고 있는지 궁금합니다. 또한 필터를 통한다음 허용된 명령어일 경우에만 장치파일을 접근할 수 있는건지도 궁금합니다.