안녕하십니까 영한님 ! 제가 잘 이해하고 있는지 , 아닌지에 대해 여쭙고자 질문을 남깁니다. @Controller를 통해 스프링 빈으로 해당 클레스가 등록이 되고 , @RequestMapping에 담긴 논리URL 통해 클라이언트가 전송한 URL과 매칭 여부를 판단해 ( getHandler() ) @Cotroller로 등록된 객체를 반환하여, 그에 맞는 어댑터를 통해 해당되는 Controller을 실행하는게 맞을까요?
안녕하세요 영한 선생님 ! 저는 강의를 듣고있는 선생님의 팬입니다. 다름이 아니라 선생님의 강의력에 이해가 쏙쏙 되고 뿌듯해하며 하루하루 코딩하며 살아가고 있습니다. 하지만 요즘 문득 이런 생각이 자주 듭니다. '내가 저 코드를 혼자 생각하면서 짤 수 있을까?' 라는 생각이요. 어떠한 원리로 동작하는지 머릿속으로는 알겠고 연결이 되는데 혼자서 코딩을 하려면 어디부터 작성해야할지 막막합니다. 이러한 부분은 어떻게 해야 기를 수 있을까요?
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 좋은 강의 감사드립니다! STS 3 을 배운 후 스프링 부트를 배우려고 강의를 듣고있는 학생입니다. STS3에선 DTO 클래스를 생성해 거기에 필요한 데이터 값들을 담는 식으로 진행을 했었는데 이 수업에선 MemberForm 을 사용하는걸 보고 비슷한 역할인지 궁금해서 질문 남깁니다 !
국비학원에서도 게터세터 이런형태로 하라고 배우긴 했는데요~ 왜 메서드를 써서 해야하는지에 대해서는 잘 이해가 안되더라구요. 예를들어서, "pivate" String name 을 "public" String name 으로 정의하고 Hello hello = new Hello(); hello.name = "hello"; 이렇게 name값을 정하는 것과 setName() 메서드를 이용해서 정하는 것의 차이가 무엇인가요?
안녕하세요 강사님. 수업 정말 잘 듣고있습니다. 지난 CNN강의부터 쭉 공부를 해보았는데도 직접 구현해보려고 하니까 계속 두루뭉실 이해가 되지 않는 부분이 있어서 질문드립니다. 마지막 출력단이 FC의 경우 loss라는 것이 결국 1차원의 긴 벡터의 요소의 각각의 오차를 구해서 쭉 합친것 혹은 평균낸 것 이라고 이해했는데, yolo v3나, 그 외의 마지막을 convolution연산으로 바꾼 모델들은 마지막 출력이 2차원 평면(x배치수)인데, loss를 어떻게 계산하는지 궁금합니다. [질문] 2차원 각 셀 부분별로 나온 다양한 종류의 loss들을 multi loss로 통합하여, 각 셀별 오차를 구하고 = 오차가 (16x16x배치수)처럼 나오고, FC오차와 같이 결국 모든 셀(16x16)의 개별 요소들의 합을 구하는 것이 맞는지요...? 바쁘실텐데 복잡한 질문 죄송합니다. 감사합니다.
안녕하세요 강사님. 수업 항상 잘 듣고있습니다. 바쁘시겠지만.. detection 학습관련하여 계속 헷갈리는 부분 있어서.. 질문드립니다. 이번 강의 중간 부분에 faster RCNN의 문제점을 이야기 해주시면서 classification과 Bonding box rergression을 RPN 에서도 하고 뒷단의 detect부분에서도 똑같이 한다고 하셨습니다. 제가 이해하는 바로는 결국 마지막 부분에서 multi loss를 통해서 한번 역전파 시켜주는 것으로 알았는데, RPN부분에서 따로 weight 갱신이 이루어지는지요..? (inception의 auxiliary와 같은방식으로..) 아니면 FCN방식으로 9x(HW) 2x(HW)를 제안한 것 자체가 중복되는 구조라는 것인지요? >> 요약 : loss를 두번 흘려줘서 학습이 2번 이루어진다고 생각하는 것인지, 아니면 구조만 두번 중복되고 마지막 loss로 다같이 학습이 되는 것인지 궁금합니다.
1. 타입 미스매치 에러가 있을 때, 스프링 내부에서도 필드에러를 생성해서 넣어주고, 우리가 만든 컨트롤러 메서드에서도 바인딩에러를 추가해주고 있습니다. BindingError 클래스 계층도로 올라가보니까 에러를 추가하면 리스트에 추가가 되는데 그러면 똑같은 객체에 똑같은 필드에러가 두개 이상 존재하게 됩니다. 위 사진처럼 item의 price 필드에 스프링이 넣은 에러와 우리가 넣은 에러 두개가 존재합니다. 이렇게 될 경우 뭘로 판단하여 스프링이 뿌려주는 것입니까? 우선순위에 따라 정해지는 것인지 아니면 두개 다 중복해서처리하는 것인지 궁금합니다. 2. 같은 줄기의 질문입니다. 필드에러를 생성하는 메서드를 보면 rejectedValue 필드에 Getter함수를 사용하고 있습니다. bindingResult.addError( new FieldError( "item" , "itemName" , item.getItemName() , false, null, null, " 상품 이름은 필수입니다 ." )) ; 이 때 getter를 호출해서 rejectedvalue에 넣어주면 null값이 들어갈텐데 어떻게 제대로된 사용자 입력값을 그대로 돌려주는 건가요?
제가 html의 구조를 잘 몰라서 그런건지 아니면 강의를 집중해서 듣지 않아서 그런건지는 모르겠지만 html 및 타임리프의 명령어들이 자바와 스프링에 어떻게 주고 받고 이런 것들이 잘 이해가 가지 않습니다 ㅜㅜ html에는 같은 의미의 명령어들만 복사 붙여넣기를 하는데 각 폼마다 수정이 되고 출력이 되고 하는 것이 신기하고요.. MVC2편을 듣고 스프링 완전정복을 다시 복습 할 생각에 있지만 계속 강의를 들어도 되는걸까요 ㅠㅠ
스프링쪽에서 체크박스가 선택이 안됐을 때 NULL이 오는 것이 불편한 것을 알기에 히든필드라는 기능을 제공하는거라면 그냥 체크박스가 선택이 안돼있을 때 NULL이 아니라 False를 리턴하게 만들면 되지 않나요 ? 어째서 선택을 하지 않았을 때 False가 아닌 null을 리턴하는건가요 ?
안녕하세요 강의 정말로 잘 듣고 있습니다! 정말 별거 아닌 질문일 수 있는데 궁금해서 질문 남겨봅니다. 서블릿에서 Request 객체와 Response 객체는 HTTP 요청이 들어올때마다 새로 생성한다고 했는데, 왜 요청을 줄때마다 같은 주소값이 찍히는건가요? 한번 요청 - 응답 하고나면 끝이고 다시 페이지 새로고침을 하면 새로운 HTTP 요청이 가서 새로운 response, request 객체가 생성되야 하는게 아닌지 궁금합니다!! 그냥 WAS에 구현체가 싱글톤으로 있어서 요청이 올때마다 덮어써서 보내주는 방식?? 그런건가요? 스프링, HTTP 지식이 부족해서 나온 너무 이상한 질문이었을지도 모르겠네요 ㅠㅠㅠ..
restAPI에서 image 와 함께 데이터를 같이 보낼때, 보내려는 데이터가 많이 복잡할 경우에는 json으로 보내는 것이 좋을 것 같아 json으로 보내는 방법을 시도해봤는데요 @RequestPart DTO dto 이런식으로 dto를 직접 넣었을때는 기본적으로 requestData가 formdata 형식이라 그런지 리졸버가 아예 처리를 하지 못하고, request를 받지 않는 것 같습니다. 그래서 아래와 같이 json의 경우 string으로 받아 테스트 해보았는데요 @PostMapping // @PostMapping(consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}) public ResponseEntity<ResponseOKDto<PostResponseDto>> post ( @RequestPart ( "data" ) String data , @RequestPart ( "file" ) MultipartFile file , @ApiIgnore HttpSession session) throws IOException { Account account = getSessionCheckedAccount(session) ; if (!file.isEmpty()){ String path = session.getServletContext().getRealPath( "/" ) + "images/" + file.getOriginalFilename() ; file.transferTo( new File(path)) ; } String o = objectMapper .readValue(data , String. class ) ; // objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); PostRequestDto postRequestDto = objectMapper .readValue(data , PostRequestDto. class ) ; Long postId = postService .post(postRequestDto.getTitle() , postRequestDto.getDesc() , postRequestDto.getPrice() , postRequestDto.getCategoryTag() , account) ; return new ResponseEntity<>( new ResponseOKDto<>( new PostResponseDto(postId)) , HttpStatus. OK ) ; } 이와 같이 포스트맨으로 data를 보냈을 때, 스트링으로 받은 data를 오브젝트 매퍼를 이용해서 바로 DTO로 변환해보니 jackson에서 변환할수 없다는 익셉션이 떠 (Unexpected character ('\' (code 92)): was expecting double-quote to start field name) 디버깅을 해보니 object mapper를 이용해 String으로 한번 변환하고 다시 dto로 변환해야만 잘 동작 했습니다. 아래와 같이 데이터를 ""로 감싸주지 않은 경우에는 해당 에러가 출력되었고요 no String-argument constructor/factory method to deserialize from String value ('{"title":"test","desc":"test","price":10,"categoryTag":"Digital"}') at [Source: (String)""{\"title\":\"test\",\"desc\":\"test\",\"price\":10,\"categoryTag\":\"Digital\"}""; line: 1, column: 1] 제가 했던 접근 방식은 문제점이 일단 2개가 보이는데 - 스트링으로 한번 더 변환을 해줘야해 복잡하다 - 들어온 data 값에 대해 @Validated 를 적용하지 못한다. Q1. 다른 방식으로 data를 json형식으로 받아오고 dto에 대한 validtaion을 적용할 수 있는 방법이 있을까요? Q2. 필드가 아주 많을 경우에 form으로 하나씩 받는건 너무 코드가 지저분 해지는 것 같은데, 벨리데이션과 함께 적용하려면 이렇게 해야하는 걸까요? Q3. objectMapper로 두번 변환 대신에 doubleQuetoALLOW 옵션을 주었는데도 에러가 떴는데, 더블쿼터 에러를 해결할 수 있는 방법이 있을까요? 답변주시면 감사드리겠습니다. 항상 좋은 강의해주셔서 감사합니다
강사님은 폴더 구조가 webContent 폴더인데 저는 src > mian > webapp 구조입니다. 그래서 올려주신 수업자료의 소스 복붙을 할때에 Java > WebContent 에 있는 META-INF , resources, WEB-INF를 저는 webapp 안에 넣었더니 프로젝트 오른쪽 클릭 후 메이븐 업데이트 할때에 cannot nest ~ to enable the nesting exclude ~ 라며 오류가 생깁니다. 어떻게 해야할까요ㅜㅜ
MVC1편에서도 타임리프가 나왔지만 실무에서 많이 쓸 일이 없다고 하여 그냥 따라치기만 하고 넘어왔는데요.. MVC2편에서는 본격적으로 타임리프를 길게 강의를 해주셔서 많이 중요한가? 라는 생각이 듭니다. 문법 자체는 어렵지 않은데 스프링MVC패턴뿐만 아니라 스프링 자체도 이해해야할게 많아서 타임리프까지 공부하다 개념이 많이 혼잡해지지 않을까 걱정이 되는데 타임리프를 실무에서 많이 사용하는 편인가요? 많이 사용하다보면 손이 기억을 할 것 같긴한데 타임리프 부분을 어떻게 공부해야할지 고민이 됩니다 ㅜㅜ
선생님 안녕하세요. 선생님께 도움 정말 많이 받고있습니다. 최근 홈페이지를 구성해 보며 로그인/로그아웃, 권한 관련하여 궁금한 점이 생겼습니다. 로그인을 한 후 어떠한 권한을 가지고 있는 사용자던 간에 로그아웃이 출력되게 하고싶습니다. 검색해보니 spring security 관련 authenticationManager, jwt 등 다양한 방식이 있는걸로 파악했는데요. 혹시 실무에서 어떤 방식을 사용하여 로그인, 로그아웃, 권한 등의 처리를 하시는지가 궁금합니다. 공부 방향을 잡아보고 싶어서 질문드립니다. 감사합니다 !