묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
39:32 질문드립니다.
재귀함수에서 결과값이 15로 나온 것은 이해를 하였습니다. 단순 노가다식으로 접근하면 크게 어렵지 않을 것 같아요. 근데 입력값이 5가 되는 것이 이해가 되지 않습니다.초기식에 5를 입력하고 계속 재귀함수로 n값이 낮아지면서 결국엔 n이 0값이 되는데 입력값은 그렇다면 0으로 바뀌는 것이 아닌가요?
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
Node로 CI/CD 제작 중 안되는 이유
강사님 안녕하세요. nest를 완강하고 개인적으로 Node로 만들어보고 있습니다. 근데 Github Actions 까지 무사히 잘 완료가 되었는데요.배포가 제대로 되어있는지 확인하려고 하니까 안되고 있습니다.이렇게 서버가 살아있고 저는 3000번 포트를 사용해서 https://43.202.202.143:3000/ 이라고 작성했는데 접속이 안되더라고요. 제가 Gpt랑 나름 찾아봐서 작성해본 코드는 아래와 같습니다. =============================name: Deploy To EC2 on: push: branches: - dev jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: Node 설치 uses: actions/setup-node@v4 with: node-version: "20" - name: 의존성(라이브러리) 설치 run: yarn install --frozen-lockfile - name: .env 파일 만들기 run: | echo '${{secrets.ENV}}' > .env # - name: 테스트 코드 실행 # run: npm run test # - name: 빌드 # run: npm run build - name: 압축하기 run: tar -czvf project.tar.gz .env package.json yarn.lock src - 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.tar.gz target: /home/ubuntu/Solo-Resume-Project/tobe - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거 username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트 script_stop: true script: | rm -rf /home/ubuntu/Solo-Resume-Project/current mkdir /home/ubuntu/Solo-Resume-Project/current mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz cd /home/ubuntu/Solo-Resume-Project/current tar -xvf project.tar.gz yarn install pm2 kill pm2 start src/app.js --name "backend-server" =============================세팅도 전부 다했고요.근데 pm2 logs를 작성하면 아래와 같이 나옵니다.제가 env에 서버포트 번호를 넣어놓고 상수값을로 지정한 후에 따로 빼서 사용하는데 그것 때문인가요?기존의 vs 코드에서는 잘 작동이 됩니다.처음 혼자서 node로 작성하는거다보니 너무 질문이 많아서 죄송한데 답을 알려주시옵소서!!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
스택만을 이용한 풀이
선생님의 풀이를 보고 이건 진짜 못떠올릴 것 같은데? 라는 생각이 들었습니다.배열에 마킹을 하면서 푸는 풀이는 떠올릴 수 있을 것 같은데, 스택만 이용한 풀이에서 -1을 넣어서 풀이하는 방식은 정말 감탄이 나오네요. 저도 스택만을 이용하는 비슷한 풀이를 떠올려서 '((()))'가 6이 나오게 하는 방법은 고안을 했는데 '((()))()'가 8이 되게 하는걸 처리하기가 너무 어렵더라구요. 하지만 -1을 넣어두면 전부 처리가 되네요.그리고 올바르지 않는 문자열이 오면 그 인덱스를 넣어주면 -1을 넣은 것과 동일하게 뒤의 문자열도 판별할 수 있다니...이 풀이를 보고 이런 아이디어는 정말 못 떠올릴 것 같다는 생각이 들었습니다. 이런 아이디어를 잘 떠올리기 위해서 어떻게 연습하면 좋을까요?
-
해결됨웹 프론트엔드를 위한 자바스크립트 첫걸음
섹션 7 - 7 프로젝트 적용하기
안녕하세요! 마지막 프로젝트 적용만 남았는데 manifest.json 파일 만들고 저렇게 작성했는데 확장 프로그램 로드를 못하는 상황입니다..!
-
해결됨웹 프론트엔드를 위한 자바스크립트 첫걸음
섹션7 - 7 프로젝트 적용하기
🚨질문 작성법 및 안내사항질문 작성법- 몇 섹션의 어떠한 강의에 대한 질문인지 작성해주세요. (ex. 섹션2 조건문에 대한 질문)- 질문은 최대한 구체적으로 작성해주세요.- 비슷한 질문이 올라와있는지 확인해주세요.- 코드가 포함된 질문은 아래와 같이 코드블록을 사용해주세요.body { margin: 0 auto; width: 100%; font-family: 'Hi Melody'; background-image: url("https://source.unsplash.com/user/hanjw3288/likes"); background-repeat: no-repeat; background-attachment: fixed; background-position: center; background-size: cover; /* color: white; */ /* overflow: hidden; */ }강사님 안녕하세요!마지막 프로젝트 적용하기 전에 background-image 적용할때 unsplash가 적용이 안되는데 어떻게 해결해야 할까요..? 저 url 타고 들어가면 404페이지가 뜹니다..
-
미해결워드프레스(WordPress) 완전정복
워드프레스로 웹사이트를 만드는 경우애도 HTML, CSS 코드를 직접 작성해야 하나요? 프로젝트 1번을 거의 다 들었는데 대부분 작업이 CSS코딩과 HTML코딩 같아서요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
DTO와 인증 서비스 강의 질문있습니다.
1.DTO와 인증 서비스 13분 38초 화면이 [username user9@aaa.com ,password 1111] postman에서 회원가입하는 화면인건가요?2.DTO와 인증 서비스 17분 10초 postman 화면도 있는데 이거는 로그인 화면인건가요?3. 제가 포스트맨에서 username user10@aaa.com ,password 1111으로 넣고 send를 누르면 맨 위 사진과 같이 에러가 나옵니다.참고로 db 테이블에 username user9@aaa.com ,password 1111 내용이 있습니다.포스트맨{"timestamp": "2025-03-02T20:26:21.086+00:00","status": 404,"error": "Not Found","trace": "org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/member/login.\r\n\tat org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:586)\r\n\tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService spring boot 실행시 아래와 같이 나옵니다. Principal이 username이 user9@aaa.com로 안나옴.[Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]]코드 첨부합니다.https://drive.google.com/file/d/1VtPVj_uRjPC7fYG3gRCeuFKcs2s4wPZm/view?usp=drive_link
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
Item DB Firebase 연결
Axe, Mana, Dice 까지는 firebase에 추가가 되었는데, 이후에 추가로 아이템을 등록을 해보려고 Scriptable/Item 폴더 안에 Scriptable Object를 추가했더니 인게임에서 키값도 못찾고 DB에 당연히 등록도 안되네용.. 어떻게하면 좋을까요 ㅠ
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
params부분 에러
fetch 부분에서 다음과 같이 작성하였는데 params.id부분에서 id 부분에Property 'id' does not exist on type 'Promise<{ id: string | string[]; }>'.ts(2339)이러한 에러가 발생합니다. const result = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/${params.id}` );
-
미해결Airflow 마스터 클래스
module 'requests' has no attribute 'post'
토근 발급하는 과정에서 해당 오류로 다음 진도를 못나가고 있습니다..ㅜㅜ이전 서울시 공공데이터 실습하는 과정에서 requests 정상 import 및 문제없이 작동하였는데, 이번 실습에선 module 'requests' has no attribute 'post' 오류가 발생하네요.- 오류를 해결하기 위해 requests.py 파일이 있는지 확인- requests 정상 import 확인- requests reinstall진행하였으나 문제 해결이 되지 않았습니다..혹시 놓친 부분이 있는지 도와주세요. 감사합니다!import requests client_id = '' redirect_url = 'https://example.com/oauth' authorize_code = '' token_url = 'https://kauth.kakao.com/oauth/token' data = { 'grant_type': 'authorization_code', 'client_id': client_id, 'redirect_url': redirect_url, 'code': authorize_code } response = requests.post(token_url, data=data) tokens = response.json() print(tokens) 추가로 아래 AI 답변 관련하여 확인 해보았습니다. 그럼에도 놓친 사항이 있을 수 있으니 함께 확인하여 답변해주시면 감사하겠습니다!
-
해결됨비전공자도 이해할 수 있는 Nginx 입문/실전
location = /50.x.html 블럭
안녕하세요! 좋은 강의 잘 보고 있습니다!! default.conf 파일에서 location = /50.x.html 블럭의 역할이 location / 블럭과 동일해서 필요없는거 같은데 존재하는 이유가 뭔가요??단지, 현재는 두개의 블럭의 root 값이 똑같아서 그런거고 나중에 달라질수 있기때문에 일단 블럭이 2개 만들어져있는 건가요 ??
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
캐싱 옵션이 적용되질않아요.
어떠한 옵션을 적용해도 콘솔과 같은데 뭐가 잘못되었을까요?새로고침이나, 로고를 눌러서 인덱스 파일에 가도 똑같은 로그만 나타납니다.
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
suspense사용시 오류가 생겨요
"resource": "/c:/Porject/ReactNative/lottoApp/front/src/features/map/hooks/queries/useGetInfinitePosts.ts", "owner": "typescript", "code": "2322", "severity": 8, "message": "Type 'unique symbol | QueryFunction<ResponsePost[], readonly unknown[], number>' is not assignable to type 'QueryFunction<ResponsePost[], readonly unknown[], number> | undefined'.\n Type 'typeof skipToken' is not assignable to type 'QueryFunction<ResponsePost[], readonly unknown[], number>'.", "source": "ts", "startLineNumber": 22, "startColumn": 5, "endLineNumber": 22, "endColumn": 12, "relatedInformation": [ { "startLineNumber": 28, "startColumn": 5, "endLineNumber": 28, "endColumn": 12, "message": "The expected type comes from property 'queryFn' which is declared here on type 'UseSuspenseInfiniteQueryOptions<ResponsePost[], ResponseError, InfiniteData<ResponsePost[], number>, ResponsePost[], readonly unknown[], number>'", "resource": "/c:/Porject/ReactNative/lottoApp/front/node_modules/@tanstack/react-query/build/modern/types.d.ts" } ]}] 라는 오류인데 queryfn이랑 skiptoken이랑 겹친다는 식으로 이야길하는것같은데 영상에서는 딱히 오류가없어서요.. import {queryKeys} from '@/app/config'; import {getFavoritePost, ResponsePost} from '@/shared/api'; import {ResponseError} from '@/shared/types/common'; import { InfiniteData, QueryKey, UseInfiniteQueryOptions, useSuspenseInfiniteQuery, } from '@tanstack/react-query'; const useGetInfiniteFavoritePosts = ( queryOptions?: UseInfiniteQueryOptions< ResponsePost[], ResponseError, InfiniteData<ResponsePost[], number>, ResponsePost[], QueryKey, number >, ) => { return useSuspenseInfiniteQuery({ queryFn: ({pageParam}) => getFavoritePost(pageParam), queryKey: [queryKeys.POST, queryKeys.FAVORITE, queryKeys.GET_FAVORITE_POST], initialPageParam: 1, getNextPageParam: (lastPage, allPages) => { const lastPost = lastPage[lastPage.length - 1]; return lastPost ? allPages.length + 1 : undefined; }, // select: data => data.pages, ...queryOptions, }); }; export default useGetInfiniteFavoritePosts;
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 API 34 설치 방법 질문
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강의 잘 듣고 있습니다 ㅎㅎ 다름이 아니라 https://www.inflearn.com/community/questions/1526527/android-api-34-%EC%84%A4%EC%B9%98%EC%97%AC%EB%B6%80 위 링크와 같은 문제인데 아마 제가 설치한 버전이 최신 버전이라서 이런 문제가 생긴 것 같은데 뭘 설치하면 될까요? 원격 말고 그냥 답변 주시면 감사하겠습니다! 추측해보건데 API Level 부분을 보면 될 것 같은데 그럼 영상에서 설명하는 안드로이드 14.0이 API 34로 추측됩니다. 저는 최신 버전을 설치하면 될까요 아니면 API 34인 안드로이드 14.0 버전을 설치할까요?저장
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
PathVariable과 RequestParam, Test Code에 관하여
안녕하세요 쿠케님 강의 잘 듣고 있습니다. 너무 좋아서 팀원들한테도 전파했을 정도입니다. 다들 구매예정이시라고 하네용 강의 듣는 도중 궁금점이 생겼는데 PathVariable과 RequestParam의 가장 큰 차이점은 단 하나의 유일한 자원의 식별자를 url 경로에서 표현하는가의 여부로 배웠습니다. 그래서 저는 articleId의 경우는 PatVariable로 남겨두었습니다. 이 두가지를 구분하는 쿠케님의 기준이 있으실까용?이 강의에서 테스트는 전부 JUnit이 아닌 다른 것들로 수행 중이신데요. 실제로 테스트 코드 작성하실때도 JUnit을 사용하지 않으시나요? 아니면 그냥 강의 진행 편의상 JUnit을 사용하지 않으신건가요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloController 부분 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용이랑 똑같이 다 따라쳤고 확인도 해봤는데 머 때문에 오류 뜨는지 모르겠어요 ㅠㅠ
-
미해결대세는 쿠버네티스 (초급~중급편)
갑자기 다른 클러스터를 a,b를 만들어서 당황스러운데...
제가 뭔가를 놓친건지 아니면 당연히 해야할걸 못하는건지 모르겠네요...다른 질문글에선 그냥 VAGRANT 새로운 스크립트 만들어서 50 51 52 하셨던데 그리고 다시 vagrant up해서 사용하면 되는건지 뭔지 전혀 감이 안와서요....제가 아직 잘 못해서 수업을 들어도 감을 못잡는건가 싶네요 ㅠㅠ시크릿도 mount가 되어있을줄알았는데 none이라고 뜨고요 ㅠ
-
미해결실무 중심! FE 입문자를 위한 React
4.2 React 렌더링 과정 에서 왜 컴포넌트가 두 번씩 호출될까요?
/*FunctionalComponent.jsx파일*/ import {useEffect,useState} from 'react'; function FunctionalComponent() { console.log('Function Beginning'); const [value, setValue] = useState(0); useEffect(() => { console.log('Function useEffect[]'); return () => { console.log('Function useEffect return[]'); } },[]); useEffect(() => { console.log('Function useEffect[value]'); return () => { console.log('Function useEffect return[value]'); } },[value]); console.log('Function End'); return ( <div> <h1>!FunctionalComponent</h1> <h1>value: {value}</h1> <button onClick={() => { setValue((state) => state + 1) }} > Increase value </button> </div> ); } export default FunctionalComponent /*App.jsx파일*/ import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' import axios from 'axios'; import FunctionalComponent from './practice/FunctionalComponent' function App() { return ( <FunctionalComponent /> ) } export default App
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
좋아요 동시성 로직 관련 질문
안녕하세요 강사님, 좋은 강의 잘 듣고 있습니다. 바쁘실텐데도 불구하고 답변해주셔서 감사합니다. 질문은 크게 2가지 입니다.유니크 제약 조건 위반시 예외처리방법like() 로직에선 article_id와 user_id로 유니크 제약 조건을 걸어서 한 명의 사용자가 중복 생성하는 것을 막고 있습니다. 이 유니크 제약 조건을 위반하여 발생하는 에러는 @ControllerAdvice에서 @ExceptionHandler(DataIntegrityViolationException.class) 로 시작하는 핸들러를 통해서 처리하는 것이 일반적인가요? 2.unlike()에서 한 명의 사용자가 삭제 중복요청시 발생하는 동시성 문제 @Transactional public void unlikePessimisticLock2(Long articleId, Long userId) { articleLikeRepository.findByArticleIdAndUserId(articleId, userId) .ifPresent(articleLike -> { articleLikeRepository.delete(articleLike); ArticleLikeCount articleLikeCount = articleLikeCountRepository.findLockedByArticleId(articleId).orElseThrow(); articleLikeCount.decrease(); }); }한 명의 사용자가 "좋아요" 중복 생성 요청하는 것을 방어하는 로직이 있으니 "좋아요 해제" 중복 요청에 대한 고려에 대해서 생각해봤습니다. 이 로직에선 findLockedByArticleId 에서 베타락을 걸게 되어서 하나의 article에 대한 여러 사용자의 "좋아요 해제" 요청시의 동시성 문제를 방어하고 있습니다. 그런데 한 명의 사용자가 "좋아요 해제" 중복 요청 시에 ifPresent 구문을 통과하게 되어 articleLikeRepository.delete(articleLike);를 여러번 수행하게 됩니다. 여기서 delete는 멱등성이 보장되니 큰 문제 없이 넘어가겠지만 그 아래 count감소 로직은 해당 트랜잭션들이 베타락을 획득할 때마다 계속 수행되는 것이 아닌지 궁금합니다. 일단 ifPresent 구문 안으로만 들어오면 count감소는 무조건 일어나게 되니 문제가 생기는게 아닐까요? 그래서 ifPresent구문 전에 락을 걸기 위해 findByArticleIdAndUserId() 여기서 락획득이 이루어져야 하는건 아닌지 궁금합니다. 작성하다 보니 질문이 길어져서 죄송합니다.
-
미해결금융데이터 분석을 위한 판다스 활용법
영상에서 보이는 게 안보이는 문제
안녕하세요.동영상 강의대로 진행 중이였는데, nbextension칸, cluster칸이 안보이고요, 또, table of contents 같은 아이콘도 안뜹니다. 해결 방법이 있나요? 또, 확장 프로그램 설치할 때 jupyter contrib nbextension install --user 을 아나콘다 프롬프트에 입력을 했는데,ModuleNotFoundError: No module named 'notebook.nbextensions'이라고 뜨네요. 해결 방법 알려주시면 감사하겠습니다.