묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[Lv.1] iOS 17 앱 개발 기초 - SwiftUI로 시작하기
GalleryView 작성시, @State? @Bidnable? 의 차이점이 뭔지 궁금합니다.
IOS17로 업데이트 됨에 따라,@Observable 매크로를 활용하여 ViewModel을 활용하면,상태 변화를 감지하여 'View에서 자동적으로 업데이트 된다.'라고 알고 있습니다. @Observable 매크로를 사용해서 코드를 업데이트하던 중 궁금증이 생겨 질문을 남겨봅니다. ContentView, VideoView에서 AnimalViewModel의 인스턴스를 갖고 있을 때, var로 정의했을 때와 let으로 정의를 했을 때의 차이점이 있을까요?struct ContentView: View { // let이나 var이나 상관없는가? let vm: AnimalViewModel var body: some View { NavigationStack{ List{ // 1. Cover Image - hero Image CoverImageView(vm: vm)관련내용을 공부하다보니, 해당 링크에서https://www.donnywals.com/comparing-observable-to-observableobjects/"Defining an @Observable as a let property" 부분에HomeView에서 ViewModel에 @State 프로퍼티 래퍼를 사용한 후 let을 사용한다? 라는 내용을 본적이 있습니다. GalleryView에서 @State 프로퍼티 래퍼와 @Bindable 프로퍼티 래퍼를 사용했을 때의 차이점이 뭘까요 ㅠㅠ . 우선, @State로 했을 때는 변화의 감지를 HomeView에서도 GalleryView에서도 잘 작동하여, 슬라이더를 변화시켰을 때 Grid의 개수가 바뀝니다. 하지만 @Bindable 프로퍼티 래퍼를 사용했을 때에는 GalleryView에서만 슬라이더 변화를 감지 하고, HomeView에서는 변화를 감지하지 못하는 상황이 벌어집니다. @State var vm: AnimalViewModel@Bindable var vm: AnimalViewModelstruct GallaryView: View { @State var vm: AnimalViewModel var body: some View { NavigationStack{ ScrollView(.vertical, showsIndicators: false){ VStack(spacing: 30){ // 1. Image Image(vm.selectedAnimal) .resizable() .scaledToFill() .frame(width: 250, height: 250) .clipShape(Circle()) .overlay(Circle().stroke(Color.accentColor, lineWidth: 5)) // 2. Slider Slider(value: $vm.gridColumn, in: 2...4, step: 1) .padding(0) .onChange(of: vm.gridColumn) { withAnimation(Animation.easeInOut(duration: 1.0)){ vm.gridSwitch() } } // 3. Grid LazyVGrid(columns: vm.gridLayout, spacing: 20){ ForEach(vm.animals){ animal in Image(animal.image) .resizable() .scaledToFill() .frame(width: 80, height: 80) .clipShape(Circle()) .overlay(Circle().stroke(Color.white, lineWidth: 1)) .onTapGesture { withAnimation(Animation.spring()){ vm.selectedAnimal = animal.image } } } } } //:VSTACK .padding() } //:SCROLL .navigationTitle("갤러리") .navigationBarTitleDisplayMode(.inline) } //:NAVIGATION } } 추가로,@Observable 매크로를 이용한 예시가 잘 정리되어 있는 문서들이 있을까요?? 제가 잘 이해를 못한 건지, 이 부분이 너무 어렵네요. 감사합니다 😀
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
scp로 EC2에 jar 전송 중 scp timeout로 인한 실패 문제입니다
[실습] 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법 - 에서 발생하는 오류입니다,, ```- name: SCP로 EC2에 빌드된 파일 전송하기 uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} source: project.jar target: /home/ubuntu/instagram-server/tobe해당 yml로 설정 하고서도 반복해서 timeout으로 연결이 실패하네요,, 직접 script로 ec2 내부에서 동작하는 실습까지는 모두 작동했었습니다 따로 에러를 구글링해보았지만 유의미한 해결책이 보이지 않아 올려봅니다
-
미해결
ㅊㅊㅊㅊ
ㅊㅊ
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
sum과 len의 차이점이 궁금합니다.
문제에서 데이터수를 구하라고 할 때, sum이나 len을 사용하곤 하는데요.어떨때 보면 sum으로 구할때와 len으로 구할때의 값이 다릅니다. 실례를 들어보면 [캐글 , 작업형1, 26번에서]menu컬럼에 "라떼" 키워드가 있는 데이터의 수는?df['menu'].str.contains('라떼').sum()len(df['menu'].str.contains('라떼'))이렇게 sum과 len으로 구할 때 답이 다르게 나옵니다.혹시 어떨 때 sum과 len을 써야할까요? 둘다 같은 의미로 알고 있는데.. 제가 잘못 이해하고 있는걸까요.?
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
Groupy 라이브러리 지원이 되지 않습니다.
gradle에 groupie 라이브러리를 최신 버전으로 implementation 하였는데도 불구하고 이와 같이 import 되지 않습니다. github 공식 문서대로 해도 지원되지 않는데, 2022년을 마지막으로 업데이트가 없는 걸로 봐서 지원이 종료된 걸로 알고 수강을 종료해야 될까요 ?
-
미해결혼자 공부하는 머신러닝+딥러닝
linear 통과 전 입력 처리
여기서 위에 그림에서 stretch pixels into column인 부분이 책에서 구현된 코드 reshape가 해주는 것 맞나요?
-
미해결스프링 핵심 원리 - 고급편
Args vs Execution 테스트 설명 중 문의 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Test @DisplayName("파라메터 부모 타입으로 매치") void argsMatchDynamic() { // args pointcut.setExpression("args(String)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("args(Object)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("args(java.io.Serializable)"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); // execution pointcut.setExpression("execution(* *(String))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("execution(* *(Object))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); pointcut.setExpression("execution(* *(java.io.Serializable))"); Assertions.assertTrue(pointcut.getClassFilter().matches(MemberServiceImpl.class)); } args는 동적 검사라 검색 되어야 맞지만 excution은 정적 타입 검사라서 저게 안된다고 하셨지만 해당 테스트 결과 true로 반환이 됩니다. 혹시나 spring boot 버전 문제일까 싶어서 2.5.5, 3.3.0 두곳에서 테스트 했습니다
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
비인앱결제나 인앱결제나 실제 어떻게 적용하는지 설명이 없습니다.
저는 제가 만들고 싶은 어플이 있어 여기에 결제 기능을 넣고 싶습니다. 그런데 강의해주시는 것은 이미 만들어 놓은 코드와 전체적인 이론 수업으로 이루어져 있습니다.실제로 내가 지금 만들고 있는 어플에 적용할 수 있도록 버튼을 만들고, 액션을 만들고, 백엔드 설정하는 과정이 필요한데 이 수업만 듣고서는 이 기능을 구현할 수가 없습니다..어떻게 해야 하나요?
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
카카오로그인 설정 완료 후
강의에서는 코드를 다운받아서 인텔리J에서 코드를 수정하셨습니다.다 수정하고 잘 구동된거 확인 후에 강의가 끝났는데,수정된 코드를 다시 플러터 플로우에 적용시켜야 하는것 아닌가요? 플러터 플로우에서는 카카오 로그인이 계속 오류가 나는데 어떻게 해야 할지 모르겠습니다.
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
32강 spring mvc 안보임
밑에 질문목록에 있는데로 들어가서 모두 만들었는데 옆에 s가 안뜨고 j가 떠서 다른 거 더 찾아봐서 했는데 안되길래 eGovframe Web project 로 그냥 만들어서 실습 진행해도 되나요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
오류가 뜹니다
#1.문제정의#평가:ROC-AUC#target:'성별' 1#최종파일:"result.csv"(컬럼 1개 pred, 1확률값) #2.라이브러리 및 데이터 불러오기 import pandas as pdtrain = pd.read_csv("data/customer_train.csv")test = pd.read_csv("data/customer_test.csv") #3.탐색적 데이터분석(EDA). shape head info isnull.sum. value_counts. describe targetpd.set_option('display.max_columns', None) print(train.shape, test.shape) print(train.head(2))print(test.head(2)) print(train.info()) print(test.info()) print(train.isnull().sum()) print(test.isnull().sum()) print(train['성별'].value_counts()) #결측치채우기 train = train.fillna(0) test = test.fillna(0) print(train.isnull().sum()) print(test.isnull().sum()) # 4.데이터전처리 - object데이터를 인코딩 df = pd.concat([train,test]) df = pd.get_dummies(df) train = df[:len(train)].copy() test = df[len(train):].copy() print(train.shape, test.shape) #5. 검증 데이터 분할 from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train.drop('성별', axis=1), train['성별'], test_size=0.2, random_state=10) print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) #6. 머신러닝 학습 및 평가 from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_auc_score model = RandomForestClassifier(random_state=0) model.fit(X_tr, y_tr) pred = model.predict_proba(X_val) score = roc_auc_score(y_val, pred[:,1]) print(score) # 7. 예측 및 평가 파일 생성 pred = model.predict_proba(test) submit = pd.DataFrame({'pred':pred[:,1]}) submit.to_csv("result.csv")print(pd.read_csv("result.csv")) 이렇게 했는데요. pred = model.predict_proba(test)만 작성하면 오류가 나는 이유가 뭘까요??Makefile:6: recipe for target 'py3_run' failedmake: *** [py3_run] Error 1Traceback (most recent call last): File "/goorm/Main.out", line 64, in <module> pred = model.predict_proba(test) File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 674, in predict_proba X = self._validate_X_predict(X) File "/usr/local/lib/python3.9/dist-packages/sklearn/ensemble/_forest.py", line 422, in validateX_predict return self.estimators_[0]._validate_X_predict(X, check_input=True) File "/usr/local/lib/python3.9/dist-packages/sklearn/tree/_classes.py", line 407, in validateX_predict X = self._validate_data(X, dtype=DTYPE, accept_sparse="csr", File "/usr/local/lib/python3.9/dist-packages/sklearn/base.py", line 421, in validatedata X = check_array(X, **check_params) File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 63, in inner_f return f(*args, **kwargs) File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 720, in check_array assertall_finite(array, File "/usr/local/lib/python3.9/dist-packages/sklearn/utils/validation.py", line 103, in assertall_finite raise ValueError(ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
ols logit glm 이 차이가 뭐고, data=데이터에 df가 아니라 train 넣는 이유는 뭘까요?
ols logit glm 이 차이가 뭐고, data=데이터에 df가 아니라 train 넣는 이유는 뭘까요?
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
수업자료 질문-Case 2 - 일반 웹 프로젝트 구조에 CI/CD 적용하기 (S3, Cloudfront)
전체적인 흐름 이미지를 보면 3번과 4번에서 캐시무효화 명령 및 캐시 무효화를 하는 설명이 작성되어 있습니다. 깃헙 액션에서 3번을 수행하는것 까진 이해가 되는데 4번은 누가 하는건지 모르겠습니다. 제가 찾아본바로는 3번만 수행하면 유저가 다음 요청시 cloudfront가 새로 s3에서 데이터를 받아오고 해당값을 캐싱하는것으로 이해했습니다.https://jscode.notion.site/Case-2-CI-CD-S3-Cloudfront-bbd22542211046feac5f04a3955ddf71
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
target(label)별 개수 확인
강의 11:55 부분의 #target(label)별 개수 확인y_train.value_counts() 위 코드를 작성하는 이유(중요성)가 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost연결이 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]HelloSpringApplication.java의 main 실행 했을 때 사진과 같은 화면이 뜹니다. locallhot는 연결이안됩니다.JDK는 17.0.11.9 버전으로 다운받았습니다.어디가 잘못된걸까요..
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
hibernate가 select를 두번 하는 이유
안녕하세요 강사님 강의를 들으면서 이번에 처음 JPA를 알아가고 있는 중입니다.헌데 궁금한점이 JPA 특성인것인지 아니면 H2 DB 문제인지 그것도 아니면 제 Intellij 설정 문제인지 모르겠지만 select가 두번이 되는 이유가 무엇때문이지 궁금해서 질문 드립니다. 실질적인 동작에 문제가 생기지는 않겠지만 N+1 관련 강의를 듣다보니 불필요하게 쿼리가 호출되면 안좋은것 같아 여쭈어 봅니다. @Test @DisplayName("대출 기록이 없는 유저도 응답에 포함") fun getUserLoanHistoriesTest() { //given userRepository.save(User("A",null)) //when val results = userService.getUserLoanHistories() //then assertThat(results).hasSize(1) assertThat(results[0].name).isEqualTo("A") assertThat(results[0].books).isEmpty() }위의 코드를 동작시켰을때Hibernate: insert into user (id, age, name) values (default, ?, ?) Hibernate: select user0_.id as id1_1_, user0_.age as age2_1_, user0_.name as name3_1_ from user user0_ Hibernate: select userloanhi0_.user_id as user_id4_2_0_, userloanhi0_.id as id1_2_0_, userloanhi0_.id as id1_2_1_, userloanhi0_.book_name as book_nam2_2_1_, userloanhi0_.status as status3_2_1_, userloanhi0_.user_id as user_id4_2_1_ from user_loan_history userloanhi0_ where userloanhi0_.user_id=? Hibernate: select user0_.id as id1_1_, user0_.age as age2_1_, user0_.name as name3_1_ from user user0_ Hibernate: select userloanhi0_.user_id as user_id4_2_0_, userloanhi0_.id as id1_2_0_, userloanhi0_.id as id1_2_1_, userloanhi0_.book_name as book_nam2_2_1_, userloanhi0_.status as status3_2_1_, userloanhi0_.user_id as user_id4_2_1_ from user_loan_history userloanhi0_ where userloanhi0_.user_id=? Hibernate: delete from user where id=?출력 부분에 위에 처럼 뜨는데요제가 이해한 바로는 insert는 save 때문에 한번인 반면에getUserLoanHistoreies 부분에 findAll로 한번의 쿼리를 불러오는 거라서 user와 와 userloanhistory 테이블을 각각 한번 씩 조회 해야 하지 않는가 싶어서 질문 드립니다.추가로 확인해 보보니 LEFT join에 fetch를 추가했을때 위의 select user와 user_loan_history는 left join 쿼리문으로 변한는 반면 아래의 select user와 user_loan_history는 남아 있습니다. 따로 user를 find 하는 곳이 없는 것 같은데 이런 현상이 나오는 이유가 뭘까요?.... 추측 하기로는 AfterEach로 clear할때 deleteAll을 사용해서 사용했던 테이블을 모두 select 하는건가 싶긴 한데... 제가 이해를 잘 못해서 그런건지 이부분이 어렵네요....
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
숙제 최소힙 만들기
class Heap { arr = []; #reheapUp(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] > this.arr[parentIndex]) { // 값 바꾸기 const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapUp(parentIndex); } } } #reheapDown(index) { if (index > 0) { const parentIndex = Math.floor((index - 1) / 2); if (this.arr[index] < this.arr[parentIndex]) { const tmp = this.arr[index]; this.arr[index] = this.arr[parentIndex]; this.arr[parentIndex] = tmp; this.#reheapDown(parentIndex); } } } insert(value) { const index = this.arr.length; this.arr[index] = value; // 마지막에 값을 넣어준다. this.#reheapUp(index); } insertDown(value) { const index = this.arr.length; this.arr[index] = value; this.#reheapDown(index); } remove() { // root만 remove } search(value) { for (let i = 0; i < this.arr.length; i++) { if (arr[i] === value) { return i; } } } } const heap = new Heap(); heap.insert(8); heap.insert(19); heap.insert(23); heap.insert(32); heap.insert(45); heap.insert(56); heap.insert(78); const downHeap = new Heap(); downHeap.insertDown(78); downHeap.insertDown(56); downHeap.insertDown(45); downHeap.insertDown(32); downHeap.insertDown(23); downHeap.insertDown(19); downHeap.insertDown(8); console.log(downHeap.arr);reheapDown 이라는걸 만들어서 최소힙 만들기를 해보았는데 부모 index의 값과 비교하는 조건문의 부등호 방향만 바꾸니까 되는데 이게 맞나요...?
-
해결됨개발자를 위한 쉬운 도커
[컨테이너 내부에서 개발하기] - volume mount 질문 드려요.
안녕하세요. 틈틈히 강의를 듣고 있습니다. 질문 하나 있어서요. (Node.js, VSCode) 컨테이너 내부에서 개발환경 구성 강의 마지막 쯤에 볼륨은 마운트 된다고 하셨는데, 강의 상에서는 leafy/leafy-frontend 와 마운트 되더라구요. (컨테이너 안에서는 /workspace/leafy/leafy-frontend) 근데 혹시 이 마운트 되는 경로를 따로 설정으로 바꿀 수 있을거 같은데 .. 어떻게 하면 될까요? (예를 들면 leafy-frontend <-> /workspace/leafy-frontend 이렇게요.) 안녕하세요. 데브위키입니다.강의에 포함된 내용이 아니더라도 강의를 듣다가 궁금하신 점이 생기시면 부담없이 편하게 질문해주세요. 실습에 오류가 발생했거나 명령어가 예상한대로 실행되지 않으신 경우 사용하시는 OS 환경과 화면을 캡처해서 보내주시면 빠르고 자세하게 답변을 드릴 수 있습니다. 질문은 가능한 빠르게 답변 드리겠습니다. 😀감사합니다.
-
해결됨Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
TSLint 말고 TSLint Vue 설치해도 되나요?
TSLint가 Deprecated 됐다고 나와서요TSLint Vue 설치해도 되나요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
7회 작업형 1 과목점수 스탠다드 스케일 할 때
이상치에 민감하지 않도록 Rubust scaler 사용하실 때는 scaler = Rubustscaler()하시고, scaler.fit_trasnform(train)scaler.transform(test) 하셨던 걸로 기억하는데 왜 여기서는 scaler.fit_transform(df[['socre']])로 진행하신 걸까요?