학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] erd 설계를 하다가 스스로 의문이 조금 들어서 질문드립니다. 현재 다음과 같은 앱을 구상하고 있습니다. AI 모델과 연동해서 추천 시스템을 생각 중인데 도메인 설계에 대해서 궁금한 부분이 생겨서 질문드립니다. package forpracticejunbao.junbaoprac_be.recommend.domain; import forpracticejunbao.junbaoprac_be.user.domain.User; import forpracticejunbao.junbaoprac_be.common.util.BaseEntity; import jakarta.persistence.*; import lombok.*; import java.util.ArrayList; import java.util.List; @Table(name = "recommend") @Entity @Getter @NoArgsConstructor @AllArgsConstructor @Builder public class Recommend extends BaseEntity { @Id @Column(name = "recommend_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) private User user; @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendClusterOption> recommendClusterOptions = new ArrayList<>(); @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendValueOption> recommendValueOptions = new ArrayList<>(); @OneToMany(mappedBy = "recommend",cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List<RecommendResult> results = new ArrayList<>(); public void updateRecommendClusterOptions(List<RecommendClusterOption> recommendClusterOptions) { if (this.recommendClusterOptions != null) { this.recommendClusterOptions.clear(); this.recommendClusterOptions.addAll(recommendClusterOptions); } else { this.recommendClusterOptions = recommendClusterOptions; } } public void updateRecommendValueOptions(List<RecommendValueOption> recommendValueOptions) { if (this.recommendValueOptions != null) { this.recommendValueOptions.clear(); this.recommendValueOptions.addAll(recommendValueOptions); } else { this.recommendValueOptions = recommendValueOptions; } } } Recommend 클래스를 만들고, ClusterOption(클러스터 선택)과 ValueOption(계절, 요일 등등)을 일대다 다대일로 풀고자 했는데 이 두가지 엔티티가 크게 다르지 않은 것 같아서 그냥 하나로 합치는게 좋을지(그냥 enum으로만 구분) 아니면 의미적으로 좀 다르기 때문에 구분하는게 좋을지 궁금합니다.(클러스터 선택과 계절 선택은 하나만 선택 가능, 나머지는 하나 이상 선택 가능 조건이기에 클러스터와 계절을 도메인으로 묶을지도 살짝 고민이 되는 것 같습니다..) 결과를 RecommendResult로 보여주고자하는데(ai 추천 받은 top 5값에 대한 스팟 정보 제공 목적) 괜찮은 설계일지 궁금합니다. init.sql을 통해 클러스터, 계절, 요일 등 초기값들을 insert 해주고, spot 정보는 csv 파일로 부터 읽어오도록 구현하고 있는데(@PostConstruct, implementation 'com.opencsv:opencsv:5.5' 이용) 실제로 이런 설계에서 초기값을 주입하고 이후 로직 구현하는게 실무적으로 일반적인 방식인지 궁금합니다..! 긴 글 읽어주셔서 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 메서드 반환 타입 강의 중 MethodReturn2 내용에서 똑같이 한 거 같은데 missing return value 오류 뜹니다. 메서드 [71~73] 강의를 참고하여 매소드에 각 출력문장마다 return age;를 넣어봤더니 정상실행이 됩니다. 질문 1. 강사님께서 하신 내용 그대로 따라한 거 같은데, 오류가 난 이유가 궁금합니다.(인텔리제이 강사님과 같은 버전으로 다운 안돼서 최신버전이긴 한데 이게 원인인지..) 질문 2. 위 첫번째 사진(강의와 같은 코딩)을 예시로 인텔리제이가 return; 을 return age;로 (1번 사진이 2번 사진처럼)알아서 인식하여 모든 메서드에 return; 으로만 작성해도 되는건지 궁금합니다. (현재 메서드 정의 강의 중 [메서드 2] 와 같이 반환타입 없는 경우만 return;으로 사용(생략도 가능)으로 이해한 상태.) ex) 매개변수와 반환타입 있을 경우 -> return 매개변수; 매개변수와 반환타입 없을 경우 -> return;(생략 가능)
선생님 안녕하세요. 이해가 안되는 부분이 있습니다. 대기 메서드가 호출되면 락이 해제되고, => 대기 메서드가 호출 되면 락이 해제되는 것까지는 이해했습니다. 신호 메서드(notify)가 호출되어 대기 메서드에서 반환하기 전에 스레드는 락을 다시 획득한다. => 이부분이 잘 이해되지 않는데요. 대기 메서드가 호출되면서 락이 해제, 와 동시에 신호 메서드가 호출되어 대기가 다 끝나기전에 (wait) 락을 다시 획득한다는 말인가요? 즉, public wait () { 1. 락 해제 2. 신호 메서드 호출 (notify all) 3. Thread.currentThread -> 락 획득?? } 답변 부탁드립니다! 감사합니다.
안녕하세요! '4-5 그래프' 강의 내용 중에 '인접 리스트'를 사용해 그래프를 표현하는 경우 공간복잡도가 최악의 경우에도 O(N)이라고 설명을 해주셨는데요! 그래프의 모든 노드가 다른 모든 노드에 연결되어있는 경우라면 딕셔너리 안에 N개의 키와 각각의 키에 크기 N-1의 1차원 배열이 들어가게 되니, 결국 N*(N-1) 만큼이 공간을 차지하여 최악의 경우 2차원 배열과 동일하게 O(N^2)의 공간복잡도를 가지게 되는 것은 아닌가 하는 생각이 들었는데요, 인접 리스트를 사용할 때 최악의 경우 어떻게 O(N)의 공간복잡도가 나오게 되는지 궁금합니다! 그리고, 일반적인 경우에는 모든 노드가 연결되어 있지는 않겠지만, 항상 이러한 최악의 경우도 고려하면서 문제를 풀어야 할지도 궁금합니다!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 2-4. 프로젝트 설정하기 14:09에 강의 런칭 시점에는 테스트 모두 통과하도록 변경했습니다. 라고 적혀있는데 테스트에서 무한로딩이 걸리길래 ./gradlew build --info로 띄워 봤습니다. 그래서 보니깐 이 로직이 계속 반복되더라구요 그래서 찾아보니 여기 while문에 계속 걸리는 거 같은데 제가 잘못 세팅한 건가요? 강의 앞전에 bootRun해서 http://localhost:8080/api/chapter2/boards 까지 접속되는 거 확인했고 도커에서 backend-pass-portfolio 컨테이너에 Db-mysql 만 실행된 채로 build눌렀습니다.
@DisplayName("파라미터 테스트") @ParameterizedTest(name = "{index} {displayName} message={0}") @ValueSource(ints = {10, 20, 40}) void parameterizedTest(Study study){ System.out.println(study.getLimit()); } Junit5 테스트 반복하기 2부에서 이 부분 질문드리려 합니다. 강의에서는 Study 타입으로 받아서 객체를 생성하고 getLimit으로 값 가져오는 것까지 묵시적으로 진행이 잘 되었습니다만, 제 환경에서는 ```java Error converting parameter at index 0: No built-in converter for source type java.lang.Integer and target type com.example.testpractice.Study org.junit.jupiter.api.extension.ParameterResolutionException: Error converting parameter at index 0: No built-in converter for source type java.lang.Integer and target type com.example.testpractice.Study at java.base/ java.util.stream .ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/ java.util.stream .ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/ java.util.stream .ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/ java.util.stream .ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/ java.util.stream .ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/ java.util.stream .ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/ java.util.stream .ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/ java.util.stream .ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ``` 와 같은 에러가 발생해서 Junit이나 JDK의 버전에 따라 스펙이 바뀌었는지 궁금해져서 질문드립니다
섹션5 의 MyBatis 적용2 - 설정과 실행 에서 원하는 결과가 나오질 않아서 봤더니, MyBatis는 스프링 부트 3.x에 지원하는 버전으로 설정되어있고 현재 프로젝트 설정은 스프링 부트 2.x 이다보니 버전 충돌로 되지 않아서 과감하게 프로젝트를 3.x 대로 변경하는 삽질을 해봤습니다. #1. 먼저 3.x 에서 만든 프로젝트가 필요합니다. #2. 1에서 만든 프로젝트에서 gradle/wrapper에 있는 아래의 두개 파일을 복사해 옵니다. gradle-wapper.jar gradle-wrapper.properties #3. build.gradle 수정 plugins { id 'java' id 'org.springframework.boot' version '3.4.5' #버전에 맞게 수정 id 'io.spring.dependency-management' version '1.1.7' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } #4. Project Structure 확인 #인텔리제이에서 File -> Project Stucture 에서 Project Settings > Project : SDK 가 17 이상인지 확인 #5. Gradle 동기화 인텔리제이에서 했는데 잘 안되면 CLI 환경에서 아래처럼 시도 #in mac chmod +x gradlew ./gradlew clean ./gradlew build #6. 5를 시도했는데도 안되면, #인텔리제이에서 File -> Invalidate Caches... 를 하고 재시도
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 선생님 연습을 하는데 코랩에서 코드가 자동으로 입력되서 연습하는데 방해가 되는거같아서요ㅜㅜ 도구 -> 편집기 -> 컨텍스트 기반 코드 완성 표기 체크를 껐는데도 코드가 생길때는 어떻게 해야하나요?
[질문 내용] 래퍼클래스 - 기본형의 한계 2 영상에서 findValue 메소드의 코드를 보면 if 조건문으로 리턴값이 myInteger라고 했습니다. 그런데 if 조건문 안에 myInteger.getValue()를 통해 value의 값을 뽑아서 그렇게 된다면 int타입의 값을 같은 int 타입인 target과 비교를 할 수가 있죠. 그런데 출력값을 확인해보면 -1, 0, 1 이 나오는 것을 확인할 수 가 있는데 리턴값도 똑같이 myInteger.getValue()로 나와야 되는거 아닌가요? return myInteger; 라고 했을 때 그냥 myInteger는 참조값이 반환될거라고 예상이 되는데 어떻게 출력이 -1, 0, 1이 나오는지 너무 궁금하네요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요, 제네릭 Set 4 부분 강의에서 질문드리고 싶은 점이 있어 여쭤봅니다. private int hashIndex(Object value){ return Math. abs (value.hashCode())%capacity; } 이 부분에서 매개변수가 E value가 아닌 Object 로 들어오는 이유는 타입 이레이저 때문일까요 ?
노트북 빈칸으로 먼저 문제를 풀이하는 중에 결측값 처리를 행을 삭제하는 방식으로 처리하였습니다. 맨 마지막 y_test와 r2계수를 구하는 과정에서 삭제된 행만큼의 데이터가 맞지 않아 오류가 났는데 실제 실기 시험에서도 결측치가 있는 행을 삭제하면 안되는 것인가요?? 결측치는 반드시 다른 값으로 대체 해야 하는 것 인가요?