묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
service 메서드를 실행하는 주체
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 수강 중 질문이 생겨 여쭤봅니다.Hello 서블릿 강의 내용 중 void service(HttpServletRequest request, HttpServletResponse response)에 대해 여쭤보고 싶습니다. 이 메서드는 서블릿 http 요청이 왔을 때 WAS가 request, response를 만들어 서블릿 컨테이너로 전달하는 과정일까요 ? 아니면 WAS에서 생성된 request, response를 서블릿 컨테이너가 받아서 service 메서드를 통해 내부적으로 동작 후 WAS에 다시 전달하는 과정일까요 ? 좋은 강의 제공해주셔서 항상 감사드립니다 !
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
로그인 후, redirect 에서 error
localhost:8080 에서 login 페이지로 넘어가고, 로그인을 하면, error?cutomerParam=y 주소로 넘어갑니다. 리다이렉트는 문제없이 잘 된거 같은데 어디서 에러가 생격서 savedRequest 객체에 error가 저장되는지 도통 모르겠네요;; 로그인 직후 network
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:object 커맨드 객체는 HTML의 FORM에서만 사용가능한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.섹션 3.타임리프-스프링 통합과 폼25.입력 폼 처리 강의 내용 중 회원등록 폼과 회원수정 폼에서 th:object 커맨드 객체를 사용해 코드를 수정하였는데 이 커맨드 객체는 html의 <form>태그 안에서만 사용 가능한건가요? items.html 파일에서 .container클래스인 <div>태그에서는 사용하면 안 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberService에서의 Autowired
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션 5 강의 중 자바 코드로MemberService와 MemberRepository를 스프링 Bean으로 등록 후에 MemberController에서 MemberService객체를 사용할 때 @Autowired 어노테이션을 사용했는데 MemberService에서 MemberRepository 객체를 사용할 때 @Autowired 어노테이션이 없던데 이유가 무엇인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실무에서도 패키지 구조는 학습과 같이 많이 사용하게 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요!패키지구조에 관련하여 문의드립니다!강의에서는controllerservice ..패키지가 이렇게 나뉘어져있는데member - controller - serviceorder - controller - service...이런 패키지구조도 있어 질문드립니다!프로젝트, 기업마다 규칙이 다르겠지만보통 보편적으로 어떤 패키지구조를 사용하게 되나요??
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
비관적 락 VS 네임드 락
안녕하세요. 해당 강의를 통해 다양한 락의 특징과 장단점을 배울 수 있어 현재 프로젝트에 적용할 수 있었습니다.적용한 부분: 상품 재고 감소에 대한 동시성 제어적용했던 락: 네임드 락적용한 이유: 상품 테이블에 재고 컬럼이 포함되어 있기 때문에 비관적 락을 적용할 경우, 해당 row를 단순 조회하거나 다른 비즈니스 로직에서 락 대기 등으로 인해 영향을 미칠 수 있을 것이라 판단하여 네임드 락을 적용했습니다.궁금한 점: 적용 이후 테스트 과정에서 알게 된 점이, MySQL의 단순 select 쿼리는 FOR UPDATE로 인해 락이 걸린 row를 조회하더라도 락 대기나 차단이 발생하지 않는다는 사실이었습니다. 또한 네임드 락과 비관적 락 간의 부하 테스트 결과, 성능 차이가 거의 없다는 점에서, 정합성이 중요한 주문/결제 상황이라면 낙관적 락은 배제하고, 오히려 네임드 락보다는 비관적 락을 적용하는 것이 더 적절하지 않을까 하는 의문이 들었습니다.질문: 상품 테이블에 재고 컬럼이 포함되어 있다고 하더라도 단순 조회 성능에 영향을 주지 않는다는 점에서, 네임드 락보다 비관적 락을 적용하는 것이 더 타당한 선택일지 궁금합니다. 실무적인 기준에서 어떤 판단이 더 적절할지 조언 부탁드립니다.
-
미해결스프링 웹 MVC 완전정복
강의자료 오타
안녕하세요, 강의를 듣다가 강의 자료에 오타가 난 부분이 있어 글 올립니다.아래 [기존] 부분들을 [수정]으로 바꾸셔야 할 것 같습니다.감사합니다.-------------------------------------04. 서블릿 이해HttpServletRequest 기본[기존]https://github.com/onjsdnjs/servlet/tree/httpRequestServletApi[수정]https://github.com/onjsdnjs/servlet/tree/httpServletRequestApiHttpServletRequest - 요청 처리[기존]https://github.com/onjsdnjs/servlet/tree/httpRequestServletProsess[수정]https://github.com/onjsdnjs/servlet/tree/httpServletRequestProsessHttpServletResponse[기존]https://github.com/onjsdnjs/servlet/tree/httpResponseServletApi[수정]https://github.com/onjsdnjs/servlet/tree/httpServletResponseApiHttpServletResponse – 응답 처리[기존]https://github.com/onjsdnjs/servlet/tree/httpResponseServletProcess[수정]https://github.com/onjsdnjs/servlet/tree/httpServletResponseProcess
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderItems[0] 은 아직 단일주문만 가능하기에 인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의를 듣는 도중 궁금한게 있어 질문드립니다. <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td>부분에 [0] 인건 아직 단일 주문만 가능하기에 [0] 으로 하신건가요?개인적으로 변경하여 한 번에 여러 개의 주문이 가능하게 될 경우에는 [0] 하드코딩이 아닌 타임리프 반복문의 인덱스를 넣으면 되는건가요??
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
문의 드려요
강사님 강의 잘 들었습니다jsp js 로 개발되어 있는 솔루션을 넥사크로로 전환 하여 사용 하려고 계획중입니다 crud 기능 말고 부가적으로 페이징 처리 등 추가 기본 기능에 대하여 소스나 설명을 좀더 받고 싶은데 혹시 가이드좀 주시면 안될까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
다른 예외 처리 방식
강사님께서는 데이터를 먼저 읽고 없으면 예외를 발생시켰는데, 그렇게 하지 않고 일단 업데이트(혹은 삭제)를 시키고 나서 변경된 row의 개수가 0이면 예외를 발생시키는 방법으로 예외 처리를 해도 괜찮나요? 코드는 아래와 같습니다.if(jdbcTemplate.update(sql, request.getName(), request.getId()) == 0) { throw new IllegalArgumentException(); }}
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
문의 드립니다
INSERT 하는 과정에서 오류가 납니다신규 등록인지 체크하고 다시 한번 insertOrdList INSERT 하기전 custCode = mapper.checkCustDup(ds_regOrd); ds_regOrd.put("CUST_CD", custCode); 이부분에서 에러가 납니다
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
INDEX의 첫번째 칼럼은 정렬이 상관이 없는 것이 맞는지 궁금합니다
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 3-9강 여기까지 이해하신 내용은 무엇인가요? B+Tree 작동 원리, INDEX 생성 2. 어려움을 겪는 부분select o1_0.id, o1_0.created_at, o1_0.member_id, o1_0.order_date, o1_0.order_number, o1_0.status, o1_0.total_amount, o1_0.updated_at from ch3_orders o1_0 where o1_0.order_date>='2023-01-01T00:00' and o1_0.status= 'COMPLETED' and o1_0.total_amount>=500 order by o1_0.order_date desc; 위와 같은 쿼리를 실행할 때, INDEX의 첫번째 필드를 date로 하였을 때, date의 정렬 방식에 따라서 속도가 달라지는 이유가 궁금합니다. (즉, 아래처럼 2가지 방식의 INDEX)CREATE INDEX ids_order_date_status_amount ON ch3_orders(order_date desc, status, total_amount);CREATE INDEX ids_order_date_status_amount ON ch3_orders(order_date, status, total_amount); 날짜 기준으로 최신 데이터를 100개 가져오는 쿼리를 실행시켰을 때, B+Tree의 leaf 노드에서는 양방향으로 이동할 수 있기 때문에 date가 ASC 정렬된 상태에서 역방향으로 읽어 최신 데이터를 읽으나, DESC 정렬된 상태에서 순방향으로 읽어 가져오나 읽는 노드의 수는 동일하다고 생각이 듭니다. 실제로 date를 각각의 정렬조건으로 INDEX를 만들어서 실제로 실행을 시켰을 때에도 거의 차이가 존재하지 않았습니다. (데이터가 많지 않아서 그런지는 모르겠습니다...) 하지만 제가 시도 한 내용이 맞는지 잘 모르겠습니다.3. 시도해보신 내용 ASC, DESC 정렬을 시킨 INDEX를 사용하여 analyze 한 결과입니다.Limit: 100 row(s) (cost=50413 rows=100) (actual time=0.874..0.899 rows=100 loops=1) -> Index range scan on o1_0 using ids_order_date_status_amount over ('2023-01-01 00:00:00.000000' <= order_date AND 'COMPLETED' <= status AND 500 <= total_amount)...Limit: 100 row(s) (cost=50413 rows=100) (actual time=0.43..0.446 rows=100 loops=1) -> Index range scan on o1_0 using ids_order_date_status_amount over (order_date <= '2023-01-01 00:00:00.000000' AND status <= 'COMPLETED'), with index condition: (...1번은 ASC로 정렬한 INDEX입니다. 2번은 DESC로 정렬한 INDEX입니다. 여기에서 desc로 정렬한 acutal time이 거의 2배 빨라진 것을 확인 할 수 있습니다. analyze가 정확한 값을 알려주지 않을 수도 있다는 사실을 알고 있지만, 제가 판단한 내용이 맞는지 의심이 듭니다. 딩코딩코님도 desc로 정렬을 하신거 보면 이유가 있을 것이라고도 생각합니다. Q1. 위 상황에서 INDEX의 첫번째 칼럼은 정렬 조건이 의미가 없는 게 맞나요?Q2. 만약 의미가 있다면 어떤 부분에서 의미가 있는지 궁금합니다.
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
StringModel에 Key 저장 이유
안녕하세요. 좋은 강의 감사합니다. 강의 도중 StringModel을 구현하실 때 Key를 String type 필드로 선언하시는데, key-value 구조에서 왜 value에도 key를 다시 저장하는지 의도가 궁금하여 문의 드립니다!
-
미해결3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]
이전버전 강의 쿠폰 받을 수 있나요?
이전버전 강의 무료쿠폰 받을 수 있나요?트랜잭션 처리할 때 서버에서 AOP를 활용해서 해보고 싶은데 강의에서는 데이터베이스에서 처리하는 방법만 알려주시더라구요
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
스케줄러
내가 시간이 없어 한 바퀴쭉 훑고 있는데 스케줄러를 활용한 배치 내용은 원래 없는 거냐?내가 못 찾는 거냐?아님 추가 예정이냐 답변 부탁한다.
-
미해결Practical Testing: 실용적인 테스트 가이드
계층 관련 질문이 있습니다.
위 강의에서는 Response 부분을 service 레이어에 response 패키지 안에 관리를 하고 있습니다.개인적인 생각으로는 요청을 받는 부분은 최상단 Presentation Layer 이고 궁극적으로 어떠한 결과를 return 해주는 것 또한 Presentation Layer 이라고 생각합니다. 그렇기에 requestDto 는 controller 쪽에 있는게 맞고 responseDto 또한 controller 쪽에 있어야 하는게 맞지 않을까 하는 생각이 듭니다!혹시 위 부분 어떻게 생각하시는지 궁금합니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
우빈님 안녕하세요! '코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다 ㅎㅎ저도 그동안 실무에서 자바를 쓰면서 테스트에서 given 절의 test fixture는 빌더로 만들어서 사용하고, 프로덕션에서는 팩토리 메서드로 객체를 생성해왔습니다. (물론 이 강의를 보고나서부터입니다 ㅎㅎ) 그런데 코틀린을 쓰다보니까 롬복을 거의 쓸 일이 없는 것 같더라고요.private constructor & 팩토리 메서드를 코틀린에서 쓰다 보니까 팩토리 메서드로만 객체를 생성해야해서 테스트에서 '맥락을 이해하는데 허들이 하나 더' 생기는 꼴이 되고 있어 조금 고민입니다.. 그렇다고 테스트 전용 팩토리 메서드 같은 것을 만들자니 프로덕션에 테스트 관련된 소스가 바로 생기는 것은 영 석연치 않더라고요.그래서 지금은 일단 생성자를 public으로 열어두고, 팩토리 메서드가 있는 도메인 객체를 만들 때는 무조건 팩토리 메서드만 쓴다. 그리고 테스트에서는 테스트 용이성을 위해 생성자로 객체를 생성하는 것을 허용하는 것으로 해보려고 합니다. 혹시 위 같은 상황에서 우빈님은 어떤 기준으로 쓰고 계신지 궁금합니다..!바쁘실텐데도 시간 내어 확인해주셔서 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메서드 위치
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요~! 궁금한 부분이 있습니다양방향일 경우에는 연관관계 편의메서드를 작성하는게 좋다고 말씀주셨는데 그렇다면 연관관계 메서드를 주인엔티티 선언하는 이유가 있을까요?아니면 상황에 따라 바뀌는걸까요? 기준이 있는지 궁금합니다~!
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
ImprovedOrder의 구조에 대한 질문입니다.
우선 orderResponse에서는 totalItems만 사용해서 수량만 요구하는 DTOOrderDetailResponse에서는 List<OrderItemResponse> items; 물품 정보를 요구하는 DTO 용으로 나뉘어 있고 Improved 역시 마찬가지였습니다.그런데 toOrderDetailResponse에서orderItems가 매핑이 안되어 있고, toOrderResponse와 코드가 동일한 상태였습니다. 제 생각에는 totalItems에 집중하신 나머지 빠뜨리신 거라고 생각되어 글을 남기게 되었고, 현재 ImprovedOrder에 orderItem이 매핑되어 있지 않은 상태 즉 반정규화 상태에서 어떻게 OrderItem을 매핑하는게 좋을지 생각해봤습니다.1. orderNumber로 findByOrderNumber단순히 ImprovedOrder에 저장된 orderNumber로 따로 orderItem들을 찾고 매핑해주는 것입니다. 현재 반정규화 의도가 totalCount만을 요구하는 도메인이 중요하기 때문에 ImprovedOrderDetailResponse를 반환할 때만 따로 매핑하는 것이죠. 다만 이는 ImprovedOrder와 OrderItem이 분명한 관계가 있음에도 매핑이 되어 있지 않는 것이라 좋은 방법인지는 의문입니다.2. ImprovedOrder에 orderItem 필드 추가totalItems와 orderItems를 모두 가지게 하고 totalItems만 필요한 상황이라면 굳이 orderItems를 get하지 않으면 Lazy 상태이기 때문에 fetch가 발생하지 않아 유연하게 사용할 수 있지 않을까 생각했습니다.포트폴리오를 위해 분석하던 과정에서 의문이 생겨 질문드렸습니다. 만약 제가 잘못 생각하고 있다면 말씀해주세요.
-
미해결스프링 부트 개념과 활용
자동설정 만들기 1부의 Holoman 관련 문의 드립니다.
HolomanRunner 클래스를 만들때 제가 사용하는 인텔리J 커뮤니티 버전에서는 아래 import 를 하지 않으면 오류가 발생해서 import를 했는데요강사님은 import 없이 사용하셨는데 저는 왜 import를 해야만 되는걸까요? import org.example.Holoman;