묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Slack 클론 코딩[실시간 채팅 with React]
cors에러...
안녕하세요~ 수업 중에 친절히 알려주셔서 잘 따라하고있었는데 뭘 건드렸는지 아래와 같이 cors를 접했습니다. 로그인 post요청은 잘 가는데 useSWR로 보낸 users는 cors가 뜨네요.. 설정은 server에서 cors :true 되어 http://localhost:3095/api/users로 요청을 보내고있는 상태입니다. login은 요청이 되는데 users만 안되는 이유가 뭘까요 ? ㅠ어느 부분을 확인하면 좋을지...
-
미해결Vue.js 시작하기 - Age of Vue.js
Reactivity 강의에서 Object.defineProperty 관련 질문입니다!
안녕하세요. 아래 강의 내용 중 궁금한 점이 있어 질문드립니다. - 강의 : Reactivity 구현 - 내용 : var viewModel = {}; 와 같이 선언 후, Object.defineProperty(viewModel, 'str', ...) 과 같이 str이라는 속성이 정의가 되었잖아요? 그리고 나서 크롬으로 실행한 다음에, 콘솔에서 viewModel.str = 'hello'; 라고 입력하면 할당했으니 "할당 hello"라고 출력이 됩니다. 그런데 그 다음에, viewModel.str을 입력하면 "접근"이라고는 나오는데, str의 값인 "hello"도 출력되어야 하는 것은 아닌가요? Object.defineProperty를 통해 정의된 속성은 유지되는게 아니라 그 안에서만 유지되는 지역변수와 같은 개념으로 이해하면 될까요?
-
미해결진짜 현업에서 쓰이는 직장인의 실무 엑셀 - 데이터 가공부터 분석까지
안녕하세요, 선생님! 리뷰 관련하여 문의드립니다.
안녕하세요, 선생님! inflern이라는 사이트를 최근에서야 알게되어, 선생님의 강의를 이제 막 듣기 시작한 수강생입니다. 아직 강의를 얼마 듣지 않았지만, 커리큘럼과 초반 강의를 들어보고 많은 분들의 수강후기를 살펴보니 제가 정말 많이 배울 수 있을 것 같다는 느낌이 듭니다. 혹시 가능하시다면, 제가 배운 내용들을 정리해서 블로그에 글로써 업로드해도 괜찮을까요? 선생님의 강의를 링크할 수 있습니다. 긍정적인 검토 부탁드립니다 :) 선생님, 좋은 강의 감사드리며, 즐거운 하루 되시길 바랍니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 등록, 수정 구현 방법에 대해서 궁금합니다.
안녕하세요 강사님! 항상 훌륭한 강의 감사드립니다. 다름이 아니라 Book뿐만 아니라 Food, Movie 등 여러 Item도 등록 및 수정을 구현해보고 있습니다. 궁금한점은 제가 구현하는 방식이 item 종류에 따라 Controller에 메서드를 구현, ItemService에서 if-else 문을 통해 SaveForm, UpdateForm의 타입을 판단하여 다운캐스팅을 통해 save, update를 실행하도록 하였습니다. 허나 이 방식은 Item의 종류가 증가하게 될때마다 메서드와 if문이 추가되기때문에 코드가 복잡하고 가독성이 떨어진다는 느낌이 들었습니다. 이 방식을 개선할 수 있는 방법이 무엇이 있는지 궁금합니다. [Save & Update Form] 각 Item들은 ItemSaveForm, ItemUpdateForm을 상속 [ add & edit Item ] @GetMapping("/addBook")public String addBookForm(Model model) { Book book = Book.createEmptyBook(); model.addAttribute("book", book); return VIEW_PATH + "book/addForm";}@PostMapping("/addBook")public String addBookForm(@Validated @ModelAttribute("book") BookSaveForm form, BindingResult bindingResult, RedirectAttributes redirectAttributes) { //특정 필드 예외가 아닌 전체 예외 if (form.getPrice() != null && form.getQuantity() != null) { int resultPrice = form.getPrice() * form.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return VIEW_PATH + "book/addForm"; } Long savedId = itemService.save(form); redirectAttributes.addAttribute("itemId", savedId); redirectAttributes.addAttribute("status", true); return "redirect:/manager/items/{itemId}";}@GetMapping("/addFood")public String addFoodForm(Model model) { Food food = Food.createEmptyFood(); model.addAttribute("food", food); return VIEW_PATH + "food/addForm";}@PostMapping("/addFood")public String addFoodForm(@Validated @ModelAttribute("food") FoodSaveForm form, BindingResult bindingResult, RedirectAttributes redirectAttributes) { //특정 필드 예외가 아닌 전체 예외 if (form.getPrice() != null && form.getQuantity() != null) { int resultPrice = form.getPrice() * form.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return VIEW_PATH + "food/addForm"; } Long savedId = itemService.save(form); redirectAttributes.addAttribute("itemId", savedId); redirectAttributes.addAttribute("status", true); return "redirect:/manager/items/{itemId}";} @GetMapping("/{itemId}/edit/book")public String editBookForm(@PathVariable Long itemId, Model model) { Item item = itemService.findItem(itemId); model.addAttribute("book", item); return VIEW_PATH + "book/editForm";}@PostMapping("/{itemId}/edit/book")public String editBook(@PathVariable Long itemId, @Validated @ModelAttribute("book") BookUpdateForm form, BindingResult bindingResult) { //특정 필드 예외가 아닌 전체 예외 if (form.getPrice() != null && form.getQuantity() != null) { int resultPrice = form.getPrice() * form.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return VIEW_PATH + "book/editForm"; } itemService.update(itemId, form); return "redirect:/manager/items/{itemId}";}@GetMapping("/{itemId}/edit/food")public String editFoodForm(@PathVariable Long itemId, Model model) { Item item = itemService.findItem(itemId); model.addAttribute("food", item); return VIEW_PATH + "food/editForm";}@PostMapping("/{itemId}/edit/food")public String editFood(@PathVariable Long itemId, @Validated @ModelAttribute("food") FoodUpdateForm form, BindingResult bindingResult) { //특정 필드 예외가 아닌 전체 예외 if (form.getPrice() != null && form.getQuantity() != null) { int resultPrice = form.getPrice() * form.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return VIEW_PATH + "food/editForm"; } itemService.update(itemId, form); return "redirect:/manager/items/{itemId}";} Item이 추가될때마다 add, edit 메서드를 구현해야함 [ItemService] public Long save(ItemSaveForm form) { if (form instanceof BookSaveForm) { Book book = Book.createBook(form.getItemName(), form.getPrice(), form.getQuantity(), ((BookSaveForm) form).getAuthor()); itemRepository.save(book); return book.getId(); } else if (form instanceof FoodSaveForm) { Food food = Food.createFood(form.getItemName(), form.getPrice(), form.getQuantity(), ((FoodSaveForm) form).getFoodType()); itemRepository.save(food); return food.getId(); } else if (form instanceof MovieSaveForm) { Movie movie = Movie.createMovie(form.getItemName(), form.getPrice(), form.getQuantity(), ((MovieSaveForm) form).getGenre()); itemRepository.save(movie); return movie.getId(); } return null;}public Long update(Long itemId, ItemUpdateForm form) { if (form instanceof BookUpdateForm) { Book book = (Book) itemRepository.findById(itemId).get(); book = Book.updateBook(book, (BookUpdateForm) form); } else if (form instanceof FoodUpdateForm) { Food food = (Food) itemRepository.findById(itemId).get(); food = Food.updateFood(food, (FoodUpdateForm) form); } else if (form instanceof MovieUpdateForm) { Movie movie = (Movie) itemRepository.findById(itemId).get(); movie = Movie.updateMovie(movie, (MovieUpdateForm) form); } return itemId;} ItemType에 따라 다운캐스팅하여 save, update 실행
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
! 과 ~ 의 차이 질문 드립니다!
안녕하세요 강의 정말 잘 듣고있습니다 ! 코드를 보다가 의문이 하나 들었는데요 reset_n을 설계할 때 어떤 코드는 if(!reset_n) begin ... 이런 식이고 어떤 코드는 if(~reset_n) begin .. 인데 보통 어떤식으로 많이 사용하나요 ? 둘의 차이가 있을까요 ?
-
미해결IT 회사에서 비개발자가 살아남기 위한 모든 개발 지식 A to Z
메모리와 디스크
카톡같은 프로그램을 실행시킬때 메모리가 그 공간을 제공해줘서 프로세스가 되는것을 이해하였습니다. 그렇다면 실행시킬동안에 메세지가 오고 갈텐데 그 메세지들을 메모리에 저장해놓고 종료시킨후에는 어떻게 되나요? 메모리는 종료후 다 정보가 날아가는걸로 아는데 종료시킬때 메모리에있는 정보를 디스크에 저장하고 나중에 불러오나요? 카톡에 있는 메세지들은 컴퓨터가 종료된후 어디 있는것인가요?
-
미해결단 두 장의 문서로 데이터 분석과 시각화 뽀개기
안녕하세요 plot 관련 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 plot 관련하여 질문이 있습니다. 강의 3.2 선그래프에 값 표시하기 부분에서 강의처럼 시간에 따른 확진자수 line 그래프를 그린 후에 추가로 동일한 plot 화면에 max값을 강조하기위해 point를 추가하고싶은데, 어떤 코드를 추가해야 max 값에 point를 추가할 수 있을까요? max, min 값 등등을 표시해서 확진자가 가장 많은날, 가장 적은날 등을 시각화해서 봐보고싶어서 질문드립니다!
-
미해결vue.js 실전 프로젝트(트위터 클론)
onBeforeMount에 onSnapshot을 사용하는거에 대한 질문 드립니다.
onBeforeMount는 돔에 마운트 되기 직전에 실행되는 훅이고 단 한번? 밖에 실행되지 않는다고 알고있었는데, 지금 onSnapshot을 onBeforeMount에서 사용하는것으로 내부에 데이터가 바뀌면 페이지 내용이 갱신되는게 어떻게 이루어지는건지 이해를 못하겠습니다... 그냥 느낌상으로는 onSnapshot을 onBeforeMount에 '이벤트 등록?'을 해서 데이터의 변경 삭제 등록이 있으면 등록한 onSnapshot이 실행되는건가요?
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
[코드 1] 예시에서 title은 name이라하고 point는 key라고 하나요?
1:44 예시에서 title은 name이라하고 point는 key라고 하나요? 어떻게 name과 key를 구분하는지 궁금합니다.
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
선생님 제거 좀 이상한데요 ㅠㅠ 푸터가 안나와요 ㅠㅠ
<!Doctype html> <html lang="ko"> <head> <title>레이아웃 세로</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div class="left"> <header> <div class="header-logo"></div> <div class="navi"></div> </header> </div><!--left--> <div class="right"> <div class="slide"> <div></div> </div><!--slide--> <div class="items"> <div class="news"></div> <div class="banner"></div> <div class="shortcut"></div> </div><!--items--> </div><!--right--> <footer> <div class="footer-logo"></div> <div class="copyright"></div> </footer> </div><!--container--> </body> </html> css는요 .container{ width:1000px; overflow:hidden; } .container > div{ /*border:1px solid blue;*/ height:800px; float:left; box-sizing:border-box; } .left{ width:200px; } .right{ width:800px; } header{} header > div{ border:1px solid red; } .header-logo{ height:100px; } .navi{ height: 400px; } .slide{} .slide>div{ border:1px solid green; height:350px; } .items{ overflow: hidden; } .items > div{ border:1px solid black; height:200px; float:left; box-sizing:border-box; /*해도 안올라감 .container > div에 left에 border:1px solid blue;가 있기때문이다.*/ } .news{ width:300px; } .banner{ width:250px; } .shortcut{ width:250px; } footer{overflow:hidden;} footer > div{ border:1px solid pink; height:100px; float:left; box-sizing:border-box; } .footer-logo{ width:200px; } .copyright{ width:600px; } .copyright div{ border:1px solid black; }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
servlet method 분기
안녕하세요 강사님~ 강의에서 servlet name과 urlpatterns는 중복되면 안된다고 하셨는데요. 만약, 동일 url을 get, post method별로 구분 처리하는 컨트롤러는 servlet 내부에서 getMethod 호출을 통해 분기처리하는 로직인가요??
-
해결됨파이썬으로 배우는 알고리즘 기초
배낭문제와 동적계획법
안녕하세요!배낭문제와 동적계획법을 풀면서 궁금한점이 있습니다. 앞선 동적계획법 강의에서는 동적계획법이란, 문제를 해결할 수 있는 재귀 관계식을 구한다 가장 작은 입력사례로부터 상향식 방법으로 문제를 해결한다 인데, 위 재귀 관계식은 그냥 식 사이의 관계로 인해 도출된 것이고 이것을 그대로 옮긴것이 다음의 코드인데, 제가 봤을 때 이 코드는 그냥 재귀적을 문제를 해결하고, 작은 입력사례로부터 Memoization하며 bottom-up하지도 않고 있지도 않고 Top-Down으로 문제를 해결하고 있는데 이것이 왜 동적계획법인지 궁금합니다!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
useState hook을 매 키마다 만들어주는 이유가 궁금합니다.
const [user, setUser] = useState({id: "", password: ""}) 이런 식으로 객체를 초기화하고 value에 user.id, user.password를 넣어주면 onChange도 여러 번 작성할 필요가 없을 것 같은데 그렇게 하지 않고 hooks를 key마다 일일이 만들어주는 이유가 있나요? 다른 분 코드를 봤는데 그분도 hooks를 일일이 만드셨길래 궁금해서 여쭤봅니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
안녕하세요 좋은 강의 만들어 주셔서 감사합니다. MemberServiceTest 를 실행하는 도중 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 라는 예외가 발생했습니다. 구글링을 해보니 @SpringBootApplication 이 붙은 클래스가 테스트 클래스의 상위 디렉토리에 있어야 한다고 합니다. 하지만 저의 디렉토리 구조는 main 과 test 로 나뉘어져 있어서 JpaShopApplication이 테스트 클래스의 상위 디렉토리에 존재할 수 가 없는데 어떻게 문제를 해결해야 할까요? 프로젝트 zip파일입니다 https://drive.google.com/file/d/1jTfXe6c0LTpB1dJvZZPLnjrIlidIhz4A/view
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
파이썬 활용편3 웹스크래핑 질문입니다.
강의를 듣고 따라하고 있는데요. 해당 익스텐션을 설치했는데도, 우측메뉴가 아예 불러와지지 않습니다. 레지스트리나 다른 설치방법을 참고했는데도 잘 되지 않아서 문의를 남깁니다. 현재 윈도우 64bit를 쓰고 있습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
내장 WAS
안녕하세요~ 스프링 부트에서는 내장으로 톰켓을 갖고 있다고 햇는데요, 스프링 부트 application 이 한 server에 여러개인 경우 톰캣이 여러개 돌아가잖아요. 그럼 톰켓이 불필요하게 중복?해서 실행되는 건 아닌가요? 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
repository은 트랜젝션이 기본인가요?
예전에는 service단에서 trasaction을 걸어서 했었는데 repository에 기본적으로 @trasantional이 적용되어있나요?? 그렇기 때문에 db에서 쿼리를 해올수잇는건지 궁금합니다 ㅎㅎ 추가적으로 repository에 transation이 걸려있다면 왜 service 클래스에 이중으로 @trasational 어노테이션을 거는건가요?
-
미해결마인크래프트 게임을 활용한 파이썬 프로그래밍 완벽 이해
계산기 불러오기
파이썬에서 윈도우 계산기 불러오기를 하기위해 다음과 같이 실행해봤어요. >>>import os >>>os.system("calc") 그런데... 윈도우 계산기가 나오지 않고, 결과가 1이.나오네요. 뭐가 잘못된 걸까요?
-
미해결10분만에 만드는 github blog for Pythonista
blog comment 오류
안녕하세요 댓글창 활성화 수업중에 comments 칸이 비활성화되어서 아무것도 입력이안되는 오류 문의드립니다. signin이 안되어서 활성화가안되나 해서 재로긴 해봣더니 그래도 상황이 똑같습니다.. 감사합니다. (참고로 utterance app은 설치했습니다.)
-
미해결애플 웹사이트 인터랙션 클론!
for문 같은 경우
제가 평소에 for문 대신에 forEach문을 사용하는데forEach문에서 break를 사용할수 없어서... return false;로 대신 하고 있습니다. 그렇게 되면 body태그에 id값이 정상적인 인텍스가 못들어 가네요... 왜 그런지 혹시 알수 있을까요??? ( 짐작하기로는 break는 바로 특정 조건에 정지가 되는것 같고, return false는 정지가 되긴 하는데 모든 배열요소들을 한번 돌고 정지하는것 같네요.. 맞나요?? )