묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2에서 회원 조회가 안 됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]실행은 되는데 h2에서 select * from member; 했을 때 조회되는 게 없다면 어디 부분이 문제일까요..? 원래는 됐었는데 갑자기 인텔리제이에서 회원가입부분 실행하다 오류가 나면서 이것저것 수정해보다가 이 상황이 되었습니다..그리고 Hibernate: select m1_0.id,m1_0.name from member m1_0 where m1_0.name=?Hibernate: insert into member (name,id) values (?,default)Hibernate: select m1_0.id,m1_0.name from member m1_0 where m1_0.name=?Hibernate: select m1_0.id,m1_0.name from member m1_0 where m1_0.name=?Hibernate: insert into member (name,id) values (?,default) 이렇게 강사님 화면과 다르게 id와 name의 자리가 바뀌어 나오는데 잘못된 걸까요..?섹션 6까지는 들은 상태입니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
PathVariable 앞에 커스텀 애노테이션을 붙이면 동작이 안 됩니다.
안녕하세요!@PathVariable 앞에 제가 만든 커스텀 애노테이션을 붙인 후 ArgumentResolver가 동작 되길 기대 했으나, supportsParameter나 resolveArgument에 어떠한 log가 찍히지 않는 것을 확인 했습니다.그런데 이유는 모르겠지만 @ModelAttribute 앞에 커스텀 애노테이션을 붙였을 때에는 동작 하더라고요. 왜 PathVariable 앞에 커스텀 애노테이션을 붙였을 경우에는 동작이 안 되는 지 모르겠습니다.구글링이나 GPT를 통해서도 열심히 찾아 봤으나 그 이유를 찾지 못했는데요. 문제점이 무엇인지 알려주시면 감사 드리겠습니다..!// 커스텀 애노테이션 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Month { } // 컨트롤러 public Class 클래스 { ...... public 리턴타입 메서드(@Month @PathVariable Integer month) {} } // ArgumentResolver @Slf4j public class MonthArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { log.info("MonthArgumentResolver supportsParameter={}", parameter); return parameter.hasParameterAnnotation(Month.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { HttpServletRequest httpServletRequest = (HttpServletRequest) webRequest.getNativeRequest(); log.info("MonthArgumentResolver resolveArgument={}", httpServletRequest); return 1; // 임시로 1로 반한 함 } } // config @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new MonthArgumentResolver()); } }
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
영한님 TransactionTemplate 설명 관련 질문이 있습니다!
안녕하세요! 강의 잘 보고 있는 학생입니다. '트랜잭션 문제 해결 - 트랜잭션 템플릿' 강의 10분 30초를 보면영한님께서 트랜잭션 템플릿의 기본 동작이 "체크 예외가 발생하면 트랜잭션을 롤백하지 않고 커밋한다"라고 말씀하셔서package org.springframework.transaction.support;위 패키지에 있는 TransactionTemplate의 execute코드를 확인하게 되었는데요 예외의 최상위 계층인 Throwable이 catch되면 rollback되는 구조인데, 이렇게 되면 체크 예외여도 롤백이 되는 것 아닌가요??확인한 버전은 SpringBoot 3.x 버전입니다. 현재는 바뀐것인지 아니면, 제가 잘못된 부분을 찾고 있는 것인지 답변 부탁드립니다 감사합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
쿼리 테이블 별칭
선생님꼐서 쓰는 쿼리를 보면 select m from Member m 이런식으로 m별칭주시는데 m.*이런식이나 테이블이 하나라면 별칭 없이 가는것과 무슨 차이가 있을까요?? 그냥 단순히 개발자 스타일일까요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
리포지토리를 다른것으로 변경시 어노테이션만 다른곳으로 옮기면 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]의존관계 자동 주입을 위해 @Repository를 사용하였는데 메모리멤버맃포지토리가 아닌 데이타베이스멤버리포지토리를 사용하려면 메모리멤버리포지토리에 있는 @Repository어노테이션을 지우고 실제 사용할 데이타베이스멤버리포지토리에 @Repository어노테이션을 사용하면 되나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Thymeleaf 3.1에서의 thymeleaf-extras-java8time 관련 업데이트 사항
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에선 인텔리제이 우측 Gradle의 Dependencies에서 thymeleaf-extras-java8time 라이브러리를 찾을 수 있었는데, 제 인텔리제이에선 찾을 수 없더라고요. 검색해 보니 아래 링크에서https://www.thymeleaf.org/doc/articles/thymeleaf31whatsnew.html 1.4. Core support for the java.time package 항목에 The thymeleaf-extras-java8time extras module has been integrated into the Thymeleaf core: the #temporals expression utility object is now always available. 이렇게 나와 있습니다.타임리프 3.1부터는 스프링 부트가 자동으로 라이브러리를 추가해 줄 필요도 없이, 바로 사용할 수 있는 거로 변경된 거라고 보면 될까요? +)https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#appendix-b-expression-utility-objects 타임리프 3.1 공식 문서 튜토리얼에 Temporals(java.time) 관련 내용이 추가되었습니다.1. 타임리프 - 기본 기능.pdf(v20240224)에 있는 공식 문서는 3.0이라서 링크 첨부드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Mvc방식에서 메서드의 파라미터에 Model model을 사용하는 이유가 무엇인가요? 그리고 api방식에서의 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]뒷 내용이 어려워서 다시 복습하는중인데 파라미터에 Model model을 사용하는 이유가 궁금합니다. 파라미터로 받지 않고 메서드 내부에서 Model model;model.addAttribute(모델데이타, value); 이렇게 사용할 수 는 없는건가요? 그리고 api통신에서 어노테이션에 @ResponseBody를 확인하면 html로 반환하지 않는다고 인식 후 return이 스트링인지 객체인지 확인 후 어떤 형식으로 반환할지 정해지는것인가요?객체를 반환할 때 서버에 반환하던 웹 브라우저에 반환하던 스프링은 누구에게 반환을 하는건지 몰라도 되는것인가요? 예를 들면 현 강의에서는 웹 브라우저에 반환을 하였지만 리액트를 이용할 때는 노드환경(노드환경을 서버로 이해하였습니다.)에 반환을 하는 방식인데 스프링은 요청한 주체와 반환되는 값이 어디로 가는지는 알 필요가 없는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인자로 전달되는 request, response 객체는 참조값으로 공유되는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]FrontControllerServletV2 에서 호출한 MemberListControllerV2 인스턴스 내부에서 인자로 받은 요청 객체에 members 값을 setAttribute 로 설정한것을 봤습니다. 이후 해당 인스턴스에서 반환한 MyView 객체를 통해 render를 수행하던데, 이때 req 에는 MemberListControllerV2에서 요청객체에 설정했던 members 값이 들어가는 것 같던데 원리가 무엇인가요?.. 저는 요청,응답 객체를 다른 인스턴스에 인자로 전달(복사)한다고 생각했습니다. 어떻게 frontControllerServletV2에서 MemberListControllerV2 에서 설정한 members 객체를 사용할 수 있는 건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ModelAttribute 사용 이유가 헷갈립니다.
@Slf4j @Controller @RequiredArgsConstructor public class LoginController { private final LoginService loginService; @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form) { return "login/loginForm"; } @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { // 정보 불일치 시... // reject : 글로벌 오류 bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } // 로그인 성공 처리 // TODO return "redirect:/"; // 성공 시 홈으로 리다이렉트 } }안녕하세요 '로그인 기능' 강의를 듣고 궁금한 점이 생겨 질문을 올립니다. @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form) { return "login/loginForm"; }위 메서드는 "/login"이라는 GET 요청이 오면 loginForm 파일을 실행하게 됩니다. 따라서 단지 화면을 출력하는 역할에 불과한데, 왜 @ModelAttribute("loginForm") LoginForm form을 작성하신건지 이해가 잘 가지 않습니다. @GetMapping("/login") public String loginForm() { return "login/loginForm"; }그냥 위처럼 작성하면 안되는건가요? 만약 PostMapping처럼 데이터를 저장하는 요청이라면, ModelAttribute를 통해 LoginForm의 인스턴스를 저장하는 것이 이해가 가지만,GetMapping에는 왜 작성하신건지 이해가 잘 안갑니다 ㅠㅠ감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링메세지 소스 사용 오류
@SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } }를 실행했더니org.opentest4j.AssertionFailedError: Expecting: <"??">to be equal to: <"안녕">but was not.필요:"안녕"실제 :"??" 2024-04-07 17:34:37.790 INFO 6288 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'오류가 뜹니다. 이유가 뭔가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 부트 3.0 미만에서 #session과 session의 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]학습 자료에 나온 스프링 부트 3.0 미만 기준 내용에서 궁금한 점이 있습니다. ${#request}${#response}${#session}${#servletContext}${#locale} 타임리프는 위와 같은 기본 객체들을 제공하고,param, session 같은 편의 객체도 제공한다고 이해했습니다. 그런데 #session과 session은 무슨 차이가 있는 건가요? 다른 건 몰라도 세션은 #session을 바로 쓰면 되는데 편의 객체로 session을 또 제공하는 이유를 모르겠습니다. 문서를 보니 #이 붙으면 웹 컨텍스트 객체이고, param, session 같은 편의 객체는 컨텍스트에 추가된 맵이라서 # 없이 접근 가능하다곤 나와 있는데.. 아직 잘 모르겠네요.. 사용법이 다른가요? 전 스프링 부트 3.0 이상이라 테스트해 보기 좀 힘들어서 질문드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
라디오버튼이 강제 설정이 되지 않는 이유는?
라디오 버튼을 아래와 같이 수정했는데 , 상품등록 폼의 첫번째 라디오 버튼이 강제 설정이 안됩니다. 이유가 뭘까요? <div th:each="type, status : ${itemTypes}" class="form-check form-check-inline"> <input type="radio" th:field="*{itemType}" th:value="${type.name}" th:checked="${status.index == 0}" class="form-check-input"> <label th:for="${#ids.prev('itemType')}" th:text="${type.description}" class="form-check-label"> BOOK </label> </div>
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV4Test.java 테스트 실행하는데 오류가 발생합니다.
package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepository; import hello.jdbc.repository.MemberRepositoryV4_1; import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; import java.sql.SQLException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * 예외 누수 문제 해결 * SQLException 제거 * * MemberRepository 인터페이스 의존 */ @Slf4j @SpringBootTest class MemberServiceV4Test { public static final String MEMBER_A = "memberA"; public static final String MEMBER_B = "memberB"; public static final String MEMBER_EX = "ex"; @Autowired private MemberRepository memberRepository; @Autowired private MemberServiceV4 memberService; @TestConfiguration static class TestConfig { private final DataSource dataSource; public TestConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean MemberRepository memberRepository() { return new MemberRepositoryV4_1(dataSource); } @Bean MemberServiceV4 memberServiceV4() { return new MemberServiceV4(memberRepository()); } } @AfterEach void after() { memberRepository.delete(MEMBER_A); memberRepository.delete(MEMBER_B); memberRepository.delete(MEMBER_EX); } @Test void AopCheck() { log.info("memberService class={}", memberService.getClass()); log.info("memberRepository class={}", memberRepository.getClass()); Assertions.assertThat(AopUtils.isAopProxy(memberService)).isTrue(); Assertions.assertThat(AopUtils.isAopProxy(memberRepository)).isFalse(); } @Test @DisplayName("정상 이체") void accountTransfer() { //given` Member memberA = new Member(MEMBER_A, 10000); Member memberB = new Member(MEMBER_B, 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() { //given Member memberA = new Member(MEMBER_A, 10000); Member memberEx = new Member(MEMBER_EX, 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberEx.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberB.getMoney()).isEqualTo(10000); } }Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended> Task :testMemberServiceV4Test > AopCheck() FAILED org.springframework.jdbc.CannotGetJdbcConnectionException at MemberServiceV4Test.java:64 Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException at MemberServiceV4Test.java:64MemberServiceV4Test > 이체중 예외 발생 FAILED org.springframework.jdbc.CannotGetJdbcConnectionException at MemberServiceV4Test.java:102 Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException at MemberServiceV4Test.java:102MemberServiceV4Test > 정상 이체 FAILED org.springframework.jdbc.CannotGetJdbcConnectionException at MemberServiceV4Test.java:83 Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException at MemberServiceV4Test.java:833 tests completed, 3 failed> Task :test FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/study/spring-db/jdbc/jdbc/build/reports/tests/test/index.html* Try:> Run with --scan to get full insights.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 8s4 actionable tasks: 1 executed, 3 up-to-date이런 오류가 발생하는데 어떻게 해결해야 될 지 몰라서 문의 드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2접속 test.mv.db 파일 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.접속까지는 되는데 test.db.mv 파일이 만들어지지가 않아서 jdbc:h2:tcp://localhost/~./test 접속이 안됩니다 이걸로
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
console 창 오류 메시지 질문 드립니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 영한님 예제 코드 실행에 대한 문제는 없지만 페이지를 새로고침할 때마다 이 에러 메시지가 표시되서 해결할 방법이 있는지 궁급합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
어노테이션 질문이있습니다.
안녕하세요 질문이 있습니다 API 강의 듣다가 궁금증이 생겨서 질문을 남기게 되었습니다. @RequestParam 은 매개변수의 값을 반환하는건가요?@RequestMapping("/save") public ModelAndView save(HttpServletRequest request, HttpServletResponse response) { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); ... }이 코드를@PostMapping("/save") public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model) { ... }요렇게 바꿔줄 수 있는 역할이 @RequestParam 인 건가요? 그리고 RequestParam 을 쓸때 달아주는 어노테이션이 @ResponseBody 인건가요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
트랜잭션 시작
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pdf에 @Transactional 설명하는 부분에서 테스트 시작 전에 트랜잭션을 시작하고~ 라는 말이 있는데, 여기서 말하는 트랜잭션이 시작한다는게 무엇을 시작한다는 건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
WebServerCustomize의 어노테이션을 주석처리 하는 이유??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Component를 주석처리하면 스프링 빈에 등록이 안되어 있으니 개발자가 예외처리를 안하고 발생한 예외를 스프링이 자동으로 처리하게 하도록 위함인건가요? 스프링은 /error의 경로로 자동 등록되는것은 이해하였는데 그 하위 html파일에 어떻게 매핑이 되는건지 잘 모르겠습니다. 그 이전에는 직접 경로를 설정해 주었는데 스프링이 자동으로 하는 경우에는 에러코드가 이름으로 설정된 html파일을 자동으로 보여주는 건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴이 헷갈려서 질문드립니다.
만약 프로젝트에서 model 패키지dto 패키지entity 패키지service 패키지repository 패키지controller 패키지view 패키지위와 같은 구조를 가졌다면,mvc에 대입했을 때, controller와 view 패키지를 제외한 모든 패키지가 model에 해당한다. 만약 1번이 맞다면, service 패키지와 repository 패키지가 비즈니스 로직을 담당하고, model 패키지는 단순 데이터 관리만 해서 mvc에서의 model이라는 말과 서로 의미가 다르지 않은지에 대해 질문드립니다. 말 그대로 model 패키지, view 패키지, controller 패키지가 각각 mvc이고 service와 repository는 별개다.만약 2번이 맞다면, mvc에서의 model은 비즈니스 로직까지 포함하는 것으로 아는데 service 패키지와 repository 패키지가 비즈니스 로직을 담당하면 model은 그 의미에 어긋나는게 아닌지 질문드립니다. 3. 패키지 구조를 일부 수정하여 더 완벽한 구조를 만들 수 있다면 그 예시에 대해 알려주시면 감사하겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
여기까지 달려오면서..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 열심히 백엔드 강좌를 수강하고 있는 학생입니다!다름이 아니라 Spring MVC 배우기 전 핸들러와 핸들러 어댑터 , 뷰 리졸버 등등.. 배웠는데 이걸 코드와 동작과정을 다 외워야하는지 아니면 핸들러어댑터는 핸들러를 사용할 수 있는 지 판별하는 기능인것이고, 뷰 리졸버는 논리적인 매핑주소를 물리적으로 바꾸어주는 기능인 것이다. 이렇게만 이해하고 Spring MVC로 넘어가도 되는 것일까요?