묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
커넥션 획득시 데드락이 걸리는 상황도 발생할 수 있을까요?
안녕하세요. 영한님 질문드립니다. (감사합니다) 커넥션 데드락이 걸리는 상황도 발생할 수 있을까요? 강의에서 설명해주신 것 처럼 내부 트랜잭션이 REQURIED_NEW를 선언한 경우에 외부 트랜잭션을 수행하기 위해서 필요한 커넥션은 2개가 되는데요. 만약, 커넥션 풀에 사용가능한 커넥션이 딱 2개가 있다고 가정했을 때 thread-A와 thread-B가 외부 트랜잭션을 위해 각각 커넥션을 하나씩 획득한 상태라면 두 쓰레드 모두 내부 트랜잭션을 얻기 위해서 데드락이 발생할 수 있을 것 같다는 생각이 들었습니다. 물론, 커넥션 타임아웃 설정때문에 예외가 발생하여 각 스레드가 계속해서 blocking된 상태로 유지되진 않겠지만요..
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파전략을 런타임에 변경할 수 있나요?
안녕하세요 영한님, 또 질문을 드리게되네요..ㅠ 트랜잭션 전파전략을 런타임에 변경할 수 있나요? 강의에서 설명해주신 MemberService에서 LogRepository에서 예외가 발생하더라도 정상 커밋 수행되도록 하기위해 LogRepository에 REQURIED_NEW로 트랜잭션 전파 레벨을 설정하셨는데요. 만약, 우리가 만든 LogRepository가 MemberService가 아닌 주문 서비스, 결제 서비스 등 여러 서비스 클래스에서 범용적으로 사용할 수 있는 LogRepository라고 가정했을 때, 주문 서비스에서는 LogRepository의 save 메소드를 REQUIRED (디폴트) 범위로 설정하고 싶다고하면...방법이 있을까요? 이러한 가정을 만족하려면 LogRepository를 사용하는 서비스 클래스들이 동적으로 LogRepository의 save메소드의 propagation을 지정해줘야할 것 같은데...이러한 기능은 없을까요? 이러한 기능이 없다면, LogRepository는 똑같은 기능을 하는REQUIRED와 REQUIRED_NEW 을 갖는 메소드 2개를 구현하고 LogRepository 사용하는 서비스 클래스들이 상황에 맞는 메소드를 호출하는 방법밖에 없는게 맞을까요? 추가) 강의 끝까지 들어보니 퍼사드를 적용해서 해결할 수 있겠네요..
-
해결됨스프링 핵심 원리 - 기본편
requestURL 관련 질문입니다.
안녕하세요. requestURL 관련 질문 드리겠습니다. MyLogger 빈은 HTTP request가 발생할 때 마다 생성되고, HTTP 요청은 특정 url로 이뤄지므로 requestURL을 빈 생성 시점에 알 수 있는 것이 아닌가요? request 스코프의 빈이 생성되는 시점에는 어떤 url로 요청이 발생했는지는 알 수 없는 것인가요? 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 관련 보안 문제 질문
초보적인 질문일 수 있지만 궁금한 부분이 있어 문의 드립니다. 강의 내용 중 " 세션과 관련된 쿠키( JSESSIONID)를 탈취 당했을 경우 오랜 시간이 지나도 해당 쿠키로 악의적인 요청을 할수있다. " 라는 내용이 있고, 세션 타임아웃 설정으로 방지하는 것으로 이해하였습니다. 그런데 탈취 당하여 악용하는 시점에, 타임아웃으로 설정한 30분이 지나지 않았다면 이 순간에는 악용이 가능하지 않나 생각이 들었습니다. 이 순간에는 막을 수 있는 방법이 따로 있는 것일까요 ?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
비즈니스로직을 Runtime 예외로 두고, @Transactional 옵션의 noRollbackFor을 사용하여 롤백되지 않도록 하는 방법"을 사용하는 것은 어떤가요?
안녕하세요. 영한님의 여러 강의들과 이번 강의들을 보면서 궁금한 점이 생겨 질문드립니다. 물론, 상황과 조직에 따라 구현하는 방법은 여러 가지 있겠지만 실무에서는 어떻게 쓰시는지 궁금합니다. 질문은. 강의에서 말씀하신 방법과는 반대로, 비즈니스로직을 Runtime 예외로 두고, @Transactional 옵션의 noRollbackFor을 사용하여 롤백되지 않도록 하는 방법"을 사용하는 것은 어떤가요? 그 이유는, OrderService의 메소드 시그니쳐에 throws 구문을 강제하고 싶지 않습니다. 첫 번째, OrderController가 OrderService 인터페이스에만 의존하고 있다고 가정하고, OrderService의 구현체들마다 예외를 throw할 수도 안할수도 있다고 가정한다면 비즈니스로직을 Exception 타입으로 정의하여 메소드 시그니쳐에 throws 구문을 강제하는 방법이 문제가 될 수 있습니다. (인터페이스 메소드 시그니쳐에도 throws가 추가되어야 하기 때문에) => 추가) 여기에 대한 저 스스로에 대한 답은, 실제로 운영을 하며 서비스 계층의 구현체를 변경할 일도 많지 않고 이에 따라 컨트롤러가 인터페이스가 아닌 구현체에 의존해도 큰 상관은 없을 것 같다. 입니다. 두 번째, 제가 이해하는 개념으로는 예외를 throw 한다는 것은, 자신을 호출한 상위 메소드에서 해당 예외를 적절히 처리하게끔 책임을 위임하는 것이라고 생각합니다. 즉, Controller 계층에서 NotEnoughMoneyException를 처리하도록 하는 것입니다. 물론, Controller 계층에서 해당 예외를 catch하여 "잔고가 부족합니다"와 같이 정상적인 흐름과 다른 응답을 클라이언트에게 응답으로 돌려준다면 적절한 상황(?) 이겠지만 @ExceptionHandler를 이용해서 NotEnoughMoneyException을 핸들링하고 있는 상황에서도 OrderController의 메소드에 throws을 명시하여야 합니다. 그래서, 비즈니스로직을 RuntimException 타입으로 지정하고 무의미할 수도있는 메소드 시그니쳐에 throws는 생략한체로noRollbackFor 옵션을 사용하는 것이 코드를 더 깔끔하게 작성할 수 있지 않을까 생각했습니다. 물론, 스프링이 예외를 바라보는 시선(런타임은 시스템 에러, checked는 비즈니스 에러)과는 반대로 코드를 작성한다는 부담(?)이 있긴 합니다... 영한님의 의견을 들려주시면 감사하겠습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트시 사전에 필요한 데이터 세팅 방법 문의드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오[질문 내용]영한님 안녕하세요, 요번에도 강의 알차게 듣고 있습니다. 아리마님이 올려주신 질문에 답변 해주신 내용중에 '각 테스트에 따른 데이터를 추가하는 별도의 도구들을 사용' 요기서 말씀하시는 별도의 도구가 어떤것들인지 궁금합니다! 인메모리 db를 사용한다면 제가생각한 방법은 아래와 같습니다. 1. test/resources/data.sql에 테스트에 필요한 모든 사전 데이터에 대한 insert쿼리 세팅 (schema.sql도 세팅) 2. 각 테스트마다 필요한 데이터만 save() 메소드 호출 로컬 DB나 별도의 테스트용 외부 DB를 쓴다면 사전 데이터를 한번만 세팅하면 되겠지만 각자 로컬 DB에 모두 세팅해야되고 리소스 고려(테스트용 외부 DB) 등 번거로울거 같아서요.. 언급해주신 도구를 쓴다면 위 2가지 방법들보다 더 간편하게 데이터를 세팅할수 있는지요 ㅠㅠ 제가 생각한 방법말고도 다른방법들이 있으면 그것도 알고싶습니다! 참고 질문 https://www.inflearn.com/questions/553577
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
테스트 DB 설정 문의드립니다.
영한님 안녕하세요. 이번 강의도 재밌게 잘 듣고 있습니다. 섹션3의 테스트 과정을 들으면서 궁금한 점이 생겼는데요. 실무에서는 로컬DB 와 테스트DB 를 어떻게 운영하는지 궁금합니다. 강의에서는 임베디드 DB 의 경우 schema 파일 활용해서 DDL 관리하고, 데이터가 하나도 없는 상태에서 테스트를 하는 과정들을 보여주셨는데요. 실무에서는 테이블도 워낙 많고 schema 에 추가/수정도 자주 일어날테고, 무엇보다 이미 데이터가 있는 상황에서 테스트를 해야하는 케이스도 상당히 많을 것이기때문에 항상 데이터가 없는 상태에서만 테스트하기는 어려울텐데요. 이런 부분을 감안했을 때, 로컬DB 나 임베디드DB 를 실무 환경에서도 제대로 활용을 할 수 있는 편인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext의 자동 주입 관련 질문
안녕하세요. 강의 관련해 질문 몇 가지 드리겠습니다. 1. 강의 초반에 단순한 방법으로 ApplicationContext를 주입 받아 getBean()으로 PrototypeBean을 조회하는데, 이 때 주입되는 ApplicationContext는 Test Code에서 new 해서 만든 객체와 같은 객체인건가요?? 2. 그럼 이 코드를 테스트가 아닌 앱 코드에서 사용한다고 했을 때는 스프링이 자동 주입된 빈을 관리하는 ApplicationContext를 생성하여 들고 있다가 주입해주게 된다고 생각하면 될까요? 3. 2번이 맞다고 한다면, 스프링 코드 내에서 자동 주입 + ApplicationContext를 통한 수동 등록을 같이 사용하게 되면 ApplicationContext가 여러 객체 존재할 수도 있는 것인가요? 4. 강의 내용 중 '스프링 애플리케이션 컨텍스트' 라는 표현이 나오는데 이게 스프링 컨테이너와 같은 의미일까요? 5. 마지막으로 직접 new를 통해 구현체를 할당하는 것과 DL을 하는 것의 차이점이 무엇인지 궁금합니다. 빈을 '찾는다'는 행위의 유무가 차이점일까요..? 감사합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
insert 로그 확인하는 방법이 궁금합니다.
안녕하세요! 좋은 강의 항상 감사드립니다. 다름이 아니라 select, update 쿼리에 대한 로그는 확인이 되는데 insert 쿼리는 로그에 남지 않고 Executing SQL update and returning generated keys 라는 insert 실행 메시지만 확인 가능하더라구요. 혹시 insert 쿼리를 로그로 확인 할 수 있는 방법이 있는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
order builder패턴 질문
set를 빌더 패턴으로 바꿔봤는데 배열은 어떻게 빌더로하는지 궁금해서요ㅠㅠ 이러이렇게 하는게 맞는건지 아닌거같기도하고... 그리고 (...) 이거 궁금한데 뭐라고 검색해야나오나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade관련
cascade가 그럼 언제써야되는지 혹시 명확한 조건이있을까요 One으로시작하는거라든지 그런거요 oneToMany이관계에서도쓰는거면 member와 order사이에서도쓸수있지않나해서요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
response와 ModelAndView가 각각 별개로 WAS로 반환이 되는 거로 이해하는게 맞나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의 잘 듣고 있습니다! 궁금한 점이 있는데요. 예외가 발생할 경우에는 ExceptionResolver가 이 예외를 처리할 수 있는지 체크하고 sendError를 통해서 500에러가 아닌 400에러를 WAS로 보낸 다음에 ModelAndView를 WAS로 보낸다고 이해를 했습니다. 그러면 response랑 ModelAndView는 별개로 WAS로 응답이 되는 건가요??
-
해결됨스프링 핵심 원리 - 고급편
강의 학습 중 공통(부가)기능 처리 방법에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 스프링 핵심원리 고급편에서 다루는 주요 내용인 핵심기능과 공통(부가)기능을 어떻게 나눌 것인가를 듣다보니 어느덧 AOP 챕터까지 다다르게 되었습니다. 강의를 통해 부가기능의 종류에는 크게 로깅, 트랜잭션처리, 접근권한확인이 있다고 생각이 들었습니다. 이것들은 앞에서 다룬 개발 패턴이나 AOP를 사용하지 않고도 유틸리티성 클래스를 통해 처리가 가능한 것으로도 알고 있지만 SOLID 원칙, 유지보수 효율 증대, 중복 코드 제거 등의 많은 이점을 가져다주기 때문에 AOP와 같은 기술을 사용하는 것은 이해를 했습니다. 그러나 Filter/HandlerInterceptor를 사용해서도 부가기능을 처리할 수 있을 것으로도 생각이 드는데요.(스프링 MVC 강의 학습을 통해 느낀 점입니다.) 저와 비슷한 생각을 가지고 계신 다른 분께서 질문한 글의 답변을 인용하자면 웹과 관련된 공통(부가)기능(특정 메뉴 접근권한 확인, 로그인 여부 확인 등)는 Filter/HandlerInterceptor를 통해 처리하고, 순수한 자바 코드를 통한 공통(부가)기능은 AOP를 이용하는 것이 맞는 것인지 궁금합니다. (참고 질문: https://www.inflearn.com/questions/495293) 물론 더 나아가 시큐리티를 알고 있다면 이런 질문 내용도 다른 방식으로 해결이 가능하겠지만, 만약, 시큐리티를 현재 모르고 있다라는 가정하에 위와 같이 실무에서도 처리하는게 맞는지 첨언 부탁드리겠습니다. 미리 답변 감사드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
혹시 강의에 올려주신 html 파일 관련해서
안녕하세요 강의를 거의 다 완강해가서 질문남기게 되었습니다 ! 스프링 MVC2편을 몇강 안남겨두었는데 아직도 여러가지 애노테이션 (@Autowired 랑 @Required ArgsConstructor) 등이 쓸 때마다 어떤 차이가 있는지 왜 사용하는지 등 머릿속에 개념이 희미해져서 부족한 내용들 강의 찾아보면서 DB랑 JPA 강의전에 스프링을 복습해보려고 하는데 데이터베이스를 사용하지 않으면서 스프링을 공부할만한 html 파일들이 없더라구요 그래서 김영한 선생님이 최종본으로 올려주신 파일들중 html만 베껴서 기록도 남길겸 깃헙에 공유하면서 저만의 소스로 페이지를 만들어봐도 되는지 여쭤보려고 질문 남기게 되었습니다 혹시 github에 김영한 선생님이 올려주신 html파일들만 제가 사용해서 스프링 공부를 복습해봐도 될까요 ??
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html 대신 객체를 반환할 때 Dispatcher Servlet에서는 어떻게 처리가 되는걸까요??
안녕하세요, 강의를 보다가 이해가 안되는 부분이 있어서요. Spring MVC 구조에서 핸들러 어댑터는 Dispatcher Servlet한테 ModelAndView를 반환해주잖아요! 그러면 Dispatcher Servlet은 view Resolver를 사용해서 View로 만들어줘 HTML을 보내주고요. 그런데 @ResponseBody 등을 사용해 html대신 직접 객체를 반환해주는 경우에는 어떤 식으로 흐름이 진행되는지가 헷갈려서요, Http 메세지 컨버터에 보내주면 여기에서 응답 결과를 만드는 거 까지는 이해했는데, 그러면 핸들러 어댑터는 DispatcherServlet에 ModelAndView를 반환하지 않아도 되는건가요? 요약하면 HTML대신 객체를 반환하는 경우 Dispatcher Servlet에서 어떻게 처리가 일어나는지가 궁금합니다..!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
updateitem dto관련
UpdateItemDto dto이렇게만들어서 사용해도된다고해서 만들어볼려고한느데 ItemService 에 @Transactional public void updateItem(Long itemId, UpdateItemDto dto) { Item findItem = itemRepository.findOne(itemId); findItem.setPrice(dto.getPrice()); findItem.setName(dto.getName()); findItem.setStockQuantity(dto.getStockQuantity()); } 이렇게 만들고 UpdateItemDto @Getter @Setter public class UpdateItemDto { private String name; private int price; private int stockQuantity; } 이렇게만들고 근데 controller에서 @PostMapping("items/{itemid}/edit") public String updateItem(@PathVariable Long itemId, @ModelAttribute("form") BookForm form) { itemService.updateItem(itemId, form); return "redirect:/items"; 이런식으로되어있는데 form을어떻게dto로넘길수있을까요 controller에서 dto로넘기는건 안좋다고 다른질문에서본거같은데
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 페이지 오류 출력할 때 질문입니다
timestamp, path, status, message 등 500.html 에서 출력할 때 따로 모델을 가져온다던가 th=object 였나...?? 같은걸 쓰지 않고 그냥 타임리프로 ${} ,하는데 출력이 되더라고요 이게 모델을 가져오지않는걸 봐서는 모델에 담기는 것 같진 않고 따로 무언가를 가져온 것은 없는 것 같은데 어떻게 이 출력이 이루어지는건가요 ??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티에 로직들질문
서비스에 하는게 더 로직에맞는거아닌가해서요 물론간단한예제라서 엔티티에하는건지 아니면원래 엔티티에해도되는건지를모르겠습니다. 엔티티에 메서드를 많이만드는게 신기하다고해야되나 다른곳에서도 이렇게해도되는건지가궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 관련해서 질문 드립니다
LoginController 에서 HttpSession session = request.getSession(); session.setAttribut(SessionConst.Login_Member, loginMember); 이게 request에 세션이 있으면 그것을 session 이라는 객체에 담는것 아닌가요 ? (12sasd12-dasdasd-21 형태) 그 후에 setAttribute 에서 SessionConst.LOGIN_MEMBER 를 왜 넣는지 이해가 가지 않습니다 SessionConst.Login_Member의 역할이 무엇인가요 ??? 이 강의 이전에 직접 세션을 만들어봤을 때는 이해가 갔는데 이번 강의에서는 세션이 이해가 가질 않네요 ㅠㅠ
-
미해결실전! 스프링 데이터 JPA
엔티티, DTO 유효성 검사에 대해 질문 드립니다.
엔티티, DTO를 둘 다 유효성 검사를 하나요? 만약 엔티티도 유효성 검사를 할 떄 Bean validation을 사용하시나요?