묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨개발자를 위한 쉬운 도커
도커파일 피드백..
이런 질문을 드려도 괜찮을지 모르겠습니다.. (혹시 좀 아니라고 생각하신다면 답변을 안 남겨주셔도 괜찮습니다!)다름이 아니라, 제가 다른 프로젝트에서 진행했던 Spring을 docker로 실행시키기 위해서 혼자 해보고 있었는데요Spring은 Spring Boot 3.1.5와 gradle, java17 로 이루어져 있습니다(높은 버전의 gradle 이미지를 사용하다보니 강의에서의 Dockerfile과 많이 달라졌습니다.)FROM gradle:8.2.1-jdk17 AS builder WORKDIR /app COPY . /app RUN gradle wrapper --gradle-version 8.2.1 RUN ./gradlew build FROM openjdk:17-jdk-alpine COPY --from=builder /app/build/libs/*.jar /app/app.jar ENTRYPOINT ["java"] CMD ["-jar","/app/app.jar"]이렇게 작성해서docker build -t [이미지명] . --platform linux/x86_64 해당 명령어를 사용해서 이미지를 생성하고 후에 실행까지 성공했습니다. 다만, 이 Dockerfile은 cache를 잘 활용하지 못한다는 단점이 있습니다.하지만, 제 주변에 docker를 좀 해 본 친구들은 빌드 스테이지에서도 openjdk:17-alpine을 사용해서 빌드를 진행하고, cache를 적극적으로 활용하지 않아서 물어보기가 애매했습니다.. ㅜㅜ 그래서 제가 여쭤보고 싶은 부분은1. 강의가 비교적 최근 강의임에도 gradle 이미지 버전이 7.6.12을 사용하시면서 강의를 진행했던 것으로 기억하고 있습니다. 그렇다면, gradle의 버전은 크게 상관이 없는걸까요?2. 제가 이 글에 적은 Dockerfile에 대한 피드백을 조심스럽게.. 부탁드립니다..
-
미해결
파이널 컷 프로를 트라이얼 버젼으로 학습중
학생이나 교직원은 아니지만 영상 편집툴인 파이널 컷 프로를 저렴하게 구입할 수 있나요?교육 할인 프로그램에서 판매하고 있는 5종 세트도 관심이 있는데,(배우다 보니 음향이나 영상 조정 프로그램들이 다 연결이 되어 있더군요..^^)학생이나 교직원이 아니어서 언감생심(마음은 있지만, 감히 생각을 할 수도 없슴) 이지만 ㅠㅠ그럼에도 불구하고 싸게 구입할 수 있는 방법이 있을까요? 추신: 어떤 분이 구매자의 메일 아이디나 비번을 통한 거래를 언급하던데, 이 또한 가능한가요??(세상에 떠 도는 이야기는 많은데, 그것에 대한 팩트 체크를 해주는 곳은 너무도 적군요 ㅠㅠ)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문 있습니다!
선생님 안녕하세요 !제가 푼 문제 코드는 다음과 같습니다.http://boj.kr/3475d11fa8a2499bba282e226bdc5e92제가 풀었을 떄는 시간초과가 났었습니다.여기서 여쭤볼 것이 있습니다. Q1. 제가 작성한 코드에서 시간 복잡도를 계산할 떄 최악의 수를 생각하고 계산을 합니다. N이 100,000이고 K는 1일 떄 제가 작성한 코드는 대략 3N의 시간복잡도가 나오는 것으로 계산하였습니다. 또한 선생님의 풀이를 저는 2N의 시간복잡도로 생각을 합니다. 그러면 만일 실전에서 제가 작성한 3N이 시간 초과가 뜬다면 2N으로 줄일 방안을 생각하는 것이 맞을까요?!?
-
미해결
인텔리제이 단축키
문장 중간에서 문장 끝으로 옮기는 단축키를 강의에서 알려주셨는데, 기억이 안 나 다시 아무리 찾아봐도 어디 있는지 찾을 수가 없네요 ㅜㅜ문장 끝으로 옮겨서 엔터 바로 치고 다음 문장으로 넘어갈 수 있게 하는 경우가 많았습니다.exApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);여기서 ApplicationContext 자동완성하고 나서 현재 위치가 ac에 있다고 한다면이 단축키를 누르면 ;뒤로 이동하고그 다음 엔터 쳐서 다음 문장 바로 칠 수 있게 했었습니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
VIVADO Linux 프로젝트 생성 질문
안녕하세요.FPGA에 관심이 가지게 되어서 VIVADO 강의가 있어서 공부 욕심이 생겨서 수강을 하였습니다.현재 강의 중에서는 Linux에서 Project 를 생성 하는 방법이 따로 언급이 없으며 Vivado를 설치하여 chapter를 열 수 있지만, 개인적으로 폴더를 생성 후 프로젝트를 따라가면서 배워보고 싶은데 방법을 알 수 있을까 하여 문의 드립니다.참고할 사이트 있으면 기재해주시면 감사합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
시간복잡도 관련 질문입니다.
위 코드에서 for문이 n번 만큼 반복되고 그 안에 있는 while문이 도는 횟수의 총 합이 n번이라고 하셨는데 그렇다면 위 코드의 시간복잡도는 [for문 시간복잡도: o(n)] * [while문의 시간 복잡도 : {o(n-1) + o(n-3) + ... o(1)} ]= o(상수 * n) 이렇게 이해하면 되는 걸까요?
-
미해결
복습기간
안녕하세요. 회사에서 새로운 교육 사이트로 전환하여 새로운 기분으로 공부하는 직장인입니다. 다름이 아니라 복습 기간에 대하여 문의 드립니다. 보통 전에는 강의 수료 후 1년 동안 재 복습을할 수 있었는데요. 하이러닝에서는 왜 ?? 없을까요? 여러모로 검토하여 수강한 과목에 대해서는 1년 복습기간을 주시면 좋을 것 같습니다.기존의 이런 혜택을 누리다가 사라지니 역체감이 심각합니다. 감사합니다. 새해 복 많이 받으세요.~~
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
공통 레이아웃 사용시 js <script> 사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.레이아웃 구성시 base.html-> 공통파일개별 페이지 -> <head>에서 title, script, link 넘겨서 페이지별로 추가 구성이런식으로 사용하고 있는 중 인데 한가지 궁금한 점이 있습니다. <head> </head> 태그 안에 있는 <title> <link> <script> 태그들만 들어가는게 아니라 전체 페이지에 있는 <script> 태그가 다 넘어가는 건가요? 혹시 이 방식을 사용하면서 개별 페이지에서 <script></script>를 추가해서 사용하는 방식은 없을까요..? 강의 내용에선 layoutMain.html 파일에서 <head></head> 안이 아닌 다른 영역에 <script></script> 를 따로 써서 이 페이지에서만 쓸 수 있는 스크립트를 작성할 수 있는지 궁금합니다...!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
시계열 데이터 수업 자료 어디에?
시계열 데이터를 다루는 수업을 현재 보고 있는데, 관련 자료가 어디에 있나요?제가 일일히 쳐서 하기가 어려워서 데이터 프레임을 받고싶은데,,, 어디에 있는지 못찾겠어요.
-
해결됨스프링 핵심 원리 - 기본편
OCP 원칙관련
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]만약에 새로운 구현체를 만들어서 기능을 확장하게 되면 인터페이스에 새로운 내용을 추가해야 할수도 있을거 같은데 이러면 OCP 원칙에 위반된게 아닌건가요?예를 들면 구현체에Member del(Member member){ // 코드 생략 }이런식으로 멤버를 삭제하는 기능을 만들어서 확장한다고 하면 인터페이스에 Member del(Member member);라는 코드를 추가해야지 않나요??
-
미해결김영한의 실전 자바 - 기본편
접근 제어자 문제 풀이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]문제 풀이를 다음 날 새로 만들어서 풀어보니까 조금 다른 부분이 생겼는데1. 본인2. 강의각 배열의 총 가격 값만 더하는 거라면 1번처럼 하는 게 좋아 보이는데 Item item = items[i];를 추가하신 이유와 어떤 차이점이 있는지 궁금해요
-
미해결
[김영한님 스프링 백엔드 강의 스터디 인원 추가 모집]
[김영한님 스프링 백엔드 강의 스터디 인원 추가 모집]스터디 주제 :김영한 선생님의 백엔드 자바 스프링 스터디 인원을 1명 추가 모집하려고 합니다. 예상 스터디 일정(횟수) :매주 수요일, 일요일 스터디가 진행됩니다.수요일장소 : 창동역일시 : 19:30일요일장소 : 건대입구역(예정)일시 : 19:30 예상 커리큘럼 간략히 :김영한 선생님의 강의 커리큘럼을 전부 따라 완강할 계획입니다.모든 강의를 완강하기 전에, 도중에 협업툴 활용과 토이 프로젝트를 진행할 수도 있습니다.(미정) 예상 모집인원1명 스터디 소개와 개설 이유 :진행 방식 :강의 듣고 각자 공부모임 전까지 개인별로 배운 내용 정리해서 노션/블로그 업로드모임 때는 발표자가 강의자료 보면서 해당 회차 범위에 대하여 요약 설명하면서 진행발표자 진행 하에 팀원들의 질문 또는 공유하고 싶은 내용 자유롭게 나누기스터디 후 담당자는 회의록 정리 및 업로드진행 관련 참고 사항 :✅ 강의 분량은 매일 섹션 1개가 기본이지만 유동적으로 조율 가능✅ 개인별로 정리한 내용은 과제에 업로드✅ 발표자와 회의록 담당은 당일 랜덤 선정 스터디 관련 주의사항 :현재 스터디는 총 4명이서 진행 중이며 1명 더 추가 모집하여 총 5명이서 진행할 예정입니다.구성 인원인 자바를 공부한지 얼마 안된 비전공자, 전공자, 실무 경험자로 구성되어있습니다.현재 위 이미지에서 HTTP 웹 기본 지식까지 진행하였으며 스프링 MVC 1부터 같이 참여하게 될 계획입니다.스프링에 대한 이해와 실력은 중요하지 않으며 항상 조금씩이라도 더 나아지려는 마음가짐과 주도적으로 스터디에 참여하려는 분이었으면 좋겠습니다.스터디 운영과 스터디룸 대여를 위한 보증금/벌금 제도가 추가될 수 있는데 추후 협의를 통해 결정할 예정입니다 스터디에 지원할 수 있는 방법을 남겨주세요. (이메일, 카카오 오픈채팅방, 구글폼 등.) :https://open.kakao.com/o/gllO3g8f
-
해결됨개발자를 위한 쉬운 도커
빌드과정에서 USER 부분이 궁금합니다.
강의중해당부분에서 명령을 실행할 사용자를 변경한다고 하셨는데 그러면 궁금한게 해당 사용자에대한 생성과 권한 부여같은것들은 어디에서 진행이 되는것일까요??
-
미해결Next + React Query로 SNS 서비스 만들기
로그인 버튼 클릭시 500에러 발생
아이디, 비밀번호를 입력하고 로그인 버튼을 누르면 500에러가 발생합니다. 9090 서버 포트는 잘 켜져있다고 뜨고, 코드 올리겠습니다.<auth.ts>import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import KakaoProvider from "next-auth/providers/kakao"; export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ pages: { signIn: "/i/flow/login", newUser: "i/flow/signup", }, providers: [ CredentialsProvider({ async authorize(credentials) { // credentials 안에 id창에서 입력하는 정보다 담겨있음 const authResponse = await fetch(`${process.env.AUTH_URL}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.username, password: credentials.password, //next-auth의 credentials에는 username, password로 고정되어 있어서 이를 바꿔줌 }), }); //로그인 실패시 if (!authResponse.ok) { return null; } const user = await authResponse.json(); return user; }, }), //kakao로그인을 사용할때 // KakaoProvider(), ], }); <LoginModal.tsx>"use client"; import style from "@/app/(beforeLogin)/_component/login.module.css"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; import { ChangeEventHandler, FormEventHandler, useState } from "react"; export default function LoginModal() { const [id, setId] = useState(""); const [password, setPassword] = useState(""); const [message, setMessage] = useState(""); const router = useRouter(); const onSubmit: FormEventHandler<HTMLFormElement> = async (e) => { e.preventDefault(); setMessage(""); try { await signIn("credentials", { username: id, password, redirect: false, }); //kakao, naver로 바꿀 수 있음 //client 일때는 next-auth/react의 signIn을 사용 //server 일때는 @/auth의 signIn을 사용 router.replace("/home"); } catch (error) { console.log(error); setMessage("아이디와 비밀번호가 일치하지 않습니다."); } }; const onClickClose = () => { router.back(); }; const onChangeId: ChangeEventHandler<HTMLInputElement> = (e) => { setId(e.target.value); }; const onChangePassword: ChangeEventHandler<HTMLInputElement> = (e) => { setPassword(e.target.value); }; return ( <div className={style.modalBackground}> <div className={style.modal}> <div className={style.modalHeader}> <button className={style.closeButton} onClick={onClickClose}> <svg width={24} viewBox="0 0 24 24" aria-hidden="true" className="r-18jsvk2 r-4qtqp9 r-yyyyoo r-z80fyv r-dnmrzs r-bnwqim r-1plcrui r-lrvibr r-19wmn03" > <g> <path d="M10.59 12L4.54 5.96l1.42-1.42L12 10.59l6.04-6.05 1.42 1.42L13.41 12l6.05 6.04-1.42 1.42L12 13.41l-6.04 6.05-1.42-1.42L10.59 12z"></path> </g> </svg> </button> <div>로그인하세요.</div> </div> <form onSubmit={onSubmit}> <div className={style.modalBody}> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="id"> 아이디 </label> <input id="id" className={style.input} value={id} onChange={onChangeId} type="text" placeholder="" /> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="password"> 비밀번호 </label> <input id="password" className={style.input} value={password} onChange={onChangePassword} type="password" placeholder="" /> </div> </div> <div className={style.message}>{message}</div> <div className={style.modalFooter}> <button className={style.actionButton} disabled={!id && !password}> 로그인하기 </button> </div> </form> </div> </div> ); } <middleware.ts>export { auth as middleware } from "./auth"; export const config = { matcher: ["/compose/tweet", "/home", "/explore", "/messages", "/search"], }; <route.ts>export { GET, POST } from "@/auth";에러 내용 :TypeError: next_dist_server_web_exports_next_request__WEBPACK_IMPORTED_MODULE_0__ is not a constructor at reqWithEnvURL (webpack-internal:///(rsc)/./node_modules/next-auth/lib/env.js:15:12) at httpHandler (webpack-internal:///(rsc)/./node_modules/next-auth/index.js:139:139) at /Users/imhwarang/projects/zerocho/z-com/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63815 at /Users/imhwarang/projects/zerocho/z-com/node_modules/next/dist/server/lib/trace/tracer.js:133:36 at NoopContextManager.with (/Users/imhwarang/projects/zerocho/z-com/node_modules/next/dist/compiled/@opentelemetry/api/index.js:1:7062)너무 길어서 다 올릴수는 없네요 에러내용을
-
해결됨개발자를 위한 쉬운 도커
cmd와 run에 대해서 궁금한점이있습니다.!
1.RUN 명령어 실행(새로운 레이어 추가)CMD["명령어"]컨테이너 실행시 명령어 지정두개의 차이점이 이렇다고 하셨는데 어차피 컨테이너를 실행하는과정에서 처음에 실행되는것은 같은것같은데 차이점이:CMD는 이미지당 1개 RUN은 여러개가 가능하며레이어의 관점에서 CMD는 추가가 안되고 RUN의경우 레이어에 추가가되는 차이가 있는걸까요??2.그리고 해당 부분에서 docker run 실행명령을 통해서 적히는 부분은 CMD로만 적히고 컨테이너가 실행이 되고나서부터 실행하는것이 run으로 기록이 된다 라고 이해하면될까요?
-
해결됨IT보안을 위한 와이어샤크 네트워크 패킷 분석 실전
강사님 저는 HTTP가 안뜨는 이유가 뭘까요?
이더넷으로 캡처하면 처음보는 포트들만 나오고, wifi로 캡처하면 TCP 등 다양하게 나오지만 HTTP 포트만 안떠요..! 설정을 잘못한 걸까요?
-
미해결Next + React Query로 SNS 서비스 만들기
[CallbackRouter Error] 회원가입->DB입력 성공-> 자동로그인 안됨
회원가입 성공 status: 201전달받고,회원가입 성공하면 전달받는 리턴객체도 잘 전달받았는데,signIn이 동작하지 않는거 같습니다.PostgreSQL 디비들어가서 보면 User테이블에 신규가입된 정보잘 입력되어있습니다. packge.json "dependencies": { "@auth/core": "^0.18.0", "@faker-js/faker": "^8.3.1", "@tanstack/react-query": "^5.17.10", "@tanstack/react-query-devtools": "^5.17.10", "classnames": "^2.4.0", "dayjs": "^1.11.10", "next": "^14.0.4", "next-auth": "^5.0.0-beta.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-intersection-observer": "^9.5.3" }, "devDependencies": { "@mswjs/http-middleware": "^0.9.2", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "cors": "^2.8.5", "eslint": "^8", "eslint-config-next": "^14.0.4", "express": "^4.18.2", "msw": "^2.0.12", "typescript": "^5" }, "msw": { "workerDirectory": "public" } }[auth][error] CallbackRouteError: Read more at https://errors.authjs.dev#callbackrouteerror[auth][cause]: TypeError: fetch failed at node:internal/deps/undici/undici:12344:11[auth][details]: { "name": "HeadersTimeoutError", "code": "UND_ERR_HEADERS_TIMEOUT", "message": "Headers Timeout Error", "provider": "credentials"}CallbackRouteError: Read more at https://errors.authjs.dev#callbackrouteerror at Module.callback (webpack-internal:///(action-browser)/./node_modules/@auth/core/lib/actions/callback/index.js:307:23) at async AuthInternal (webpack-internal:///(action-browser)/./node_modules/@auth/core/lib/index.js:65:24) at async Auth (webpack-internal:///(action-browser)/./node_modules/@auth/core/index.js:123:29) at async signIn (webpack-internal:///(action-browser)/./node_modules/next-auth/lib/actions.js:55:17) at async onSubmit (webpack-internal:///(action-browser)/./src/app/(beforeLogin)/_lib/signup.ts:53:9) at async /Users/jungjuyoung/dev/x-clone/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:406 at async t0 (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:5773) at async rh (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:23636) at async doRender (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:1391:30) at async cacheEntry.responseCache.get.routeKind (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:1552:28) at async DevServer.renderToResponseWithComponentsImpl (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:1460:28) at async DevServer.renderPageComponent (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:1843:24) at async DevServer.renderToResponseImpl (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:1881:32) at async DevServer.pipeImpl (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:909:25) at async NextNodeServer.handleCatchallRenderRequest (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/next-server.js:266:17) at async DevServer.handleRequestImpl (/Users/jungjuyoung/dev/x-clone/node_modules/next/dist/server/base-server.js:805:17) { type: 'CallbackRouteError', kind: 'error', [cause]: { err: TypeError: fetch failed at node:internal/deps/undici/undici:12344:11 { cause: [HeadersTimeoutError] }, name: 'HeadersTimeoutError', code: 'UND_ERR_HEADERS_TIMEOUT', message: 'Headers Timeout Error', provider: 'credentials' }}
-
해결됨독하게 되새기는 C 프로그래밍
강의자료 관련
강사님 강의자료 인쇄용으로 부탁드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 질문입니다.
안녕하세요 큰돌님. 모든 경우의 수 탐색 과정에서궁금한게 있어서 질문드립니다. 모든 경우의 수를 탐색하기 + 각 경우의 수에서 합 구하기 를위해 다음과 같은 코드가 구현되는 것은 이해했습니다.for (int i = 1; i < (1 << n); i++) { // i는 모든 경우의 수에서 각 케이스이다. for (int j = 0; j < n; j++) { // i에 해당하는 경우의 수에서 합 구하기위함 if(i & (1<<j)) } } 여기서 질문드리고싶은게for문에서 i=1 부터 시작하는 이유가 i=0. 즉, 하나도 안고르는 경우는 탐색할 필요가 없기 때문인가요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
강사님 강의자료 인쇄용으로 부탁드립니다.
강사님 강의자료 인쇄용으로 부탁드립니다!