묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
멀티 스레드 테스트 문제
안녕하세요 선생님들 도움을 요청 하고자 질문글을 올립니다.멀티 스레드 테스트 중 문제가 발생 했습니다.서칭을 해보아도 문제 해결을 할 수 없어서 질문 드립니다. 멀티 스레드 모임 참가 테스트를 위해 테스트 코드를 짯습니다.트랜잭션 어노테이션이 있을 경우 무한 대기에 빠지고 밑의 예외가 발생 합니다.이상한점은 트랜잭션 어노테이션이 없거나 H2 DB 테스트를 하면 문제가 없습니다.완성된 테스트도 H2 데이터 베이스는 통과 하지만 MySql 테스트를 하면 똑같이 무한 대기후예외가 발생합니다. 이유가 뭘까요 ㅠㅠ 힌트라도 주시면 감사합니다.void joinEventWhenParticipateAtTheSameTimeWithConcurrency() throws Exception { //given int taskCount = 5; ExecutorService executorService = Executors.newFixedThreadPool(5); CountDownLatch countDownLatch = new CountDownLatch(taskCount); Event findEvent = executorService.submit(() -> eventRepository.save(createEvent("테스터", "테스트 모임", 3))).get(); executorService.shutdown(); } java.util.concurrent.ExecutionException: org.springframework.dao.PessimisticLockingFailureException: could not execute statement [Lock wait timeout exceeded; try restarting transaction] Caused by: org.springframework.dao.PessimisticLockingFailureException: could not execute statement [Lock wait timeout exceeded; try restarting transaction] @DisplayName("5명의 회원이 동시에 최대 인원이 3명인 모임에 참가 할때 3명만 참여 할 수 있다.") @Test void joinEventWhenParticipateAtTheSameTimeWithConcurrency() throws Exception { //given int taskCount = 5; ExecutorService executorService = Executors.newFixedThreadPool(5); CountDownLatch countDownLatch = new CountDownLatch(taskCount); Event findEvent = executorService.submit(() -> eventRepository.save(createEvent("테스터", "테스트 모임", 3))).get(); List<User> users = executorService.submit(() -> Stream .generate(() -> { User user = createUser("테스터", "testEmail"); userRepository.save(user); return user; }) .limit(taskCount) .toList()).get(); //when AtomicInteger exceptionCount = new AtomicInteger(0); for (User user : users) { executorService.submit(() -> { try { eventService.joinEvent(findEvent.getId(), user.getId()); } catch (BusinessException ex) { exceptionCount.incrementAndGet(); } finally { countDownLatch.countDown(); // 카운트다운 } }); } countDownLatch.await(); Long participateCount = executorService.submit( () -> userEventRepository.countParticipantByEventId(findEvent.getId())).get(); executorService.shutdown(); //then assertThat(participateCount).isEqualTo(3); assertThat(exceptionCount.get()).isEqualTo(2); }
-
미해결한 입 크기로 잘라먹는 Next.js(v15)
supabse 연결 불가
npx prisma db push명령어 실행시, 아래와 같은 오류가 발생합니다. Error: P1001: Can't reach database server at aws-0-ap-northeast-2.pooler.supabase.com:`5432`.env 파일 루트 경로에 생성DATABASE_URL, DIRECT_URL 오타 없이 알맞게 입력위의 두 조건 모두 만족하고 있는데,왜 이런 오류가 발생하는 걸까요? 추가로,가이드에 따라 supabase에서 생성한 db가현재 활성화 상태이거나 running상태인지 어떻게 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
조회 시 Entity를 뿌리는 것 아닌가요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]view 계층과 주고 받을 때는 dto로 주고 받아야 하니 들어올 때 form을 사용했는데, 지금처럼 em.createQuery("select i from Item i", Item.class).getResultList(); 이런 repo 코드를 정제없이 그대로 return 해주는 경우 Entity를 직접 전달하고 있는 것 아닌가요 ??잘못 이해하고 있는 부분에 대해 짚어주시면 감사하겠습니다.만약 잘 이해하고 있고, 예제라서 이렇게 처리한 것이라면, 정제하는 과정이 서비스 단에서 일어나는게 좋을까요 ? 컨트롤러 단에서 일어나는게 좋을까요 ?
-
미해결홍정모의 따라하며 배우는 C++
static int가 아닌 int로도 메모리 주소가 계속 같습니다.
안녕하세요? 수업시간에 static int와 int의 차이에 대해서 설명을 해주셨습니다. 저도 int a와 static int a를 통해서 값 변화를 확인했고요. 그런데 메모리를 계속 새로 할당받으면 메모리 주소가 바뀔 것이라고 생각해서 &a를 통해서 확인해보려고 하는데, int a로 해도 메모리 주소가 계속 같습니다. 혹시 제가 생각한 방향이 잘못된 것인지 여쭤보고 싶습니다. void doSomething() { int a = 1; // 계속 메모리를 새로 할당받음. a++; std::cout << &a << std::endl; } int main() { doSomething(); doSomething(); doSomething(); doSomething(); } 제 코드에서는 돌렸을 때, 계속 같은 값이 나오고 있습니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
만약 비동기 작업이 완료되었을 때는 넘겨주는 콜백 함수가 없다면 어떻게 되나요?
제가 이해한 내용이 맞는지 궁금하여 질문드립니다! 콜백 함수 없이 비동기 작업을 Web APIs에게 넘겨준다면 비동기 작업이 처리되고 넘겨줄 콜백 함수가 없으므로 아무일도 일어나지 않는다.개발자가 자바스크립트에서 비동기적으로 어떠한 코드를 처리하기 위한 목적으로 비동기 코드와 콜백 함수를 같이 작성한다. 라고 생각해도 될까요?
-
해결됨책 3권을 영상으로 만든 Unity 게임 개발
유닛 리지드바디 질문
다이내믹으로 안하고 굳이 키네마틱으로 하는 이유가 따로있나요?? 다이내믹으로 하면 istrigger를 활성화 안해도 사용할 수 있는거 아닌가요??
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
질문있습니다.
안녕하세요. 질문 있습니다.수업에 아래와 같은 코드를 사용했습니다.type Post = { title: string; content: string; author: { id: number; name: string; age: number; }; }; type Author = Post['author']제가 궁금한 것은 처음부터 Author 타입을 분리해서 선언하고 그 타입을 Post에서 가져다 쓰면 안되나요?타사 라이브러리에 타입이 잘못 선언돼 있다면 유용할 것 같긴 한데 그 외에도 어떤 사용 방법이 있을지 궁금합니다.감사합니다. 새해 복 많이 받으세요!
-
미해결350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
data.ai 가입 관련
안녕하세요. 시장 트렌드 조사를 위해 data.ai에 가입할려고 하는데, Sensor Tower라는 기업에 인수가 되었는지 가입을 해도 Sensor Tower로 이동이 되네요.혹시 강사님께서도 Sensor Tower로 그대로 이용하는지 문의드립니다..
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 스크롤 쿼리 질문 있습니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요.select * from article where board_id = 1 order by article_id desc limit 30;해당 쿼리에서 강사님은 Extra에 null인데 제가 실행하면 using where가 나오네요.using filesort는 안나오는데 크게 상관 없는 부분일까요?
-
해결됨백엔드 애플리케이션 성능 테스트하기
테스트 시나리오 작성에 대한 문의
안녕하세요! 최근 다시 고민이 있어 영상 보며 해소해 나가고 있는데, 몇가지 궁금증이 해소 할 곳이 없어 문의 드립니다. 사전 설명배포는 완료되었고, 실 사용자 수는 없음.하지만, 현재 서버의 최대 TPS와 다양한 성능 개선의 방법을 익히기 위함시나리오는 어떤 기준으로 체크를 해 나가는게 나을까요? 단순 FE 클라이언트와 통신을 위한 api 서버라면, 화면 구성 기준으로 혹은, 실제 사용자 흐름 기준으로 시나리오를 작성해보면 될까요?혹은, 다른 좋은 테스트 방법이 있을까요?현재는, 모든 api 에 대해 기본적인 레이턴시 스펙 확인과 프론트 화면 기준 TPS 와 레이턴시를 확인하려고 합니다.이렇게 구성 시, 사용자가 접할 수 있는 시나리오 중, 최악의 시나리오의 TPS 결과가 서버 최대 동접자 수로 판단?현장에서 테스트 스크립트는 github 에 같이 올려 공유를 하게 하나요? 아니면 별도의 테스트 파일을 어딘가에 업로드 해서 팀원과 공유를 하게 되나요?내용과 관련 없는 얘기지만... 현재 병목 지점을 명확하게 하기 위해, 모니터링 툴을 적용하려고 합니다. 취준생 관전에서 추천 하실 만한 툴이 있을까요?현재 api 서버 인프라 구성은, mysql, redis, enginX, springboot 로 구성되어 있습니다.고려하고 있는 조합은, Prometheus + Grafana 에, 여유가 된다면 스카우터 추가 생각하고 있습니다.많은 질문 드려 죄송하고 좋은 강의 내용 감사합니다~!
-
해결됨아바타 커뮤니티앱 만들기 (React Native Expo)
공통버튼 컴포넌트구현하기에서,, srnfc가 안떠요;;
어떻게 해야할까요 ㅠㅠ
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
React Hooks 만들때는 첫 번째 파일명을 대문자로 안해도되나요?
안녕하세요! 질문있습니다.(강의 구간: 10:43초)강사님께서 평소 컴포넌트 파일들을 만들때파일명 첫 번째에는 항상 대문자로 적으셨는데hooks를 만들때는 첫 번째 글자를 소문자로 적어주셨는데hooks만들때는 첫 번째 글자를 소문자로 적는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 활용에 대하여 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. AOP는 핵심 로직이 아닌 부가적인 로직을 처리할 때 주로 사용한다고 알고있습니다. 보통 많이 사용하는 경우는 로그추적, 트랜잭션 등이 있다고 하셨는데 권한을 체크할 때도 사용할 수 있나요?만약 사용자들은 방을 생성해서 그 방안의 참여자들만 글을 쓸 수 있을 때, 이 유저가 참여자인지 확인하는 로직이 필요하다면 이 로직을 AOP를 활용하여 작성해도 되는지 궁금합니다. 여러 메서드들에서 사용하기 때문에 공통 관심사라는 생각이 들긴 합니다. 직접 서비스단에서 매번 확인하면 중복 코드가 발생할 것 같아서 AOP를 활용하고 싶은데 이런 경우도 사용이 가능한지 궁금해 질문남깁니다. 감사합니다!
-
미해결구성 관리 자동화 도구 - 앤서블(Ansible)
ssh 연결 설정과 관련하여 현업에서는 어떻게 하는지 궁금합니다.
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다![질문 하기]강의에서는 ansible을 처음 설치하고 테스트를 위해 ansible all -m ping -> yes 3번 입력 후 ansible all -m ping -k 는 정상적으로 수행이 되었는데요 저의 경우에는 ssh 설정이 막혀 있어 각 노드들의 sshd_config 파일에서 root 로그인을 허용해주었습니다.실습환경에서는 노드가 3개라서 하나하나 수정했지만, 현업에서는 노드들이 훨씬 많을텐데, ansible 도 사용하지 못하는 상황에서 이러한 번거로운 작업을 어떻게 하는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)
redis 를 compose 로 묶어준 이유가 궁금합니다.
강의 내용 중, redis 를 docker-compose 로 묶어 한번에 띄우도록 설정한 모습을 확인할 수 있었습니다. 이렇게 되면 서버 코드의 변경점이 생겨 수동 재배포를 진행하게 될 때, docker-compose 파일로 실행하게 될 것 같습니다. redis 도 일종의 db라고 생각이 되는데, 서버의 코드가 업데이트 되면 redis 를 다시 docker로 띄운다는 가정이 생기는 것 같은데, 맞는 접근법인지 궁금합니다.초기 ec2 설정 단계에서 단순히 redis 를 설치해서 사용하면 되지 않나 라고 생각이 됩니다. 만약 캐시 전략의 변경이나, 캐시 데이터의 정합성? 문제가 우려된다면 key를 모두 날려주는 cli 를 실행시키는 방법이 더 유욜할 것 같은데, 강의 편의와 docker-compose 의 유용성을 설명하기 위한 강의 챕터인가요?
-
해결됨비전공자도 이해할 수 있는 AWS 입문/실전
[실습] 7. Express 서버를 EC2에 배포하기 에서 node 설치 안됨
동영상처럼 인스턴스에 연결한 후 https://jscode.notion.site/7-Express-EC2-5f90f0ece37943f99dffbf29a21bdd93에 있는 1. Ubuntu 환경에서 Node.js 설치하는 법을 복사 붙여넣기 한 후 node -v 를 작성했는데 다음과 같이 나옵니다. 다른 분의 질문도 찾아서 보았는데 다른 분은 보안 규칙의 포트 번호를 잘 못 쓰신것 같은데 저는 강사님과 똑같이 되어 있었습니다. 어디가 잘못된 것일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-E 강의 질문 드립니다.
안녕하세요, 선생님. 4-E(#14890 경사로) 문제의 경우, 해설 영상과 해설코드를 보면 별도의 비트마스킹 연산은 다루지 않는 것 같은데,비트마스킹 없이 풀어도 괜찮은 문제라고 이해해도 될까요? 감사합니다.
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
프론트코드 받을 수 있나요
정말 강의잘 듣고있습니다 다름이아니라 빠르게 서버만 진행하고싶은데 프론트 코드저장소가있으시다면 받을 수 있나요? 아니면은 스톰프를 테스트할 수 있는 팁이있나요?
-
해결됨아바타 커뮤니티앱 만들기 (React Native Expo)
server 쪽에서 should be a number of seconds or string representing a timespan 에러가 발생합니다
Window, node 22 버전 사용중입니다. 4-5 로그인 연동하기에서 회원가입까진 연동이 되는데 로그인 api 요청시 500에러가 발생합니다. [Nest] 22548 - 2025. 02. 15. 오후 10:00:50 ERROR [ExceptionsHandler] "expiresIn" should be a number of seconds or string representing a timespan Error: "expiresIn" should be a number of seconds or string representing a timespan at D:\project\community\server\node_modules\jsonwebtoken\sign.js:56:15 at Array.forEach (<anonymous>) at validate (D:\project\community\server\node_modules\jsonwebtoken\sign.js:47:6) at validateOptions (D:\project\community\server\node_modules\jsonwebtoken\sign.js:62:10) at module.exports [as sign] (D:\project\community\server\node_modules\jsonwebtoken\sign.js:171:5) at D:\project\community\server\node_modules\@nestjs\jwt\dist\jwt.service.js:56:17 [Nest] 22548 - 2025. 02. 15. 오후 10:00:50 LOG [HTTP] [POST] /auth/signin (500) (okhttp/4.12.0) //axios.ts import axios from "axios"; import {Platform} from "react-native"; const baseUrls = { ios: 'http://localhost:3030', android: 'http://10.0.2.2:3030' } const axiosInstance = axios.create({ baseURL: baseUrls[Platform.OS] ?? 'http://localhost:3030' }); export default axiosInstance //auth.ts import {getSecureStore} from "@/utils/secureStore"; import axios from "@/api/axios"; import {Profile} from "@/types"; interface RequestUser { email: string; password: string } async function postSignup(body: RequestUser): Promise<void> { const {data} = await axios.post('/auth/signup', body); return data; } async function postLogin(body: RequestUser): Promise<{ accessToken: string }> { const {data} = await axios.post('/auth/signin', body); return data; } //useAuth.ts function useLogin() { return useMutation({ mutationFn: postLogin, onSuccess: async ({accessToken}) => { setHeader('Authorization', accessToken) await saveSecureStore('accessToken', accessToken); queryClient.fetchQuery({queryKey: ['auth', 'getMe']}); router.replace('/') }, onError: () => { }, }) }postLogin 에서 엔드포인트만 /auth/signup로 바꾸면 회원가입은 정상적으로 요청이 됩니다.
-
해결됨Combine - iOS의 Reactive Programming(2025)
merge 오퍼레이터 질문
안녕하세요.stream은 시간이 지남에 따라 변하는 어떤 상태로 이해했는데요.publisher1과 publisher2에서의 stream을 각 stream1, stream2라고 했을때 시간이 지남에 따라 동시에 상태가 변하면 해당 상태는 merge 오퍼레이터에서 방출은 어떻게 처리하나요? [동시가 아닌 경우]-1-2-3---4--5--6---> 1-4-2-5-3-6 [동시인 경우]-1-2-3--4-5-6--> ?????