1.android 의 경우는 layout editor 를 지원하는데 플러터는 그러한 것이 없나요? xml 같은 언어로 UI 를 그리면서 오는 장점이 UI와 비즈니스로직의 분리라고 생각되는데요 그러면 Flutter 는 코드로 뷰를 그리는 한가지 방법만 존재한다면 복잡한 UI와 비즈니스 로직의 경우 어떻게 분리해서 처리하시나요? 제안하는 아키텍처가 있는지 궁금합니다. 기존에 안드로이드, 아이폰 네이티브 앱 개발에 있어서 MVC 구조가 UI 와 비즈니스 로직이 혼재되어 유지보수가 어렵다는 문제가 있었습니다... 그 전처를 플러터도 다시 밟는 것인지 궁금하네요
안녕하세요. value type과 reference type에 대해서 찾아보다가 https://en.m.wikipedia.org/wiki/Value_type_and_reference_type 링크를 발견했는데요. value 타입중에서 배열만 call by value로 동작하지 않고 call by address로 동작하는 것이라고 생각하면 될까요? 그렇다면 배열을 멤버로 지니고 있는 struct나 class의 경우는 call by value로 값 전달이 되는 건가요?
강의는 잘 듣고 있습니다. 디비 연동전 까지의 실습은 아무 문제없이 잘 진행되고 있습니다. 디비 연동 부분부터 실습이 안되는데 문제는 디비 연결인거 같습니다. 선생님께서 하라고 하는대로 하였는데 디비 연결이 계속 안되에요. ping 테스트를 해도 실패가 되는데 무엇이 문제인지 모르겠네요 도움 부탁드립니다.
스택오버플로우가 생길수 있는게 스택에 int count 변수가 계속 생성되기 때문인건가요? 그러니까 처음에 int count가 생기고 재귀함수호출로 인해 똑같은 이름이지만 다른 주소를 가지는 int count 가 또 스택에 생기고 이게 반복되서 오버플로우가 생긴다는 말씀인건가요? 보통은 함수가 종료되면 지역변수같은 경우 사라지게 될텐데 이런 재귀함수호출은 실제로 종료조건이 성립안되면 함수가 종료되지 않기에 그런건지가 궁금합니다.
커맨드 객체를 이용해서 MemberController.java에서 member.getMemId()....member.getMemPhone3()을 이용하는데 뷰단 즉 memberJoinOk.jsp에서도 똑같이 get 매서드를 이용해야 하는게 아닌가 싶어서 질문 드려요 커맨드 객체 클래스를 보면 필드는 private 걸려있는데 member.memId로 접근이 안될거 같은데 사용을 해서 질문합니다
안녕하세요. 기선님 강의를 잘 수강하고 있습니다. 현재 스프링 MVC 설정부분까지 강의를 들었습니다. 강의 내용에 대한 직접적인 질문은 아니지만 request body를 다루는 설정 같은 것과 관련이 있는 것 같아 이 시점에 제가 갖고 있는 문제에 대한 질문을 드리려 합니다. 문제 상황은 이렇습니다. client에서 request를 보낼 때 경우에 따라 request body를 gzip으로 압축해서 보낼 수 있다. gzip으로 압축한 경우에 http header의 content-encoding 값을 gzip으로 설정해 보낸다. https://github.com/spring-projects/spring-boot/issues/11827 이런 이슈의 내용을 보면 HTTP spec이 아니기 때문에 tomcat 에선 지원하지 않는 것 같습니다. 처음엔 많은 사람들이 비슷한 기능을 원할 것이라 생각해 스프링에 관련 기능이 있을줄 알았는데 없는 것 같습니다. (찾아보았는데 현재까지 찾지 못했습니다.) 질문은 1) spring mvc에 관련 기능이 있는데 제가 못 찾은 것인지 2) 관련 기능이 없다면 기선님께선 이러한 문제를 어떻게 해결하실지 궁금합니다. spring app의 어느 단계에서 어떤 방식으로 request body의 압축을 푸는 선택을 하실지 궁금합니다. 답변을 기다리겠습니다. 감사합니다.
서비스나 DAO 에서 빈 만들때 @Service/@Repository("name..") 이렇게 이름을 지정해 주고 사용할때 @Resource("name..") 이렇게 사용하는데 이 방법이 아래 보다 심플해서 괜찮다 싶었는데 타입safe하지 않아서 추천하지 않는건가요? @Autowired @Qualifier("name..") 보통의 경우는 @Autowired 이렇게만 사용하고는 있습니다.
강의 정말 잘 보고 있습니다 강사님. 해당 섹션까지 보고 난 후 궁금사항이 생겼습니다. 앞서 배운데로 props와 emit를 이용하여 컴포넌트간 데이터 교환방법을 익혔는데, Vuex의 state와 mutations로 리팩토링을 하는 것을 보면서 실무에서 props와 emit은 사용할 일이 없어보이는데, 두가지 데이터 전송방법이 어떤 경우에 각각 사용이 되고, 사용하는 것이 유리한지 궁금합니다. 질문을 제대로 한건지 모르겠네요.. ^^;
이 강의에 부속된 퀴즈 문제에 오류가 있습니다. 첫 번째 문제는, '틀린 것' 을 고르라고 되어 있는 문제인데, 실제로는 한 개의 보기를 제외하고 다른 모든 보기가 틀린 것입니다. 그래서, 맞는 한 개의 보기를 선택하니 정답이라고 판정이 나오네요. 수정이 필요ㅏㄹ 것 같습니다.
안녕하세요 기선님, 강의를 따라하다가 잘 되지 않는 부분이 있어서 질문 남깁니다. 강의 내용과 정말 똑같이 따라치고 있는데--github의 코드와도 대조해보았습니다--이상하게 mockMvc 를 통해 테스트를 하는 부분 전체에서 결과값이 403으로 떨어지네요. 구글링 해보니 @WebMvcTest 를 사용하는 경우 webapplicationcontext를 가져오도록 하라는 가이드만 나오고, @AutoConfigureMockMvc 를 사용하는 경우는 사례를 찾기가 좀 어렵습니다. 제가 어떤 부분을 좀 살펴보아야 할 지 도움을 주실 수 있을까요? 에러 메시지는 다음과 같습니다. MockHttpServletRequest: HTTP Method = POST Request URI = /api/events/ Parameters = {} Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json"] Body = {"id":100,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100,"offline":false,"free":true,"eventStatus":"PUBLISHED"} Session Attrs = {org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN=org.springframework.security.web.csrf.DefaultCsrfToken@553d828a} Handler: Type = null Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 403 Error message = Forbidden Headers = [X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = [] MockHttpServletRequest: HTTP Method = POST Request URI = /api/events/ Parameters = {} Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/hal+json"] Body = {"id":100,"name":"Spring","description":"REST API Development with Spring","beginEnrollmentDateTime":"2018-11-23T14:21:00","closeEnrollmentDateTime":"2018-11-24T14:21:00","beginEventDateTime":"2018-11-25T14:21:00","endEventDateTime":"2018-11-26T14:21:00","location":"강남역 D2 스타텁 팩토리","basePrice":100,"maxPrice":200,"limitOfEnrollment":100,"offline":false,"free":true,"eventStatus":"PUBLISHED"} Session Attrs = {org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN=org.springframework.security.web.csrf.DefaultCsrfToken@553d828a} Handler: Type = null Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 403 Error message = Forbidden Headers = [X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = [] java.lang.AssertionError: Status Expected :400 Actual :403 <Click to see difference> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:55) at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:82) at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:619) at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:195) at com.rest.api.events.EventControllerTests.createEvent_Bad_Request(EventControllerTests.java:151) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)