inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

레디스에서 락이 필요한 상황에 대하여

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요, 강의를 보고 공부를하다 궁금한 점이 생겨 질문드립니다. 제가 예측한 강의 내용으로는, "경쟁 상태 예시(재고 수량)에 대하여 레디스 를 활용한다." 라고 예측 했습니다. 이에 대하여, "레디스는 싱글 스레드 기반이니깐, 락킹 없이 해당 작업이 가능할 것" 이라고 추측하였는데요, 그러나 제가 생각지 못한 레디스 lock 과 관련된 내용을 접하게 되어 신기하면서도 또 궁금한 부분이 생겨 질문드립니다. 레디스 락 전략이 사용되는 이유와 예시를 조금더 들어볼 수 있을까요? 혹은 이와 관련하여 추가적으로 공부해볼 수 있는 자료를추천해주시면 감사하겠습니다.

  • java
  • spring
  • 동시성
성연 댓글 1 좋아요 0 조회수 500

h2 초기 연결시 오류..

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Database "C:/Users/star5/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 90149/90149 (도움말) org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "C:/Users/star5/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 윈도우 환경에서 h2설치후 연결하면 Database "C:/Users/star5/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 90149/90149 (도움말) org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "C:/Users/star5/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-224] 이런에러가 뜨는데 어떤게 문제일까요?? 설정값은 강사님과 똑같이 하였습니다.

  • java
  • spring
  • mvc
  • spring-boot
이정규 댓글 1 좋아요 0 조회수 1607

강의에 나온 코드에 대해서

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 수업 잘 듣는 중입니다. 다름이 아니라, 강의에 나온 jdbc 코드를 얼마나 알아야 하는지 궁금합니다. 저는 Mysql로 연동홰서 사용중인데, 순수 JDBC 강의에서 나온 데이터 CRUD 코드를 얼마나 알아야할까요? 대표적으로 알아야하는 코드가 있다면 알려주시면 감사하겠습니다.

  • java
  • spring
  • mvc
  • spring-boot
1201ljhun 댓글 1 좋아요 0 조회수 616

SessionManager 를 Bean 이 아니라 static 클래스로 해도 상관없나요?

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 항상 강의 잘 듣고있습니다! 강의를 보다보니 SessionManager 클래스를 Bean 으로 등록하지 않고 static class 로 사용해도 될 것 같다는 생각이 들었는데, 어떤 차이점이 있는지는 생각을 해봐도 잘 모르겠네요.. SessionManager 를 Bean 으로 등록하신 이유가 뭘까요??

  • spring
  • mvc
truepine 댓글 1 좋아요 0 조회수 282

서블릿에 대한 질문이 있습니다

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

서블릿은 웹 서버를 직접 구현할 때 필요한 tcp/ip 연결이나 http 메세지 파싱, html 생성 등 비즈니스 로직 외의 것들을 대신 해줘서 개발자는 비즈니스 로직에만 집중하여 개발할 수 있는 장점이 있다고 하셨고, 자바 웹 기술의 역사를 설명하실 때 서블릿의 단점이 html 생성이 어려운 것이라고 하셨습니다. 여기서 html 생성이 어렵다는 것은 비즈니스 로직에서 응답으로 보낸 HttpServletResponse를 자동으로 html화 하는 과정이 잘 이루어지지 않는다는 의미인가요? 어떤식으로 어렵다는 건지가 잘 이해가 안가서 질문드립니다.

  • spring
  • mvc
낌상 댓글 2 좋아요 0 조회수 369

API validation

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 강의 잘 듣고 있습니다. 예외처리 API 강의를 듣다보니 궁금한 점이 생겨 질문 드립니다. api를 사용하는 경우 validation을 어떻게 하는지 궁금합니다. 강의에서는 model과 view를 사용하여 bindingresult에 hasError를 사용하여 검증 성공 실패를 판단하여 view에서 타임리프를 활용해 에러 메세지등을 표시해주었는데요. api의 경우 찾아본 결과 bindinresult를 사용하지 않는 것을 확인 하였습니다. 여기서 그렇다면 api의 경우는 valid가 실패했을 시 어떤 과정이 일어나는지 궁금합니다. 검증이 실패한 것을 어떻게 확인하며 또 이 상황을 어떻게 처리하는지 궁금합니다. 또한 검증과 예외의 정확한 차이를 잘 모르겠습니다. 검증이 실패했을 경우도 exception이 터진 상황일까요?

  • spring
  • mvc
spring4185 댓글 2 좋아요 0 조회수 521

왜 commit할 때 status를 넣어줘야 하나요.

해결됨

스프링 DB 1편 - 데이터 접근 핵심 원리

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] status는 트랜잭션 설정, 상태에 관한 정보인데, 이미 transactionManager는 생성할 때 dataSource를 넣어줬고, 또 트랜잭션 동기화 매니저가 있기 때문에 어떤 커넥션을 닫아야 할 지 알고 있을 것 같습니다. 그럼 commit()할 때난 rollback()할 때 그냥 닫거나 롤백하면 될텐데, 왜 status가 필요한가요?

  • spring
  • mvc
  • spring-jdbc
궁금이 댓글 1 좋아요 0 조회수 449

PageableExecutionUtils.getPage 의 최적화 로직만 따로 뺀 count 메소드입니다.

해결됨

실전! Querydsl

갱신된 강의자료에도 나와 있듯이, fetchResult, fetchCount 등의 메소드는 deprecated 예정입니다. 또한 해당 메소드는 Page 타입을 반환하기 때문에 Page 타입을 직접적으로 조작해야 한다는 제약이 있습니다. 이걸 잘 쓰면 되는데, Page 의 시작번호 등 제약도 있어서 저는 회사에서 Page 를 따로 만들어서 사용하거든요. 그래서 search 메소드와 count 메소드는 항상 분리하고 있습니다. 2. 그런 점에서 count 만 최적화하는 로직만 베껴서 만든 최적화 메소드입니다. 실제로 count 구문을 실행하기 위한 메소드입니다. 필요에 따라서 public 으로 만들어도 될 것 같네요. // count 실행 메소드 private Long countByCond(MemberSearchCond cond) { return query .select(member.countDistinct()) .from(member) .where( usernameEq(cond.getUsername()), teamNameEq(cond.getTeamName()), ageGoe(cond.getAgeGoe()), ageLoe(cond.getAgeLoe()) ) .fetchOne(); } 최적화 로직을 베낀 메소드입니다. 스프링 데이터 JPA 는 아래 코드와 같이 page, size 값이 null 이 아니고, 적절한 범위에 있는지를 판단하여 isPaged 라는 분기를 만듭니다. 참고로 코드를 분석하면서 내린 뇌피셜이니 혹시 틀리다면 말씀해주세요. page 가 0 이 아니라 1 부터 시작하는 건 제 취향입니다. 회사에서 그렇게 쓰고 있거든요. 필요에 따라 0 부터 시작하도록 바꾸는 건 어렵지 않을 것 같습니다. public Long countByCondOptimization(List<?> content, MemberSearchCond cond, Long page, Long size) { boolean isPaged = page != null && size != null && page > 0 && size > 0; long offset = isPaged ? (page - 1) * size : 0L; long contentSize = content.size(); if (!isPaged || offset == 0) { if (!isPaged || size > contentSize) { return contentSize; } return this.countByCond(cond); } if (contentSize != 0 && size > contentSize) { return offset + contentSize; } return this.countByCond(cond); } 이렇게 하여 count 쿼리를 리스트 조회 쿼리와 분리하여 재사용성을 높이면서, 성능도 최적화할 수 있습니다. 감사합니다.

  • java
  • jpa
psam1017 댓글 1 좋아요 3 조회수 807

동적으로 Order 절 만드는 코드 공유합니다

해결됨

실전! Querydsl

강의에서는 Query DSL 4.x 버전이어서 제네릭 없는 예제 코드인 것 같은데, 제가 올리는 버전은 5.0 버전이어서 차이가 있음을 감안해주세요. 정렬 조건을 하나만 추가하는 코드입니다. 정렬 조건을 여러 개 추가하려면 반복문을 돌면서 JPAQuery 를 동적으로 확장해나가면 됩니다. // 페이징하는 메소드에서 사용 private Expression<? extends Comparable<?>> specifyMemberProperty(String prop) { prop = prop == null ? "" : prop.toLowerCase(); if (prop.equals("username")) { return member.username; } if (prop.equals("age")) { return member.age; } return member.id; } // 페이징하는 메소드 // ... .orderBy(new OrderSpecifier<>("desc".equalsIgnoreCase(dir) ? Order.DESC : Order.ASC, specifyMemberProperty(prop))) .fetch(); -- 저는 일단 이렇게 만들어봤는데, 다른 분께서 더 나은 코드, 더 빠른 코드가 있다면 저한테도 알려주세요. 감사합니다.

  • java
  • jpa
psam1017 댓글 0 좋아요 2 조회수 362

@ManyToOne Category parent 질문 있습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

@ManyToOne @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); 안녕하세요. 위 코드에서 부모 쪽에 다대일 매핑 한 이유를 알고 싶습니다. 아니면 DB 테이블 안에서 부모 셀프 외래 키를 만들어서 조회할 때 이 외래 키를 참조하여 자식 카테고리들까지 같이 조회하게 만들었기 때문에 테이블에서 다는 parent_id니까 jpa에도 parent에 다를 준 건 가 싶기도 해서요 필드 명에 부모 자식이 있어서 부모는 하나고 자식은 여러 개인데 부모 쪽에 다로 돼있어서 헷갈리네요..

  • java
  • jpa
hoonseung 댓글 2 좋아요 0 조회수 569

Controller에서 BindingResult값을 유지한채로 @ExceptionHandler를 활용한 사용자 정의 예외를 처리하는법이 궁금합니다.

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Spring data jpa 를 활용하여 지금까지 배운 내용들을 총 합한 프로젝트를 만들어 보고 있는데 한가지 궁금증이 생겨 질문 드립니다. @ExceptionHandler을 사용하여 사용자정의 예외를 만들어 아이디 중복 예외를 처리하고싶은데 예외를 처리하는 과정에서 아이디가 중복일시 Controller의 BindingResult를 활용하여 아이디가 중복이면 View에 아이디가 중복이라는 정보를 표현하고싶어서 프로젝트를 코딩중에 Controller 부분에서 service단에서 throw한 사용자 정의 예외를 처리하려 하는데 try catch로 예외를 처리하는 순간 @ExceptionHandler를 사용하지 못하고 그렇다고 다시 예외를 던지자니 @ExceptionHandler에서 View에 관련된 Binding result의 값이나 ModelAttribute의 값을 보존해지 못하여 처리가 불가합니다. 이럴때 제일 좋은 방법이 무엇인지 알고싶습니다. Controller 코드입니다. @Controller @RequiredArgsConstructor @RequestMapping("/users") public class UserController { private final LoginService loginService; @GetMapping("/add") public String addForm(@ModelAttribute("userDto") UserDto userDto) { return "user/addUserForm"; } @PostMapping("/add") public String save(@Valid @ModelAttribute UserDto userDto, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "user/addUserForm"; } // if (loginService.signUpIdExists(userDto.getLoginId()) == false){ // bindingResult.reject("loginIdExists", "동일한 아이디가 존재합니다."); // return "user/addUserForm"; // } try { loginService.signUp(userDto); return "redirect:/"; } catch (UserIdExistsException e) { bindingResult.reject("loginIdExists", "동일한 아이디가 존재합니다."); return "user/addUserForm"; } } } Service 코드입니다. @Slf4j @Service @RequiredArgsConstructor public class LoginService { private final UserRepository userRepository; public User login(String loginId, String password) { return userRepository.findByLoginId(loginId).filter(m -> m.getPassword().equals(password)) .orElse(null); } public void signUp(UserDto userDto) { // if(signUpIdExists(userDto.getLoginId()) == false){ // throw new UserIdExistsException("이미 존재하는 아이디입니다."); // } try { Address address = new Address(userDto.getAddressDto().getZipcode(), userDto.getAddressDto().getStreetAdr(), userDto.getAddressDto().getDetailAdr()); User regisUser = new User(userDto.getLoginId(), userDto.getLoginName(), userDto.getPassword(), address); userRepository.save(regisUser); } catch (DataIntegrityViolationException e) { throw new UserIdExistsException("이미 존재하는 아이디입니다."); } } private boolean signUpIdExists(String loginId) { return userRepository.findByLoginId(loginId).isEmpty(); } } @ControllerAdvice 코드입니다. @Slf4j @ControllerAdvice public class ExceptionAdvice { @ExceptionHandler(UserIdExistsException.class) public ModelAndView userIdExHandler(UserIdExistsException e) { log.error("[userIdExistsException] ex", e); return new ModelAndView(); } } UserIdExistsException 코드입니다. public class UserIdExistsException extends RuntimeException{ public UserIdExistsException() { } public UserIdExistsException(String message) { super(message); } } 위 코드는 동작은 확인했지만 사실상 try catch 로 예외를 잡아버려서 @ExceptionHandler가 동작하지 않는 상태입니다. Entity의 아이디값에 unique 옵션을 걸어두어 아이디 중복이 일어날시 DataIntegrityViolationException에러가 일어납니다. 추가로 궁금한것 예외가 사실상 repository에서 터지는데 인터페이스에는 try catch가 권장되지 않는것으로 알고 통상 Service에서 에러를 처리하는것으로 알아 이렇게 코딩하였는데 이게 올바른건지 모르겠습니다. 예외를 발생시키는 지점을 repository로 옮기는것이 맞나요? Spring data jpa 는 알아서 Spring에 종속된 에러를 출력하는것으로 알고있는데 DataIntegrityViolationException에 속한 예외 두가지를 다른방법으로 처리하고싶으면 ErrorCode를 분석해 If문 으로 사용자 정의 예외를 만들어서 처리해야하나요? bindingresult를 사용하기 위해 어쩔수없이 예외를 throw하였더니 controller까지 예외가 전파되서 코드가 지저분해졌습니다. 이렇게 View에 특정한 값을 보내주어야할때 Controller에 예외를 throw 하지 않고 해결할수있는 좋은 방법이 있나요? 질문이 길고 지저분해서 죄송합니다. 나름 열심히 알아보고 코딩해보아도 잘 모르겠어서 질문남깁니다. 감사합니다.

  • spring
  • mvc
  • spring-jdbc
이성훈 댓글 2 좋아요 0 조회수 925

@Data 인식 문제

해결됨

스프링 부트 웹 개발 입문 - 따라하며 배우기

계속하여 아래와 같이 getNo()을 인식하지 못하는 오류가 발생하고 있습니다. Method getNo() cannot be found on type com.example.demo.v2_VO.VO.Order_list 그래서 한참을 해맨 후에 vo의 @Data가 Getter의 기능을 하지 못하고 있는 것을 알게되었습니다. 일일이 getter를 만들어주니까 돌아가더라구요... 그래서 lombok의 문제로 생각하고 롬복을 설치하고 외부 라이브러리를 추가해주는 식으로 해결하려고 하였습니다. 이렇게 조치를 해도 계속 오류가 나더라구요.. 혹시 김부장님께서는 이런 경우 다른 방법으로 문제를 해결하신 적 있으신가요?

  • spring
  • mvc
  • spring-boot
jck 댓글 2 좋아요 0 조회수 316

gradle이 실행이 안됩니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

윈도우 환경에서 gardle을 빌드 시키려고 하면 org.gradle.api.UncheckedIOException: Could not load properties for module 'gradle-cli' 이 오류가 뜹니다 인텔리제이 재설치,스프링 재설치,vscode로 실행등을 다 해봐도 계속 저 오류가 뜹니다 인텔리제이 재설치 이후에는 Unable to load class 'org.slf4j.LoggerFactory'. This is an unexpected error. Please file a bug containing the idea.log file. 가 뜹니다

  • java
  • spring
  • mvc
  • spring-boot
gunwoo7179 댓글 1 좋아요 0 조회수 379

엄청 기초인데 기억이안나네요 ㅠㅠ 경로문제

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@RequestMapping("/basic") @RequestMapping("basic") @GetMapping("text-basic") @GetMapping("/text-basic") 위 두개의 차이점을 잘 모르겠습니다 ㅠㅠㅠ..... 두번째는 틀린건가요?.. 어떨때 /를 붙여야하는지 헷갈립니다.

  • spring
  • mvc
hoon 댓글 2 좋아요 0 조회수 712

강의 코딩자료는 어디에 있나요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강사님께서 강의 도중에 복사하시는 코딩 자료랑 강의노트는 어디서 다운로드 받을 수 있을까요? 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • spring
  • mvc
  • spring-boot
wonyongick 댓글 2 좋아요 0 조회수 821

old-controllerd의 web-inf 경로 연결 문제

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요, 강의 잘 듣고 있다가 다른 컴퓨터로 들을 일이 있어서 소스를 다운 받고 해당 부분을 지우고 다시 들었습니다. ModelandView에서 new-form을 연결했고, properties에서 prefix, suffix를 설정하고 돌리는데 계속 404가 나옵니다. webapp 폴더 있고, 그 아래 WEB-INF 폴더도 잘 있습니다. 뭐가 문제일까요? 스크린샷으로 한계가 있을 거 같아 zip으로 보내려고 하는데 어디로 보내드리면 될까요??

  • spring
  • mvc
전진호 댓글 1 좋아요 0 조회수 334

간단한 질문이 있습니다!!!

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

DispatcherType을 써도 오류가 발생했을때 필터, 서블릿, 인터셉터가 2번 호출되는 것은 똑같지 않나요?? 다른점은 클라이언트로 부터 발생한 정상요청인지, 오류페이지를 출력하기 위한 내부 요청인지 구분 할 수 있다는 점인데.. 궁금해서 질문드립니다!@!

  • spring
  • mvc
최승호 댓글 1 좋아요 0 조회수 353

빌드후 실행하면 동작도 잘 되는데 종료하고 나면 오류메시지가 나오네요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

Execution failed for task ':DcsSpringApplication.main()'. > Build cancelled while executing task ':DcsSpringApplication.main()' * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. 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.2.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 18s 3 actionable tasks: 1 executed, 2 up-to-date 라는 오류가 나오는데 무시해도 되는건가요?

  • java
  • spring
  • mvc
  • spring-boot
정규철 댓글 2 좋아요 0 조회수 1572

리소스 정리

해결됨

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 매니저의 전체 동작 흐름에서 마지막에 '전체 리소스를 정리한다.' 라고 나와있는데 코드상으로 어디 부분에서 리소스 정리가 일어나는 건가요? 커밋이나 롤백을 하고 리소스 정리를 하는 코드가 내부에 존재하는 건가요?

  • spring
  • mvc
  • spring-jdbc
모깅 댓글 2 좋아요 1 조회수 358

인기 태그

인프런 TOP Writers

주간 인기글