학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 이 Like 검색에서 그냥 where like '%ㅁ%' 이렇게 앞뒤 같이 체크하는거면 그냥 Like 보다는 findByItemNameContaining 이렇게 Containing 을 쓰는게 더 맞을 거같은데 혹시 이걸 안쓰고 like 를 쓴 이유가 별도로 있을까요?!
질문은 아니지만, 타임리프 3.X 버전에서 발생하는 에러가 있어 공유 목적으로 글을 작성하였습니다. An error happened during template rendering cannot access a member of class hello.thymeleafbasic.basic.BasicController$User 타임리프 공식문서에 3.X 버전 부터 표현식에서 클래스 사용에 대한 더욱 엄격한 제한 이 생겼다고 기재되었습니다. 따라서 기존 BasicController 에서 User 클래스 코드 부분을 아래와 같이 변경하면 문제가 해결되는것으로 보입니다. // 접근 권한을 public으로 변경 @Data public static class User { private String username; private int age; public User(String username, int age) { this.username = username; this.age = age; } } // 기존 @Data static class User { private String username; private int age; public User(String username, int age) { this.username = username; this.age = age; } } 공식문서: https://www.thymeleaf.org/doc/articles/thymeleaf31whatsnew.html Tighter restrictions on the use of classes in expressions
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter 여기 보시면 현재 기준 버전이 4.0.1 나왔습니다. build.gradle의 dependencies에 //MyBatis 스프링 부트 4.0.1 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:4.0.1' 로 버전 수정하면 잘 됩니다.
스프링 버전 4.0.2 기준 aspectj 라이브러리 dependency 설정은 다음과 같습니다. (gradle 기준) implementation 'org.springframework.boot:spring-boot-starter-aspectj' 계속 boot-starter-aop 로 빌드 시도했다가 삽질하면서 20분 날렸네요..
체크 예외의 경우는 그냥 커밋한다고 하는데, 혹시 그 이유가, 체크 예외는 어차피 예외 처리가 강요 되는 예외라, 코드에서 외부적으로 try - catch 형태로 처리되는 부분이기 때문에, 굳이 트랜잭션 템플릿에서는 별도로 롤백처리를 안하는 걸까요? 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
중요한 것은 아닐 수도 있고, 영상에서도 해당 내용은 설명은 하시지 않고 넘어가셔서 정확하지 않을 순 있습니다. 그래서 문의드립니다. 6. 로그인 처리1 - 쿠키, 세션 PDF 5페이지 도메인이 가장 중요하다. 도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말함 '영역은 제외한 시스템이' 에서 영역'은'이 맞는 표현인가요 영역'을'이 맞는 표현인가요? '영역은' 이라고하면 제외한 시스템이 구현한다는 뜻으로 이해가 되는데 제외한 시스템이 무엇을 말하는지 잘모르겠고.. '영역을'이라고 한다면 영역을 제외하고 시스템이 구현한다는 뜻으로 내용이 자연스레 이해가 되는데 영상에서 이 부분을 딱히 설명을 하시지 않으셔서 잘모르기에 문의드립니다.
1. 이 코드에서 결국 ItemUpdateForm 에 담기는 Long id 필드는 오로지 검증목적으로 사용하는 필드인거 같은데 그러면 해당 DTO 용도가 "수정할 값"을 바인딩 하는 것 + 검증의 책임도 DTO에게 있다 라고 보면 될까요?? 2. update() 메서드에 검증한 DTO id를 꺼내서 사용하지 않고, @PathVariable을 사용하는 데 이유가 있는지 궁금합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 22page 내의 링크를 클릭하면 제대로 된 응답을 받지 못하고 다른 페이지로 변경되는 것을 확인했습니다. 네트워크 탭 확인해보았을때 정상 응답 받지 못하는 것 같네요. 기존 링크: https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#format 변경된 링크: https://docs.spring.io/spring-framework/reference/core/validation/format.html
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 클린도 해보고 다시 시도해보아도 test때문에 실패 한다네요.. 왜이럴까요..??
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 실무에서 특정 데이터와 파일을 함께 DB 저장 시 파일 테이블의 구조를 아래 두가지 케이스중 어떤 케이스로 구성하는지 궁금합니다. (ex. A게시글과 A게시글에 대한 파일과 사진들 첨부 시) 1) 파일 테이블(file_table)에 관련된 게시글의 타입(ref_type)과 id(ref_id) 컬럼을 만들어 저장하는 것. 2) 게시글 테이블(board_table)에 관련된 파일 id(file_id) 컬럼을 만들어 저장하는 것. 2개 이상의 파일 list를 저장하고 관리하기에는 1번 방법이 더 직관적인 것 같은데, 실제로는 2번과 같은 구조를 많이 본 것 같아서 질문 드립니다. 실무에서는 보편적으로 어떤 구조를, 어떤 이유로 많이 사용할까요 ? 항상 감사합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 솔직히 강의에 관련된 질문과는 거리가 먼 내용이어서 질문을 해야 하나 말아야 하나 고민하다가 결국 질문하는 게 좋겠다고 생각되어 질문을 올립니다. 강의 중에 강사님께서 중간중간에 test관련 공부를 열심히 해야한다고 하셨는데 혹시 어떤 식으로 공부해야 하는지 그리고 강사님께서는 어떻게 하셨는지, 또 추천하시는 서적이 있다면 그 서적의 제목이 어떻게 되는지 알고 싶습니다.
안녕하세요 강의를 듣던중 궁금한것이 생겨서요, 해당 프로젝트 구조를보면 di주입을 config에서 new 키워드를 통해 repository 클래스를 직접 인스턴스화해서 주입해주고있고 구현체에 해당하는 인스턴스를 생성한후 추상화된 repository를 빈에 등록해서 호출하여 사용하는 형식으로, 특정 구현체에 의존되지 않게 해주고있는데요 근데 가만생각해보니 실제 MemotyItemRepository에 보면 @Repository 어노테이션을 사용하고있는데 해당 어노테이션을 사용하면 자동으로 빈에 등록해주는 역할을해주는걸로알고있는데 config 에서 직접 new 를 통해 주입해주고있는데 굳이 왜 빈에 등록해야하는거지? 라는 의문이 들어서요 MemoryItemRepository에서 @Repository 어노테이션을 사용하지 않아도 전혀 문제가 없을것같은데 굳이 왜 사용하는 건지 궁금합니다!
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
let backButton: UIButton = { let button = UIButton(type: .custom) button.setTitle("Back", for: .normal) button.setTitleColor(.white, for: .normal) button.backgroundColor = UIColor.blue button.titleLabel?.font = .boldSystemFont(ofSize: 20) button.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) return button }() backButton 설정시에 addTarget 첫번째 인자로 self 로 전달하니까 'self' refers to the method 'FirstViewController.self', which may be unexpected 라는 warning 문구가 xcode 내에 표시되어서 xcode 에서 추천하는 방향대로 아래 코드블록 처럼 FirstViewController.self 로 전달하니까 backButton 클릭시 Exception 이 발생하는데요. button.addTarget(FirstViewController.self, action: #selector(backButtonTapped), for: .touchUpInside) 이 부분 왜 Excpetion 이 발생하는건지 궁금합니다. self 로 전달하면 문제는 없는데 경고문구가 나오는게 신경쓰입니다. 경고문구를 없애고 버튼 클릭에도 문제가 없으려면 어떻게 하는게 좋을까요? Exception 문구는 아래와 같습니다. *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NextVC.FirstViewController backButtonTapped]: unrecognized selector sent to class 0x100e4a3d8' *** First throw call stack: (0x19df92964 0x19ae81814 0x19e02d140 0x19df1235c 0x19df1a200 0x1a4c49f58 0x1a4501154 0x1a4501498 0x1a44fdf08 0x1a450001c 0x1a4c7a2d4 0x1a4c7b734 0x1a4c5e170 0x1a3892d38 0x1a38a1e28 0x1a3894c50 0x1a38a2ee4 0x1a38a2374 0x28cd15560 0x19dee34cc 0x19df130b0 0x19df12fd8 0x19deeac1c 0x19dee9a6c 0x23fb18498 0x1a38c2df8 0x1a386be54 0x1a3997820 0x100e365cc 0x100e3653c 0x100e36648 0x19aed6e28) libc++abi: terminating due to uncaught exception of type NSException
이 수업 처음에 form-start에서 시작하라고 하셨는데 form-start에서는 Item.java에 선언되어있는 내용이 부족해서 이걸로는 수업이 진행되지않습니다. form으로 시작하기에는 코드를 따라서 칠수가없구요... ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 정리 영상 중 Bean등록을 @Component, @Autowired를 설명해 주시면서 더 좋은 방법이 있다고 말씀하셨습니다. 다만, 저는 현재 사용하는 방법은 @Autowired 같은 생성자 주입인데. 더 좋은 방법은 어떤걸까요? @RequiredArgsContructor도 같은 생성자 주입을 사용하는 것으로 알고있습니다.. 더 좋은 방법은 어떤걸까요?