유튜브에 올리신 제품 판매 웹앱 구현 강좌는 vue, node 를 같이 통합하여 만드셨는데 이걸 서버에 어떻게 배포하는지 궁금합니다. 블로그나 유튜브를 보고 빌드를 하는데 방법이 너무 다양해서 에러가 자꾸 발생하네요 ㅠㅠ 제품 판매 웹앱 구현 프로젝트를 기반으로 빌드를 하고 서버에 배포할 수 있는 참고 url이나 문서를 혹시 알 수 있을까요?
안녕하세요, 선생님께서 알려주신대로 live server full reload 세팅에서 체크박스에 체크하고 껐다가 다시 켰습니다. 그런데 저는 왜 자꾸 수정할때마다 맨 위로 올라가는걸까요..? 혹시 다른 셋팅 변경 방법이 따로 있나요? 지금은 아직 about 섹션 하고 있어서 큰 불편함은 없지만 이제 그 다음부터 조금 불편할 것 같아서요. 혹시나 하고 다른 방법이 있나 싶어서 여쭙습니다. ㅎㅎㅎ 아니면 그냥 블라캣츠를 쓰는게 나을까요? 감사합니다!
저사양 기준으로 Virtual Box에서 Server01/02를 생성 후 클러스터를 설정중 다음과 같은 설치 실패 메세지를 받았습니다. Win10 - Virtual Box 5.0.40 -> 5.2.44 (old version은 실행이 되지 않아 바꾸었습니다) 데이터베이스 설정관련 내용은 강의에서 언급하신 바와 다르게 설치창에서는 따로 나오지 않았고 다음과 같이 설치에 실패하였습니다. 이런 경우에는 어떻게 해야 하나요..?
강의와 관련있는 질문 을 남겨주세요. • 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등) • 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색 을 해주세요. (중복 질문을 자제해주세요.) • 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’ 를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달 에도 요령이 필요합니다. • 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요. • 강의실 페이지 (/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다. • 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재 해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드 를 남겨주세요! 구체적인 질문 일수록 명확한 답을 받을 수 있어요. • 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요. • 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요 . • 정확한 질문 내용과 함께 코드 를 적어주시거나, 캡쳐 이미지 를 첨부하면 더욱 좋습니다. 기본적인 예의 를 지켜주세요. • 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용 은 스팸 처리 등 제재를 가할 수 있습니다. 안녕하세요 강의코드를 응용해서 폴더를 받아 폴더안 파일들을 하나씩 axios 로 보내주고 있습니다 다른 파일들은 정상적으로 보내지는데 , config.json, tsconfig.json 파일을 전송할때 서버가 재시작되어 네트워크 오류가 발생됩니다. 업로드는 multer 를 이용하는데, 서버가 재시작되었다는건 스트림으로 config.json 파일을 읽어서 그런것인가요? 이경우 업로드를 하려면 어떻게 해야하나요? (업로드방지 기능을 만들어서 업로드못하게 막는게 맞을까요?) (tsnode 이용해서 node.js + typescript 로 구축했습니다)
안녕하세요 김영한 강사님!! 이렇게 또 질문을 올리게 되었습니다..! 토이프로젝트로 api를 설계할때마다 너무나도 궁금한점들이 있었습니다. 간단한 예제로 회원 정보 api 설계로 예를 들어보겠습니다! . 회원 조회 api 설계라고 하면 보통 /members/{id} 이런식으로 알고 있습니다. . Spring Security를 이용해 jwt나 세션을 사용하면 Principal 객체에 회원 데이터가 들어있어서 이를 이용해 /members/me -> 이런 api 설계도 가능했었습니다 (jwt decode 된 정보나 세션 정보를 확인해서 정보조회) . 클라이언트 입장에선 로그인 후 회원 정보를 보고싶으면 회원조회를 요청하는 uri 주소를 띄워줘야 하는데 회원 리소스의 식별 값을 알아야지 조회가능 하지 않나? 라는 생각이 들었습니다. . Admin 페이지에서의 예를 들어보면 회원들 관리를 위해 전체 회원 목록 조회를 하면 회원 entity들을 dto로 반환하고 hateoas를 이용해 각각의 회원 정보를 조회하는 uri를 PagedResourcesAssembler를 이용해 각 회원마다 만들어 주었었습니다. (예시를 들자면 회원 목록 조회후 @Id 값들로 회원 조회, 게시판 글 목록 조회 후 @Id 값들로 게시판 글 조회, 주문 목록 조회후 @Id 값들로 주문 조회 이런식입니다!) ex) "id" : 1 , "username" : member1 , "links" :[ { "rel" : "회원 정보" , "href" : "http://localhost:8080/members/1" } ] "id" : 2, "username" : member2 , "links" :[ { "rel" : "회원 정보" , "href" : "http://localhost:8080/members/2" }] ..... 하지만 로그인한 일반 유저 입장에선 -그냥 세션을 이용한다면 세션에 setAttribute한 값을 가져와서 회원을 조회해서 정보를 나타내주면 되고 -jwt를 이용한다면 decode된 정보를 바탕으로 회원을 조회해서 정보를 나타내주면 되는데 /members/{id} 로 api 설계를 하고 api 문서를 적어놨다고 하였을때 클라이언트 쪽에선 어떻게 개발을 하는지 궁금합니다. (보통 실무에선 restful을 지키기가 힘들기 때문에 보통 지켜지지 않으며 개발이 된다고 하신 답글을 보았었습니다!) . - /members/1 이라고 했을때 1번인걸 클라이언트가 어떻게 알고 회원 정보를 보는 페이지로 가는 uri를 적는걸까? -> 서버로 로그인 요청을 보내면 서버에서 1 번 응답을 줘서 클라이언트에 따로 저장시켜놓는건가 ? . 이런 생각들입니다..! 제가 이부분에선 잘못 생각하고 있을수도 있지만 이상하게 헷갈리는 부분은 꼭 알고 가고싶어서 여쭤보게되었습니다. 구글에 찾아봐도 설계만 딱 있을뿐 저에게 답이 되는 부분은 찾지 못하였습니다..ㅜ . 그래서 정리하자면 1. /members/me -> Principal 에 저장된 정보로 회원조회 하는 설계랑 /members/{id} -> @PathVariable id 값으로 회원 조회 하는 설계가 명확히 어떤 측면에서 장단점들이 있고 제가 앞에서 말씀드린 내용의 대한 것과 제가 어떤 부분을 잘못 알고있는지 궁급합니다! 2. 보통 rest가 아닌 실무에서의 http api 설계를 할때 해당 페이지에서 이동 가능한 link 까지 포함해서 응답을 주는지 궁금합니다! (회원 정보 페이지 라고 한다면 회원 정보 페이지에선 회원 수정, 회원 탈퇴 의 링크가 있다면 이걸 포함시켜서 응답을 해야하는지)
hooks = [] component() let hooksForThisComponent = hooks; hooks = null; .. 강의에 나온 수도코드로 알아보는 훅 예제입니다. 저 흐름이 조금 이해가 안되는 부분이 있어서 질문드립니다. 제가 이해한 바로는 훅의 동작방식은 아래와 같습니다. 일단 useHook()을 사용하면, hooks 배열에 순서대로 차곡차곡 쌓입니다. 순서대로 쌓이기 때문에, 훅을 사용한 시점에서 hooks 배열에서의 인덱스 포지션 정보 또한 얻을 수 있을것입니다. 만약 컴포넌트가 setState()등으로 변경을 요청하면, 전역변수 hooks에 저장되어있는 포지션을 기준으로 그 훅 데이터에 접근할 수 있고, 상태를 성공적으로 변경할 수 있는것으로 알고 있습니다. 1) 근데 process_a_component_rendering()이라는 함수를 보면 hooks라는 전역배열을 항상 새로운 배열로 초기화시키는데요. 왜 이런 과정을 거치는걸까요? 그럼 기존까지 쌓아왔던 순서정보는 다른 렌더링 요청이 들어오면 날라가는거 아닌가요? hooksForThisComponent라는 변수의 쓰임이 중요한것같은데, 어떤 의미로 사용된거일까요? 따로 각 등록한 hooks등을 복제하여 함수컴포넌트의 context별로 저장하기위한 변수들인건가요?
안녕하세요 영한팀장님. 제가 해당 강의 어플리케이션을 실행해보니까 제가 의도한 것은 아닌데 id가 모두 공유 되더라구요 그러니까 회원 ID, 아이템 ID, 주문 ID가 공유되어서 회원이 1개 만들어지고 아이템이 1개 만들어지고 주문이 1개만들어지면 제가 원하는 것은 각자 아이디가 #1이 되는것인데 해당 애플리케이션은 회원 ID가 #1 아이템ID가 #2 주문ID 가 #3 이 되더라구요 혹시 이것의 해결법이 있을까요?
안녕하세요. 강의를 듣기전에 항상 풀어보는 편인데 javascript의 빌트인 내장함수들에 대해서 질문이 있습니다. array 에는 every, some, forEach, sort 등 이러한 내장 메서드들을 사용해서 풀다가 풀이가 전부 for문을 쓰셔서 푸시는 것을 보고 효율성 면에서 차이가 있어 이렇게 푸는건지 궁금증이 생겼습니다. 최대한 일반 for문을 이용하여 푸는 것이 가장 좋을까요? 효율성 체크를 어떤식으로 해야 될지 잘 모르겠습니다.. 그리고 현재 문제의 답으로 이렇게 해주었는데 상관은 없을지 궁금합니다. function solution(str) { let answer = ""; const s = str.replace(/[^0-9]/g, ""); answer = parseInt(s, 10); return answer; } let str = "g0en2T0s8eSoft"; console.log(solution(str));
안녕하세요 교수님! 유익한 강의 감사드립니다. 섹션3. 격자판 회문수 문제를 강의 중에 알려주신 로직과 조금 다르게 풀었는데 혹시 리뷰해주실 수 있을까요? cur1, cur2라는 빈문자열에 이어 붙이는 방식으로 회문을 검사했는데 문자열을 이어붙여 사용하면 속도가 많이 느려지는지도 궁금합니다. 조언 부탁드립니다! ``` board = [list(input().split()) for _ in range(7)] # 회문 검사 cnt = 0 def pal(s): n = len(s)//2 for i in range(n): if s[i] != s[-1-i]: return False return True # 단어 완성 def make_word(): global cnt for i in range(7): for j in range(3): cur1 = '' cur2 = '' for l in range(5): cur1 += board[i][j+l] cur2 += board[j+l][i] if pal(cur1): cnt += 1 if pal(cur2): cnt += 1 make_word() print(cnt)
안녕하세요 영한팀장님. 궁금한게 생겨 질문드립니다. EntityManager의 사이클이라고 해야할까요.....? 그런게 갑자기 궁금해졌습니다. EntityManager는 내부적으로 어떤 경우를 충족시키면 본인이 알아서 데이터베이스에 여태까지 변경사항을 저장하는 거 같은데 혹시 그 충족기준이 어떤것인지 알 수 있을까요?
안녕하세요 14:57초 쯤에서 진행하는 테스트에서 에러가 나는데 확인해주실 수 있을까요? 에러메시지는 아래와 같이 나옵니다. Could not write standard input to Gradle Test Executor 3. java.io.IOException: 파이프가 닫히는 중입니다 at java.base/java.io.FileOutputStream.writeBytes(Native Method) at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354) at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) at org.gradle.process.internal.streams.ExecOutputHandleRunner.forwardContent(ExecOutputHandleRunner.java:68) at org.gradle.process.internal.streams.ExecOutputHandleRunner.run(ExecOutputHandleRunner.java:53) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.base/java.lang.Thread.run(Thread.java:834) > Task :test FAILED Error: Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain Caused by: java.lang.ClassNotFoundException: worker.org.gradle.process.internal.worker.GradleWorkerMain FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > Process 'Gradle Test Executor 3' finished with non-zero exit value 1 * Try: Run with --stacktrace option to get the stack trace. 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 BUILD FAILED in 3s 4 actionable tasks: 1 executed, 3 up-to-date