안녕하세요. Airflow 3.0 에서 EmailOperator 사용시 conn_id 를 세팅하지 않으면 smtp_default 를 기본적으로 사용하고 있어보입니다. smtp_default 세팅은 config 파일에 보니 email_conn_id(AIRFLOW__EMAIL__EMAIL__CONN__ID) 에 세팅되어 있어 EmailOperator 와 fail났을때 smtp_default를 세팅해놓으면 동시에 사용 가능한것은 아닐까요?
RequestBody를 읽어올 때, Content-Length의 값을 파싱하고 그 크기만큼 read()에 배열 형태로 전달해서 버퍼형태로 한번에 받아오게끔 작성하셨습니다. 여기서 궁금한 점은, Content-Length는 byte 단위로 측정이 될텐데, char[]를 그대로 사용하면 UTF-8로 디코딩이 자동으로 되는 이유가 궁금합니다..! byte[] 단위로 읽어온 다음, Charset을 지정해서 디코딩해야하는거 아닌가욤? 감사합니다!
선생님 안녕하세요. 최대 혹은 최소값으로 ans를 int(1e6, 1e7, 1e8) 등 다양하게 설정하시는데 혹시 기준이 있을까요? 문제를 풀다 보면 탐색 전에 미리 최소값이나 최대값을 세팅해야 하는 경우가 있는데, 그 세팅의 베스트 프랙티스나 혹은 float(int) 같이 최대/최소값을 따로 정하시는 로직이 후반부에 나오는지 궁금합니다.
영한님이 단일 스레드일 때 테스트 하셨는데요. 멀티 스레드일 때 테스트 결과도 궁금하신 분들이 있을 것 같아 공유 드립니다 :) 빠른 테스트를 위해서 sleep 은 사용하지 않았습니다. public class IncrementPerformanceMain { public static final int COUNT = 1_000_000; public static void main(String[] args) throws InterruptedException { test(new BasicInteger()); test(new VolatileInteger()); test(new SyncInteger()); test(new MyAtomicInteger()); } private static void test(IncrementInteger incrementInteger) throws InterruptedException { long startMs = System.currentTimeMillis(); Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i < COUNT; i++) { incrementInteger.increment(); } } }; ArrayList<Thread> threads = new ArrayList<>(); for (int i = 0; i < 100; i++) { Thread thread = new Thread(runnable); threads.add(thread); thread.start(); } for (Thread thread : threads) { thread.join(); // 모든 스레드가 종료 될 때 까지 기다림 } long endMs = System.currentTimeMillis(); System.out.println( incrementInteger.getClass().getSimpleName() + ": ms=" + (endMs - startMs) + ", result=" + incrementInteger.get()); } } 결과 BasicInteger: ms=32, result=88652038 VolatileInteger: ms=3653, result=17721836 SyncInteger: ms=4882, result=100000000 MyAtomicInteger: ms=6953, result=100000000 MyAtomicInteger 보다 SyncInteger 가 성능이 좋은 이유는 CAS 는 기본적으로 락보다는 빠르지만, 경쟁이 심하면 CAS 실패로 재시도를 반복 하기 때문에 성능이 락보다 안나오고 있는 것 으로 보이네요. 추가로 BasicInteger 에 비해서 VolatileInteger 의 손실율이 큰 이유는 모두가 동시에 메인 메모리에 접근하게 되면서 발생한 문제로 보이네요. 비유적으로 설명하면 BasicInteger : 각자 수첩(캐시)에 메모하고 나중에 합침 → 충돌 적고, 결과는 꽤 괜찮음 (운이 좋으면) VolatileInteger : 100명이 하나의 화이트보드(메인 메모리)에 동시에 적으려는 상황 → 끊임없는 덮어쓰기, 충돌 많음 → 결과는 엉망 감사합니다. ^0^
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 처음 만든 ExceptionResolver에서 sendError를 하고 두번째에서는 sendError없이 response를 만들어서 빈 modelAndView를 리턴해줬는데 둘의 차이를 복잡하게 sendError 하는 과정없이 그냥 modelAndView에 주고싶은 응답값을 줘서 바로 처리하게끔 하자 정도로 이해하면 맞을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @Override public boolean equals(Object object) { if (this == object) return true; // 강의에서 생성자를 통해 생성된 코드 if (object == null || getClass() != object.getClass()) return false; Member member = (Member) object; return Objects.equals(id, member.id); } @Override public boolean equals(Object object) { // 질문자의 생성자를 통해 생성된 코드 if (object == null || getClass() != object.getClass()) return false; Member member = (Member) object; return Objects.equals(id, member.id); } 위와 같이 코드가 다르게 생성 되는데 차이가 있는지 , 혹은 설정이 잘못된건지 궁금합니다. OS 는 윈도우 ,sdk 는 ms-21 사용중입니다.
토비님의 의견에 동의합니다. 화면에서 필드 하나 필요하다는 수정사항을 처리하기 위해 Presentation 레이어 이외의 클래스들을 수정하고 싶진 않아요. 그럼에도 불구하고 현업에선 정말 수많은 이유를 들어서 DTO로 반환하는 걸 유지하려고 합니다. 별도의 관심사를 끌어안게 되면서 애플리케이션 레이어의 테스트 코드 작성이 까다로워지고, 그로 인해 안정성이 하나씩 무너지고 균열이 생기기 시작하는 지점이 이곳이지 않을까 싶어요. 어찌보면 강의를 들을까 고민하던 때에 가장 매력있게 보였던 챕터였고, 무언가 해답을 얻을 수 있을까 했지만 여전히 뭔가 용기가 생기진 않는 것 같습니다. 물론 그것이 토비님 탓은 아니죠. 훌륭한 가르침이지만, 단지 이것을 제 현장에 전파할 때 발생할 어려움에 벌써 머리가 아파지는 것.. 그 뿐입니다. 질문은 아니고 그저 넋두리였습니다. 나머지 강의 마저 잘 들어보겠습니다. 감사합니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요, 영한님! JPA 활용2 강의 감사한 마음으로 잘 보고 있습니다. @PostConstruct는 빈이 생성되고 의존성 주입이 모두 끝난 직후에 자동으로 실행되는 메서드로 프록시 생성 이전에 실행되기 때문에 @Transactional과 함께 사용할 수 없어, init() 메서드에서 두 애노테이션(@PostConstruct, @Transactional)을 함께 작성할 수 없는 걸까요? GPT 답변을 참고한 후 질문 드립니다!
강의에서는 스트링풀이 힙에 있다고 했는데 스프링 풀은 메타영역으로 메소드 영역에 있고 리터럴에 생성되는 경우에 중복되지 않게 값이 있는지 찾아보고 참조값을 동일하게 가져가고 new String("hello") 이렇게 선언될때만 힙에 새롭게 저장되는거 아닌가요? 스트링풀이 힙에 있다고해서 헷갈리기 시작해서 질문드립니다. ( Java 7 기준 설명이라서 그런걸까요?) 감사합니다. 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
POST API 첫번째 강의에서 main.py의 52번 줄에 request를 dict() 형식으로 꼭 맞춰 주어야하나요?? 출력은 request >> id=4 contents='aaa' is_done=True request.dict() >> {'id': 4, 'contents': 'aaaa', 'is_done': True} 이렇게 되는데, 그냥 request 만 써도 swagger UI에서 보았을 땐 똑같이 dict 형식으로 들어오더라구요. 궁금해서 문의드립니다.
맹목적인 파라미터의 숫자가 아닌 보통 함축적 정보를 전달하기 위해 DTO, 즉 파라미터 오브젝트를 사용해서 전달하는 방식은 워낙 간결한 방식이라 저도 선호도가 높긴 합니다. 하지만 엔티티의 영역에서 DTO와 유사한 레코드 형식의 매개변수를 전달 받는 방식은 어느 정도 엔티티의 순수성이 침해 받는 방식이 아닌가 생각이 들어서요. 실제로 작성하신 코드를 봤을 때 그런 순수성 집착 보다 휴먼 에러를 사전에 방지하는 접근 방식이라 매우 적절한 트레이드 오프라고 생각이 들기도 합니다. 이 부분에 대해서 개인적인 궁금증이 생겨서 질의 드립니다. 아직 강의를 다 본 상황이 아니라서 이런 질문을 하는 게 맞는지 작성하는 지금 이 순간 조차 고민이 되지만, 실제로 제가 생각하던 방식과의 거리감이 느껴져서 질문을 남겨봅니다.
노트북 초기화 후 인텔리제이 설치 및 프로젝트 실행 시에 daemon process 오류가 나는데 원인을 못찾겠습니다. ㅜㅜ -윈도우 계정(한글)문제, 버전문제 등등 이야기가 있어서 다른버전으로 재설치도 해봤는데 동일하네요.. 조언 부탁드립니다. 버전은 아래와 같습니다. ======================================================== intellij 2024.3.6 JAVA 17 SpringBoot 3.5.4 ======================================================= Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used.For more details on the daemon, please refer to https://docs.gradle.org/8.14.3/userguide/gradle_daemon.html in the Gradle documentation. Process command line: C:\Program Files\Java\jdk-17\bin\java.exe --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/ com.sun.tools .javac.api=ALL-UNNAMED --add-exports=jdk.compiler/ com.sun.tools .javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/ java.net =ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 - Duser.country =KR -Duser.language=ko -Duser.variant -cp C:\Users\musin\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\lib\gradle-daemon-main-8.14.3.jar -javaagent:C:\Users\musin\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\lib\agents\gradle-instrumentation-agent-8.14.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.3 Please read the following process output to find out more: ----------------------- FAILURE: Build failed with an exception. * What went wrong: Could not initialize native services. * Try: > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org . * Exception is: org.gradle.internal.service.ServiceCreationException: Could not initialize native services. at org.gradle.internal.nativeintegration.services .NativeServices.initialize(NativeServices.java:290) at org.gradle.internal.nativeintegration.services .NativeServices.initializeOnDaemon(NativeServices.java:250) at org.gradle.launcher.daemon.bootstrap.DaemonMain.doAction(DaemonMain.java:114) at org.gradle.launcher.bootstrap.EntryPoint.run (EntryPoint.java:52) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:72) at org.gradle.launcher.bootstrap.ProcessBootstrap.run (ProcessBootstrap.java:39) at org.gradle.launcher.daemon.bootstrap.GradleDaemon.main(GradleDaemon.java:22) Caused by: net.rubygrapefruit.platform.NativeException: Failed to initialise native integration. at org.gradle.fileevents.FileEvents.init(FileEvents.java:71) at org.gradle.internal.nativeintegration.services .NativeServices$NativeFeatures$1.initialize(NativeServices.java:118) at org.gradle.internal.nativeintegration.services .NativeServices.<init>(NativeServices.java:343) at org.gradle.internal.nativeintegration.services .NativeServices.initialize(NativeServices.java:288) ... 10 more Caused by: java.lang.UnsatisfiedLinkError: C:\Users\musin\.gradle\native\0.2.7\x86_64-windows-gnu\gradle-fileevents.dll: 지정된 프로시저를 찾을 수 없습니다 at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$ NativeLibraryImpl.open (NativeLibraries.java:388) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394) at java.base/java.lang.Runtime.load0(Runtime.java:755) at java.base/java.lang.System.load(System.java:1957) at org.gradle.fileevents.FileEvents.init(FileEvents.java:55) ... 13 more
노트북 초기화 후 인텔리제이 설치 및 프로젝트 실행 시에 daemon process 오류가 나는데 원인을 못찾겠습니다. ㅜㅜ -윈도우 계정(한글)문제, 버전문제 등등 이야기가 있어서 다른버전으로 재설치도 해봤는데 동일하네요.. 조언 부탁드립니다. 버전은 아래와 같습니다. ======================================================== intellij 2024.3.6 JAVA 17 SpringBoot 3.5.4 ======================================================= Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used.For more details on the daemon, please refer to https://docs.gradle.org/8.14.3/userguide/gradle_daemon.html in the Gradle documentation. Process command line: C:\Program Files\Java\jdk-17\bin\java.exe --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/ com.sun.tools .javac.api=ALL-UNNAMED --add-exports=jdk.compiler/ com.sun.tools .javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/ java.net =ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 - Duser.country =KR -Duser.language=ko -Duser.variant -cp C:\Users\musin\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\lib\gradle-daemon-main-8.14.3.jar -javaagent:C:\Users\musin\.gradle\wrapper\dists\gradle-8.14.3-bin\cv11ve7ro1n3o1j4so8xd9n66\gradle-8.14.3\lib\agents\gradle-instrumentation-agent-8.14.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.3 Please read the following process output to find out more: ----------------------- FAILURE: Build failed with an exception. * What went wrong: Could not initialize native services. * Try: > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org . * Exception is: org.gradle.internal.service.ServiceCreationException: Could not initialize native services. at org.gradle.internal.nativeintegration.services .NativeServices.initialize(NativeServices.java:290) at org.gradle.internal.nativeintegration.services .NativeServices.initializeOnDaemon(NativeServices.java:250) at org.gradle.launcher.daemon.bootstrap.DaemonMain.doAction(DaemonMain.java:114) at org.gradle.launcher.bootstrap.EntryPoint.run (EntryPoint.java:52) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:72) at org.gradle.launcher.bootstrap.ProcessBootstrap.run (ProcessBootstrap.java:39) at org.gradle.launcher.daemon.bootstrap.GradleDaemon.main(GradleDaemon.java:22) Caused by: net.rubygrapefruit.platform.NativeException: Failed to initialise native integration. at org.gradle.fileevents.FileEvents.init(FileEvents.java:71) at org.gradle.internal.nativeintegration.services .NativeServices$NativeFeatures$1.initialize(NativeServices.java:118) at org.gradle.internal.nativeintegration.services .NativeServices.<init>(NativeServices.java:343) at org.gradle.internal.nativeintegration.services .NativeServices.initialize(NativeServices.java:288) ... 10 more Caused by: java.lang.UnsatisfiedLinkError: C:\Users\musin\.gradle\native\0.2.7\x86_64-windows-gnu\gradle-fileevents.dll: 지정된 프로시저를 찾을 수 없습니다 at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) at java.base/jdk.internal.loader.NativeLibraries$ NativeLibraryImpl.open (NativeLibraries.java:388) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394) at java.base/java.lang.Runtime.load0(Runtime.java:755) at java.base/java.lang.System.load(System.java:1957) at org.gradle.fileevents.FileEvents.init(FileEvents.java:55) ... 13 more
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 2-4 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? apllication.yml 파일에서 url 부분에 localhost로 적용하면 도커 컨테이너끼리 통신이 안되는 것으로 알고 있는데 문제 없이 작동하는 이유가 뭔가요?? 혹시 제가 잘못 알고 있는 것이면 말씀해주시면 감사하겠습니다. ㅎㅎ 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!