11. 동시성 컬렉션 PDF 13 페이지 당연한 이야기지만 다음과 같이 나누어 작성해도 된다. SimpleList basicList = new BasicList(); SimpleList proxyList = new SyncProxyList(basicList); test(list) 강의 5:40 즈음 나오는 내용입니다. test() 에 proxyList 가 인자로 전달되어야하는데 pdf에는 test(list) 로 작성되어있네요. 감사합니다
안녕하세요 강사님, 좋아요 기능을 만드는 api를 반복하여 보고 있는데 궁금한 점이 생겨서 질문 드립니다. 좋아요 기능을 만들고 테스트중인데 좋아요가 중복처리 예를 들어, 10번 게시글에 15번의 사용자가 좋아요가 두 개를 눌러도 두 번 다 좋아요가 눌리는 상황인데 이에 대한 중복처리는 따로 해줘야 하는 것인가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 영한님 강의 듣다가 Result 클래스를 써야한다고 언급해주셨는데요, 해당 클래스 관련 질문 답변을 봤는데 https://www.inflearn.com/community/questions/442871/result-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4?focusComment=168228 @GetMapping("/{boardId}") public ResponseEntity<BoardResponse> getBoard(@PathVariable("boardId") Long boardId) { return ResponseEntity.ok(boardService.getBoard(boardId)); } 이런식으로 ResponseEntity 감싸서 DTO를 반환하는것과 Result 클래스가 같은 맥락으로 응답을 추상화한다고 생각하면 될까요? 감사합니다 :)
RequestBody를 읽어올 때, Content-Length의 값을 파싱하고 그 크기만큼 read()에 배열 형태로 전달해서 버퍼형태로 한번에 받아오게끔 작성하셨습니다. 여기서 궁금한 점은, Content-Length는 byte 단위로 측정이 될텐데, char[]를 그대로 사용하면 UTF-8로 디코딩이 자동으로 되는 이유가 궁금합니다..! byte[] 단위로 읽어온 다음, Charset을 지정해서 디코딩해야하는거 아닌가욤? 감사합니다!
영한님이 단일 스레드일 때 테스트 하셨는데요. 멀티 스레드일 때 테스트 결과도 궁금하신 분들이 있을 것 같아 공유 드립니다 :) 빠른 테스트를 위해서 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에 주고싶은 응답값을 줘서 바로 처리하게끔 하자 정도로 이해하면 맞을까요?
안녕하세요 지금 expo go에서 구글 로그인 연결 중 인데요. redirectUri를 https://auth.expo.io/@your-username/your-app-slug 식으로 입력하면 Something went wrong trying to finish signing in. Please close this screen to go back to the app. 화면이 뜨면서 액세스 토큰은 불러와지는 것 같고, 밑에 방식으로 하면 redirectUri가 exp://ip주소:포트번호 로 나오면서 구글 클라우드 콘솔에 등록을 할 수가 없는데 어떻게 해결하면 좋을까요?.. 도와주시면 감사하겠습니다.. const [request, response, promptAsync] = Google.useAuthRequest({ clientId: process.env.GOOGLE_CLIENT_ID, //redirectUri: 'https://auth.expo.io/@your-username/your-app-slug', redirectUri: makeRedirectUri({ useProxy: true } as any), scopes: ['profile', 'email'], });
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 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로 반환하는 걸 유지하려고 합니다. 별도의 관심사를 끌어안게 되면서 애플리케이션 레이어의 테스트 코드 작성이 까다로워지고, 그로 인해 안정성이 하나씩 무너지고 균열이 생기기 시작하는 지점이 이곳이지 않을까 싶어요. 어찌보면 강의를 들을까 고민하던 때에 가장 매력있게 보였던 챕터였고, 무언가 해답을 얻을 수 있을까 했지만 여전히 뭔가 용기가 생기진 않는 것 같습니다. 물론 그것이 토비님 탓은 아니죠. 훌륭한 가르침이지만, 단지 이것을 제 현장에 전파할 때 발생할 어려움에 벌써 머리가 아파지는 것.. 그 뿐입니다. 질문은 아니고 그저 넋두리였습니다. 나머지 강의 마저 잘 들어보겠습니다. 감사합니다
안녕하세요! react-native 의 SafeAreaView 는 기본적으로 안드로이드 지원이 안되고 유연하지 않아 react-native-safe-area-context 의 SafeAreaView를 사용하는게 권장된다고 하더라구요. react-native의 SafeAreaView를 쓰신 이유가 궁금해요
[질문 템플릿] 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. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
npm ls react npm ls react-native npm ls expo 버전을 알려주시면 질문자분과 동일한 환경에서 답변 드릴 수 있습니다. npm run android 했을때 › Using development build › Press s │ switch to Expo Go › Press a │ open Android › Press w │ open web › Press j │ open debugger › Press r │ reload app › Press m │ toggle menu › shift+m │ more tools › Press o │ open project code in your editor › Press ? │ show all commands Logs for your project will appear below. Press Ctrl+C to exit. Android Bundled 1357ms node_modules\expo-router\entry.js (1280 modules) 다음과 같이 development build로 실행됩니다 그래서인지 expo go 안에도 threads-clone이 나타나질않네요 그래서 s 키를 눌러서 이렇게 바꾼 후에도 나타나지 않습니다
맹목적인 파라미터의 숫자가 아닌 보통 함축적 정보를 전달하기 위해 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