묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade관련해서 문의드립니다.
cascade를 사용하는곳이 FK 가 없는곳이라고 생각하면 맞을까요? FK가 없는곳이면 부모Entity라고 생각을 하면 될 것 같은데.여기서 부모라고하면 변경되는 주체(?)를 표현한 것인데.예를들어 게시판과 첨부파일 테이블이 있다고 한다면게시판이 부모Entity이고, 첨부파일이 자식Entity라고 생각했을때(게시글을 지우면 첨부파일도 같이 지워지는 구조이기 때문에.. 첨부파일을 지운다고 해서 게시글이 같이 지워진다는 보장은 없으니까요)이럴 경우에는 게시판Entity에 cascade를 설정하는게 맞는 것 같은데 제가 이해하고 있는게 맞는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다
강의 잘보고있습니다. 강의 잘 따라하다가 갑자기 떠오른건데 이거 h2 데이터베이스로 연동해서 사용하는건데 톰캣내장서버 껏다가 키면 왜 제가 저장했던 데이터가 날아가는거죠?? db사용하면 메모리저장이랑 다르게 서버껏다켜도 db에 저장했던 값이 있어야되는거아닌가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테이블 생성할 때 문의드립니다.
테이블을 생성할 때 설명중 객체는 타입이 있어서 명확하게 member.id를 구분할 수 있는데 테이블에서는 구분하기가 어렵고 조인등의 쿼리를 짤 때도 불편하다고 해서 member_id로 잡아주신다고 하셨는데.. 이런 내용이 PK나 FK 에만 해당이 되는건지 궁금합니다. 예를들어 member라는 테이블에member_id, name이라는 필드가 있고, item이라는 테이블에도 item_id, name이라는 필드가 있을경우 name이라는 필드명이 겹치는데 이럴 경우에는 테이블 구조를 짤 때 그냥 name으로만 하시는지 아니면 member_name, item_name으로 하시는지 궁금합니다.강의를 쭉~~ 들으면서 드는 생각은 PK, FK와 관계되는것들(다른 테이블과 직접적인 연관관계를 맺고있기 때문에)만 구분을 하기 위해서 member_id, item_id로 만드는 것 같은데 제가 이해한대로 실무에 적용을 해도 문제가 없는지 궁금합니다.
-
미해결스프링 핵심 원리 - 고급편
하이라이팅
안녕하세요 강사님 강의를 보다가 궁금한 점이 있어 문의 드립니다. Aspect Expression 관련 하이라이팅이 제 인텔리제이에서는 안먹히던데 별도로 설치해야할 플러그인이 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Entity 저장에 관해 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 영항님! 좋은 강의 잘 듣고 있습니다. 강의를 듣고 토이 프로젝트를 진행하는 와중에 궁금한 점이 생겨 질문글을 올리게 되었습니다. 저는 Board라는 Entity를 다음과 같이 선언하였습니다. @Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "board_id")private Long id;private String title;private String topic;private String content;@Enumerated(EnumType.STRING)private StudyState studyState;@Enumerated(EnumType.STRING)private RecruitState recruitState;private Long headCount;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "member_id")private Member member; 그리고 저는 프론트에서부터 전달받은 Dto로 실제 Board Entity를 저장하려고 했습니다. 그래서 저는 Dto로 부터 Entity를 만들 수 있는 메소드 toEntity를 다음과 같이 구성하였습니다. @Data@NoArgsConstructor@AllArgsConstructorpublic class BoardCreateRequestDto { private Long memberId; private String title; private String topic; private String content; private Long headCount; private StudyState studyState; private RecruitState recruitState; public Board toEntity() { return Board.builder() .title(this.title) .topic(this.topic) .content(this.content) .studyState(this.studyState) .recruitState(this.recruitState) .headCount(this.headCount) .member(new Member(this.memberId)) .build(); }} Board board = boardRepository.save(requestDto.toEntity()); 실제로 저장을 할 시에 Board Entity에는 Member를 넣어 저장하나, 실제 DB에서는 Board 객체에서의 Id만을 외래키로 저장하기에 다음과 같이 저장해도 무방하다는 것을 알게 되었습니다. 저는 이 방법이 MemberId를 통해 Member 객체를 찾지 않고 저장할 수 있기에 쿼리 1번을 덜 날릴 수 있어 비용적인 측면에서 조금의 이득이 생긴다고 생각하여 다음과 같이 구성해보았습니다. 이러한 방법이 문제가 있는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 이러한 에러가 발생하여 질문 드리게 되었습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 현재 계속되는 상품주문 클릭시 발생되는 에러를 해결하던도중 이러한 에러가 뜨게 되어서 해결하다 도저히 안되서 질문드리게 되었습니다. 관련 파일을 계속 PDF랑 비교해봤는데 틀린것이 없어 막혀버렸습니다. Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Dec 05 15:37:26 KST 2021 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1400) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:831) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 18, col 16) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 18, col 16) at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:125) at org.thymeleaf.standard.processor.StandardEachTagProcessor.doProcess(StandardEachTagProcessor.java:73) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124) at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109) at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 50 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1005E: Type cannot be found 'jpabook.jpashop.domain.OrderStatus' at org.springframework.expression.spel.support.StandardTypeLocator.findType(StandardTypeLocator.java:117) at org.springframework.expression.spel.ExpressionState.findType(ExpressionState.java:155) at org.springframework.expression.spel.ast.TypeReference.getValueInternal(TypeReference.java:69) at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:55) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:91) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337) at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ... 70 more
-
미해결실전! 스프링 데이터 JPA
Pageable 파라미터
안녕하세요 @GetMapping("/members") public Page<Member> list(Pageable pageable){ return memberRepository.findAll(pageable); } 저 Pageable pageable 를 구현체인 PageRequest 라는 객체를 생성 해주신다고 했습니다. 이런 과정은 argumentResolver 랑은 관계가 없는건가요 ?? (궁금해서 앞에 @ModelAttribute 를 붙여보았는데 오류발생)
-
미해결스프링 핵심 원리 - 고급편
동적 proxy에서 핸들러 참조
안녕하세요. 동적프록시 관련 내용 흥미롭게 잘 들었습니다. Proxy.newProxyInstance(OrderRepositoryV1.class.getClassLoader(), new Class[] {OrderRepositoryV1.class}, new LogTraceBasicHandler(orderRepository, logTrace)); 위 코드에서 생성되는 OrderRepositoryV1의 프록시 클래스가 아래와 같을까 추측해보았는데 맞을까요? 1. newProxyInstance의 두번째 인자로 전달한 인터페이스들을 implements 2. InvocationHandler를 인스턴스 멤버변수로 가지고 생성자에서 주입 3. implements한 인터페이스들의 메소드들을 Overriding하여 handler를 invoke 4. Proxy 클래스의 패키지는 java.lang.reflect 이고, 생성된 Proxy 객체의 패키지는 com.sun.proxy 패키지여서 생성자가 public 접근제어자여야할 것 같은데 이런 추론이 맞는 걸까요? OrderRepositoryV1Proxy implement OrderRepositoryV1{ private InvocationHandler handler; public OrderRepositoryV1Proxy(InvocationHandler handler){ this.handler = handler; // LogTraceBasicHandler 주입 } @Override String call(){ Class class = this.getClass(); handler.invoke(this, class.getMethod("call"),null); } }
-
미해결스프링 핵심 원리 - 고급편
자동 프록시 생성기 동작원리에대해 질문드립니다.
강의초반에 스프링은 객체를 생성하여 빈후 처리기를 거친 후에 스프링컨테이너에 빈객체를 등록한다고 알려주셨습니다. 그런데 위 이미지에서 스프링이 객체를 생성하고 빈후처리기에 전달한 후에 빈후처리기는 모든 Advisor 빈을 스프링 컨테이너에서 조회한다고 했습니다. 그런데, 스프링컨테이너에는 아직 빈들을 등록하기 전이라 Advisor 빈들이 등록이 되어있지 않는데, 어떻게 스프링컨테이너에서 모든 Advisor빈들을 조회를 할 수 있는지 이해가 안됩니다.
-
미해결스프링 핵심 원리 - 고급편
전략패턴과 템플릿 콜백 패턴 차이 관련 질문드립니다.
안녕하세요! 이번에도 좋은 강의 감사합니다. 명쾌하게 설명해주셨는데, 제가 이해한 것이 맞는지 확인받고자 질문드립니다. 전략이란 의도를 동일하게 사용하기 때문에 템플릿 콜백 패턴도 전략패턴의 일종인데 차이를 생각해보자면 전략패턴은 context의 인스턴스 변수로 전략을 참조하고, 템플릿 콜백 패턴은 context의 관련 메서드로 callback 받는 차이가 있다고 이해하였습니다. 이런 차이로 아래 두가지를 생각해보았는데 제대로 이해한 것이 맞을지 궁금하여 질문드립니다. 1. 전략패턴은 템플릿 콜백 패턴보다 context와 전략간 의존성이 더 강하단 단점이 있고, 반면에 자주 사용되는 context라면 템플릿 콜백 패턴은 재사용성이 떨어진다는 단점이 있을 것 같습니다.(매번 callback을 정의해주어야하므로) 2. 전략패턴은 런타임시 객체가 생성될 때 전략이 정해지고, 템플릿 콜백 패턴은 context가 해당 전략을 실행할 시점에 전략이 정해진다고 정의하여도 괜찮을까요? 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ExceptionHandler 질문!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서 다음과 같은 코드를 설명해 주셨습니다. @ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(IllegalArgumentException.class)public ErrorResult illegalExHandler(IllegalArgumentException e){ log.error("[exceptionHandler] ex", e); return new ErrorResult("BAD", e.getMessage());} 여기서 IllegalArgumentException 또는 이를 상속한 자식의 예외가 발생했을때, 등록된 @ExceptionHandler를 통해 위의 핸들러로 예외가 처리되고, WAS 에게는 정상 응답후 끝난다고 하셨습니다. 즉, 이전처럼 WAS에서 다시 서블릿으로 예외를 처리할 컨트롤를 호출하지 않는다 하셨습니다. 이는 HandlerExceptionResolver 활용 에서 알려주셨던 내용입니다. 하지만 의문이 있는데, 위 코드에서는 @ResponseStatus가 추가되어 있습니다. @ResponseStatus는 내부적으로 response.sendError(statusCode, resolvedReason); 를 통해 response 내부에 오류가 발생했었음을 상태로 저장하게 됩니다.(이전 강의에서 알려주셨던 내용) 이후 이를 WAS가 인지하게 되어 기본 에러 페이지인 "/error"로 재요청을 보내야 하는것 아닌가요? 스프링 부트는 response.sendError(...) 가 호출되면 모든 오류는 "/error" 를 호출하게 된다. 라고 알려주신게 생각납니다! 이부분이 어떻게 처리되는 것 인가요?? 조금만 더 알려주시면 감사하겠습니다!!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의에서 43초 부분에 @GetMapping관련하여 질문이 있습니다.
제일 처음 hellospring으로 간단히 코드를 만들었을때 @GetMapping("hello")를 하면 localhost:8080/hello를 치면 그 코드가 실행되는 걸로 기억을 하는데그럼 여기서도 혹시@GetMapping("/members/new")이렇게 해도 되고@GetMapping("members/new")이렇게 입력해도 결과값은 같게 나오나요? 그리고 지금 이 강의에서MemberController와 MemberService둘다 스프링빈에 등록되어 있어서 MemberController생성자에 MemberService를 쓸 수 있는것이 맞나요?
-
미해결스프링 핵심 원리 - 고급편
강사님 사소하지만 궁금해서 질문남겼습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링이 지원하는 프록시 섹터를 듣고 어느정도 프록시 팩토리에대해 이해를 한 상태입니다. 조금 더 깊은 이해를 하고싶어서 다른분들의 블로그를 검색해보았는데 프록시 팩토리빈이라는 단어를 선택하더라구요... 차이점을 찾아헤메던중 뭔가 사이다같이 원하는 답이 나오지 않아서 이렇게 질문을 남기게 되었습니다. 프록시 팩토리와 프록시 팩토리빈의 차이점이 정확히 뭔지 궁금합니다.!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA시 테이블 자동생성 및 마이바티스와의 혼용
JPA에서 엔티티를 설정해주면 자동으로 디비에 테이블을 생성해줍니다. 강의내용중에 생성되는 테이블 ddl을 그대로 안쓰고 정제해서 쓰신다고 하셨는데,그말은 jpa로 Auto로 생성되는걸 막아놓고, 디비에서 직접 create를 하신다는 말씀이신가요?? 그리고 혹시 jpa와 mybatis를 같이 사용 할 수 있나요? 서칭해보면 가능하다고 하는데, jpa사용법은 나름 숙지된 상태인데팀플젝으로 마이바티스를 사용하고 싶은 상황입니다.같이사용하기 어려울까요? spring: jpa: hibernate: ddl-auto: update
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
redirect시 @RequestParam이 동작을 안합니다. ㅠㅠ
강사님 일단 로그인안한 상태에서 /items에 접근하면 -> 이렇게 쿼리파라미터를 들고 login페이지로 새로 보여주는거까지는 잘됩니다. -> 근데 여기서 /items로 redirect해줄려고 @RequestParam어노테이션을 사용해서 쿼리파라미터를 받아오려고 하면 이렇게 뜨거든요. 그래서 제가 컨트롤러 단에서 페이지를 다른 페이지로 돌리고 로그를 찍어보닌까 @RequestParam으로 redirectURL이라는 쿼리파라미터를 못불러 오는것 같습니다. defalutURL을 넣어서 / 로 해주면 계속 /로가고 저걸 안넣어주면 쿼리파라미터를 찾을 수 없다고 에러가납니다. 이런 경우 어떻게 해결해야 할까요? 강의랑 특별히 다르게 한건 없는데;;;
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
timeTraceAop만들고 SpringApplication 실행하는데 걸린 시간이 안나오네요..
결과창이 이렇게 뜨는데 아무리 고쳐봐도 안되네요.. *************************** APPLICATION FAILED TO START *************************** Description: The bean 'timeTraceAop', defined in class path resource [com/example/hellospring/Service/SpringConfig.class], could not be registered. A bean with that name has already been defined in file [C:\Users\zzang\Downloads\java\hello-spring\build\classes\java\main\com\example\hellospring\aop\TimeTraceAop.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DTO 와 Form_2
안녕하세요! 영한님! 영한님께서 올려주신 여러가지 강의를 보고 코드를 작성하다가,제가 예전에 질문하고 피드백 주셨던 부분이 생각나서 질문드리려고 합니다. https://www.inflearn.com/questions/125911 예전 질문의 내용은 이렇습니다! 이때는 의문이 들었던점이 정확히 정리가 안되어 더 질문드리지 못하고 넘어갔었습니다.이제 좀 정리가 되어서 재질문 드리려고합니다. Book 과 같은 Entity는 하나의 도메인에서 사용되는게 아니라 광범위하게 사용되고,현재 패키지를 어떻게 나눌지 감이 잘 안잡힙니다. 따라서 현재(Book) Entity => example.xxx.model에 두었고 dto => example.xxx.model.dto 이렇게 두었습니다. 이런경우 위에서 말씀하신 Entity가 dto를 참조하는데 다른 패키지에 있는 상황입니다. 이럴 때는 BookService에서 메소드로 Dto를 받고, Entity를 조작하는 형태로 변경해야 할까요?아니면 설계가 잘못된것인지, 패키지를 어떻게든 같이 놓는 방법이 맞을지 궁금합니다.개념에 구멍이 뚫려있는 느낌입니다 ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@JoinColumn 질문
안녕하세요 영한님. 좋은 강의 덕분에 이해가 정말 잘 되고 있습니다!! 다름이 아니라 @JoinColumn에 궁금한게 있어 질문드립니다. 예를들어 아래의 두개의 코드를 비교 해보면 위에는 @JoinColumn 을 사용하였고 밑에는 그냥 @Column을 사용하였다는 차이점이 있습니다. 물론 어플리케이션 딴에서 그럴일은 거의 없겠지만 제가 무조건 order를 사용하는 케이스가 orderId를 조회하는거 밖에 없다면 위의 코드보다 아래의 코드가 더 좋은 것일까요? 왜냐하면 orderId를 찾기위해선 위에 코드는 user.getOrder().getId() 와 같이 코드를 짜고 이때 DB에 Order에 대한 쿼리가 또 나가기 때문에 하지만 밑에 코드는 그냥 user.getOrderId만 하고 따로 쿼리가 안나가기 때문에 밑에 코드가 더 이 경우엔 효율 적일까요? public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne private Order order; public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "orderId") private Long orderId;
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig 빈등록 오류
강사님 코드를 따라 치면서 질문 중복이지만 해결이 안되서 질문드립니다. 1. MemberService의 생성자 확인 MemberRepository로 구현 2. MemoryMemberRepository에 Repository인터페이스 구현 위의 둘다 정확하게 한거같은데 뭐가 문제인지 궁급합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 의 Entity 변경에 대한 위치에 대해서 문의드려요
안녕하세요 . 김영한 강사님 , 강좌 초반을 학습하다가 궁굼한 부분이 생겨서 문의드립니다. 강의에서 생성 메소드를 만들때 전달받은 DTO 를 Entity 로 변환하는 로직을 Controller에서 수행하였는데 , DTO -> Entity , Entity -> DTO 에 대한 책임을 Controller에 위임 하시는 편인가요 ? (저의 경우는 그 책임을 Service layer 에 두고 modelmapper 를 사용하고 있습니다.) @PostMapping("/api/v2/members")public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); Long id = memberService.join(member); return new CreateMemberResponse(id);}