안녕하세요. 강사님께서 TabLabel을 아래와 같이 작성하셨는데, Key에 []가 들어가 있는 경우는 처음 보아서요. const TabLabel = { [TabType.KEYWORD]: "추천 검색어", [TabType.HISTORY]: "최근 검색어", }; Key를 배열로 선언하신 것인가요? 이와 관련된 문법은 어디서 찾아볼 수 있을까요?
안녕하세요. storage를 동적으로 변경하는 경우 현재 기준으로 어떤 부분의 코드를 변경하는 것이 좋을지 문의드립니다. 현재 코드에서는 아래와 같이 정적인 데이터(storage.js)를 main.js에서 주입해주는데요. // main.js import Store from "./store.js"; import storage from "./storage.js"; function main() { const store = new Store(storage); new Controller(store, views); } 만약 storage 데이터를 ajax를 통해 동적으로 받아온다면, main.js와 Controller.js는 그대로 두고 Storage.js와 storage.js 파일만 변경하면 되나요? 즉, 아래 코드 주석처럼 하면 될까요? 또한, AJAX 요청은 Controller와 Storage 중 어느 부분에 작성하는 것이 일반적인가요? // Controller.js // 변경 없음 export default class Controller { constructor(store, { searchFormView, searchResultView }) { this.store = store; this.searchFormView = searchFormView; this.searchResultView = searchResultView; this.subscribeViewEvents(); } subscribeViewEvents() { this.searchFormView .on("@submit", (event) => this.search(event.detail.value)) // } search(searchKeyword) { this.store.search(searchKeyword); } } // storage.js // 데이터를 빈 배열로 변경 const storage = { keywordData: [], historyData: [], productData: [], }; export default storage; // Store.js export default class Store { constructor(storage) { if (!storage) throw "no storage"; this.storage = storage; this.searchKeyword = ""; this.searchResult = []; } search(keyword) { this.searchKeyword = keyword; this.searchResult = // 여기서 AJAX 요청을 통해 storage.js의 상태 관리? 아니면 Controller에서 AJAX 요청? } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. App에서는 application.getBean("OOO", OOO.class)와 같이 빈요소를 참조해서 쓰고 있지만 MemberRepository나 DiscountPolicy의 경우 Bean을 등록하여도 이를 빈 저장소를 경유해서 사용하지 않고 직접적으로 바로 사용할 수 있을 것 같은데, 그렇다면 저 요소를 굳이 빈으로 등록할 필요가 있는지 의문입니다.
강좌를 구매한 상황이라서, 수강전문의에 등록이 안되어 이렇게 질문남깁니다! 지금 현재 React.Js,TypeScript만을 공부한 상황이고, Next.js와 Redux에 대해서는 따로 공부한 적이 없습니다. 이 강좌로 Next.js와 Redux도 같이 배울 수 있을까요? 아니면 저 2가지를 따로 공부해야하는 부분일까요?
안녕하세요. 항상 좋은 강의 감사합니다. 강의에서는 다루지 않았지만 교재의 axios DIP 사례의 화살표가 잘 이해가 되지 않아서 이렇게 질문드립니다. getData의 경우에는 httpClient를 인자로 받고 내부에서 사용하기 때문에 httpClient 을 수정해야할 경우에 getData 함수도 수정이 필요하기 때문에 의존성을 갖는다는 것이 이해가 갑니다. 하지만 axios와 fetch는 해당 api에서 httpClinet를 사용하는 것도 아닌데 어떻게 httpClient에 의존성을 갖는지, 화살표 방향이 잘 이해가 되지 않습니다.
nav-bar에 dropdown 관련해 <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> js가 작동하지 않는 것인지, 클릭시 #만 붙고 drop-item들을 보여주질 않습니다;; 선생님과 똑같이 해서 해도 기능하지 않아서 라이브러리도 전부 점검해보았는데, 답을 찾기 어려워 질문 남깁니다 ㅠ justify-content-end 이 부분도 css 적용이 안되고 있습니다. 제가 어느 부분을 놓쳤을까요?
[로그인처리하기 - 쿠키사용] 강의 중에서 문제가 있어 문의드립니다. 위 화면캡처에서 위에 2줄은 회원가입 시 로그가 출력된 것이고, 3번째 줄은 로그인 후 ID가 출력된 것입니다. (강의에서의 로그를 약간 수정했습니다.) 그런데 로그인이 완료된 후 loginHome이 아닌 home으로 리다이렉트 됩니다. home으로 리다이렉트된 후 이렇게 확인되는데, 제가 보기에는 회원가입도, 로그인도 잘 이루어진 것 같습니다. 정말 잘 이루어졌다면... 문제는 loginHome으로의 리다이렉트 문제일 것 같습니다. 우선 HomeController의 @GetMapping("/")는 강의와는 다르게 homeLogin메서드의 매개변수를 3개로 하였습니다. 제가 짠 코드에서는 (memberId가 존재는 하지만) 실제 로그인id 역할을 하는 것은 email이기 때문입니다. memberMvcRepository.findByEmail은 아래와 같습니다. 코드를 여러 번 고쳐봤지만 원인은 찾지 못했습니다. (구글링은 어떻게 질문해야 할 지 몰라...조금 찾다가 포기했습니다) 제가 위에 말씀드린 부분 중에서 loginHome으로 리다이렉트 되지 않는 이유가 있을까요? (김영한님 다른 강의 내용까지 섞여 있는 코드이기에 코드를 구글드라이브에 공유하기 전에 먼저 문의를 드려봅니다...)
안녕하세요. 강의를 따라 진행하던 중, jdbc를 이용해서 새로운 integration 테스트를 진행하면, 회원가입 함수가 pass 되긴 하나, DB에 갱신되지 않습니다. 예를 들어 "spring"을 등록하고자 하면, DB에 없는데도 테스트는 통과되었으나 디비에는 갱신되어있지 않고, 계속 회원가입 함수를 써도 fail이 나지 않습니다. spring이 이미 등록되어있으면, 거기서는 또 fail이 발생합니다. 다른 분들이 질문하신걸 이미 다 찾아보고, 하루 이상 시간을 써도, 코드를 다시 다 확인하고 다시 써봐도 해결되지 않습니다. Test의 회원가입 함수 등록시 디비에 연결되지 않을 경우의 수가 무엇이 있을까요? localhost 사이트에 들어가서 회원가입()과 동일한 로직으로 회원가입을 하면 또 정상적으로 등록됩니다.
강의에 있는 모든 스크립트를 오타없이 작성하였고 namenode format까지 정상적으로 끝냈는데 그 다음 순서인 start-dfs.sh가 동작하지 않습니다. 해당 명령어를 치고난 후 아무일도 발생하지 않고, jps로 봐도 동작하지 않습니다. 해당 쉘 스크립트 파일을 열어보니 비어있습니다. 뿐만아니라 sbin디렉토리에 있는 모든 쉘 파일들이 아무것도 입력되어있지 않은 빈파일들인데 이게 맞나요?
회원 서비스 테스트 강의 들으면서 코드를 똑같이 따라 쳤는데 아래 에러가 납니다 ㅠ ,, 혹시 몰라 코드도 첨부합니다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); } @Test void 회원가입() { // given Member member = new Member(); member.setName("hello"); // when Long saveId = memberService.join(member); // then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { // given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); // when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); // try { // memberService.join(member2); // } catch (IllegalStateException e) { // assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); // } // then } @Test void findMembers() { } @Test void findOne() { } }