강의 : 스프링 핵심원리 - "관심사의 분리" 현재 스프링 안쓰고 자바로만 하고 계시니 강의에는 안맞을 수도 있는데 궁금해서 질문 드립니다 ... DIP지키려고 객체생성 안해주고 인터페이스들을 선언만 해주고, 생성자 주입으로 마침내 DIP를 지킬 수 있다 이렇게 이해를 했습니다. 여기서 더 나아가서 생성자도 쓰기 귀찮으니 @RequiredArgsConstructor쓰면 아래 코드에서 생성자 부분 안쓰고도 원래 의도대로 DIP지킬 수 있는거죠???
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
EF 변경사항을 저장할 때 SaveChangeAsync가 아닌 SaveChange를 사용하게되면 해당 쓰래드는 blocking이 발생할텐데 괜찮나요? 제 추측으론 EAP 기반 IO 통신이기때문에 어차피 패킷요청마다 개별의 쓰래드에서 처리가되니 굳이 async를 사용안해도 다른 패킷(Thread)에 대한 blocking이 이러나지 않으니까 그냥 SaveChange를 사용한건가? 라고 생각하긴 했는데 선생님의 답변을 듣고싶습니다.
안녕하세요 큰돌님 싱글톤 패턴을 구현하는 방법중 첫번째인 단순한 메서드 호출에 관해 질문이 있습니다. 자바의 경우 단순한 메서드 호출을 통해 싱글톤 패턴 생성여부를 확인할때 멀티스레드 환경에서 인스턴스가 2개 이상 만들어질수 있다고 하셨는데 싱글스레드 기반의 자바스크립트를 사용하여 싱글톤 패턴을 구현하는경우에는 1번의 방법만으로 패턴 구현하는것이 충분한가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? -> 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? -> 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? -> 예 [질문 내용] Switch 문에서 비교하는 값이 String이어도 되나요? 앞선 강의에서 String 외 다른 타입들은 == 을 통해서 두 값이 같은지 비교하지만, String은 .equals 를 통해 값을 비교해주신다고 하셨는데 switch문에서 case 별로 분기할 때, String 값이 들어가면 비교를 .equals 로 하도록 되는지가 궁금합니다. 수업을 듣다가 궁금해져서 아래와 같이 실습해보았는데 결과는 제대로 나왔습니다. 그런데.. String 비교는 == 로 했을 때 제대로 나올 수도, 아닐 수도 있다고 하셨던 것 같아서 질문 남깁니다. package condition; public class Switch4 { public static void main(String[] args) { String subject = "math"; int class_number = switch (subject) { case "art" -> 1; case "math" -> 2; case "science" -> 3; default -> 0; }; System.out.println("class_number = " + class_number); // 결과는 2로 출력 } }
안녕하세요 선생님 알고리즘 교안 m2 초기 셋팅 관련하여 아래와 같이 질문드립니다.brew는 설치 완료 하였고 bits/stdc++.h 파일 생성에서 문제가 되는데요.아래과 같은 경로로 가서 코드 모두 복사하고 vi편집기를 빠져 나오게 되면 아래와 같이 파일 생성이 되지않습니다.이후 파일 생성이 되지 않아 다시 파일을 생성하려고 하면 스왑하라는 두번째와 같은 창이 뜨게됩니다.확인한번만 부탁드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 이런 오류가 나오는데 어떻게 해결해야 하나요...ㅠㅠ
안녕하세요. 11강에서 질문을 드려야 했는데 이번 강의를 보고 한번 정리하고 가고자 질문을 드리게 되었습니다. 질문을 좀 더 자세하게 하기 위해 메모리 레이아웃 사진첨부를 하였습니다. const char* str = “Constant string”; // str is a modifiable lvalue. str = “Second string”; // “Constant string” = “Second String” // imposible str[0] = ‘A’; //Error char str2[] = “String in an array”; str2[0] = ‘A’; // OK 이번 강의에서 나온 코드를 가지고 개념 정리를 하고 싶습니다. 코드에 쓰인 문자열은 어디에 저장이 되는가? 이번 강의에서 쓰인 문자열 포인터 char* str = “Constant string” str = “Second string” 그리고 문자열 배열 char str2[] = “String in an array” 여기에 쓰인 모든 문자열 “Constant string”, “Second string”, “String in an array” 은 TEXT Segment 즉 프로그램 코드에 저장이 되는 걸로 알고있습니다. 맞을까요? 문자열 포인터와 문자열 배열의 차이 문자열 포인터는 TEXT Segment에 저장되어 있는 문자열의 메모리 주소를 가리키는 것이다. 즉 읽기 전용에 저장되어 있기 때문에 str[0] = 'A'와 같이 수정하려 하면 OS에서 막는다. 이걸 VS에서 디버깅으로 확인을 해보았습니다. 먼저 const char* str = “Constant string”;을 확인 해보았습니다. str 포인터 변수가 가리키고 있는 메모리 주소를 메모리에서 찾아 보았습니다. 검색을 해보니 문자열의 시작 문자 'C'의 메모리 주소를 가리키고 있으며 문자열의 끝인 g 다음엔 \0이 붙어있는 걸 확인할 수 있었습니다. 여기서 str = “Second string”; 구문을 만난다면 str 포인터 변수가 가리키고 있는 메모리 주소가 문자열의 시작 문자'S'의 메모리 주소를 가리키고 있는걸 확인하였습니다. 그리고 문자열의 끝인 g옆에는 \0이 붙어있는걸 확인할 수 있었습니다. 그럼 여기서 문자열 배열은 어떤 식이냐 일단 문자열 포인터와 문자열 배열에서 사용한 문자열들은 TEXT Segment에 저장이 되어있기 때문에 메모리에서 보면 사용한 문자열들이 나란히 있는 걸 확인할 수 있었습니다. 하지만 디버깅을 통해 현재 문자열 배열인 str2[]의 메모리 주소를 보면 인걸 확인할 수 있었습니다. 분명 저 문자열이 저장되어 있는 메모리 주소 : 0x00007FF648499C10 이랑 전혀 틀린 주소입니다. 검색해보면 똑같은 문자열이 해당 메모리 주소에도 있는걸 확인하였습니다. 위와 같은 내용을 통해 알수 있었던 것은 프로그램 만들때 사용한 모든 문자열은 TEXT Segment(읽기전용)에 저장이 되며 문자열 포인터는 TEXT Segment에 있는 "문자"의 메모리 주소를 가리키는 것이며 문자열 배열은 스택이라는 (읽기, 쓰기전용)메모리 공간을 할당받고 TEXT Segment에서 문자열들을 복사해오기 때문에 str2[0] = 'B' 같은 수정이 가능한 것이다. 라고 이해를 하였는데 제대로 이해한게 맞을까요? 마지막으로 문자열 포인터를 사용하는 이유? 마지막 질문은 제가 생각을 해보았습니다. 수정도 못하는 문자열 포인터는 왜 사용할까? 생각을 해보았는데 프로그램을 보면 분명 수정이 필요없는 고정된 문자열들을 본적이 있습니다.그런것들을 사용할 때 불필요하게 TEXT Segment에 저장이 되었다가 스택 메모리를 할당 받고 데이터를 "복사"해서 사용하면 메모리 낭비가 일어나고 어떤 행위를 하는 것 이기 때문에 불필요한 과정을 하기 때문에 이런 것들은 그냥 TEXT Segment에 저장 되어있는 문자열의 주소를 가리켜서 사용하면 메모리 절약을 할 수 있는 관점에서 사용하는 것 일까요?
FATAL EXCEPTION: main Process: com.dk .myapplication, PID: 3250 java.lang.RuntimeException: Unable to start activity ComponentInfo{ com.dk .myapplication/ com.dk .myapplication.MainActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.dk .myapplication. Make sure to call FirebaseApp.initializeApp(Context) first. at android.app .ActivityThread.performLaunchActivity( ActivityThread.java:4164 ) at android.app .ActivityThread.handleLaunchActivity( ActivityThread.java:4322 ) at android.app .servertransaction.LaunchActivityItem.execute( LaunchActivityItem.java:103 ) at android.app .servertransaction.TransactionExecutor.executeCallbacks( TransactionExecutor.java:139 ) at android.app .servertransaction.TransactionExecutor.execute( TransactionExecutor.java:96 ) at android.app .ActivityThread$H.handleMessage( ActivityThread.java:2685 ) at android.os.Handler.dispatchMessage( Handler.java:106 ) at android.os.Looper.loopOnce( Looper.java:230 ) at android.os.Looper.loop( Looper.java:319 ) at android.app .ActivityThread.main( ActivityThread.java:8893 ) at java.lang.reflect.Method.invoke(Native Method) at com.android .internal.os.RuntimeInit$ MethodAndArgsCaller.run ( RuntimeInit.java:608 ) at com.android .internal.os.ZygoteInit.main( ZygoteInit.java:1103 ) Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.dk .myapplication. Make sure to call FirebaseApp.initializeApp(Context) first. at com.google .firebase.FirebaseApp.getInstance( FirebaseApp.java:179 ) at com.google .firebase.auth.FirebaseAuth.getInstance( com.google .firebase:firebase-auth@@22.3.1:283) at com.google .firebase.auth.ktx.AuthKt.getAuth( com.google .firebase:firebase-auth@@22.3.1:8) at com.dk .myapplication.MainActivity.onCreate(MainActivity.kt:18) at android.app .Activity.performCreate( Activity.java:8944 ) at android.app .Activity.performCreate( Activity.java:8913 ) at android.app .Instrumentation.callActivityOnCreate( Instrumentation.java:1456 ) at android.app .ActivityThread.performLaunchActivity( ActivityThread.java:4146 ) 이런 오류가 나오면서 앱을 강제 종료 시킵니다 ㅠㅠ 해당 프로젝트 파일입니다! https://drive.google.com/file/d/1jD3oEdj2VTKqFCg4GyGs-ax2DB28uif7/view?usp=drive_link
안녕하세요. ArgoCD Image Updater를 이용하여 Dev환경에서 code trigger 발생시 이미지 자동 빌드/업데이트부터, 이미지 업데이트를 감지하여 자동 배포까지 되도록 구성중에 있습니다. 그런데 image updater를 설치를 다 했고 image updater 파드에서 test 실행시에도 정상으로 나오면서 pod log에서도 2분 주기로 정상동작을 하고 있습니다. 다만, argocd 에서 application에 annotation을 아무리 설정을 해도 자동 배포가 되지 않고 image updater 파드 로그 확인시에도 카운트는 계속 0 으로 나온다는 것이죠. image updater가 argocd application 을 바라보지 못 하는 것인가 싶은데, configmap에서 설정을 수정해야 하는 것인지 어디가 문제인지 어떻게 해결해야 하는지 감이 잘 안옵니다.. 제 환경을 먼저 설정드리자면 private registry registry credentail = secret에 dockerconfigjson로 저장 argocd, argocd-image-updater 는 같은 네임스페이스 (argocd) 에서 설치 배포할 application의 네임스페이스와 분리 - (네임스페이스: test) image tag = 버전업, latest 이 아닌 "dev"라는 태그명으로 이미지 업데이트 위와 같고, argocd-image-updater configMap은 아래처럼 작성했습니다. apiVersion: v1 kind: ConfigMap metadata: labels: app.kubernetes.io/name: argocd-image-updater-config app.kubernetes.io/part-of: argocd-image-updater name: argocd-image-updater-config namespace: argocd data: applications_api: argocd argocd.grpc_web: "true" argocd.insecure: "true" argocd.plaintext: "false" argocd.server_addr: <argocd-server EXTERNAL-IP> log.level: debug registries.conf: | registries: - name: bckrkube api_url: https://<azure>.azurecr.io prefix: <azure>.azurecr.io credentials: pullsecret:test/<registry-secret-name> ping: yes 그리고 application의 annotation은 아래처럼 했습니다. argocd-image-updater.argoproj.io/image-list: <alias>=<registry>/<image-name>:dev argocd-image-updater.argoproj.io/<alias>.allow-tags: dev argocd-image-updater.argoproj.io/<alias>.pull-secret: secret:test/<secret> argocd-image-updater.argoproj.io/<alias>.update-strategy: digest 혹시 이 설정중에 문제가 있을까요?
선생님 안녕하세요 피쳐엔지니어링을 하면서 아래 궁금증이 생겼습니다. 보통 dict aggregation으로 통계변수를 생성할때 (알려주신 루틴이 정말 효율적인 코드를 작성하는데 도움이 됩니다.) min,mean,max를 사용하시는데요 ID는 cnt만 사용하는 것도 이해가 되는데 어떤 경우에는 일수관련한 변수인데 min이 없더라구요 POS_IS_DPD' 그리고 어떤 경우에는 sum이 추가되어 있구 (예) DAYS_ENTRY_PAYMENT) 이런 결정은 수차례 실험후 내리신 결정인가요? 아니면 어떤 규칙같은것이 있을까요? 강의 내용은 없어서 노하우를 전수받고 싶습니다. (사실 이런부분이 제일 판단하기가 어려워서요, 기본적은 가이드라인을 갖고 피쳐엔지니어링을 하고 싶습니다. )