묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
(해결) 각 테스트가 상태를 공유하지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]"회원 리포지토리 테스트 케이스 작성" 강의에서 MemoryMemberRepositoryTest를 작성하시며 @AfterEach를 통해 각 테스트 케이스가 끝날 때 마다 repository 필드의 상태를 초기화해야 한다고 말씀하셨습니다.그런데 저는 별 다른 오류가 나타나진 않아서 다음과 같이 작성해봤습니다.@AfterEach void afterEach() { System.out.println(repository.hashCode()); }그랬더니 각 repository의 해쉬가 서로 다르더라구요. MemoryMemberRepository 구현 내부에서 상태를 출력하게 해보면, 매 테스트 케이스마다 새로운 상태가 되는 것으로 보입니다.제가 잘못 작성한 부분이 있는 걸까요? 아니면 스프링, 라이브러리 버전의 문제인가요? 전체 코드는 다음과 같습니다. 읽어주셔서 감사합니다.// MemoryMemberRepository.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; public final class MemoryMemberRepository implements MemberRepository { private final Map<Long, Member> store = new HashMap<>(); private long sequence = 0; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values() .stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return store.values() .stream() .toList(); } public void clearStore() { store.clear(); } }// MemoryMemberRepositoryTest.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach void afterEach() { System.out.println(repository.hashCode()); } @Test void save() { var member = new Member(); member.setName("spring1"); repository.save(member); var result = repository.findById(member.getId()).get(); assertThat(member).isEqualTo(result); } @Test void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test void findAll() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findAll(); assertThat(result).hasSize(2); } }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
환경변수 이후 build failed
환경변수 까진 다시 설정했습니다만.. build 안되네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정신이 나갈것같아요
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\JavaPlease set the JAVA_HOME variable in your environment to match thelocation of your Java installation.C:\study\hello-spring>환경변수에 java-home 추가해서 경로 다시쓰고 자바 23버전 설치하고 인텔리제이 자바23 통일하고 다해봤는데. 안되네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
명령프롬프트 gradle builder 실행
경로 찾아서 gradle builder 하니 오류가 뜹니다.gradle clean builder 로 해도 오류가 뜨네요. 자바 경로를 찾을 수 없다고 뜨는 것 같은데...
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Model, model.addAttribute 생략
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의에서 @PostMapping("/converter/edit") public String converterEdit(@ModelAttribute Form form, Model model){ IpPort ipPort = form.getIpPort(); model.addAttribute(form); return "converter-form"; }와 같이 Model 을 사용하여 model.addAttribute(form)해주었는데 가독성적으로 추가한걸까요? 생략해도 동작하는걸로 알고있어서 만약 숙달되었다면 addAttribute해주는 코드를 생략해도되는지 아니면 다른이유가있는지 알고싶습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 활용1,2 강의 내용 중 질문
강의록에 첨부해주신 그림을 보면 MemberRepository는 con1를 사용하고, LogRepository는 con2를 사용하는데 이게 각각 MemberRepository는 트랜잭션B를 사용하고 LogRepository는 트랜잭션C를 사용한다고 해서 다른 커넥션을 사용하게 되는거죠?? MemberRepository는 con1를 사용하고 커밋하고 난 후에 커넥션 풀에 con1이 반납되고 그 후에 LogRepository가 트랜잭션을 시작하게 되면 con1을 사용하게 되는건 아닌가요?? 이럴때는 서로가 다른 트랜잭션B,C로 구분이 안되어있을때만 이렇게 되는건가요..??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ConversionService와 Formatter 역할
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 정리를 하자면 아래와 같은지 확인하고 싶습니다.ConversionServiceHTTP 요청 파라미터(문자) → 타입에 맞는 객체로 변환객체 → HTML 렌더링을 위한 문자로 변환Formatter숫자/날짜 → 지정된 형식의 문자열로 변환 (예: 10000 → "10,000")형식화된 문자열 → 객체로 변환 ("2024-10-19 14:05:57" → localDateTime 객체)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류처리 흐름과 ExceptionResolver 관련 질문
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 질문 1. 오류 처리 흐름을 아래와 같이 이해하였는데 맞는지 여부BasicErrorController를 활용한 오류 처리 흐름WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환ExceptionResolver를 활용한 오류 처리 흐름ExceptionResolver(response.sendError() 처리) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환질문 2. ExceptionResolver 관련 설명을 아래와 같이 이해하였는데 맞는지 여부예외 발생 시 서블릿 컨테이너까지 예외가 전달되지 않고, 스프링 MVC의 ExceptionResolver 에서 예외를 처리한다. -> response.sendError() 가 아닌 예외(Exception)이 WAS에 전달되지 않는다.WAS 입장에서는 정상 처리된 것이다. -> response.sendError() 는 WAS 입장에서 정상 처리 된 것으로 인지한다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver의 sendError, ModelAndView
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.아래의 흐름이 맞는지 확인해보고 싶어 질문드립니다.정리:일반적인 예외:Spring MVC가 처리되지 않은 예외를 감지합니다.Spring MVC는 이 예외를 WAS에게 전달합니다.WAS는 기본적으로 500 Internal Server Error를 설정합니다.Spring Boot 환경에서는 BasicErrorController가 호출되어 최종 에러 응답을 생성합니다.HandlerExceptionResolver에서 빈 ModelAndView 반환:Spring MVC는 예외가 처리되었다고 간주합니다.만약 resolver 내에서 response.sendError()를 호출했다면:WAS는 요청 처리 완료 후 에러 상태를 감지합니다.WAS는 에러 처리 메커니즘을 시작합니다.Spring Boot 환경에서는 BasicErrorController가 호출됩니다.sendError()를 호출하지 않았다면, 일반적인 응답으로 처리됩니다.HandlerExceptionResolver에서 null 반환:Spring MVC는 다음 resolver로 예외 처리를 계속 시도합니다.모든 resolver가 null을 반환하면, 예외는 처리되지 않은 것으로 간주됩니다.처리되지 않은 예외는 WAS에게 전달됩니다.WAS는 500 Internal Server Error를 설정합니다.Spring Boot 환경에서는 BasicErrorController가 호출됩니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
redirect vs. forward사용예
redirect 는 실제 클라이언트(웹 브라우저)에 응답이 나갔다가, 클라이언트가 redirect 경로로 다시 요청한다. 따라서 클라이언트가 인지할 수 있고, URL 경로도 실제로 변경된다. 반면에 forward는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 전혀 인지하지 못한다. 라고 설명해주셧는데 redirect 같은 경우는 HTTP강의에서 영구적인 경우는 흔히 웹 사이트 주소가 바뀔때 유저가 예전 URL로 접근할시 새로운 URL로 연결해주는 역할을 할대 ㅅ ㅏ용하고 일시적인 경우 주문 후에 새로 고침으로 인한 중복 주문 방지로 주로 쓰인다고 했는데 FORWARD는 언제 사용하는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]***************************APPLICATION FAILED TO START***************************Description:Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context.Action:Check your application's dependencies for a supported servlet web server.Check the configured web application type.이런오류가 발생합니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html 500오류
에러뜨고 안돼여 ㅠㅠ<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li><a href="basic.html">서블릿 basic</a></li> <li>서블릿 <ul> <li><a href="/servlet/members/new-form">회원가입</a></li> <li><a href="/servlet/members">회원목록</a></li> </ul> </li> <li>JSP <ul> <li><a href="/jsp/members/new-form.jsp">회원가입</a></li> <li><a href="/jsp/members.jsp">회원목록</a></li> </ul> </li> <li>서블릿 MVC <ul> <li><a href="/servlet-mvc/members/new-form">회원가입</a></li> <li><a href="/servlet-mvc/members">회원목록</a></li> </ul> </li> <li>FrontController - v1 <ul> <li><a href="/front-controller/v1/members/new-form">회원가입</a></li> <li><a href="/front-controller/v1/members">회원목록</a></li> </ul> </li> <li>FrontController - v2 <ul> <li><a href="/front-controller/v2/members/new-form">회원가입</a></li> <li><a href="/front-controller/v2/members">회원목록</a></li> </ul> </li> <li>FrontController - v3 <ul> <li><a href="/front-controller/v3/members/new-form">회원가입</a></li> <li><a href="/front-controller/v3/members">회원목록</a></li> </ul> </li> <li>FrontController - v4 <ul> <li><a href="/front-controller/v4/members/new-form">회원가입</a></li> <li><a href="/front-controller/v4/members">회원목록</a></li> </ul> </li> <li>FrontController - v5 - v3 <ul> <li><a href="/front-controller/v5/v3/members/new-form">회원가입</a></li> <li><a href="/front-controller/v5/v3/members">회원목록</a></li> </ul> </li> <li>FrontController - v5 - v4 <ul> <li><a href="/front-controller/v5/v4/members/new-form">회원가입</a></li> <li><a href="/front-controller/v5/v4/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v1 <ul> <li><a href="/springmvc/v1/members/new-form">회원가입</a></li> <li><a href="/springmvc/v1/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v2 <ul> <li><a href="/springmvc/v2/members/new-form">회원가입</a></li> <li><a href="/springmvc/v2/members">회원목록</a></li> </ul> </li> <li>SpringMVC - v3 <ul> <li><a href="/springmvc/v3/members/new-form">회원가입</a></li> <li><a href="/springmvc/v3/members">회원목록</a></li> </ul> </li> </ul> </body> </html>plugins { id 'java' id 'war' id 'org.springframework.boot' version '3.3.4' id 'io.spring.dependency-management' version '1.1.6' } group = 'hello.servlet' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' //JSP 추가 시작 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'jakarta.servlet:jakarta.servlet-api'//스프링 부트 3.0이상 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'//스프링부트3.0이상 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //JSP 추가 끝 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() }왜 화면이 안넘어갈까요???ㅠ ㅠㅠ
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
AOP Self Invocation 해결방법..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.이 영상에서 나온것처럼 최상단 서비스에서만 @Transactional 걸어주면(예전 영상에서 나온 한 클래스 내부의 2개의 트랜잭션처리[AOP Proxy때문에 this로 인한 Self Invocation]이 일어나는 경우)를 해결할 수 있을까요?레포지토리 내부에서 트랜잭션을 걸지 않고 엔티티매니저로 CRUD하는 작업을 여러개 작성해놓으면 memberRepository 내부에서 내부 메서드를 호출해도 둘 다 트랜잭션 처리가 될까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 및 커넥션 관련 질문 드립니다.
안녕하세요. 앞서 db1강의에서 트랜잭션 관련 내용을 바탕으로 커넥션 관련해서 제가 이해하는 바가 맞는지 질문드립니다..! 트랜잭션을 시작하고 JdbcTemplate.update() 등등이 호출되면, 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다.이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고 나서 SQL 쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다.즉, JdbcTemplate을 통해 update 작업을 수행할 때, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다.트랜잭션을 시작하지않고 JdbcTemplate.update() 등등이 호출되면, 이때도 먼저 데이터베이스에 접근할 수 있는 커넥션을 얻는다.이때 내부적으로 DataSourceUtils.getConnection()을 호출해서 트랜잭션 동기화 매니저에서 관리하는 커넥션을 가져오거나, 새로운 커넥션을 생성(등록된 dataSource로 부터 커넥션을 생성)한다. 그리고나서 SQL쿼리를 실행한다. 이때 커넥션을 통해 데이터베이스와 통신한다.마찬가지로, 커넥션을 사용하여 데이터베이스에 접근하여 SQL 쿼리를 실행하고, 그 결과로 데이터베이스의 내용이 업데이트된다.트랜잭션을 사용하지 않고 JdbcTemplate.update()를 호출하면, 커넥션은 기본적으로 자동 커밋 모드로 동작하여, 쿼리가 실행된 후 즉시 데이터베이스에 반영된다.트랜잭션이 있든 없든 JdbcTemplate은 항상 커넥션을 사용하여 데이터베이스에 접근하고, 쿼리를 실행하여 그 결과로 데이터베이스의 내용을 수정하거나 조회하는 작업을 수행한다. 트랜잭션 및 커넥션 관련해서 이렇게 이해하면서 정리해보았는데, 이렇게 이해하면 될까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
단순하고 실용적인 컨트롤러 v4
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.FrontControllerServletV4Map<String, Object> model = new HashMap<>(); //추가 String viewName = controller.process(paramMap, model);//모델뷰를 다 여기에 넣음여기서Map<String, Object> model = new HashMap<>(); /model.put()을 해주지않았는데model에 파라미터와 값들이 비어있지않나요? model을 파라미터로 전달해주는게 의미가있나요?:
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
Fast API 개발환경설정 자료
강의 자료 다운로드 받고 압축 풀고 확인 해 봤는데,Fast API 개발환경설정 강의에서 보여주시는 00_FASTAPI_START 설명 파일(ppt자료?)이 없습니다.혹시 파일 누락된것이 아닐까요?확인 부탁드립니다.!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 처리 흐름과 ExceptionResolver관련 질문
질문 1. 오류 처리 흐름을 아래와 같이 이해하였는데 맞는지 여부BasicErrorController를 활용한 오류 처리 흐름WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환ExceptionResolver를 활용한 오류 처리 흐름ExceptionResolver(response.sendError() 처리) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외 발생)WAS(/error) → 서블릿 → BasicErrorController에서 오류 처리 → View or JSON 반환질문 2. ExceptionResolver 관련 설명을 아래와 같이 이해하였는데 맞는지 여부예외 발생 시 서블릿 컨테이너까지 예외가 전달되지 않고, 스프링 MVC의 ExceptionResolver 에서 예외를 처리한다. -> response.sendError() 가 아닌 예외(Exception)이 WAS에 전달되지 않는다.WAS 입장에서는 정상 처리된 것이다. -> response.sendError() 는 WAS 입장에서 정상 처리 된 것으로 인지한다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html 복사 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]html 복사하면 뭔가 줄이 자꾸 어긋나거나 하면서 안 맞는데 혹시 다른 방법이 없을까요 ..?제가 수기로 적는수밖에없을까요 ..여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
httpAPI가 먼가요?
GET쿼리 파라미터 ,post-HTMLFORM방식도 Httpapi아닌가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
제대로 이해했는지 확인하고싶습니다.
가장 처음에 했던 트랜잭션은 각각의 리포지터리에서 @Transactional을 걸어줘서 별도로 커밋, 롤백 되게끔 만들었습니다. 이후, 마지막에는 LogRepository에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 사용해서 트랜잭션 동기화 매니저에서 다른 커넥션을 가져와서 별도로 커밋, 롤백 되게끔 만들었습니다. 여기서 궁금한 점은 처음과 마지막의 트랜잭션의 구성은 다르지만 결과값은 똑같은 게 맞을까요? 다른 점이 있다면 혹시 무엇인지 알려주시면 감사하겠습니다.