@Transactional 내부에서 트랜젝션 템플릿이 사용되나요
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
@Transactional 내부에서도 결국 트랜젝션 템플릿을 사용해서 트랜젝션 처리를 하는지 궁금합니다!
- spring
- mvc
- spring-jdbc
173만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
@Transactional 내부에서도 결국 트랜젝션 템플릿을 사용해서 트랜젝션 처리를 하는지 궁금합니다!
해결됨
실전! 스프링 데이터 JPA
현재 실전 데이터 JPA수강 중인데요.. 독학 중이라 토이프로젝트로 연습하는데 오늘까지 배운 JpaRepository 상속과 관련하여 회원가입 기능 구현하려 하려는데 어디 물어볼곳이 없고 뒤죽박죽이라 정리가 필요해서 장문의 질문을 남깁니다.. 일단 제가 머릿속에 정리가 안되는 것은 영한선생님께서 최대한 컨트롤러에 엔터티를 노출하지 말고 비지니스 로직을 서비스에서 최대한 구현하라고 해서 따라하는 중인데 Member를 기준으로 파라미터를 받을 MemberForm을 생성했습니다. 여기서 질문이.. MemberForm을 생성했으면 MemberDto는 따로 생성 안해도 될까요? 컨트롤러를 그림과 같이 작성하였고 서비스는 아래와같이 하였는데... 뭔가 서비스에서 엔터티를 직접 만지니까 찝찝한데 실무에서도 이렇게 하는지 궁금합니다..
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 타임리프 뷰 템플릿에서 param을 통하여 쿼리 파라미터에 입력된 값에 접근할 수 있다는 사실을 알고 있습니다 실습해본 결과 param을 통해서 name , age와 같은 단순 타입들만 받을 수 있었는데 컨트롤러에서 @ModelAttribute의 기능과 같이 타임리프에서 객체를 파라메터로 받을 수 있는 방법이 있나요?
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 등록 방법에는 FilterRegistrationBean 을 @Bean 으로 등록하는 방법 @WebFilter 대상을 @ServletComponentScan 으로 스캔하는 방법 2방법의 단점으로는 공홈에 확인 결과 내장 톰켓에서 사용된다 영상강의에 나오는 내용에 정렬순서를 지정할 수 없다고 하셨는데 정렬은 @Order 를 사용하면 되지 않을까요? 또한 내장 톰켓을 위한 방법이기 때문에 해당 필터를 @Component 로 Bean 으로 등록하면 되지 않을까요? 해당 생각대로 일단 내장 톰켓과 외장 톰켓으로 테스트 해보았습니다. 우선순위의 테스트는 FilterRegistrationBean 으로 등록한 A필터 정렬순서 2로 @Order(1) 와 @Component 를 이용한 B필터를 확인결과 @Slf4j @Component @WebFilter(urlPatterns = "/*") @Order(2) 이렇게 작성하여 내장 외장 모두 잘 동작하였고 순서를 위해 @Order 기능을 확인 결과 잘 되는 것을 확인했습니다. 필터를 이 프로젝트 저 프로젝트 옮기며 꽂아서 쓸수있게 만들고 싶어서 이렇게 고민했는데 이 방법이 혹시 문제점이 있을 까요? 또는 제가 잘못 생각한 부분이 있을까요?
미해결
김영한의 실전 자바 - 기본편
수업 내용을 토대로 질문하겠습니다 Student student1 = new Student() 에서 객체는 student1 이 아닌거죠? student1 은 단순히 변수인거고 객체는 new Student() 라고 알면 될까요?
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 6. 스프링 MVC - 기본 기능.pdf 13페이지에 이 두 사진에 해당하는 내용이 있습니다. 그런데 consumes="*\/*" produces = "*\/*" 이건 오타인가요? 인텔리제이에서 consumes="*\/*" 이렇게 해 보면 빨간 줄이 표시됩니다.
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요. 학습 질문에서 인텔리제이 콘솔 한글깨짐에대한 글을 모두 확인해보고 해결이 되지않아서 글을 남기게 되었습니다 . IntelliJ Version : IntelliJ IDEA Community Edition 2023.3.3 현재 프로젝트 생성시 정보는 아래와 같습니다. Project: Gradle- Groovy Language : Java Spring Boot : 3.2.2 Packaging : War Java : 21 또한, Gradle 설정에서 IntelliJ IDEA로 변경하는 부분은 Spring Boot 3.2 이전에만 적용된다하여 해당 부분은 그대로 Gradle로 설정되어 있습니다. 아래는 한글 깨짐현상 이미지입니다. 아래는 콘솔 한글 깨짐을 해결하기 위해서 적용한 방법들 입니다. File Encodings help > Edit Custom VmOptions.. 해당 부분은 직접 설치된 곳의 파일에도 추가해보았습니다. build.gradle 에 encoding 관련 설정 추가 application.properties 설정 추가 Run/Debug Configurations 설정 위의 5가지 방법을 모두 적용하였지만 콘솔에서 한글깨짐은 그대로입니다. 해결 방법을 알려주시면 감사하겠습니다.
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
제가 모든 error를 정해진 form에따라 응답하고 싶은데, 어떻게 할까 하다가 방법을 BasicErrorController를 커스텀해서 사용해야겠다 생각했습니다. CustomErrorController의 코드는 다음과 같습니다. 그런데 응답값에 오류 message가 들어가지 않아서 디버깅해봤는데, request안에 attribute안에 jakarta.servlet.error.message에 빈문자열이 들어가있는걸 확인했습니다. 이게 response.sendError(400, "400에러 발생!"); 과 같이 할경우에는 message에 값이 들어가고, throw new RuntimeException("에러 발생") 과 같이 예외를 던질때만 message에 값이 담기지 않습니다. 도움주시면 감사하겠습니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 윈도우라 "h2.bat" 혹은 "H2.bat"으로 확인해봤는데 아무 반응이 없습니다. 여러 글을 찾아보니 자바 환경변수와도 상관이 있는 것 같더라구요. 근데 제가 jdk11, jdk17을 깔아놔서 설정을 아래 블로그를 참고해서 설정을 해놨거든요. 참고) https://computer-science-student.tistory.com/4 67 아래는 제가 설정해놓은 캡쳐화면입니다. 그래서 혹시 자바 환경변수 문제일까 싶어 H2DB JDK 설정 해주는 아래 블로그도 참고하여 기존 h2.bat을 메모장에 연결하여 내용을 변경해 보았습니다. 참고) https://ikcoo.tistory.com/80 기존 h2.bat 내용은 @java -cp "h2-1.4.200.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %* @if errorlevel 1 pause 입니다. 이거를 블로그처럼 기존 jdk17파일이 설치돼있는 경로로 설정 ex) @C:\Program Files\Java\jdk-17\bin\java -cp "h2-1.2.127.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %* @if errorlevel 1 pause 위에 말한 환경변수 2개를 scripts 파일에 넣어놓은 경로로 설정 ex) @C:\Program Files\Java\scripts\java17 -cp "h2-1.2.127.jar;%H2DRIVERS%;%CLASSPATH %" org.h2.to ols.Console %* @if errorlevel 1 pause 이렇게 다 해봤는데 안됩니다.. ㅠㅠ
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
@Test void AopCheck() { log.info("memberService.class={}", memberService.getClass()); log.info("memberRepository.class={}", memberRepository.getClass()); } 테스트를 실행하면 memberService.getClass()에 해당하는 부분만 CGLIB~~이 적용된, 즉 AOP가 적용된 인스턴스라는 것을 확인할 수 있었습니다. memberRepository.getClass()는 평범한 인스턴스이고 memberService.getClass()만 AOP가 적용된 인스턴스인 이유는 추측건대 @Transactional // proxy가 비즈니스 로직 대신 호출. 성공하면 commit, 런타임 예외가 터지면 rollback public void accountTransfer(String fromId, String toId, int money) throws SQLException { bizLogic(fromId, toId, money); } MemberService내의 메서드에 @Transactional이 붙어서인 것 같습니다. 클래스 레벨에 @Transactional을 붙이지도 않았는데도 클래스 정보를 가져오는 메서드인 getClass()를 통해 AOP가 적용된 인스턴스로 확인되는 이유가 궁금합니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 내용] package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.util.SplittableRandom; @Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; } @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; } } 똑같이 따라 쳤는데도 hello-mvc / hello-string은 아래와 같이 오류가 뜹니다..! 어떻게 해결할 수 있을까요?
해결됨
실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
안녕하세요 강사님 ㅎㅎ 현재 챕터도 이전과 같은 증상인데 어떻게 확인하면 좋을까요? Github snapshot: https://github.com/dimz119/learn-python-django/tree/form_view 에서 다운받아서 실행시켜도 제가 작성한 코드랑 똑같은 문제가 발생하는데 확인할수있는 방법이있을까요??
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 다른 질문 게시물을 보고 java를 설치했음에도 저렇게 뜨는데 어떻게 해결할 수 있을까요?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용]안녕하세요. save() 테스트 실행했더니 오류가 발생했습니다.구글링 통해서 아래 빨간박스 친 부분은 Gradle에서 IntelliJ IDEA로 바꿔 줬더니 오류가 해결되었는데요, 이유가 궁금해서 질문 남깁니다. ++ 추가로 메인 서블릿 코드는 Gradle로 해줘야 오류가 안나는데... 이유도 알고 싶고 앞으로도 실행할 때, 아래 설정 변경해 주면서 하면 되는걸까요?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] RequestParam 과 Pathvariable의 차이가 무엇인가요 ?
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] editForm.html에서 모든 수량파트만 타임리프 th:value 가 안먹힙니다 ㅠㅠ 왜 그런지 모르겠어요 items.html에는 수정한 수량이 반영이 되지만 editForm.html의 모든 quantity 만 10으로 초기화가 되네요 ㅠ <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <link href="../css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <style> .container { max-width: 560px; } </style> </head> <body> <div class="container"> <div class="py-5 text-center"><h2>상품 수정 폼</h2></div> <form action="item.html" th:action method="post"> <div> <label for="id">상품 ID</label> <input type="text" id="id" name="id" class="form-control" value="1" th:value = "${item.id}" readonly> </div> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form-control" th:value = "${item.itemName}" value="상품A"> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" th:value = "${item.price}" value="10000"> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form-control" th:value = "${item.quantity}" value="10"> </div> <hr class="my-4"> <div class="row"> <div class="col"> <button class="w-100 btn btn-primary btn-lg" type="submit">저장</button> </div> <div class="col"> <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='item.html'" th:onclick="|location.href='@{|/basic/items/${item.id}|}'|" type="button">취소 </button> </div> </div> </form> </div> <!-- /container --> </body> </html>
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 잘못된 Url 을 입력한 경우 즉, 등록한 Url 이 없을 경우 스프링부트 콘솔창에는 아무 에러도 나지 않는데, 왜 그런가요? 핸들러 매핑이 아예동작이 안되는건가요?
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
리소스 정리에 관련해서 질문드립니다. con.close() 의 경우, 커넥션 풀을 사용하는 커넥션일 때 close() 시에 커넥션 종료가 아닌 커넥션 풀로 다시 반환된다는 것으로 이해했습니다. 그런데 con.setAutoCommit(true) 로 되돌릴 때 커넥션 풀을 고려 해야한다는 부분이 이해가 가지 않아서 질문드립니다. 커넥션 풀과 상관없이 오토커밋은 true로 바꿔야하는 것 아닌가 해서요. +추가 질문: 개발자가 트랜젝션 매니저를 이용한 트랜젝션을 구현한다면 따로 위의 두가지 코드를 작성해줄 필요가 없는 것 맞는가해서 질문드립니다.(ServiceV2에서의 finally 구문을 ServiceV3_1에서는 생략한 것과 같은 맥락으로) 친절한 답변 항상 감사드립니다
미해결
url = " https://image.dcinside.com/viewimage.php?id=&no=24b0d769e1d32ca73de985fa11d02831f8aadc88aabcff47e8021605d37bf1436ebb78a575eb9e18042afbf9848bfd403905acb77b9ac250540b76e4781bf2 " # 헤더 추가 headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' , } # 이미지 다운로드 response = requests . get ( url , headers = headers ) print ( response . content ) img_data = BytesIO ( response . content ) # BytesIO 객체에서 이미지 열기 img = Image . open ( img_data ) # 이미지 저장 (optional) img . save ( "downloaded_image.jpg" ) response.content를 출력하면 b'' 이 값을 출력하게 되는데 원인을 잘 모르겠습니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
는 어떻게 하는 것이 좋은 건가요? PK이자 글 번호인 boardSeq를 가지고 와서 수정과 삭제를 진행하고 있었는데, PK는 최대한 외부로 노출하지 않는 것이 좋다고 하여서 문득 생각이 들었습니다. PK Seq를 따로 두고 UniqueKey로 똑같이 AutoIncrement해서 생성하게 된다면 결국 무슨 차이인가 싶어서 아닌 거 같기도 하고... 어떤 식으로 처리 해야 되는지 궁금하여 질문 남기게 되었습니다.