묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랙잭션 전파 구현에 대해서 문의 드립니다.
안녕하세요. 강의 항상 잘 보면서 많은 도움 받고 있습니다.트랜잭션 전파 구현에 대해서 질문이 있어서 질문 드립니다. 트랜잭션 전파 활용 강의를 보면 예제로 MemberService에서 MemberRepository와 LogRepository에 각각 함수를 실행하고 MemberService, MemberRepository, LogRepository에 모두 @Transactional을 사용해서 하나의 물리 트랜잭션으로 묶어주고 만약 MemberRepository에서 에러가 발생하면 LogRepository도 rollback이 되지 않는거는 이해를 했습니다.제가 프로젝트를 하면서 구현을 하다가 이 부분에 의문이 생겨서 문의 드립니다.예를 들어서 제가 회원이 가입을 하면 가입 처리, 인사 메시지 발송, 포인트 지급에 대한 동작을 하려고 하는데 역할 분리를 위해서 각각 MemberService, MessageService, PointService에서 해당 동작을 처리하도록 만들었습니다. #MemberController @Transactional??? public MemberResponse register() { memberService.store(); messageService.send(); pointService.store(); } #MemberService @Transational public Member store() { #가입처리 } #MessageService @Transactional public void send() { #메시지 발송 #발송 } #PointService @Transactional public void store() { #가입 포인트 지급 }위와 같은 방식으로 처리를 하려고 하고 하나의 과정에서라도 문제가 있다면 전부 rollback을 시키려고 합니다. 여기서 의문점은 MemberService, MessageService, PointService를 호출하는 Controller에서 Transactional을 선언하는게 맞는건가? 싶어서 문의 드립니다.이 구조에서라면 Controller에 Transactional을 선언하는게 맞을 것 같은데 다른 예시나 인터넷에 찾아봐도 Controller에서 Transactional을 사용하는 예시를 찾지 못 했습니다.아니면 어떤 방식으로 구현하면 좋을지 답변 부탁드립니다.감사합니다!
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]갑자기 궁금한 부분이 생겼는데, 배달의 민족은 웹이 아니라 앱으로 동작하잖아요. 그럼 api 개발을 위주로 하시는 거라고 생각이 되는데 스프링 웹이던 아니면 앱을 이용하는 개발이던 개발하는 부분에 관해서는 큰 차이가 없는 건가요? 스프링으로 개발만 할 줄 알면 필요한 곳에 그대로 쓰기만 하면 되는 건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
lombok 적용 오류
[질문 내용]안녕하세요. 강의 초반에 롬복 설치하고 테스트하는 과정에서 오류가 발생해 문의 드립니다. 강의에서 설명해주신대로 롬복 활성화 후, annotation enable 설정도 다 해봤는데도 setter,getter가 적용이 되지 않습니다.혹시 해결 방법이 있을까요?구글링해서 캐시도 삭제해보고 인텔리제이 재설치도 해봤는데도 안돼서 문의드립니다. 혹시 몰라서 사진 첨부합니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
UserHandlerExceptionResolver
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요.MyHandlerExceptionResolver 는 에러가 터지면 서블릿 컨테이너까지 가고 또 다시 /error을 요청하고UserHandlerExceptionResolver 이건 그냥 바로 그자리에서 끝내는데그 차이가 response.sendError(...)이 response.SendError 해주냐 안해주냐 차이라고 생각하면 될까요 ?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
왜 findByLoginId는 Optional로 반환하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! MemberRepository 코드 중에 findById는 예전 강의에서 스펙상 Member 객체를 반환하는걸로 권고(?)된다고 들었던 것 같은데, 그렇다면 왜 findByLoginId는 Optional<Member>로 반환하는건가요?Optional이 NullPointerException 발생을 줄이기 위해 래퍼 역할을 한다는 것은 알겠는데, 두 메서드의 반환값 차이가 있는 이유가 무엇인지 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]패치 조인을 한다는 것은 "영속성 컨텍스트를 사용한다." 라고 이해해도 되나요?
-
미해결스프링 핵심 원리 - 고급편
강의 자료 다운로드 안돼요
아이패드로 강의 시청하다가 강의자료 다운로드 누르고 다시 노트북으로 다운로드 받을려니깐 다운로드를 받을 수 있는 표시가 없어요
-
미해결스프링 핵심 원리 - 기본편
추상화비용이 발생한다는 것이 궁금합니다 영환님!
영환님 인터페이스를 활용할 때 추상화 비용이라는 것이 발생한다고 하셨는데 구글링 검색해도 정확한 지식을 얻기 힘들어서 질문 드립니다.수업 내용의 기능을 확장할 가능성이 없다면, 필요할 때 리팩터링해서 인터페이스를 도입하는 방법 등 수업 내용은 이해했으나 추상화라는 비용이 정확히 무엇인지 궁금합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
thymeleaf 적용이 안됩니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술상품목록 - 타임리프 진행중에 문제가 생겼습니다.타임리프에 문제가 있는지.. 변수가 안담깁니다.구글링으로 찾아봐서 캐쉬초기화도 해봤고"http://www.thymeleaf.org" 를 http://thymeleaf.org 로 변경도 해봤지만 경고문만 사라지고 해결되지 않았습니다.근데 여기서 이상한건th:onclick="|location.href='@{/basic/items/add}'|" 이 타임리프 문장은 작동이 되는것 같아요저 코드대로 /basic/items/add 경로로 이동이 됩니다.자바코드에 문제가 있나 확인도 해봤지만 문제점을 찾지 못했습니다 확인해야할게 더 있으면 알려주시면 감사하겠습니다...
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
왜 이번 프로젝트의 src/test 패키지에는 propertie파일이 없는 거죠???
[질문 내용]왜 이번 프로젝트의 src/test 패키지에는 propertie파일이 없는 거죠???
-
미해결스프링 핵심 원리 - 기본편
@Coponent가 붙는 클래스는 무조건 public이어야 할까요?
@Repository class ReviewRepositoryImpl implements ReviewRepository {...}이런 식으로 class 접근제한자를 default로 하면 안되던데 왜 그런걸까요??저는 스프링 빈으로 구현체가 등록되고, 컨테이너에 있는 빈들이 자동으로 생성자 주입될테니, 구현 클래스를 숨기고 싶어 default로 변경했습니다! 항상 좋은 강의 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
controller에서 service단을 안 거치고 바로 repository로 향하는 이유가 있나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요, 강의를 듣다가 의문점이 생겨서 질문 남깁니다.JPA 1 수업을 들을 때는 controller에서 service를 거쳐 repository로 이동하는 걸 배웠고제가 실무에서도 controller에서 작업하지 말고 db와 커넥션은 꼭 service단에서 하라고 알려주셨습니다이번 예제에서 controller에서 바로 repository로 간 이유가 있는지 궁금합니다단순 예제 코드를 줄이기 위함인지, 이유가 있는 건지행여나 제가 수업에서 언급하셨는데 놓친건지.. 답변 부탁드립니다!
-
해결됨스프링 핵심 원리 - 기본편
JAVA 문법 질문 - 매개변수 객체 생성 / @RequestMapping 질문
@RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = provider.getObject(); myLogger.setRequestURL(requestURL);위 코드는 강의에 나온 코드 입니다 . @RequestMapping : 특정 URL로 요청(Request)을 보내면 Controller에서 어떠한 방식으로 처리할지 정의 여기서는 "log-demo" 로 요청 하면 logDemo 메서드를 호출한다 위 코드와 아래 코드가 같다고 볼 수 있을까요 ? @RequestMapping("log-demo") @ResponseBody public String logDemo() { HttpServletRequest request = new HttpServletRequest; String requestURL = request.getRequestURL().toString(); MyLogger myLogger = provider.getObject(); myLogger.setRequestURL(requestURL); 매개변수로 넣었을 때랑 뭐가 다른지 잘 모르겠습니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 컬럼으로 검색
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.Order 검색 시에 OrderItems의 컬럼을 where절로 검색하고 싶으면 어떻게 해야 하나요??일단 Order를 조회하고 OrderItems를 default_batch_fetch_size 지연로딩으로 조회한 다음에 loop돌려서 직접 찾아야 하는지아니면 querydsl을 배우면 방법이 있나요?감사합니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
GetMapping, PostMapping
클라이언트와 서버간의 동작에 대해 헷갈려서 여쭤보려구요!!웹 브라우저에 localhost:8080/form/items/add 라고 치면 addForm(Model model) 메서드가 동작해 모델에 "item"이라는 이름에 빈 객체 Item을 넣고 form/addForm 타임리프 페이지를 렌더링 해서 브라우저에 띄운다.상품 등록 폼에서 상품명, 가격, 수량을 작성해서 상품 등록 버튼을 누르는 순간 @PostMapping의 addItem 메서드가 호출되어 해당 메서드의 로직을 실행한다고 보면 될까요?위 코드로 스프링 MVC 동작 방식과 순서를 알고 싶습니다.
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
스프 1, 2탄 전자정부프레임워크에서만 사용할 수 있나요?
프로젝트를 전자정부프레임워크에 사용하고 있던데 일단 전자정부프레임워크 바탕으로 공부하되 나중에 수업내용을 다른 곳에 적용할 수 있을까요?스프링 레거시 프로젝트는 이제 점점 안쓰이고 있는 추세인것 같은데 배워두면 도움이 될까요?취준생입니다.ㅜㅜ전자정부프레임워크만 사용하는 곳에 취직한다면 환경설정을 어렵게 할 필요없어서 상관이 없겠는데요.다른 이클립스, 인텔리제이를 쓰는 곳에 들어가면 꽤나 곤란할 것 같아서요.특히 인텔리제이로 예제를 실행하면 자꾸 오류가 나서요.원래 전자정부프레임워크르 바탕으로 만들어진 예제같아서 잘 안되는 것 같은데요수업자료는 정말 정말 괜찮은데 프로젝트를 전자정부프레임워크에서만 쉽게 실행이 가능하면 환경설정에 약한 처음 공부하는 입장에서 꽤나 곤란할것 같아서요 ㅠㅠ인텔리제이는 잘 몰라도 이클립스 가지고 프로젝트를 구축하는 방법도 나중에 설명해주셨으면 합니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
[spring data JPA] save()에 대해 궁금한 점이 있습니다.
public void updateUser(UserUpdateRequest request) { User user = userRepository.findById(request.getId()) .orElseThrow(IllegalArgumentException::new); user.updateName(request.getName()); userRepository.save(user); }안녕하세요.강의를 듣다가 save() 메서드에 대해 궁금한 점이 있어서 작성하게 되었습니다.updateUser() 메서드에서 파라미터 id 값을 통해 해당되는 객체를 불러온 뒤,updateName() 메서드를 통해 이름을 변경한 다음, save() 메서드를 통해 저장한다고 이해했습니다. 여기서 save() 메서드를 통해 DB에 저장할 때 변경하기 이전에 저장했던 데이터의 id값이 겹치지 않고 실행이 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
bulid.gradle 부터 오류가나고 메인메소드 실행버튼 자체가없어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.2 was found. The consumer was configured to find a runtime of a library compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6' but:메인메소드 실행하려면 이런거뜨고, 실행 버튼도 없고 그러네요... 빌드 가져왔을때부터 동기화 오류나오던데코끼리눌러도안됩니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field="*{ipPort}"에서 IpPortToStringConverter가 선택된 이유
[ConverterController.java] public String converterForm(Model model) { IpPort ipPort = new IpPort("127.0.0.1", 8080); Form form = new Form(ipPort); model.addAttribute("form", form); return "converter-form"; } [converter-form.html] <form th:object="${form}" th:method="post"> th:field <input type="text" th:field="*{ipPort}"><br/> th:value <input type="text" th:value="*{ipPort}"> </form> th:field가 컨버터로 IpPortToStringConverter를 선택한 이유가 궁금한데요. 추측해본 이유는 다음과 같습니다.th:field가 value 속성을 만들 때, form.getIpPort()에 컨버터를 적용하려고 한다. 그런데, form.getIpPort()의 타입은 IpPort이다. 그래서, 컨버팅 대상은 IpPort가 되는 것이다.String으로 컨버팅되는 이유는 <input type="text">이기 때문이다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
저는 V1을 써도 잘못 입력된 값이 사라지지 않는데 타임리프가 업데이트 된걸까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요? 강의 너무 잘 듣고있습니다!실습하던 중에 저는 addItemV1 버전으로 rejectedValue 없이 오류를 처리했는데도 영한님과 다르게 입력했던 값이 유지가 됩니다. 타임리프가 업데이트 된걸로 봐야할까요?감사합니다.