묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만들지 않은 url로 접근 할 떄 처리는 어떻게 하나요 ??
만약에 /itemsed 라는 만들지도 않은 url로 접근할 경우는 어떻게 처리를 하나요 ?? 1) 로그인을 한 경우 잘못된 경로 인입 -> 에러창이 뜸 (아마도 다음 예외처리에서 해결??) 2) 로그인을 하지 않은 경우 잘못된 경로 인입 -> 로그인체크 인터셉터에서 로그인창으로 리다이렉트 -> 이 경로도 1)과 마찬가지고 에러페이지로 예외처리 하려면 addPaterns 에 /** 가 아니라 더 세밀하게 조정을 해야할까요? 아니면 다른 방법이 있을까요 ?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
127.0.0.1:8888으로 뜨는 이유
안녕하세요, 환경 세팅은 잘 되었는데, npm run dev를 하면 3090으로 가는게 아니라 8888으로 가게 되어 의문이 들어 질문을 남기게 되었습니다. 혹시 왜 그런건가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
db 데이터 저장이 안된 경우 발생
Member member = new Member(); member.setId(2L); member.setName("hello JPA"); em.persist(member); 해당 코드로 db에 저장한 후, 아래의 코드를 실행했는데 쿼리가 1번이 아니라 2번이 작동합니다. try { Member findMember1 = em.find(Member.class, 2L); Member findMember2 = em.find(Member.class, 2L); tx.commit();} catch(Exception e){ tx.rollback();} finally{ em.close();} Hibernate: select member0_.id as id1_0_0_, member0_.name as name2_0_0_ from Member member0_ where member0_.id=? Hibernate: select member0_.id as id1_0_0_, member0_.name as name2_0_0_ from Member member0_ where member0_.id=? 이상해서 DB를 켜봤는데... data가 하나도 없더라구요. em.perist(member)와 commit()으로 데이터를 영속하고 db에 저장하했는데, db에 data가 왜 저장되지 않나요? db에 data가 애초에 없기 때문에, 쿼리를 한번 가져오더라도 1차 캐시에 data가 저장이 안 되고.... 2차 조회를 해도 1차 캐시에 저장이 안되어서 다시 db에 sql을 보낸게 아닌가 싶은데 맞나요?
-
해결됨만들면서 배우는 리액트 : 기초
github page 배포하신거 작동안됩니다^^
선생님~ 깃헙에 들어가서 링크 클릭하면 저는 Favicon만 보이고 콘솔에 404 error만 쭉 나오네요^^ 다른 분들은 잘 보이시는지~
-
해결됨스프링 핵심 원리 - 기본편
할인 정책을 동시에 적용하고 싶은 경우 AppConfig 설정 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요 객체지향 개발에 관심이 생겨 공부중인 개발자 입니다. 좋은 강의 잘 듣고 있습니다. 한번에 하나의 할인 정책을 적용하는 경우는 AppConfig에서 지정을 해주면 되는데 만약 동시에 두 개 이상의 할인 정책을 적용하는 경우 어떤 방법으로 구현하면 좋을지 궁금해서 질문드립니다. 1. 현재 적용하고 있는 할인 정책이 하나인 경우 아래와 같이 AppConfig에서 제어흐름을 담당하면서 어떤 할인 정책을 적용할지 결정을 한다는 점은 이해했습니다. public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } 2. 할인 정책을 모두(정액, 정률) 사용하고 싶은 경우 예를 들어 할인 정책을 적용할 수 있는 쿠폰이 정액, 정률 두 개가 동시에 존재한다고 했을 때 클라이언트의 변경 없이(OCP) 할인정책을 적용하고 싶다면 AppConfig 에서 `discountPolicy()` 메소드를 호출할 때 정률 할인 쿠폰인 경우 `new RateDiscountPolicy()`를 리턴해야하고 정액 할인 쿠폰인 경우 `new FixDiscountPolicy()`를 리턴해줘야 합니다. 2-1. AppConfig 를 인터페이스로 변경하고 구현체를 별도로 생성 public class FixDiscountAppConfig implements AppConfig { … } public class RateDiscountAppConfig implements AppConfig { … } // OrderApp AppConfig appConfig; if (“정률할인 쿠폰”) { appConfig = new RateDiscountAppConfig(); } else If (“정액할인 쿠폰”) { appConfig = new FixDiscountAppConfig(); } AppConfig appConfig = new AppConfig(); MemberService memberService = appConfig.memberService(); OrderService orderService = appConfig.orderService(); 2.2 AppConfig 내 discountPolicy 메소드 호출 시 파라미터를 넘겨 구분 public DiscountPolicy discountPolicy(String 할인정책) { if (“정액”.equals(할인정책)) { return new FixDiscountPolicy(); } else { return new RateDiscountPolicy(); } } 한번에 하나의 정책을 적용하는 것보단 동시에 여러 정책을 적용하는 경우가 더 많을 것 같다고 생각이 들었습니다. 이 경우에는 어떤 방식으로 구현하는게 좋은 객체 지향원칙을 지키며 구현하는 것일지 조언을 구하고자 합니다.
-
해결됨코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
슬랙 초대 부탁드립니다:)
안녕하세요:) 슬랙 초대 부탁드립니다. kangjung914@likelion.org 입니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 풀이 방법에 대해서
안녕하세요, 항상 수업 잘 듣고 있습니다. 다름이 아니라 선생님께서 풀어주신 방법과 조금 다른 방법으로 풀어서 해결했습니다. 그런데 이를 도출해내는데까지 꽤 오래 걸렸습니다. 이런 방식으로 꽤 오래 걸리더라도 제 방법으로 한번 풀어보는게 더 좋을까요..? 한 문제당 오래 걸리다보니 이렇게 공부하는게 맞는지 궁금해서 질문 드려봅니다. 감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
마지막단계에서 안됩니다.
vivado 설치하고 계쏙 진행하다보니 아래화면처럼 뜹니다..
-
미해결웹 게임을 만들며 배우는 React
Try.jsx 에 PureComponent 와 React.memo 둘 다 적용해도 이전과 똑같이 렌더링 표시가 뜹니다.
import React, { memo } from "react"; const Try = memo(({ tryInfo }) => { return ( <li> <div>{tryInfo.try}</div> <div>{tryInfo.result}</div> </li> ) }); export default Try; import React, { PureComponent } from "react"; class Try extends PureComponent { render() { const { tryInfo } = this.props; return ( <li> <div>{tryInfo.try}</div> <div>{tryInfo.result}</div> </li> ); } } export default Try; 항상 영상 잘 보고있습니다.! 답변주시면 감사하겠습니다
-
미해결라즈베리파이 IoT 프로그램과 클라우드 입문 과정
강의에서 사용하신 전체 PDF 자료 받아볼 수 있나요?
제목과 내용이 같습니다~
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
영상 14:35 에 void 에서 ClassType로 변환 질문
14:35 쯤에 반환타입 void에서 ClassType으로 바꾸셨는데, 이 개념이 잘 이해가 안되네요. enum으로 정의한 함수( ClassType)만 반환타입으로 함수에 적용이 가능하다는 뜻 같은데, void와 같은 반환타입이 여러개가 존재 할 것 같고 또 ClassType처럼 세부적으로 만들어서 다른 함수에 적용이 가능하다는건가요? 상수와 열거형 수업도 여러번 봤는데, 혹시 수업중에 다른 참고할만한 영상이 있으면 알려주시면 감사하겠습니다!!
-
미해결누구나 할 수 있다! 이모티콘 만들기
밑그림 파일 어디서 다운받나요?
영상보면서 같이 따라해보려고 하는데 수업자료(밑그림 파일) 없는 강의 인가요?
-
미해결누구나 할 수 있다! 이모티콘 만들기
왜 해상도는72dpi인거죠?
해상도를 300dpi로 설정하지 않은 이유가 뭔가요?
-
미해결더 자바, Java 8
Stream 이 처리하는 데이터 소스 변경
안녕하세요 강의 정말 잘 듣고있습니다! Stream 속성중에 2번쨰, 원본 데이터 소스는 변경하지 않는다고 레퍼런스에 적혀있어서 학습용도로 혼자 공부하면서 테스트해보았는데, - Functional in nature. An operation on a stream produces a result, but does not modify its source. 정말 원본 데이터가 안바뀌는지 궁금해서 해보았습니다. List<Food> foods = new ArrayList<>();foods.add(new Food("Pizza",200));foods.add(new Food("Bob",100));foods.add(new Food("Chicken",400));List<Food> result = foods.stream().map((food) -> { food.setName("changed"); return food;}).collect(Collectors.toList()); 위 코드를 실행했을떄 collection내에 원본 객체들이 변경되지 않을거라고 생각했는데, 결과를 출력해보니 collection내 원본객체들이 모두 변경되어서 제가 뭔가 잘못 이해한 부분이 있는 것 같아서 질문드립니다
-
미해결초보를 위한 도커 안내서
제가 놓친 부분이 있는지, 과제의 업데이트가 필요한건지 확인 부탁드립니다.
여러가지를 시도를 했는데 결국 안되서 강사님의 답안을 실행해봤습니다. db_data 볼륨을 지우지 않아서 생기는 이슈가 발생했던 것 외에는 백엔드는 잘 실행됐습니다. 마이그레이션 디렉토리의 테이블들도 다 잘 마이그레이션 됐구요. 하지만 현재 https://hub.docker.com/r/hasura/graphql-engine에서 안내해주는 태그들에는 강사님이 사용하신 cli-migrations이 아닌 cli-migrations-v2, -v3만 나와있으며, 이 이미지들로 제가 시도했을 때는 마이그레이션에 실패해 테이블들이 보이지 않았습니다. 그리고 프론트엔드는 아래와 같은 에러가 발생하고 있습니다. chatapp_1 | /usr/local/lib/node_modules/serve/node_modules/camelcase/index.js:3 chatapp_1 | const UPPERCASE = /[\p{Lu}]/u; chatapp_1 | ^ chatapp_1 | chatapp_1 | SyntaxError: Invalid regular expression: /[\p{Lu}]/: Invalid escape chatapp_1 | at Object.<anonymous> (/usr/local/lib/node_modules/serve/node_modules/camelcase/index.js:3:19) chatapp_1 | at Module._compile (module.js:653:30) chatapp_1 | at Object.Module._extensions..js (module.js:664:10) chatapp_1 | at Module.load (module.js:566:32) chatapp_1 | at tryModuleLoad (module.js:506:12) chatapp_1 | at Function.Module._load (module.js:498:3) chatapp_1 | at Module.require (module.js:597:17) chatapp_1 | at require (internal/module.js:11:18) chatapp_1 | at Object.<anonymous> (/usr/local/lib/node_modules/serve/node_modules/boxen/index.js:6:19) chatapp_1 | at Module._compile (module.js:653:30) 저는 아래와 같은 docker-compose.yml 로 시도해봤는데, 고쳐야할 부분이 있다면 알려주시길 부탁드리겠습니다. version: "3" services: postgres: image: postgres restart: always volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_HOST_AUTH_METHOD: trust backend: image: hasura/graphql-engine:latest.cli-migrations-v3 ports: - "60004:8080" depends_on: - "postgres" restart: always environment: HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:@postgres:5432/postgres HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console ## uncomment next line to set an admin secret # HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey # HASURA_GRAPHQL_MIGRATIONS_DIR: /hasura-migrations volumes: - "./hasura/migrations:/hasura-migrations" frontend: build: . restart: always ports: - "60003:8080" depends_on: - "backend" volumes: db_data:
-
미해결Slack 클론 코딩[실시간 채팅 with React]
맥에서 npm install 에러 command sh -c node-gyp rebuild 해결
안녕하세요, 혹시 저처럼 안되는 분들을 위해.. 맥에서, `back` 폴더에서 npm i 할 때 node-gyp rebuild 에러가 나는 경우에, 저는 `npm install -g npm@6` 로 npm 버전을 다운그레이드 해서 해결했습니다. 제 기존 버전은 8.3.0 이었습니다. 화이팅입니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행을 두번 연달아서 했더니 NoClassDefFoundError가 떴습니다.
강의내용 6:00까지 진행중이였는데 제가 실수로 Run을 두번 해버렸습니다. 그림에 빨간동그라미 표시한대로 처음은 Run탭에 초록색 화살표를 눌렀다가 두번째로 Run을 진행했더니 NoClassDefFoundError 에러가 떴습니다. 런했을 때 나오는 콘솔내용들입니다. 2022-01-22 10:52:31.818 INFO 12244 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to default profiles: default2022-01-22 10:52:32.817 WARN 12244 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet2022-01-22 10:52:32.834 INFO 12244 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2022-01-22 10:52:32.878 ERROR 12244 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServletat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:414) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.6.3.jar:2.6.3]at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServletat org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.15.jar:5.3.15]... 13 common frames omittedCaused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServletat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]... 20 common frames omitted Process finished with exit code 1 이러고 localhost로 들어가도 들어가지지 않는 상태입니다.. 제가 인텔리제이가 처음이여서 많이 어버버하네요 ㅜㅜ 어떻게 하면 될까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@Login Member ➡ @Login Optional〈Member〉 파라미터 타입에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요 최고의 김영한 강사님.감탄하며 듣고 보고 있습니다. 고맙습니다. 새해 복많이 받으셔요! 저의 상황은 이렇습니다. HomeController 코드입니다. @GetMapping("/") public String loginHomeV4ArgumentResolver( @Login(LOGIN_MEMBER) Optional<Member> member, Model model) { if (member.isEmpty()) { return "home"; } model.addAttribute("member", member.get()); return "loginHome"; } 이 코드에서 의구심이 드는 부분은제가 커스텀 한 파라미터 부분입니다. Optional<Member> @Login(LOGIN_MEMBER) Optional<Member> member 아규먼트 리졸버에서 HomeController 로 요렇게 쏴주고 있어요 public Object resolveArgument(...) { ... ... /* 어노테이션 value 얻어오기 */ String sessionId = loginAnnotation.value(); return Optional.ofNullable(session.getAttribute(sessionId)); } 질문입니다. 메서드 파라미터로 Optional 을 쓰지 말라고 어디선가 들었는데, 그 룰이 이 상황에도 적용이 되는지 , 이렇게 Optional 를 파라미터로 넘겨도 괜찮을지 궁금합니다.잠제적인 문제를 알수 없어 질문하게 되었습니다. 읽어주셔서 감사해요!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강사님 질문입니다.
for 문을 배열의 1번째 부터 시작하고 바로 앞사람하고 비교해서 크면 추가해도 맞는건가요? 예를 들면 이런 코드입니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
안녕하세요 개발자도구 F12 갯수 확인법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님, 혹시 사이트에서 HTML구조 확인시 F12로 개발자 도구 확인하는데 검색창에서 제가 찾은 소스를 입력하면 1of 40 이런식으로 갯수가 떠야 하는데 이게 안뜨고 옆에 다른 메뉴들이 떠서 해결 방법 확인해주실 수 있으실까요?..