입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
현재 강의는 ExperienceRepository코드를 테스트하는 코드인데 interface HttpInterfaceRepository : JpaRepository<HttpInterface, Long>{ fun countAllByCreatedDateTimeBetween(start: LocalDateTime, end: LocalDateTime): Long } 제가 이런식으로 HttpInterfaceRepoistory에 사용자 정의 메서드이름을 잘못 설정했어서 테스트 코드 실행중에 오류가 발생하여 이런식으로 실행이 안되었습니다. HttpInterfaceRepository와 관려 없는 코드 같은데 왜 오류가 발생하는 건가요? 그리고 저 오류를 발견해서 HttpInterfaceRepository 를 수정하고 실행을 하니 정상적으로 실행은 되었는데 이 경고가 뜹니다 이건 어떤건가요? 프로젝트 리포지토리 테스트가 계속 실패하는데 왜 그런건가요? https://drive.google.com/file/d/1s2JngsdGhN_iOUf6llkkcUwwISIuCTUp/view?usp=sharing 구글 드라이브에 소스코드 압축해서 업로드 했습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 현재 수강을 계속하면서 공부하고 있는데요 예를 들어 날짜와 시간 챕터를 다 보고 이제 복습을 하려고 하는데 PDF보면서 코드를 따라치면서 복습을 하고있는중입니다. 이렇게 복습하는게 효율적인가 궁금하고요. 한번보고 복습주기를 어느정도로 해야하는지도 알고 싶습니다.
sql distinct는 완전히 같은 것의 중복을 제거해준다고 배웠습니다. id를 사용한다는 가정에서 완전히 같을 경우가 존재할 수 있나요? jpql distinct 키워드는 sql distinct에 더불어 엔티티 중복을 피하게 해주는데 sql distinct는 필요없는 과정이 아닌가 싶었습니다.
자주 하는 질문 + 강의 자료를 종합해봤을 때 Querydsl 설정이 크게 다음 3가지로 나뉘는 것 같더라고요. 2.x 버전 / dependencies 바깥에 설정 plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } 2.x 버전 / dependencies 안에 설정 dependencies { //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } clean { delete file('src/main/generated') } 3.x 버전 / dependencies 안에 설정 dependencies { //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } clean { delete file('src/main/generated') } 2.x 의 경우 선택지가 2가지가 되는 데 왜 강의에선 1번 케이스를 선택했던 건지 궁금합니다! 2번 선택지가 더 깔끔한 거 아닌가요 ?
1:57에서 '나눈 이후의 몫을 원할 때' 사용하는 연산자가 /라고 하셨습니다. c언어 기준으로 설명해 주신 걸로 이해했는데 (파이썬은 /을 쓸 시 나누어 떨어질 때까지 계산한 값, 혹은 무한소수를 끊어 출력하고 정수 몫을 원할 시 //을 써야 하니까요) 혹시 자바도 c언어와 연산자가 동일한가요? 코딩을 배우기는 하나 컴공만큼 깊게 들어가는 과는 아니라 자바를 배운 적이 없어 질문드립니다.
숫자를 일일이 포문을 통해 소수를 구하는게 비효율적인 것 같아 다음과 같이 풀어봤는데,, 어떤지 의견이 궁금합니다. import java.util.Scanner; public class Main { public static void main(String[] args){ Main main = new Main(); Scanner sc = new Scanner(System.in); int number = sc.nextInt(); int[] numbers = new int[number]; for(int i = 0; i < number; i++){ numbers[i] = sc.nextInt(); } main.solution(number, numbers); } public void solution(int number, int[] numbers){ // get reversed array int biggest = 0; // get biggest number for prime int[] reversedArr = new int[number]; for (int i = 0; i < number; i++) { int tmp = numbers[i]; int res = 0; while (tmp > 0) { int t = tmp % 10; res = res * 10 + t; tmp /= 10; } reversedArr[i] = res; if (res > biggest) biggest = res; } // prime logic by biggest number boolean[] prime = new boolean[biggest + 1]; // add 1 for including 0 --> it means index number is same as each value; prime[0] = prime[1] = true; // true = non-prime number for (int i = 2; i*i <= biggest; i++){ if(!prime[i]){ for (int j = i*i; j <= biggest; j += i){ prime[j] = true; } } } //get result for (int i = 0; i < number; i++){ int target = reversedArr[i]; if (!prime[target]) System.out.print(target + " "); } } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아무리 찾아봐도 잘 안되네요 ㅜㅜ... 도대체 뭐가 문제일까요..ㅜㅜ [질문 내용] 여기에 질문 내용을 남겨주세요.
기본형 변수와 참조형 변수에 대해서 공부하던 중 참조형 변수에 대해서 궁금한 점이 있습니다. 객체를 만들고 변수에 할당을 하면 변수에는 해당 객체가 저장된 주소값을 저장한다는 내용은 이해를 했습니다. 하지만 곱씹어 보면서 궁금했던 점이 주소값도 결국 숫자일텐데 기본형 변수와 주소값을 어떻게 구별하는지 궁금합니다. 조금 더 풀어서 설명하면 변수에 저장된 숫자값을 기본형 변수인지 참조형 변수의 참조값인지 Java가 구별하는 메커니즘이 궁금합니다. 구글링을 해봤는데 기본형 변수와 참조형 변수의 차이점과 같은 표면적인 내용에 대해서만 나와서 질문드립니다. 강의 잘 듣고 있습니다. 감사합니다.
우선 제가 이 문제를 풀었던 방식을 설명드려보겠습니다. i는 그냥 0부터 시작이다라고 생각해서 i=0일 때 0번 인덱스는 apple이니까 문자열이 맞으니까 result에 0-를 추가하고 i=1일 때 1번 인덱스는 3인데 문자열이 아니라 숫자니까 1을 문자화 해서 result에 이어붙여서 0-1이 되고 이걸 쭉 반복해서 이 문제의 정답으로 0-12-34로 풀었습니다. 그런데 해설을 들어보니 33분41초에서 강사님께서는 i는 처음에 apple을 가지고 온다라고 말씀하셨습니다. 아무래도 제가 접근을 잘못한 것 같습니다. for i in lst을 제가 for i in range(len(lst))으로 보고 잘못 풀었던 것일까요? for in in lst는 그냥 lst의 인덱스가 아니라 그 값을 하나씩 가지고 온다는 뜻인가요?
[질문 내용] 회원 등록을 위해 데이터를 전달 받을 객체를 위한 컨트롤러로 MemberForm클래스를 따로 만들지 않고 MemberContorller안에서 static class MemberForm클래스로 만들어도 상관없나요? @PostMapping("/members/new") public String create(MemberForm form) { Member member = new Member(); member.setName(form.getName()); System.out.println("member = " + member.getName()); memberService.join(member); return "redirect:/"; } static class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
[질문 내용] 안녕하세요, Object Class에 대해 궁금한 점이 있어 질문드립니다. 모든 클래스는 최상위 부모인 Object Class가 제공하는 공통 기능(메서드)을 사용할 수 있는 것으로 알고 있습니다. 그러면 '객체.(Object Class의 메서드)' 형태[예시: child.toString()]로 충분히 상속받은 기능을 사용할 수 있는데 왜 Object Class가 java.lang 패키지에 포함되어 자동으로 import 되는지 궁금합니다. (자동으로 import되는 System, String가 바로 사용이 가능한 것과 다르게, Object는 객체 생성을 하고 상속을 이용해서만 기능 사용이 가능한 것 같은데 왜 굳이 자동으로 import되는 목록에 껴있는지 궁금합니다 ㅠ 혹시 Object형 변수 선언을 위해 그런걸까요?) 마지막으로 Object 클래스의 메서드가 오버라이딩이 가능하던데 그대로 사용하지 않고 오버라이딩할 일이 따로 있나요? 지금까지 공부하며 느낀 자바는 굉장히 효율적이고 적절한 제약이 있는 언어라고 생각이 들어서 이유없이 오버라이딩 가능하게 남겨두지는 않았을 거라는 생각이 들어 여쭤봅니다.
안녕하세요 강사님, 강의 영상 잘 보고 있습니다. first-service, second-service 둘다 실행 후에 apigateway-service 실행했습니다. 그런데 apigateway 쪽에서 연결 거부 당했다는 로그가 지속적으로 올라오네요 이유를 모르겠습니다. apigateway 의 application yml파일 여기서 궁금한게 defaultZone 설정 해서, discoveryservice 프로젝트도 구동 시켜줬는데, 같은 에러로그가 지속 적으로 올라오네요.. server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: routes: - id: first-service uri: localhost:8081/first-service predicates: # ??? Path ??? first-service?? ?? uri? ?? - Path=/first-service/** - id: second-service uri: localhost:8082/second-service predicates: # ??? Path ??? second-service?? ?? uri? ?? - Path=/second-service/** 콘솔 내용 2024-10-07 20:39:53.214 WARN 2024 --- [OvbxrBtUd7XQ-87] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: no further information 2024-10-07 20:39:53.214 INFO 2024 --- [OvbxrBtUd7XQ-87] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer@4dca89d2: tags=[[]], channel=null, acknowledgeMode=AUTO local queue size=0 2024-10-07 20:39:53.215 INFO 2024 --- [OvbxrBtUd7XQ-88] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [localhost:5672] 추가 예외 2024-10-07 20:51:37.290 INFO 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888 2024-10-07 20:51:37.304 INFO 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available 2024-10-07 20:51:37.304 WARN 18012 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/apigateway-service/default": Connection refused: no further information; nested exception is java.net.ConnectException: Connection refused: no further information
안녕하세요! 강의를 듣고, 궁금증이 생겨서 찾아보던 중 명확한 답을 얻지 못해서 질문드립니다!. 첫째로 DIP에 관련된 질문입니다. 회원가입과 비밀번호 암호화 강의 중 "DTO를 서비스 계층으로 바로 넘기는 게 좋지 않다"고 하셔서 궁금증을 가지고 찾아보던 중에 이 질문 을 보고 관련 내용들을 찾아봤지만, 궁금증을 완전히 해결하지 못해서 질문드립니다. public class Auth ControllerAuthController { private final Auth ServiceAuthService auth ServiceauthService; private final ?AppConfig ?appConfig; @Post MappingPostMapping("/APIapi/auth/signup") public void signup(@Request BodyRequestBody Signup signup) { auth ServiceauthService. signup(signup).signup(signup); } } 위와 같은 코드가 있을때 DIP를 지키면서 코딩한다면 단순히 Controller -> Service로 넘기기 위한 전달용 DTO를 만들어서 사용하시는지 궁금합니다. 두 번째로 @transactional에 관한 질문입니다. 데이터의 수정 및 변동이 있는 부분에는 @transactional을 붙이는 것이 좋다고 들어왔습니다. 그런데 강의의 코드에서는 붙인 부분과 안 붙인 부분이 나뉘는데 특별한 이유가 있을까요? 또 한 readonly 속성은 데이터를 읽기만 하는 부분에서는 성능에 도움이 된다고 들었습니다. 위의 내용들로 데이터의 변동이 일어나는 부분엔 @transactional을 붙이고, 읽어오기만 하는 부분에는 readonly 속성을 습관적으로 붙여왔는데 호돌맨님 께서는 @transactional을 사용하는 기준(?) 같은게 있으실까요? 긴 질문 읽어주셔서 감사합니다 :)
강사님 안녕하세요 파이썬 Split 문제 풀던중 궁금한점이 있어 문의 드립니다. 아래 코드 수행시 최종 출력값은 아래와 같이 출력 되어야 하는거 아닌가요? 실제로 잘린 값: ['I' , 'IS', 'ES' , 'S' , 'RING'] S 코드 (아래 부터) dedef split_k(input_str, k): split_result = input_str.split('T') print(" 실제로 잘린 값: ", end="") print(split_result) return split_result[k] (중략)