묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강사님 현재 등록하는 부분에서 오류가 나는데 이유를 모르겠습니다.
화면에서 아이템을 등록하려고 합니다. 배송방식을 추가하고나서부터 상품 등록 버튼을 누르는 순간400에러가 떨어지는데요ㅠㅠ 20분을 헤멧는데도 이유를 알 수 없어서 질문드립니다. [컨트롤러] [DeliveryCode] [addForm.html] 오류 메시지를 간략하게 적어보면 아래와 같습니다. 2021-07-07 15:10:15.833 WARN 20644 --- [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'item' on field 'deliveryCode': rejected value [FAST]; codes [typeMismatch.item.deliveryCode,typeMismatch.deliveryCode,typeMismatch.hello.itemservice.domain.item.DeliveryCode,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.deliveryCode,deliveryCode]; arguments []; default message [deliveryCode]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'hello.itemservice.domain.item.DeliveryCode' for property 'deliveryCode'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'hello.itemservice.domain.item.DeliveryCode' for property 'deliveryCode': no matching editors or conversion strategy found]]
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:object, @ModelAttribute 관련 질문
안녕하세요, 강의를 수강하던 중 궁금한 점이 생겨, 궁금증을 해소하기 위해 혼자 테스트를 해봤습니다. 테스트를 통해 혼자 결론을 내렸는데.... 제가 제대로 이해한게 맞는지 궁금해서 질문 올립니다! [상황] @GetMapping("/add")public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v3/addForm";}//@PostMapping("/add")//public String addItem(@ModelAttribute Item item)@PostMapping("/add")public Strign addItem(@ModelAttribute("item") ItemSaveForm formm) Item 객체가 아닌 ItemSaveForm 객체로 입력된 값을 바인딩 시키는 상황에서 Model에 'Item' 객체를 추가해서 'addForm.html' 로 넘겨주는데 View의 Form 에서 넘어온 값을 Item 객체가 아닌 ItemSaveForm 객체에서도 잘 받을 수 있는 상황에 궁금증이 생겼습니다. [결론] 1) Model에 'Item' 객체를 추가해서 'addForm.html' 로 넘어갈 때의 'Item' 객체를 추가하는 이유는 th:object, th:field를 이용해서 html 코드를 깔끔하게 사용하기 위한 용도다. 2) 그렇기 때문에 @ModelAttribute 는 View에서 넘어온 값 중 이름이 일치하는 값들을 ItemSaveForm 의 setter를 이용해서 주입해준다. 따라서, ItemSaveForm 과 Item 객체의 필드명이 같으므로 변경을 해도 문제가 발생하지 않는 것이다. 위의 2개 결론이 제가 테스트를 통해 내린 결론입니다...!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
httpResponse.senRedirect에 대해서 질문드립니다!
httpResponse.sendRedirect("/login?redirectURL="+requestURI); 이 함수가 setAttribute처럼 httpResponse 객체의 어떤 필드를 "/login?redirectURL="+requestURI 이 값으로 세팅하는 거라고 생각하면 되나요? 함수 이름이 send라서 바로 보내버리는 것처럼 보여서 많이 헷갈리네요. 이 함수 다음에 return이 되면 함수가 종료되고, 스프링이 response를 뒤져보고 저 필드에 경로가 들어있으면 거기로 보내는 방식인가요? 그리고 콘솔 로그에서 미인증 사용자 요청 로직에 들어간 다음에 finally 로직이 왜 호출되는 건가요? return 되면 함수에서 빠져나오고 인증 체크 필터 종료 가 콘솔에 안 나와야 되는거 아닌가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터페이스 사용법 접근방식에 대한 의문점입니다!
초심자가 느끼기에는 인터페이스는 사용 설명서 같은 거라서 활용할 때 마음대로 바꾸면 안돼고, 지침대로 사용해야 하는 것, 이라고 받아들여지거든요. 그래서 Filter를 구현하실 때 @Override 함수가 3개 만들어지는데 init함수에는 Filter.super.init(filterConfig); 가 들어있고 destroy 함수에는 Filter.super.destroy();가 들어있잖아요? 영상에서는 표현하지 않으셨지만 필요없다고 여기셨는지 삭제하시고 Log.info 문을 넣으셨습니다. Filter 인터페이스가 HTTP 요청만 받을 수 있도록 만들어진게 아니시라며(HttpServletRequest)로 다운케스팅 하시기도 하고요. 만약 이 영상을 보지 않았다면 저는 Filter 인터페이스를 보고서 Filter.super.init() Filter.super.destroy() 이것들은 뭐지? 뭔가 지우면 큰일날 것 같으니까 가만 놔둬야되는 것 아닐까. 그래 다 프로그래머님들이 뜻이 있어서 놔둬셨을거야. 하면서 가만히 놔뒀을 것이고 HttpServletRequest 이것으로도 다운 케스팅 하지 않고 request에 .점을 딱 찍어보고 어? 아니 내가 원하는 사용법으로 사용할 수 없잖아. 어떻게 하지? 하고 몇시간을 헤맸을 것 같은데... 결론적으로 인터페이스 형태만으로는 내가 인터페이스를 제대로 사용하고 있는지 알 수 없다, 라는 것이고 인터페이스를 사용할 때마다 혹시 다른 인터페이스가 있는게 아닐까 의심하게 될지도 모를거 같습니다. 그래서 이런 인터페이스 형태에서 얻을 수 있는 정보를 넘어서 더 많은 모종의 정보들을 파악해야 비로서 인터페이스를 사용할 수 있는 부조리함?을 어떻게 극복하시는 건지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
dto 변환 로직의 위치
requestDto 나 responseDto 를 변환하는 로직은 어디에 위치하는게 좋을까요? 애플리케이션이 복잡해지면 저런 변환 로직들이 컨트롤러에 있게 되면 컨트롤러가 너무 복잡해 질거 같은데 어디에 있는게 좋을까요? 그리고 dto 변환을 서비스 계층해도 해되 되는것인지도 궁금합니다. 서비스 계층에서는 dto 에서 엔티티로 변환된 객체만 받아야 하는 것인지 그럼 서비스 계층에서는 리턴 타입을 dto 로 해야 하는지 아니면 엔티티를 그대로 리턴해주고 컨트롤러에서 변환을 해야하는지... 엔티티와 dto 를 나눠야 하는 이유와 필요성에는 공감을 하지만 그 변환 로직의 위치는 어디로 해야 할지 기준이 잘 서지 않는것 같습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문드립니다
학습중 강의 설정대로 war, java11, 디펜던시 웹, 롬북 설정후 따라하는데 "C:\Program Files\Java\jdk-11.0.10_windows-x64_bin\jdk-11.0.10\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.1\lib\idea_rt.jar=52700:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath C:\servlet_re\servlet_re\out\production\classes;C:\servlet_re\servlet_re\out\production\resources;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.5.2\9d68318f6607728e253030aa145e529bae9b0883\spring-boot-starter-web-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.5.2\6af2e2d4fcf02fcda700dbbcd4643e78d31bcc8c\spring-boot-starter-json-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.5.2\5aa5345f60cd3fbca331c05015e0700553448d66\spring-boot-starter-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.8\2cfa5e12bf103e2c82db78ce198e455dab456465\spring-webmvc-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.8\daa288e67b0f2e09a033500d5ce8406677c5045c\spring-web-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.12.3\f69c636438dcf19c49960c1fe8901320ab85f989\jackson-datatype-jsr310-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.12.3\592a882beaf1bd57b8fe960b937a2706b090b4d7\jackson-module-parameter-names-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.12.3\77424ea087313312e308dae5ff8445608aabb5e1\jackson-datatype-jdk8-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.12.3\d6153f8fc60c479ab0f9efb35c034526436a4953\jackson-databind-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.5.2\aa924c5d0d375f4b2b66f211704c24d40a7e647b\spring-boot-autoconfigure-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.5.2\bd6dc87b5ad870dbf635d0c7d9a3006666c9e797\spring-boot-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.5.2\8b94a1e350f68f8c3a7de6460e5691a84c8c157d\spring-boot-starter-logging-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.8\da9b87dacaa5bbf80fad0f7b483988372a00a152\spring-core-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.28\7cae037c3014350c923776548e71c9feb7a69259\snakeyaml-1.28.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.8\c367a05423e963c222e38a6a88b97d44de3880ca\spring-context-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.8\1377f80f938b1fc7eabe9e6c4f6895e77e3bec40\spring-aop-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.8\3d66fed1eebfcd119efcabc6218c813700a21ed\spring-beans-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.8\8a14547b76cbae3aeb02739e5b38e71835a6bbd8\spring-expression-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.12.3\7275513412694a1aafd08c0287f48469fa0e6e17\jackson-annotations-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.12.3\deb23fe2a7f2b773e18ced2b50d4acc1df8fa366\jackson-core-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.3\7c4f3c474fb2c041d8028740440937705ebb473a\logback-classic-1.2.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.14.1\ce8a86a3f50a4304749828ce68e7478cafbc8039\log4j-to-slf4j-2.14.1.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.31\f9ff62d83a25a94c1619de06d4015e2797bc849c\jul-to-slf4j-1.7.31.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.8\a143c8618eb2be8674c3cf132d9a5c953bb5488\spring-jcl-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.3\864344400c3d4d92dfeb0a305dc87d953677c03c\logback-core-1.2.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.31\9545c9cb71de4c18d97a91e32ef0be6f3f6661b7\slf4j-api-1.7.31.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.14.1\cd8858fbbde69f46bce8db1152c18a43328aae78\log4j-api-2.14.1.jar hello.servlet_re.ServletReApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.2) 2021-07-05 18:59:15.929 INFO 9308 --- [ main] hello.servlet_re.ServletReApplication : Starting ServletReApplication using Java 11.0.10 on DESKTOP-S0IEC1P with PID 9308 (C:\servlet_re\servlet_re\out\production\classes started by kcj30 in C:\servlet_re\servlet_re) 2021-07-05 18:59:15.934 INFO 9308 --- [ main] hello.servlet_re.ServletReApplication : No active profile set, falling back to default profiles: default 2021-07-05 18:59:16.510 WARN 9308 --- [ 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/WebServlet 2021-07-05 18:59:16.516 INFO 9308 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-07-05 18:59:16.539 ERROR 9308 --- [ 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/WebServlet at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:537) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.2.jar:2.5.2] at hello.servlet_re.ServletReApplication.main(ServletReApplication.java:14) ~[classes/:na] Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1231) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.8.jar:5.3.8] ... 13 common frames omitted Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet at 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 이런 오류가 발생했습니다 왜 이런거죠??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿에 대해서 질문있습니다!
서블릿이 싱글톤으로 하나만 생성된다는 것은 알겠는데 만약 url로 /hello, /spring 이렇게 다르게 요청이 올 경우는 싱글톤 서블릿 2개 가 생성된다고 보면 되나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
변경된 테스트에서 MemberRepository를 주입받는 코드의 용도
안녕하세요! 강의에서 기존 테스트를 통합 테스트로 변경하면서 생성자 주입 코드가 필드 주입 코드로 변경되었는데요 @Autowired MemberService memberService;@Autowired MemberRepository memberRepository; 필드 주입으로 변경한 후 MemberRepository를 Autowired 받는 부분은 주석 처리를 해도 테스트 코드가 정상적으로 수행되더라고요 @Autowired MemberService memberService;// @Autowired MemberRepository memberRepository; 생각을 해보니 MemberService를 Autowired할 수 있다는 건 MemberService 빈이 이미 생성되어 있다는 거고 MemberService 빈이 생성되려면 MemberService 생성자의 매개변수로 받을 MemberRepository가 필요하기 때문에 MemberRepository 빈도 이미 생성되어 있다는 거고 결국 MemberRepository 빈을 전달하면서 MemberService 빈을 생성했기 때문에 이후부터는 필드 주입이든 생성자 주입이든 MemberService를 Autowired하기 위해 MemberRepository가 함께 쓰이지 않아도 될 것 같더라고요 혹시 아니라면 MemberRepository를 주입받는 코드의 용도가 따로 있는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
AfterEach와 BeforeEach
memberRepository의 clearStore() 함수를 매 테스트 이전마다 호출해주는 BeforeEach나 매번 테스트가 끝날 때마다 호출해주는 AfterEach나 현재 테스트가 다음 테스트에 영향을 안미치도록 한다는 점에서 동일하기 때문에 뭘 쓰든 상관이 없을거 같은데 현업에서는 어떤 경우에 AfterEach를 사용하고 어떤 경우에 BeforeEach를 사용하나요?? 테스트 마다 동적 할당(BeforeEach)하고 해제(AfterEach) 할 때 일까요..?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DI 적용해보기!
안녕하세요! 수업 너무 재밌게 잘 듣고 있습니다. 수업 중에 FrontController에서 어댑터들을 DI로 적용할 수 있다고 하셔서, 좀 더 잘 이해하기 위해서 한번 해보려고 하였습니다! public FrontControllerServletV5(Map<String, Object> handlerMappingMap, List<MyHandlerAdapter> handlerAdapters) { initHandlerMappingMap(handlerMappingMap); initHandlerAdapters(handlerAdapters); } 코드를 돌리기 전에 생각해보니, 이런 식으로 파라메터를 입력받는 방법이 존재하지 않는다고 생각했습니다. V5에서 어떤 방식으로 DI를 구현하면 될까요?? 어떤 방식으로 접근해야할지 모르겠어서 질문드립니다! 감사합니다!!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ModelAttribute가 한 개가 아닐 경우에는 어떻게 하나요?
콘트롤러에 @ModelAttribute Item item, BindingResult bindingResult 이렇게 연속적으로 매개변수를 설정해줘야 한다. bindingResult에 넣어주게 되는 Error 객체들이 @ModelAttribute의 필드들과 자동 맵핑되기 때문이다, 라고 이해했습니다. 그럼 두개의 ModelAttribute가 들어가는 경우 addItem ( @ModelAttribute Item item1, BindingResult bindingResult1, @ModelAttribute Item item2, BindingResult bindingResult2 ) 이렇게 설정해줘야 하는지요? 어라 그럼 템플릿에서 errors객체는 BindingResult bindingResult1, BindingResult bindingResult2 이 둘중에 뭐가 되는거지... 같은 의문이 들어서 질문드려봅니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost 오류
안녕하세요 선생님 지금까지 실행은 잘 되다가 크롬에서 http://localhost:8080 이 안되서 어제 application.properties 에 server.port=8082 로 변경하여 잘나왔었는데 또 무언가를 잘 못건드렸는지 사이트에 연결할 수 없음 localhost에서 연결을 거부했습니다. 다음 방법을 시도해 보세요. 연결 확인 프록시 및 방화벽 확인 ERR_CONNECTION_REFUSED 이렇게 나옵니다. 포트 번호를 다른것으로 바꿔도 위와 같이 나오는데 이유가 무엇인가요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
아무리 해도 연결이 안되네요ㅠㅠ
Database "C:/Users/NOTE/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 윈도우 쓰고 있습니다. 비슷한 문제 있으신 분들이 올려준 질문 글이랑 답변도 보고 따라해보는데 계속 이 오류가 떠서 연결이 안됩니다.. 이거 때문에 진도를 못나가고 있네요.. 어떻게 해야할까요ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@WebServlet의 name을 지정해 줬는데 언제 사용하나요?
@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") requestParamServlet 은 언제 사용되어 지나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
질문드립니다.
강의중에 궁금한게 생겨서 질문남깁니다. 현재 3년동안 개발을 하면서 ConcurrentHashMap을 사용하지 않고 모든코드를 HashMap으로 처리하였습니다. 물론 실제 고객들이 사용하는 서비스개발 회사가 아니라 주로 금융권 SI프로젝트들 중에서도 고객내부직원들이 쓰는 업무를 주로 개발해서 트래픽이 많이 몰리진 않았거든요. 제가 경험했던 프로젝트들이 여러개의 쓰레드가 접근하지 않아서 HashMap으로도 무리없이 프로젝트가 진행되었던 걸로 생각하면 될까요?? 반대로 트래픽이 몰리는 서비스개발회사에서는 ConcurrentHashMap을 사용하면 되는건가요??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스태틱 클래스 이런식으로 만들어도 되나요?
미리 사용할 정보들 미리 저장해둔다는건 맨날 생각만 해보고 해보진 않아서 강의듣고 억지로 만들어 보았습니다. 이런식으로 만들어도 문제가 없을까요? 작동은 잘되는거 같습니다. @Data@AllArgsConstructorpublic class DeliveryCode { private String code; private String displayName; public static class DeliveryCodes{ private static List<DeliveryCode> deliveryCodes = new ArrayList<>(); static { deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송")); deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송")); deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송")); } public static List<DeliveryCode> getDeliveryCodes() { return deliveryCodes; } }}
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
체크여부에 관계 없이 value값이 항상 true로 되어 있는 이유가 궁금합니다.
로그를 찍어보니까 체크를 해제하면 false로 들어오는게 보이는데 페이지 소스를 보면 value가 항상 true로 되어 있더라구요. <input type="checkbox" id="open" class="form-check-input" disabled name="open" value="true" /> html상에서 checked가 있느냐 없느냐에 따라 체크 여부를 렌더링하는 것까지는 이해했는데 true라는 값이 어디에서 나오는 것인지 궁금합니다. (1) 체크가 되면 open: true 전송 (2) 체크가 안되면 open값 자체가 전송이 안되니 value가 true여도 문제없음 이기 때문에 서버에 있는 value값을 무시하고 value="true"를 디폴트값으로 렌더링하면서 서버상의 true, false값은 checked 태그로만 확인하는 건가요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
item.getOpen()이 안되는 경우
혹시 저와 같은 문제를 겪으실 분들을 위해 제가 잠깐동안 삽질한 경험을 남깁니다. 강의를 쭉 듣던 도중에 로그를 찍는데 item.getOpen()이 안되는 상황을 겪었습니다. 그런데 item.setOpen()은 됐거든요. 찾아보니까 문제는 Item 클래스에서 open을 primitive타입인 boolean으로 선언했기 때문이었습니다. 롬복으로 게터세터를 적용할 경우 primitive boolean의 게터명명규칙이 getSomething이 아니라 isSomething입니다. 따라서 item.isOpen()을 입력해야 에러가 없습니다. 그럼 어떻게 영한님은 isOpen이 아니라 getOpen이 되었는가? 다시 잘 살펴보니 boolean이 아니라 참조형인 Boolean을 사용하셨습니다....ㅜ null값 때문인 것 같습니다. 참조형이니까 롬복이 getOpen을 생성합니다. 생각없이 따라치다가 이런 일을 겪네요. 집중해서 열심히 듣겠습니다. 혹시 이 글을 보게된 여러분 화이팅..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:action
이 부분을 생략안하고 사용하면 상품등록 버튼을 클릭하면 500에러가 나오는데, 왜 그런지 알 수 있을까요? 그림의 빨간색박스 부분도 th:action을 생략했을 때와, 생략하지 않았을 때 동일합니다.ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
템플릿에서 SpringBean 조회
안녕하세요 강사님 Thymeleaf 엔진이 Bean에 접근할수 있게 해주는 기능을 만든 이유가 타임리프 개발팀이 실무에서 자주쓴다고 판단했거나, 개발자들의 요청에 의해 만들어졌다고 생각하는데요!실제로 템플릿엔진이 직접 등록한 Bean에 접근해서무언가를 액션하는 시나리오가 어떤게 있을까요 ? (MVC 2편 알림보고 바로 구매해서 주행중입니다. 늘감사합니다)