묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-mvc와 hello-template
hello-template으로 return해서 hello-template.html에서 thymeleaft에 로직 처리가 되는것은 이해했으나 그걸 다시 변환후에 주소창에 보면 hello-template에서 처리를 하였는데 왜 hello-template?name=spring가 아닌 hello-mvc?name=spring가 되는건지 궁금합니다.
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
초기 설정
제가 부트캠프를 다니고 있어서 이미 tomcat,mysql,eclipse를 모두 다 깔아놓은 상태인데 선생님이 깔아라고 하는대로 다시 깔아도 서로 충돌 날 일은 없나요?
-
해결됨스프링 부트 웹 개발 입문 - 따라하며 배우기
오류가 자꾸 나는데 왜이러는 걸까요?ㅠㅠ
server: port: 8081 spring: thymeleaf: prefix: classpath:/templates suffix: .html cache: false devtools: livereload: enabled: true restart: enabled: false datasource: driver-class-name: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/boot username: root password: mybatis: mapper-locations: classpath:sqlmap/**/*.xml configuration: map-underscore-to-camel-case: true package hello.sailing.v1.service; import hello.sailing.v1.dao.MenuDao; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Log4j2 public class MenuSvc { @Autowired MenuDao menuDao; public MenuSvc() { log.info("===== MenuSvc , 생성자 ====="); } public List<Map<String, Object>> doMenu() { List<Map<String, Object>> list = menuDao.doMenu(); log.info(list); return list; } public List<Map<String, Object>> dolistOld() { List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map = new HashMap<>(); map.put("No","1"); map.put("name","아이스아메리카노"); map.put("kind","커피"); map.put("price","2,000"); map.put("reg_day","2020.10.29"); map.put("mod_day","2021.10.29"); list.add(map); Map<String, Object> map2 = new HashMap<>(); map2.put("No","2"); map2.put("name","아이스초코"); map2.put("kind","음료"); map2.put("price","4,000"); map2.put("reg_day","2020.10.29"); map2.put("mod_day","2021.10.29"); list.add(map2); Map<String, Object> map3 = new HashMap<>(); map3.put("No","3"); map3.put("name","아이스불샷"); map3.put("kind","음료"); map3.put("price","4,500"); map3.put("reg_day","2020.10.29"); map3.put("mod_day","2021.10.29"); list.add(map3); log.info(list); return list; } } package hello.sailing.v1.dao; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import java.util.List; import java.util.Map; @Mapper @MapperScan("hello.sailing.v1.dao") public interface MenuDao { List<Map<String, Object>> doMenu(); } package hello.sailing.v1.controller; import hello.sailing.v1.service.MenuSvc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; import java.util.Map; @Controller public class MenuCon { @Autowired MenuSvc menuSvc; @RequestMapping("/v1/menu") public String doMenu(Model model){ //Data 만들기, List, Map List<Map<String, Object>> list = menuSvc.doMenu(); //Data 송부 model.addAttribute("list",list); model.addAttribute("hello","========= MenuCon ========"); return "/v1/menu/menu"; } } package hello.sailing.v1.dao; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import java.util.List; import java.util.Map; @Mapper @MapperScan("hello.sailing.v1.dao") public interface MenuDao { List<Map<String, Object>> doMenu(); } 2024-09-27T14:34:44.599+09:00 ERROR 5176 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): hello.sailing.v1.dao.MenuDao.doMenu] with root causeorg.apache.ibatis.binding.BindingException: Invalid bound statement (not found): hello.sailing.v1.dao.MenuDao.doMenu오류를 어떻게 수정해야 할지 모르겠어요..BindindException이 왜 터질까요? id값도 맞게 써줬는데
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
jpa 로그 정보 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]jpa 특징은 "persist" 메서드 호출 시 바로 insert 쿼리를 날리는 게 아니라 트랜잭션을 커밋하기 직전 flush 가 발생해서 insert 쿼리 로그가 뒤에 찍힌다고 설명해주셨습니다.(영상 기준 4:50 ~ 5:12) 저도 같은 테스트코드를 실행시켰으나 강의 영상과 다르게 중간에 insert 쿼리 로그가 남는 것을 확인했습니다. 영상 촬영시점보다 hibernate 버전이 업그레이드 되어 로그를 남기는 시점만 변경이 된 것일까요? 아니면 flush 시점 자체도 변경이 된 건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: ASP.NET Core 심화편
js
혹시 html css js를 다 안다고 치고 웹 서버만 배우고 싶다면 이 강의만 보면 될까요?
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
오류가 왜 나는건지 모르겠어요
package hello.sailing.v1.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MenuSvc { public List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map = new HashMap<>(); map.put("No","1"); map.put("name","아이스아메리카노"); map.put("kind","커피"); map.put("price","2,000"); map.put("reg_day","2020.10.29"); map.put("mod_day","2021.10.29"); list.add(map); Map<String, Object> map2 = new HashMap<>(); map2.put("No","2"); map2.put("name","아이스초코"); map2.put("kind","음료"); map2.put("price","4,000"); map2.put("reg_day","2020.10.29"); map2.put("mod_day","2021.10.29"); list.add(map2); return list; } put이랑 add 부분이랑 list.add 하는 부분이 오류가 나요ㅕ 왜그런거죠?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]
콘솔에 출력이 안됩니다.
40:00쯤 가입 버튼을 누르고 Servlet이 요청을 받은것 같긴 한데 출력이 안됩니다. 출력함수는 작성해놓은 상태고 영상대로 했습니다. 도와주십쇼!
-
해결됨스프링 부트 웹 개발 입문 - 따라하며 배우기
스프링 부트 버전
스프링 부트 3.3.4 버전에 자바 17버전 사용해도 될까요? 어떤 강의를 봐도 전부 다 2버전 대 던데...2버전이 서비스가 종료가 되어서 버전 맞추는게 너무 힘드네요ㅠㅠ저는 ultimate 버전을 사용하고 있는데 괜찮을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
공부 순서(자바, 스프링)
이제 회원관리 예제 들어가기 시작했는데 인터페이스나 Map등 자세히 모르는 단어들이 많이 나오는데 수강을 중단하고 자바 개념 및 자료구조 공부 후 다시 수강 하는 게 좋을까요 아니면 그대로 진행하면서 모르는 개념만 그때그때 공부하는 것이 좋을까요..? 답변 간절합니다 ㅜㅜ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링부트 버전
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 부트 3버전 사용해도 되나요? 그리고 자바 17버전 사용해도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
자바강의를 듣고 이 강의를 듣기 시작했는데 이해가 어렵습니다.
안녕하세요. 김영한 강사님의 자바 입문강의, 기본강의까지 들은 후 스프링 입문 강의를 듣게 된 학생입니다. 다름이 아니라 처음 프로젝트를 생성할때부터 이해가 어려워서 질문드립니다. controller라던지, resolver같은 처음 듣는 용어들이 나오고, 용어가 생소하니 매우 간단한 동작환경그림조차 이해가 어렵습니다. 혹시 이 강의를 듣기전에 미리 알아야하는 기초적인 배경지식이 있을까요? 자바입문과, 자바기본강의는 제공해주신 파일만으로 공부해도 입문자인 저도 충분히 이해가 가능하게 기본부터 설명이 되어있었는데, 스프링 입문강의는 처음보는 개념이나 용어들이 부가적인 설명없이 전개되어 강의파일만으로는 이해가 불가능해서 질문드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HttpEntity의 HttpMessageConverter
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 강사님! 빠르지 않은 나이지만 강사님 강의를 통해 처음 서버개발자의 꿈을 가지고 나날이 배움의 재미로 부여되는 동기와 행복을 느끼며 발전중입니다 진심으로 감사합니다!HttpMessageConverter 관련 하여 질문드립니다.HttpEntity를 반환하는 '응답'쪽 질문인데요,@PostMapping("/request-body-string-v3") public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) { String body = httpEntity.getBody(); log.info("messageBody={}", body); return new HttpEntity<>("ok"); } 해당 코드에서는 응답을 하는 과정에서 StringHttpMessageConverter 가 동작된다고 강사님께 배웠습니다. 제가 배우기론 객체로 응답할 때는 MappingJackson2HttpMessageConverter가 작동한다고 배웠는데, HttpEntity는 이렇게 적용되는 원리가 궁금합니다! 감사합니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
템플릿 및 콜백패턴에 대해 질문드립니다
안녕하세요. 다름이 아니라 강의를 듣고 구글링을 해보긴했는데,아직 jdbcTemplate이나, 앞서 강의에서 배운 트랜잭션 템플릿에서 람다식의 매개값으로 해당값이 왜 들어가야하는건지, 또는 템플릿의 동작원리라던지.. 이해가 명확하게 되지않아서 이 부분을 그냥 넘어가야하는건지, 아니면 좀 더 알아보고 질문하면서 명확하게 짚고 넘어가야하는건지 질문드립니다..+ 혹시 콜백패턴이나 jdbcTemplate이나, 앞서 강의에서 배운 트랜잭션 템플릿에 대해서는 추후 강의에서 좀더 자세히 설명해주시는 부분이 있을까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
PlatformTransactionManager가 주입되는 이유
제가 알기로는 스프링에서 의존성 주입을 위해서는 @Component등의 어노테이션이 달려 있어 빈으로 등록되어야 컴포넌트 스캔에 의해서 자동으로 주입된다고 알고있는데요PlatformTransactionManager는 클래스를 확인해보아도 그러한 어노테이션이 없는데도 자동 주입되는 이유가 뭔가요? gpt에 물어보니 스프링이 제공하는 트랜잭션 관리 기능의 핵심 인터페이스이므로 빈으로 등록하지 않아도 주입된다고 하는데 맞는말인가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션을 가져오는 원리
DataSourceUtils.getConnection()가 트랜잭션 동기화 매니저가 관리하는 커넥션이 있으면 해당 커넥션을 가져오는것은 알겠는데요, 어떻게 알고 가져오나요? 예를들어 13분에 나오는 public class MemberServiceV3_1 { private final PlatformTransactionManager transactionManager; private final MemberRepositoryV3 memberRepository; public void accountTransfer(String fromId, String toId, int money) throws SQLException { //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); //성공시 커밋 } catch (Exception e) { transactionManager.rollback(status); //실패시 롤백 throw new IllegalStateException(e); } } private void bizLogic(String fromId, String toId, int money) throws SQLException { Member fromMember = memberRepository.findById(fromId); Member toMember = memberRepository.findById(toId); memberRepository.update(fromId, fromMember.getMoney() - money); validation(toMember); memberRepository.update(toId, toMember.getMoney() + money); } private void validation(Member toMember) { if (toMember.getMemberId().equals("ex")) { throw new IllegalStateException("이체중 예외 발생"); } } }이 코드에서 bizLogic 부분에는 트랜잭션 매니저와 같은 파라미터를 전달해주지 않는데, 아무리 DataSourceUtils.getConnection()를 쓴다 한들 어떤 트랜잭션 매니저가 시작한 커넥션인지 어떻게 아는거죠?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
5:14 rollbackOnly에 대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의 5:14분 내용에 대한 질문입니다. ‘rollbackOnly를 참고하지 않는다’는 말은,가장 바깥쪽에 있는 트랜잭션 AOP 프록시 객체(MemberService의 트랜잭션 AOP 프록시 객체)가 런타임 에러를 만나면어차피 트랜잭션 매니저에게 롤백 요청을 하기 때문에 rollbackOnly를 따로 참고하지 않아도 된다는 뜻인가요? 그렇다면, 만약 런타임 예외가 발생하지 않는 경우 rollbackOnly는 내부 트랜잭션 중 하나에서 임의로 롤백했을 때바깥쪽에서 이를 감지하는 용도로 사용되는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
코드 볼 수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 강사님이 영상에서 작성하시는 코드를 모아놓은 곳이 있나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemoryMemberRepository 클래스에는 생성자가 없는데
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]MemoryMemberRepository 클래스에는 생성자가 없는데 어떻게 스프링 컨테이너에 등록이 되는거죠? 그리고 MemberRepository의 구현체가 몇가지 더 있는 경우 MemberService의 생성자 파라미터에는 어떤 구현체가 들어가나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
WAS 서버 죽음
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]WAS 서버가 잘 죽는다고 하는데 어떤 의미인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
System.out.println("req = " + req);이 실행되지 않습니
HttpServletResponse 수강중 갑자기 JAVA_HOME 관련 오류가 발생하여(해결못함) 인텔리제이와 자바를 모두 재설치후 HelloServlet부터 다시 작성중입니다. 코드 작성후 localhost8080:/hello에 접속해도 println문이 실행되지 않고 아래와 같은 [nio-8080-exec-1]이라는 문구 3줄이 나타납니다.[nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'[nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'[nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 문의글 작성중 추가적인 코드가 여러줄 추가되어 일부 올립니다 오후 6:09:56: Executing ':hello.servlet.ServletApplication.main()'...Invalid Java installation found at 'C:\Users\ido0709\.jdks\jbr-17.0.12' (IntelliJ) auto-detected. It will be re-checked in the next build. This might have performance impact if it keeps failing. Run the 'javaToolchains' task for more details.> Task :compileJava> Task :processResources UP-TO-DATE> Task :classes> Task :hello.servlet.ServletApplication.main() Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x000xee0x010x000x000xea0x030x030xfdd0x99"}0xce0xe30x960xd8b0xec0x880x160x82J0xa1x0x9a0xde0xa70xb0^0x8au0xfc0xbd;0x7f0xf150xe40xed ]. HTTP method names must be tokens at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:407) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:257) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.30.jar:10.1.30] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]