묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Boot JWT Tutorial
강의 완독하고 궁금증이 생겨 질문 드립니다.
안녕하세요. 먼저 좋은 강의 올려주신점에 감사인사 드립니다. 다름이 아니라 강의 시작부분에 선생님께서 jwt가 실무에서 사용되기에는 몇가지 고려할 사항들이 있다고 하셨는데 고려할 사항들이 어떤 부분들을 말하시는건지 간략하게 알 수 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
템플릿에서 SpringBean 조회
안녕하세요 강사님 Thymeleaf 엔진이 Bean에 접근할수 있게 해주는 기능을 만든 이유가 타임리프 개발팀이 실무에서 자주쓴다고 판단했거나, 개발자들의 요청에 의해 만들어졌다고 생각하는데요!실제로 템플릿엔진이 직접 등록한 Bean에 접근해서무언가를 액션하는 시나리오가 어떤게 있을까요 ? (MVC 2편 알림보고 바로 구매해서 주행중입니다. 늘감사합니다)
-
미해결스프링 핵심 원리 - 기본편
final은 왜 붙이셨는지 알 수 있을까요?
private final MemberRepositry memberRepository; 인터페이스 의존시킬때 final은 무슨 역할을 하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberForm? Dto?
강의에서 구현한 MemberForm이 Dto와 같은 개념인가요? MemberForm을 사용하신 이유에 대해 설명하신것을 들어보면 Dto와 같은 것 같은데 만약 같은것이면 왜 Dto라 명명하지 않으신건지, 혹은 Dto와 다른 개념이면 어떤 점이 다른것인지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
어쩐 이유에선지 8080포트가 사용중이라 실행이 안됩니다..ㅠ
계속 8080포트가 사용중이라 에러 메시지가 떠서 따로 cmd에서 포트 번호 확인해봤는데 8080포트는 나오지도 않습니다... 왜 이러는지 모르겠습니다...
-
미해결스프링 핵심 원리 - 기본편
MemoryMemberRepository , line number 7
안녕하세요, 강의 너무 감사히 잘 듣고있습니다 질문있는데요 MemoryMemberRepository , line number 7 에서요 hashmap을 static으로 선언 하신 이유가 무엇인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
새로고침 말고 뒤로가기를 누르면 어떻게 되나요?
새로고침 문제를 PRG 패턴으로 해결했어도 뒤로가기 버튼을 누르면 '전의 전'의 요청을 다시하는가 싶어서 눌러보았습니다. 그랬더니 get 요청처리되어서 상품 등록 폼이 나왔습니다. 그래서 상품이 중복 등록되진 않는 것 같은데 '전의 전'에 사용한 'get method' 요청을 다시 보낸다고 이해하면 될까요? 전의 전 요청이 post 요청이면 건너띄고 전의 전 get 요청을 찾아서 보내는 거라고 이해했습니다. 뒤로가기에 대해서 제가 제대로 이해한 건지 잘 모르겠습니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
선생님 안녕하세요
안녕하세요 제가 강의를 보고 공부하던도중 8:14분에 있는 정규식과 닉네임의 제출양식이 같아야하는부분에서 must match~라고 빨간 오류를 내주는 부분에서 저는 가입하기 버튼을 눌렀을때 오류를 내지않고 그냥 인덱스 페이지(/)로 그냥 정상적으로 보내버려서 오늘 하루동안 이 오류를 계속 잡고 있다가 디버깅, 코드 비교 5번, 인텔리제이 재설치 pom.xml 파일 똑같이 맞추기 별 방법을 해봐도 안됬는데 선생님께서 제공해주신 완성된 소스코드의 첫 커밋으로 체크아웃하여 스프링 버전을 선생님의 스프링 버전인 2.2.4에서 제가 강의를 들으며 직접 코드를 따라치던 스프링의 버전인 2.5.2로 변경을 하고나니 선생님꺼의 완성코드 프젝에서도 저런 must match오류 구문이 안나타나고 그냥 인덱스페이지로 이동을 시키는 현상이 똑같이 나타났습니다. 제가 이 현상을 보고 오류의 원인이 스프링 버전차이라고 확신을 하게되었는데요 제 인텔리버전은 21.2EAP버전입니다 근데 스프링 프젝을 처음만들때 2.2.4버전으로 만드는 탭이 아예없어서 앞으로 스프링 프젝을 2.5이상 버전으로 해야할거같은데 이런 버전차이때문에 나타나는 현상을 어떻게 해결할수 있을까요? 그리고 @Pattern 어노테이션 뿐만아니라 @Length어노테이션에도 min = 3, max = 5를 주고 5개를 훨씬넘게 입력을 했는데도 오류를 잡아주지않았습니다. P.S 제가 직접 보고 따라쳤던 타이핑버전의 소스코드를 그대로 선생님꺼 완성된프젝에 옮겨서 실행했는데 정상작동이 됬습니다. 이 말은 제가 타이핑친 소스코드에 정말 문제가 없다는 거여서 제가 버전차이의 문제라고 확신을 하게되었습니다. 아 그리고 EAP버전이여서도 아닌게 제가 재설치를 하기전까지는 EAP버전이 아니였습니다. 긴글 읽어주셔서 정말 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메소드와 setter
엔티티에서 Setter 를 사용하지 않아야 변경점을 줄일 수 있어 유지보수 할 때 유리하다고 하셔서 최대한 사용을 자제하려고 하는데요, 연관관계 메소드를 만들 때, setter 를 사용해서 만드셨는데 없이 만들 수 있는 방법이 있을까요? // Order - Delivery 연관관계 메소드 public void setDelivery(Delivery delivery){ this.delivery = delivery; delivery.setOrder(this); // Delivery 의 setter 사용 }
-
미해결자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
14강 STS3 설치시 마켓플레이스에서 찾을 수 없을 때 해결방법
2021-06-26 기준으로 작성된 글입니다. 강의와 같이 마켓플레이스에서 STS를 검색하면 STS4만 나오고 STS3는 나오지 않습니다.STS3가 중단되었기 때문입니다.이경우 다음 방법으로 해결할 수 있습니다. 1. 먼저 https://spring.io/tools 로 접속한뒤 "Spring Tool Suite 3 wiki" 링크를 찾아 접속합니다. 2. https://github.com/spring-projects/toolsuite-distribution/wiki/Spring-Tool-Suite-3 로 들어가면 STS3 버전별로 설치할 수 있는 링크가 있습니다. 이중 각 버전별로 하단 부분에 "p2 repositories" 라는 부분이 있습니다. 3. 본인의 이클립스 버전에 맞는 링크를 복사한뒤 이클립스에 들어가 Help탭 > Install New Software... 를 클릭한뒤 링크를 붙여넣습니다. 4. 모든 항목을 체크한뒤 설치를 진행합니다. 4-1) 만약 "version 1.8.0_291 of the jvm is not suitable for this product. version 11 or greater is required" 와 같은 오류가 나올 수 있습니다. 이것은 자바 버전이 맞지 않아 생기는 문제입니다. 저는 자바8버전을 사용하고 있었는데, 기 설치된 자바8, 이클립스를 모두 지운뒤 자바11, 새 이클립스로 재설치하는 방식으로 문제를 해결했습니다. 혹시 에러가 발생한다면 댓글로 공유해주시면 감사하겠습니다🙂 출처 : https://velog.io/@silverbi99/Spring-스프링-프레임워크-STS3-설치-및-환경설정
-
미해결스프링 핵심 원리 - 기본편
안녕하세요! 질문이 있습니다.
안녕하세요! 영한님, 좋은 강의 감사드립니다 :) 강의를 수강하다가 궁금한 점이 생겨 질문드립니다. 스프링 빈이 스프링 컨테이너에 로딩되는 시점에 대한 궁금증인데요. 컴파일된 바이트 코드가 Class loader에 의해 JVM 내로 로딩되는 시점에 Spring container가 먼저 생성되고, @Bean이나 @Component 등의 어노테이션이 붙은 메서드나 클래스를 찾아서 객체(bean)를 생성한 이후에 Spring container 내에 등록 시키고, 의존관계를 주입해주는 등의 일련의 과정으로 동작하는 것이 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
안녕하세요! 질문이 있습니다.
안녕하세요, 영한님! 언제나 좋은 강의 감사드립니다. 강의를 들으면서 몇가지, 궁금한 점이 생겨 질문 드립니다. 1. 첫번째 질문 @Configuration, @Bean, @Component 등등... Spring 에서 지원하는 여러 어노테이션 들이 있는데, 어쨌든, spring에서는 이러한 어노테이션을 스캔해서 추가 적인 작업을 수행해야 할 텐데, 이때, 어노테이션을 스캔하는 과정에서 자바의 리플렉션 API 기술이 사용되는 것일까요?? 2. 두번째 질문 CGLIB으로 바이트코드를 조작하여 생성된 AppConfig를 상속한 클래스의 내부 코드를 직접 확인해볼 수 있는 방법이 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의를 듣다가 문득 드는생각입니다.
안녕하세요 이번 강의를 듣다가 문득 드는생각에 질문드립니다. SpringMVC패턴을 너무 깊숙히 알지 않아도 괜찮은건가요? 대충 큰 그림만 알아도 되는건지 궁금합니다. 너무 깊게 들어가면 한도 끝도 없는것 같아서요 ㅠㅠ 그리고 알아야한다면 이번 강의에서 코드하나하나보다는 흐름정도만 알면 되겠죠?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
layout dialect는 사용하지 않는 편인가요?
저는 thymeleaf layout dialect 가 layout 기능인 줄 알았는데 이게 layout 이었군요. layout dialect를 사용할 때도 있으신가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 - 기본기능에서 operation.html 오타 있는거 같습니다
operation.html에서 <li>비교 연산 <ul> <li>1 > 10 = <span th:text="1 > 10"></span></li> <li>1 gt 10 = <span th:text="1 gt 10"></span></li> <li>1 >= 10 = <span th:text="1 >= 10"></span></li> <li>1 ge 10 = <span th:text="1 ge 10"></span></li> <li>1 == 1 = <span th:text="1 == 10"></span></li> <li>1 != 1 = <span th:text="1 != 10"></span></li> </ul> </li> 1 == 1 이랑 1 != 1 이 부분에서 span 태그 안에는 1 == 10, 1 != 10 이라 있는데 li 태그에는 1 == 1, 1 != 1 이렇게 적혀 있어요 1 == 10 1 != 10 이거 맞나요?
-
미해결스프링 핵심 원리 - 기본편
롬복에 관해서
롬복 외부라이브러리 추가는 확인 하였고 어노테이션 설정도 했습니다. 그러나 플러그인에서 롬복이 검색자체가 되지 않습니다. 그리고 난뒤에 setAge 메서드 차체가 생기지 않습니다. 어떻게 해결해야 하나요?ㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
1.Exception 관련, 2. Item에 정의한 메서드
1.MemberService에 이 메서드도 Exception에 두어도 될까요?validateDuplicateMember2.Item에 정의한 재고수량/제거 메서드를 Member와 같이 ItemService를 만들어 여기에 둔다면 조금 어색한 느낌인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
GET에서 던져준 new Form과 POST에서 제출된 Form간의 연관관계가 궁금합니다!
안녕하세요. 훌륭한 강의.. 완강하고 공부하던중 문득 의문이 들었습니다. GET에서 던져준 Form과 POST의 Form은 같은 객체일까? 하고 보니 다른 주소값의 객체이더라구요. 혼자 고민을 조금 해보았습니다. 생각해보니 POST에서 넘어온 것은 JSON형태의 데이터를 객체화?? 시켰을 뿐인 것일테니 당연한 결과 이겠더라구요.. 이어서 궁금한것은 GET에서의 Form의 역할 입니다. 그저 어떤 필드가 정의되어 있는지 알려줄 뿐인걸까요?? 그 대상은 타임리프인?? 그렇다면 BookForm.class 나 다른 방법을 통해 알려 줄 수 있을텐데 이런 방법을 택한 이유가 뭘까요?? 메모리 낭비와 코드의 간결함(가독성과 개연성 있는 문맥)을 저울질 했을 때 후자가 훨씬 가치 있는 거라서 그런걸까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 오류
안녕하세요 강사님 항상 좋은 강의와 피드백 감사드립니다 다름이 아니라 이번에 강의 중 '회원가입' 테스트를 그대로 따라 코딩하였으나 실행에 오류가 뜹니다. 관련하여 사진과 오류글을 그대로 올려보니 한 번 확인해주시면 감사하겠습니다! java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [jpabook.jpashop.JpashopApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 25 more Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'memberRepository' for bean class [jpabook.jpashop.repository.MemberRepository] conflicts with existing, non-compatible bean definition of same name and class [jpabook.jpashop.domain.MemberRepository] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:349) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:287) at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ... 38 more
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로직 배치
안녕하세요! 선생님 강의 잘 보고 있습니다. 강의를 보며 MyBatis로 개발된 프로젝트에 JPA를 적용해보고 있는데요. change 라는 메소드를 도메인객체에 작성하신 부분에 질문이 있습니다. 기존 프로젝트에서는 update 나 휴면계정처리 같은 메소드를 모두 dao에 배치했었는데 JPA를 적용하는 과정에서 update, 휴면계정처리 또는 로그인 상태 확인 과 같은 메소드는 어디에 배치하는 것이 좋을지 헷갈리기 시작합니다. 질문이 미시적인데요. 결과적으로 domain, repository, service, controller 에 배치되는 로직의 기준에 대해 팁을 알고 싶습니다. 맞는 말인지는 모르겠지만 예시를 들자면 아래와 같이요. ex) repository에는 DB에 접속이 꼭 필요한 메소드만 작성한다.