학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 이번 강의를 들으며 다형성과 추상클래스, 인터페이스 개념적인 부분 관련해서 이해가 잘 되었습니다. 그런데 다형성 관련부분 들을때부터 의문이 들었던.. 메인 쪽에서 인스턴스 생성 부분이 이해가 가지 않아 질문 드립니다. 왜 InterfaceA a = new child() ; 처럼 인스턴스를 생성해서 써야 하는건가요? Child a = new child() 로 생성해서 메소드를 호출했을 때의 문제점이 뭔가요? 문제점 보다는 코드 중복제거와 같은 효율성 때문인가요? 위의 인스턴스 대로라면, 부모클래스의 메소드를 찾아서 해당 메소드가 자식 클래스에 있다면 자식 클래스를 우선 호출하거나, 부모클래스가 추상이나 인터페이스라면 오버라이딩 된 자식 클래스의 메소드를 호출할텐데, 인스턴스 생성시부터 부모 a = new 자식 으로 왜 생성하는지가 궁금합니다.
스프링 시큐리티에서 기본적으로 제공하는 formlogin 방식이 아닌 방식(예를 들면 json 요청)으로 로그인을 구현할 때, 기존의 방식 처럼 컨트롤러에서 처리하는 것과 커스텀 필터를 등록하여 처리하는 것에 차이가 무엇인지 궁금합니다. 아무래도 필터는 Dispatcher Servlet을 거치지 않고 먼저 처리할 수 있다는 장점이 있을 것 같은데 컨트롤로 단에서 처리하는 것 보다 어떤점이 유리할까요? 또 다른 이점이 있는지도 궁금합니다!
React에서는 React 팀이 직접 만든 Event 타입을 사용하고, Vue에서는 MDN에서 제공하는 범용적 Event 타입을 사용한다고 하시고, React에서 가상 DOM 때문에 React 팀이 만든 Event 타입을 사용한다고 말씀 주셨습니다. 하지만, Vue도 마찬가지로 vDOM을 사용하고 있는 것으로 알고 있어요. 🙂 그렇다면, Vue도 vDOM을 사용한다면 Template 문법 내부에서 범용적 Event 타입이 아니라 커스텀 이벤트 타입을 사용해야 맞는 것 아닌가요? 굳이 React 에서 커스텀 이벤트 타입을 사용하는 이유와, Vue에서 범용적 이벤트 타입을 사용하는 각각의 이유가 있을 것 같은데, 이에 대한 궁금증이 생겨 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. CoreApplication의 @SpringBootAplication에는 @ComponentScan이 들어있다고 하셨습니다. 그러면 스프링 빈 등록을 할 때 AutoAppConfig가 아니라 CoreApplication을 써도 될 것 같다는 생각이 들었습니다. 그래서 방금 테스트한 코드를 이렇게 수정해보았습니다. public class AutoAppConfigTest { @Test void basicScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CoreApplication.class); MemberService memberService = ac.getBean(MemberService.class); assertThat (memberService).isInstanceOf(MemberService.class); } } 하지만 제가 @Component를 사용하지 않은 MemberService 도 같이 bean으로 등록되어 있어서 NoUniqueBeanDefinitionException이 발생했습니다. 왜 CoreApplicaion을 사용하면 이러한 오류가 나는 건지 궁금합니다. 그리고 이것이 AutoAppConfig의 역할을 대체할 수 있는지 궁금합니다
1. 문제 HelloRepositoryTest 테스트 실행 시 findHelloFailed() 테스트 실패 및 에러 발생 Expected :null Actual :tobyspring.hello.Hello@579846cc 2. 강의 정보 제목: [섹션 10] 스프링 부트의 자동 구성과 테스트로 전환 시간: 6:23 내용: HelloRepositoryTest.java의 @HellobootTest를 @SpringBootTest로 변경 후 실행 3. 내 프로젝트 상태 HelloRepositoryTest.java 코드 package tobyspring.hello; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) public class HelloRepositoryTest { @Autowired private HelloRepository helloRepository; @Test void findHelloFailed() { assertThat(helloRepository.findHello("Toby")).isNull(); } @Test void increaseCount() { assertThat(helloRepository.countOf("Toby")).isEqualTo(0); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(1); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(2); } } 4. 해결 과정 increaseCount() 테스트 실행 결과가 findHelloFailed() 테스트에 영향을 미치는 것으로 추정 따라서 @Transaction을 @SpringBootTest 아래 줄에 추가 package tobyspring.hello; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) @Transactional public class HelloRepositoryTest { @Autowired private HelloRepository helloRepository; @Test void findHelloFailed() { assertThat(helloRepository.findHello("Toby")).isNull(); } @Test void increaseCount() { assertThat(helloRepository.countOf("Toby")).isEqualTo(0); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(1); helloRepository.increaseCount("Toby"); assertThat(helloRepository.countOf("Toby")).isEqualTo(2); } } 5. 결과 정상적으로 테스트 통과 6. 질문 강의에서 @Transactional 어노테이션 없이 테스트를 통과할 수 있었던 이유가 궁금합니다!
[제로초 강좌 질문 필독 사항입니다] 질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다. 도움이 되는 질문을 하는 방법을 알려드립니다. https://www.youtube.com/watch?v=PUKOWrOuC0c 0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다. 1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다. 2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다. 3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요. 4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요. 5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다. 6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 안녕하세요 로초님! 강의 잘 보고 있습니다. 다름 아니라 position:fixed;는 뷰포트를 기준으로 레이아웃을 배치하게 만드는 속성값이라서, top, left, bottom, right 중 하나 이상을 써야 레이아웃이 정상적으로 된다고 알고 있는데, (afterLogin)/layout.module.tsx의 .leftSectionFixed와 .search에서는 top같은 거 없이도 의도한 대로(sticky처럼?) 기능하는 이유가 무엇인지 궁금합니다. 옛날에 제가 다른 프로젝트 만들었을 때는 fixed랑 top을 같이 안 써서 헤맨 적이 있어서, 앞으로는 top을 꼭 같이 써야겠다고 알고 있었고, 지금 구글링 해서 fixed의 사용법을 찾아봐도 다들 top같은 걸 써야 한다고 말하고 있어서, 혹시 다른 사용법이 있는 건지 궁금해서 여쭈어봅니다. 답변 기다리겠습니다. 감사합니다:)
1. 문제 DataSourceTest 테스트 실행 시 transaction 로그가 출력되지 않음 INFO o.s.t.c.transaction.TransactionContext : Began transaction (1) for...(생략) INFO o.s.t.c.transaction.TransactionContext : Rolled back transaction for...(생략) 2. 강의 정보 제목: [섹션 10] 스프링 부트의 자동 구성과 테스트로 전환 시간: 6:00 내용: DataSourceTest.java의 @HellobootTest를 @JdbcTest로 변경 후 로그 보기 3. 내 프로젝트 상태 자바 버전: 17 스프링 부트 버전: 3.2.0 build.gradle의 의존성 repositories { mavenCentral() maven { url 'https://repo.clojars.org' name 'Clojars' } } dependencies { implementation ('org.springframework.boot:spring-boot-starter-web') implementation 'org.springframework:spring-jdbc' runtimeOnly('com.h2database:h2:2.2.220') implementation 'hikari-cp:hikari-cp:3.0.1' testImplementation 'org.springframework.boot:spring-boot-starter-test' } DataSourceTest.java 코드 @JdbcTest public class DataSourceTest { @Autowired DataSource dataSource; @Test void connect() throws SQLException { Connection connection = dataSource.getConnection(); connection.close(); } } 4. 해결 과정 application.properties에 로그 단계를 정의 logging.level.ROOT=DEBUG logging.level.org.springframework.transaction=DEBUG 5. 결과 단계를 DEBUG -> TRACE로 다양하게 바꾸고 테스트를 실행했으나 transaction은 출력되지 않음 6. 질문 강의 중간에 로깅 단계를 바꾸는 작업이 있었는데 제가 그 부분을 놓친 것인지 스프링 부트의 버전이 올라가며 transaction 로그를 출력하지 않도록 바뀐 것인지 아니면 다른 방식으로 접근해야 하는 것인지 궁금합니다!
안녕하세요. 본 강의에서 보여주신 회원가입 버튼 비활성화 로직은 다음과 같습니다. useEffect(() => { const isEnabled = Object.values(inputs).every((s) => s.length > 0); setFormDisabled(!isEnabled); }, [inputs]); 위의 코드로 실행하면 username과 password를 모두 입력하면 회원가입 버튼이 활성화되고 하나라도 지우면 다시 비활성화 됩니다. useEffect(() => { if (inputs.username && inputs.password) { setFormDisabled(false); } }, [inputs]); 그러나 조금 수정하여(이외의 부분은 모두 동일) 위와 같이 실행해보면, 본래의 코드와 마찬가지로 모두 입력되었을 때 버튼이 활성화 되지만 다시 지워도 비활성화가 되지 않습니다. 두 곳 모두 지워봐도 마찬가지입니다. console.log로 찍어보아도 false 값으로 고정된 채 바뀌지 않습니다. useEffect가 비동기 방식이므로 formDisabled가 업데이트 되는 타이밍 문제도 고려해 보았지만, 그렇다면 본래의 코드에서도 이런 문제가 발생하여야 할 것이라고 판단했습니다. 여러모로 분석해 보았지만 이유를 알기가 어렵습니다.
안녕하세요. 강의 수강 중 궁금한 점이 있어서 질문드립니다! TCP 에코 서비스 전체 흐름 수업 중에 서버에서 bind 함수가 필요한 이유를 듣고 문득 궁금해졌습니다. bind 함수가 소켓이라는 추상적인 객체에 TCP 프로토콜을 붙여서 구체화를 시켜주는 함수로 이해했습니다. 그렇다면, 클라이언트도 bind라는 함수가 필요하지 않나 생각이 들었습니다. 서버와 통신을 한다면 결국 클라이언트도 IP와 port 정보가 필요하다고 생각하는데 왜 클라이언트는 따로 bind 함수를 호출하지 않는지 궁금합니다!
Jupyter command jupyter-contrib not found. 지금 이 오류가 떠서 설치가 안되고 있는데요. 어떻게 해결해야 할까요?? 제가 봤을땐, pip install jupyter_contrib_nbextensions 이 부분은 실행이 되는데 jupyter contrib nbextension 이 부분에서 오류가 생기는 것 같습니다. ㅠㅠ
한국인 머리 아프게 만드는 영어의 특징의 14:03초에 Ask for의 예제가 Ask for the manager for confirmation. 으로 나오는데 Ask the manager for confirmation.으로 되어야 하는 거 아닌가 해서요. 강의 재밌네요. 잘 듣고 있습니다.