묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
.findAny(); 입력후 에러
@Overridepublic Optional<Member> findByName(String name) { store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); // 이거 오류왜나지} 입력후 missing return statement 에러가 납니다. findAny() 함수가 애초에 null일때 처리하는 함수라고 들었는데 return 타입이 missing이라니 뭐가 문제인지 모르겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Regions 필드의 값이 추가되는 동작방식이 궁금합니다!
강의를 통해 열심히 배우고 있는 학생입니다 이번에 여쭤보고싶은게 있어 질문했습니다. 다중 체크박스에서 서울과 부산을 선택해서 상품 수정시 폼 데이터 전송 방식까지 확인 했습니다. 또한Item 클래스에서 regions 필드는 List 타입으로 선언되어 있으며 @Data 애노테이션으로 롬복이 getter sertter 등을 자동 생성해준다고 학습했습니다. 여기서 궁금증이 생겼습니다. 컨트롤러에서 @ModelAttribute를 사용할 시 Item 타입의 객체를 생성하고 객체의 프로퍼티까지 셋팅해주며 그 방식이 폼 데이터로 넘어온 name 값으로 setter를 호출한다고 알고있는데 list 타입으로 선언한 regions의 setter호출시 자동으로 값을 넣어주는 기능을 하는건가요?? Item 객체의 regions 필드에 Seoul, Busan과 같은 값이 어떻게 추가 되었는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
객체로 Http 요청을 받을 때
객체안의 변수와 json타입으로 들어올때 변수 이름이 같아야만 사용할 수 있는건가요???
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Controller Exception Advice domain별 패키지에서 구성
Exception의 경우 domain마다 다양하게 구성되는 것 같은데 한곳에서 모든 도메인의 익셉션을 핸들링하는것 보다 각 도메인 별로 Exception 패키지를 둬 해당 패키지에 도메인별 익셉션 정의 + 도메인별 advice 공통 익셉션의 경우 public? 패키지에서 관리 이런식으로 구성을 해 관리하는게 더 좋아보이는데, 영한님의 의견이 궁금합니다. + 영한님은 패키지 관리를 어떤식으로 하시는지 + 이런 구조를 효과적으로 잡는데 있어 참고할만한 서적이 있는지 답변주시면 감사드리겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
defaultValue 질문입니다
@RequestParam(required = false, defaulValue = "-1") int age 일 때 age는 int 자료형인데 defaultValue = "-1" 인데 이럴 경우 숫자 -1인지, 문자 -1 인지 구별할 방법이 없는데 그 변수의 자료형에 맞게 "@@@" 안의 값이 설정되는건가요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청, 응답 시 annotaion, httpEntity 사용 관련
요청, 응답시 관련해서 몇가지 질문 사항이 있습니다. 1. 응답코드를 주고자 할때 , 어노테이션 // 리스폰스 엔티티 둘다 사용가능한데 어떤 경우에 어떤걸 사용하는게 더 좋은지 2. 마찬가지로 헤더 값이 필요한경우 어노테이션 // 리퀘스트 엔티티 둘다 사용가능한데 어떤 경우에 어떤걸 사용하는게 더 좋은지 3. modelAttribute 사용시 dto로 parameter들을 받을때 dto니까 setter를 그냥 사용하는게 좋은지아니면 entity처럼 setter를 사용하지 않고 필드 억세스 하도록 만들어 주는게 좋은지, 그렇다면 왜 그런지 3가지가 궁급합니다. 강의들 다시 복습하면서 요즘 이것저것 여쭤보는데 항상 친절히 답변해주셔서 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HTTP RESTAPI 경로에 식별자 관련
HTTP API 경로에 entity의 식별자를 넣어 사용하는게 추세라고 하셨는데 -------- @GetMapping("users/{userId}/posts/{postId}") 라고 할때, mvc2 강의에서 user의 정보는 탈취 당하고 악용될 수 잇으므로 session 을 통해 user의 info를 받아와 사용한다고 말씀하셨습니다 ------ 그러면 user에 대한 경로는 다 없애고 session을 통해 정보를 받아와서 사용하고 그 외 다른것은 저렇게 식별자를 통해서 사용해서 api 경로를 매핑하면 될까요? REST API case에서 자신이 등록한 게시글만 조회하는 api의 경우 ----- @GetMapping("/posts/{postId}") public post(HttpSession session, @PathVariable Long postId){ Long userId = (Long) session.getAttribute(LOGIN_ACCOUNT); } 이런식으로 사용하면 될까요? ------- 추가적으로 위처럼 적용한다고 하면, 자신이 등록한 post를 api 조회하는 경로와, 전체 post에서 어떤 post를 조회하는 api의 경로가 같게 되는데여기서 또 문제가 있는 것 같습니다. 위 처럼 사용시 자신이 등록한 post들 전체 조회 api => "/posts" 전체 post 조회 api 또한 => "/posts" 어떤 방식으로 접근하는게 좋은지 답변주시면 감사드리겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
run실행시 테스트코드에서 컨트롤러로 돌리는 방법
실행시 이전강의에서 실행한 테스트코드만 실행되는데 다시 8080포트로 실행하는 방법을 모르겠습니다...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
공부법 질문드립니다
안녕하세요 공부방법 질문드립니다! 저는 비전공자이고 자바만 공부했는데요 자바 배웠으면 프레임워크인 스프링을 공부해야 된다고 해서 주변 사람들에게 추천을 받아 이 강의를 듣게 되었습니다. 김영한 강사님의 커리큘럼 그대로 따라가려고 했는데요 입문 강의임에도 불구하고 생각했던것 보다 어렵고 마음과 다르게 진도 나가기가 힘드네요... 강의를 들으면서 완전 아예 이해가 전혀 안된다! 이건 아닌데요 그래도 많이 어렵습니다. 어려워서 스프링공부법 관련해서 인터넷에 계속 검색하다 보니 스프링 공부 전 jsp를 먼저 공부하는게 좋다는 말들이 있는데요 저 혼자 jsp를 따로 공부한 후에 지금 이 강의 들으면서 김영한강사님의 커리큘럼을 따라가는게 맞는건가요? jsp를 먼저 공부하고 와야 할까요? 공부법 조언해주시면 감사하겠습니다 !
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Dispatcher Servlet은 어디 있나요 ?
강의를 듣던 중 질문드립니다. SpringMvc패턴에서 v1에서 각각의 클래스에 @Controller 애노테이션으로 등록만 해주었는데 FrontController 역할을 하는 Dispatcher Servlet의 클래스? 등은 따로 존재하지 않는건가요? 이번 소스가 정확히 어떤식으로 돌아가는지 잘 이해가 가지 않습니다 ㅠㅠ Http의 parameter를 입력 받고 스프링 빈에 등록되어 있는 핸들러 @RequestMapping 으로 찾은 다음 따로 무언가 작성해주지 않더라도 스프링 내부에서 자동으로 어댑터를 찾아서 핸들러를 적용시키고 뷰 리졸버까지 자동으로 되는건가요? ㅠㅠ 구조가 잘 이해가 가지 않습니다 김영한 선생님께서 만든건 Controller 클래스와 .jsp의 뷰밖에 없는데 스프링이 어떻게 알아서 다 하는지... 헷갈립니다 그리고 제가 컨트롤러의 리턴값을 무엇을 반환할지도 모르는데 만약 스프링안에 등록된 어댑터로 찾을 수 없으면 에러가 발생하나요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴과 용어에대해 질문이있습니다
안녕하세요, 선생님 로드맵을 쭉 따라가며 스프링 열공중인 취준생입니다. 강의를 듣기전 얕게나마 MVC에대해 공부를 했었는데 강의를 들으면서 알고있던 개념과 다른점이 생겨서 질문드립니다. MVC패턴이 유지보수를 편하게하고 협업개발을 원할히 하기위해 웹을 세부분으로 나눈거라는점은 알겠는데 정작 웹개발 프로젝트를 하게되면 DAO(Repository)와 DTO(Domain) 그리고 Service라는 구체적인 객체들을 보게되더군요. 선생님 강의에서는 서비스와 dao를 별도로 구분하고 모델을 dto역할로 제한해서 설명하셨는데 어떤 책에서는 dao dto 서비스 셋을 모두 뭉텅그려 모델이라고 말하는 곳도 있더라구요 용어를 정확히 어떻게 정리를 해야할지 도움주셨으면 합니다 ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
properties 말고 yml에는 이렇게 하는게 맞을까요?
안녕하세요 선생님! 강의를 듣고 제 프로젝트에 메세지를 적용시켜보고 있습니다. 제 강의는 설정파일이 .yml이라서 yml형식으로 설정을 따라해보았습니다. application.yml spring: ...(생략) messages: basename: messages ...(생략) messages.yml label: search: siteName: "사이트 이름111" lectureName: "강의 이름" teacherName: "강의자 이름" starRating: "별 점"...(생략) 이렇게 yml파일을 구성한뒤 html에서 똑같이 th:text=#{label.search.siteName} 를 해보았는데 적용이안됩니다. 그래서 구글링을 좀 해보니 yml messages을 properties처럼 사용하는 라이브러리를 찾아서 적용해보았습니다. build.gradle implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1' MessageConfiguration package dongho.classflix.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.MessageSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ResourceBundleMessageSource;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MessageConfiguration implements WebMvcConfigurer { @Bean public MessageSource messageSource( @Value("${spring.messages.basename}") String basename, @Value("${spring.messages.encoding}") String encoding ){ YamlMessageSource ms = new YamlMessageSource(); ms.setBasename(basename); ms.setDefaultEncoding(encoding); ms.setAlwaysUseMessageFormat(true); ms.setUseCodeAsDefaultMessage(true); ms.setFallbackToSystemLocale(true); return ms; } private static class YamlMessageSource extends ResourceBundleMessageSource{ }} 그래도 적용이 안되었습니다. messages는 보통 properties로 사용을 한다고 하기에, 일단 지금은 application.yml와 messages.properties를 사용하여 해결한 상태입니다. 질문정리 1. messages.yml을 사용하려면 어떻게 해야하나요? 2. 그냥 application.yml에 messages.properties를 사용해도 무방할까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 로그인 인증 관련 질문
Rest api에서 세션 인증 방식을 사용한다고 할때, 이와 관련해서 몇몇 질문사항이 있습니다. 1. 세션의 저장 - 별도의 세션 레포지토리를 구성하고, 클라이언트의 요청이 올때 세션 레포지토리로부터 유저의 정보 조회해야 하는지 - 톰켓이 세션 저장소를 보유? 해서 request.getSession & session.getAttribute 사용 2. 로그인 당시 응답 - 클라이언트한테 response에 세션 아이디를 같이 넣어서 보내줘야 하는지 - 그럴 필요없이 톰켓이 세션 내부 저장소를 가져, 항상 세션 아이디를 보내주는지 postman으로 테스트 해볼때는 sessionId를 쿠키(postman이 가지고있는?)에 저장해서 보관하고이 값을 갱신해주기 전까지는 같은 값을 보유하고 있는데 세션을 별도로 저장하고 응답으로 주어야 하는지, 그럴 필요가 없는지 헷갈려서 질문드립니다. 3. 예를 들어 유저가 상품을 구매하는 request를 rest api를 통해 날리면, 백엔드와 프론트엔드가 통신할때 userId 혹은 username으로 회원의 정보를 보내는게 아니라,sessionId(인증에 필요한 정보, 토큰이던지)와 상품 정보를 보내주고,백엔드에서는 세션 id를 통해 세션 저장소에 저장되어있는 유저의 정보를 얻고, 이를 기반으로 상품 구매 처리를 해야 할 것 같은데,이 경우 강의에서 말씀하신대로 여러 유저의 요청이 많은 경우, 서버에 부하가 오는 것 같아 별로인 것 같기도합니다. 그래서 어떻게 처리하는게 맞는지 더 헷갈리는 것 같습니다.이렇게 처리하는 방식으로 하는게 맞는 지 ( 세션이나 jwt 토큰을 사용할 경우) 궁금 합니다. - 이게 맞다면, 모든 컨트롤러에서 매번 세션 레포지토리를 조회해야하는데 번거로운걸 보니 맞는 방법이 아닌것 같고요.. - Config에 bean으로 세션 체크하는 로직을 등록해서 사용하는 방법을 채택할수도 있는것 같고, 리턴값으로 적어도 회원의 아이디는 줘야 하니 4. 또한 jwt 토큰 방식으도 있어스프링 시큐리티를 사용하지 않고 구현을 해보고 싶은데 이 경우에는 jwt 토큰 레포지토리를 구성해서 해보는게 맞는지 궁금합니다.정확한 답이 아니라, 어떤걸 찾아보면되는지 힌트 방식이여도 좋으니 알려주시면 감사드리겠습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴에서 Model 의 정의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(http://bit.ly/3fX6ygx)을 먼저 확인해주세요. 3. 질문 잘하기 메뉴얼(http://bit.ly/2UfeqCG)을 먼저 읽어주세요. 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 항상 강의 너무 잘 듣고 있습니다. 강의를 듣고 Servlet -JSP를 이용한 MVC 패턴에서 Controller = Servlet View = JSP Model = Request(Attribute) 라고 이해했는데요, 이 때 Controller 와 View 가 서로 Model(Attribute) 을 통해 데이터를 주고받는다고 이해했습니다. 그리고 이 Controller 를 좀 더 객체지향적으로 만들기 위해 Service 와 Repository로 레이어를 나누어 역할을 분리한다고 이해했는데요. 그런데 최근 후배에게 MVC 개념을 설명해주다가 이상한 걸 발견했습니다. 저희 회사 신입사원 교재에 MVC 패턴의 정의가 이렇게 나와있는 겁니다. - Model : 비즈니스 로직(클라이언트 요청에 대한 업무 처리) 및 데이터 담당 >> 비즈니스 로직 = business service(biz) + data access object(dao) 이걸 보면 Service 와 Repository는 Model 에 해당하는 개념처럼 보입니다. 또한 해당 교재에서는 이처럼 비즈니스 로직을 Controller(Servlet)와 분리하는 것이 곧 MVC 패턴이라고 설명하고 있는데요, 제가 이해하는 "Controller(Servlet)와 View(Jsp) 를 분리하고 Model(Attribute)로 데이터를 전달하는 것이 곧 MVC 패턴이다" 라는 개념과 사뭇 다른 것 같습니다. 제가 뭔가 잘못 이해하고 있는 걸까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2.bat 실행 관련 질문입니다
안녕하세요,, bin 에서 h2.bat를 실행하거나 cmd에서 h2.bat 후 엔터를 해도 서버모드로 접속이 안됩니다,, 어떻게 해야 할까요..?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4:07 오류나는 부분
안녕하세요 ! 4:07 쯤에 선생님은 오류나시는데 저는 오류가 안 나서 어디가 문제인지 잘 모르겠어서 질문드립니다 ㅜㅜ 죄송하지만 하나 더 여쭤볼게 있습니다! ctrl + shift + enter 이 코드 자동완성(; 붙이기)인 것으로 알고 있는데 어느 순간 단축키가 안 먹힙니다ㅜ 다른 단축키는 잘 되는데 제가 뭘 잘못 만진건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
System.out.println() vs 로그
안녕하세요. 둘의 차이를 정확히 알고 싶습니다. 선생님이 말씀하시길 현재 IDE 개발중에는 콘솔(System.out.println()) 에 남기지만 실제로는 로그로 남겨야 된다고 하셨습니다. 둘의 차이가 궁금하네요. 나중에 서버를 올려서(ex. linux) 로그 코드에 의해 출력되는 것들도 결국에는 서버의 콘솔에 그 로그들이 남는 것 아닌가요? 그리고 그 흘러가는 것들을 다 로그 파일로 남기거나, 그대로 두면 로컬 IDE 의 로컬처럼 그대로 흘러가는 것이고.. 그리고 System.out.println("hello") 코드를 서버에 올려서 본다면 hello 가 로그에 남나요? 콘솔과 로그의 레벨 차이? 영역 등의 구분이 궁금합니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요 영한님. 테스트에서 오류가 납니다.
DB는 Mysql로 사용하고있습니다. SpringConfig에서 JdbcTemplateRepository를 연결하고 테스트를하면 오류가 납니다. org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'encrypted_password' in 'field list' 오류 나는 지점을 확인해보면 JdbcTemplateRepository의 Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); 이 행을 가르킵니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ArgumentResolver 와 MsgConverter
안녕하세요. 명확히 이해가 안되서 질문올립니다. 1. ArgumentResolver는 Controller에 선언된 Parameter를 생성하는 역할, MsgConverter는 HTTP 메세지를 ArgumentResolver가 생성한 객체에 넣어주는 역할이라고 생각하면 될까요? 2. ResquestBody, ResponseBody가 아닌, ModelAttribute도 이와 같이 작동하는 게 맞을까요?? 3. Spring code를 보니 ReqParam관련 Resolver는 class이름이 Resolver로 끝나는데, ModelAttribute만 Proccessor로 끝나더라고요. ModelAttribute만 Proccessor인 특별한 이유가 있을까요? 4. ArgumentResolver(or ReturnValueHandler)가 HTTP메세지 컨버터가 필요없는 경우는 무엇인가용? 궁금합니당!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter and setter
안녕하세요 alt + insert 후 getter 검색하면 getter and setter 이 나오지 않습니다,,,