묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
질문을 모르고 삭제해버렸는데 혹시 답글을 해주셨을까요??
답글 확인을 못하고 삭제를 눌러서ㅠㅠ,,,
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
나프 2강의부터 듣는데 mvc05 war가 실행되지 않습니다
삭제된 글입니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
map<Long,Member>를 넣은 이유가 궁금합니다!
Member class에는 long id, String name을 가지고 있어서 id값에 Long을 주는건 이해가 되는데 name값을 넣어주려면 Member가 아니라 String이 들어가야되는게 아닌가요?? 잘 이해가 안되서 설명 부탁드리겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemServiceImpl.java 클래스를 만들지 않은 이유
강사님 안녕하세요, 강의를 듣다 궁금한 점이 있어서 글 올립니다. 보통 ItemService 같은 서비스 클래스는 구현체를 만드는 것으로 알고 있는데, 혹시 강의처럼 ItemServiceImpl 클래스를 안만들고 바로 구현해도 크게 문제되지는 않는건지 궁금합니다. (JPA라서 그런건지 아니면 예제이기 때문에 단순화 시키신건지 등 ..) 답변 부탁드리겠습니다! 감사합니다!!
-
해결됨[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)
handleChangeInput에서 handleReset함수를 return하는 이유가 궁금합니다.
handleChangeInput 함수에서 handleReset 함수를 실행하는 것은 이해가 되는데요. 왜 return 구문을 쓰신건지 잘 모르겠습니다 ^^;; handleChangeInput 함수 자체도 별도의 return을 해주는 것이 없는것 같아서요. handleChangeInput(e) { const searchKeyword = e.target.value; if (searchKeyword.length <= 0) { return this.handleReset(); // 이 부분 입니다! } this.setState({ searchKeyword }); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
자바 코드로 직접 스프링 빈 등록하기 예제에서 에러가 발생합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 스프링 빈과 의존관계에서 자바코드로 직접 스프링빈 등록하기부분을 듣고있습니다. 회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애노테이션을 제거하고 @bean 설정할때 @Bean public MemberService memberService(){ return new MemberService(memberRepository()); } 에서 에러가납니다. 에러 메시지는 ' java: incompatible types: hello.hellospring.repository.MemberRepository cannot be converted to hello.hellospring.repository.MemoryMemberRepository' 입니다. 캐스팅해야한다고 뜨는데, 수업화면에서는 별도 캐스팅없어도 오류가 발생하지않더라구요 ㅠ 제가 어느부분을 놓친건지 모르겠습니다 ㅠㅠ package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); Optional<Member> findById(Long id);//널일경우 대비 Optional<Member> findByName(String name); List<Member> findAll(); } package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.stereotype.Repository; import java.util.*; public class MemoryMemberRepository implements MemberRepository{ private static Map<Long,Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(),member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } public void clearStore(){ store.clear(); } } package hello.hellospring.service; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { @Bean public MemberService memberService(){ return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
멀티 스레드 관련 질문이 있습니다.
안녕하세요. 강사님 강의 정말 잘 보고있습니다.! 다름이 아니라 수업중에 서블릿은 멀티스레드를 환경을 지원한다고 말씀해주셨는데요 궁금한점이 생겼습니다. 대충 아래와 같은 예제의 상황에서 public Member doSomething(String username) { Member m = findByName(username); // 1. a스레드, 3. b.스레드 .. // 2. a 스레드가 로직 실행 return m; // 4. a스레드가 return // a의 Member가 아닌 b의 Member가 리턴??!! } 멀티 스레드면 저 해당 메서드에 수십개의 스레드가 동시 에 접근한다는 것인데, 그러면 어떤 로직을 수행하는 중에 다른 스레드가 값을 변경하거나 하는 상황이 발생되지 않나요? 모든 메서드에 synchronized를 붙여서 다른 스레드가 접근하는 것을 막아야될 거 같은 생각이 드는데 실무에서는 그럼 모든 메서드에 synchronized를 이용해서 개발을 해야하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter setter 질문 드립니다.
static class Hello { private String name2; public String getName() { return name2; } public void setName(String name2) { this.name2 = name2; }}이렇게 변수 이름을 name2로 바꿔줘도 json으로 바뀌면 키 값이 name인데 이유가 뭔가요? 그런데 get, set 메서드 이름에도 2(getName2, setName2)를 붙여주면 키 값이 name2로 잘 나옵니다 이렇게 동작하는 이유가 뭔가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
render의 정확한 의미가 무엇인가요??
선생님께서 뷰 화면으로 forwarding 할때 렌더라고 말씀하시고, MyView 객체에도 render 메서드를 만드셨는데 검색으로는 렌더링이 브라우저가 HTML을 모니터에 출력해주는 거라고 나오는데 선생님이 사용하신 의미는 다른거 같아 질문드려요!!
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
contextLoader 리스터 에러 발생합니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 강사니- 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 말씀대로 pom.xml, web.xml다 설정하구요... 실행시키는데 어떤 컴에서는 오류없이 잘 되고 어떤 컴에서는 SEVERE: 클래스 [org.springframework.web.context.ContextListener]의 애플리케이션 리스너를 설정하는 중 오류 발생 이란 에러가 뜹니다.. 인터넷에서 검색한 방법을 해봐도 해결이 되지 않습니다... 버전체크 다 했구요..동일 파일을 복사해서 다른 컴에 실행하면 잘 됩니다.. 무엇이 문제일까요??? 감사합니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloSpringApplication 메인 메서드 동작시킬때
HelloSpringApplication 메인 메서드 동작시킬때, application이 실행되면서 서버가 도는 것 같습니다. 궁금한 점이 이때, 작성해둔 모든 컨트롤러, 서비스, 레파지토리, 도메인 등이 같이 가동되는 것인지 궁금합니다. 그리고 컨트롤러가 여러개 있으면 @Controller로 기재된 모든 컨트롤러가 MemberService, MemberRepository 또는 더 나아가 모든 서비스와 레파지토리와 연결되는건가요? 왜냐하면 10분에 나오는 영상에 helloController와 연결된 그림이 있습니다. MemberController와 연결 시켜주는 과정인줄 알았는데 helloController가 그림에 있길래 모든 Controller가 @Service라고 기재된 것과 연결된 것인지 궁금합니다. 사실 더 나아가 service와 repository도 전부 서로서로 연결되는 구조인지 궁금합니다..
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Error parsing HTTP request header 에러
안녕하세요 v5 추가하고 나니 갑자기 이전 작업들도 안되고 다음 오류가 떠서 질문 남깁니다ㅠㅠ 서블릿, JSP, 서블릿 MVC 중에서 서블릿만 작동되고 JSP는 누르면 파일이 다운로드 되네요 나머지는 Whitelabel Error Page와 404가 뜹니다 뭘 잘못 건드린건지 감도 안잡혀요 검색해보니 인코딩 문제일수도 있다는데 저는 크롬을 사용해서 자동으로 인코딩 될텐데.. 문제를 모르겠어요 ㅠㅠ 제 코드는 아래와 같습니다 https://github.com/yeon-06/inflearnMvc1 오류나는 구간은 branch 따로 분리해두었습니다 오류 코드는 아래와 같습니다 2021-05-20 16:35:32.017 WARN 8656 --- [nio-8080-exec-2] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/new-form.jsp] 2021-05-20 16:35:32.045 DEBUG 8656 --- [nio-8080-exec-2] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [776] 2021-05-20 16:35:32.045 DEBUG 8656 --- [nio-8080-exec-2] o.a.coyote.http11.Http11InputBuffer : Received [] 2021-05-20 16:35:32.045 DEBUG 8656 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@5b8d04a4:org.apache.tomcat.util.net.NioChannel@7ca16f33:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:65531]], Status in: [OPEN_READ], State out: [OPEN] 2021-05-20 16:35:34.899 DEBUG 8656 --- [nio-8080-exec-3] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [776] 2021-05-20 16:35:34.909 DEBUG 8656 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1345) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1255) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:794) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:359) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 2021-05-20 16:35:34.911 DEBUG 8656 --- [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CONNECTION_NOW] reported while processing request java.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1345) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1255) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:794) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:359) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.44.jar:9.0.44] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
final관련 질문이 있습니다~
안녕하세요 ~~ 강사님 다름이 아니라 3분 40초에 private static Map<Long, Member> store = new HashMap<>(); 이렇게 작성하셨는데 final키워드를 붙이지 않는 이유에 대해서 궁금해서 질문 드렸습니다! 우선 싱글톤이기 떄문에 래퍼런스도 변경될 일이 없고, 인텔리제이에서도 final 권고 표시가 나오던데, final 키워드를 생략한 이유에 대해서 궁금해서 질문 남깁니다! 감사합니다
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
아래와 같은 문제, 해결방안.
안녕하세요. 아래 질문자와 같은 오류로 몇시간 허비했는데 다른 분들의 소중한 시간을 지켜 드리고자 해결방안 안내해 드립니다. 저는 맥os big sur + 인텔리제이 ide 환경에서 문제 없이 작동했습니다. - 문제의 원인은 톰캣 1. 톰캣의 lib 폴더에도 jdbc 커넥터 jar 파일을 설치해줘야 됩니다. 심지어 저는 프로젝트의 외부 라이브러리 연동에서 삭제했고 톰캣 lib 에만 복사해줬는데도 작동했습니다. 아마 WAS 서블릿 부분은 jdk 연동이 아니라 톰캣에서 다 처리하기 때문인 것 같습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
폼을 통해 받은 데이터를, 직접 만든 Model에 매핑하는 방법
강사님 안녕하세요, 본편 강의를 다 듣고 혼자 토이 프로젝트를 만들다가 막혀서 질문올립니다. 단순하게 Form을 통해서 데이터를 받아 처리하는 내용입니다그런데 감이 없어 어느 방법이 나이스한 방법인지 모르겠습니다. 1. 직접 만든 모델 클래스는 아래와 같이 생겼습니다. 2. List타입의 필드는 HTML FORM의 element들에 같은 name을 가져와서 바인딩하려합니다 @ModelAttribute는 내부적으로 set메소드를 부르니 역시나 매핑이 안 되더라구요.. 그래서 생각해본 방법으로는 하나하나 RequestParam으로 받아서 처리한다 (List는 MultiValueMap으로) setMethod의 파라미터를 String으로 받아 setMethod에서 내부적으로 처리한다 front 데이터를 Json으로 변환하여 파싱한다 (컨트롤러에서 Model에 접근) 커스텀 어노테이션을 만들고, HandlerMethodArgumentResolver를 implement해서 MyModelResolver를 만들고 @Configuration한다 폼을 통해 받은 데이터를 직접 만든 Model에 매핑하는 방법을보통은 어떻게 구현하는건가요? ps. 사실 저는.. 1~3번이, 제 눈에는 코드가 안예뻐 보였습니다...아뇨 사실은 좋은 현업 코드를 본 적이 없기 때문에 뭐가 예쁜지 안 예쁜지도 모르겠습니다4번으로 만들면 앞단에선 지금처럼 쓰기 편하고, 스프링 내부도 공부할 수 있을 것 같아서 시도해봤습니다. 그런데,메시지 바디로 넘어온 쿼리 파라미터형식의 methodName에 매칭되는 setMethodName이 있는지, 데이터는 들어있는지,데이터 타입은 뭔지, 변환해줘야하는지..이런게 너무어렵습니다.. 이렇게 하다보니 제가 뭘 모르는지도 모른다는 생각이 듭니다. 별것도 아닌 것 같은 것을 어떻게 구현하는게 좋은건지 판단도 못 하는 자신이 너무 바보같습니다ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew.bat 저 처럼 헤메시는분들이 없기를 바라며
저는 cmd를 사용하지 않고 구글에서 cmmder을 설치하여 사용합니다. 제일 먼저 spring 디렉토리로 이동합니다. cd 디렉토리 그 후 ls -al을 입력해 보면 gradlew.bat 이라는 이름의 bat파일이 보이실 거에요. 복사하여 gradlew.bat build를 해줍니다. 위와 같이 Build Successful이라 뜨면 성공한거구요. ls -al을 해보면 build 폴더가 보이실 거고 cd build를 해주신 다음에 cd libs 해주고 해당 디렉토리에서 java -jar hello-spring-0.0.1-SNAPSHOT.jar 이렇게 해주니 성공적으로 실행이 돼네요. 어찌보면 영상에 나와있는 내용 그대로 글로 적은것 뿐이지만 누군가에게 도움이 돼셨길 바라며
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA가 Mybatis를 완벽히 대체 가능한가요?
주니어 개발자로 현재 SI업체에서 근무하고 있는데, 개발시 Mybatis를 사용합니다. 강의를 듣고 간단하게 JPA를 적용해서 샘플 프로젝트정도를 만들어 보았는데 개인적으로는 매우 마음에 들어서 프로젝트에도 한번 써보고 싶어서 사수에게 건의 하였으나 JPA는 간단한 CRUD에는 좋은데 실제 프로젝트에서는 통계등을 조회해야하는데 매우 많은 조인들이 들어가고 sql 쿼리만 수백줄이 되는데, 이런걸 JPA가 대체하기 어렵다. 라는 답변을 받아서 문의 드립니다. 근데 생각해보면 좀 이상한게 해외에서는 JPA가 더 많이 사용된다는데 해외에는 차트같은게 없나..? 싶은 생각이 들더라구요. 그래서 JPA가 mybatis를 완벽히 대체가 가능한건지, 아니면 둘을 병행해서 써야 하는건지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
servletmvc쪽 질문이 있습니다
안녕하세요 현재 mvc강의를 수강하고 있는 학생입니다 초반에 servlet쪽은 다 따라하고 실행이 잘 되었는데 현재 servletmvc쪽으로 넘어가니 webapp/index.html 쪽부터 시작해서 servletmvc 패키지쪽들은 안되네요 현재 인텔리j 커뮤니티버전 사용중입니다 현재 restart도 해보고 오픈톡방에 질문도 해보았는데 다른분들도 이해가 잘 안된다고 하시네요 ㅠㅠ 현재 404로 못찾고 있습니다 404 -> 맵핑이 제대로 되어있지않다.. 왜이런걸까요??? 메일로 혹시 프로젝트를 보내도 될까요 ?? <현재 오류 내용> Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue May 11 17:08:07 KST 2021 There was an unexpected error (type=Not Found, status=404).
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
dispatcher 질문
안녕하세요 선생님 선생님께서 강의해주신 내용중에서 궁금한게 있습니다. servlet에서 dispatcher.forward를 통해서 html파일을 호출하셨는데 dispatcher보다는 pagecontext 객체에 forward메서드가 있는데 이것도 브라우저에 response를 주지 않고 바로 제어권이 이동하는 문서로 주소가 바뀌지 않고 이동한다고 알고있습니다. 혹시 이 둘이 다른기능을 하는건가요? 선생님께서 dispatcher를 사용하시는 이유가 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상품 삭제 관련해서 질문이 있습니다.
먼저 강의 항상 잘 보고 있습니다 선생님!!! 제가 editForm 아래에 <div class="col"> <button class="w-100 btn btn-danger btn-lg" onclick="location.href='item.html'" th:onclick="|location.href='@{/basic/items/{itemId}/edit/delete (itemId = ${item.id})}'|" type="button">삭제 </button></div> 추가후 컨트롤러에 @GetMapping("/{itemId}/edit/delete")public String editDelete(@PathVariable Long itemId) { itemRepository.delete(itemId); return "redirect:/basic/items/";} 추가하여 지우는걸 브라우저에서 성공 했습니다. 다름이 아니라 DeleteMapping 을 사용하여 지우고 싶은데 form method = "delete"로 해도 안되서 질문을 남겨봅니다. 위에 방식대로 하면 실행이 됩니다만 혹시 DeleteMapping 을 사용해서 할 방법이 있을까요??