묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터 에러 설정
서블릿 필터에서는 에러 설정 기본 값이 아래와 같다고 강의에서 말씀하셨는데,filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST); 그렇다면 인터셉터는 기본값 설정이 어떻게 되어있나요?.excludePathPatterns("/css/**", "/*.ico", "/error", "/error-page/**"); 에러 페이지에 접근 하는 것을 인터셉터에서 접근 안하게 하려면 인터셉터는 /error 로 제외 시켜줘야하나요?4xx.html ,500.html 등등 다 /error 디렉토리 밑에 있으니 인터셉터는 excludePathPatterns()에서무조건 제외를 직접 시켜줘야 하나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
resolveArgument()메서드 질문
반환값이 Object로 Member 클래스 보다 상위 클래스인데 어떻게 @Login 어노테이션이 붙은 member 변수에 대입 될 수 있나요? public Object resolveArgument(MethodParameter methodParameter, @Nullable ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, @Nullable WebDataBinderFactory webDataBinderFactory) throws Exception { log.info("resolveArgument 실행"); HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest(); HttpSession session = request.getSession(false); if (session == null) { return null; } return session.getAttribute(SessionConst.LOGIN_MEMBER); }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
api 매핑 메소드를 어느 기준으로 어떤 컨트롤러에 작성해야하는지 궁금하여 질문좀 드립니다.먼저 글을 작성할 수 있는 웹사이트(게시판)가 있고, 홈화면에서 글쓰기 버튼을 눌러 글쓰기 페이지)로 이동 후 글을 쓰고 등록하면 글 데이터가 DB에 저장할 수 있는 사이트가 있다고 가정하겠습니다.그리고 프론트는 리액트이고 글쓰기 페이지로 이동시 프론트에서 요청 없이 페이지 이동을 하고 글 등록 버튼을 눌렀을 때에 /write 경로로 서버에 요청이 간다고 가정하겠습니다. 질문입니다.등록 버튼을 눌러 /write라는 url이 서버로 오면 이 url은 다음 중 어느 컨트롤러에서 매핑되어야할까요?홈 컨트롤러 - 홈화면에서 글쓰기 페이지(/write)로 이동한 것이니 홈 컨트롤러에서 매핑한다.유저 컨트롤러 - 글은 유저가 쓴 것이고 유저와 관련있으므로 유저 컨트롤러에서 매핑한다.글 컨트롤러 - 글 또한 별도로 DB에 관리되어야하므로 글 컨트롤러에서 매핑한다.이러한 비슷한 상황이 온다면 url은 어느 기준으로 컨트롤러에 매핑 시켜야하나요?감사합니다.
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
FastAPI를 선택하는 이유
강의를 들으면서 코드를 따라 쳐보거나 개인적으로 간단한 기본 게시판을 만들어보면서 "보일러플레이트가 좀 많은데?"라는 생각이 들었습니다.물론 FastAPI의 비동기 처리나 ML 붙이기도 쉬우며 api 개발과 문서화가 빠르고 간편하다는 장점이 있지만 이것만으로 실제 서비스 상황에서 FastAPI를 선택하는 이유가 되는 지에 대해 의문이 들었습니다.실무에서는 어떤 기준으로 FastAPI를 고려하게 되는 지 질문드리고 싶습니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp 의존성 수정 요청
spring 부트 4버전으로 올라오면서 jsp 의존성이 적용 안되던데 문서 수정이 필요할 것 같습니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
43강 검증1 에서 실패 로직 관련 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]43강의 14분15초를 보면 기존 addForm에서 item의 빈 값을 넘긴 이유 중 하나가 검증에 실패했을 때 입력한 값을 재사용 할 수 있어서라고 말씀하셨는데 model.addAttribute("item", new Item());이 라인 주석하고 페이지에서 테스트 해봐도 검증에 실패했을 때 입력한 값이 그대로 남아있습니다.제가 강사님 말한 내용을 잘못 이해하고 테스트 한건지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Unused property.....
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]여기에 질문 내용을 남겨주세요왜 자꾸 Unused property 가 뜰까요?.... Gradle 업로드 해도 계속이러네요ㅠㅠ 제미나이와 몇시간을 여러방법을 썼는데 실패해서 처음 질문드려요.....
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Drawing Cycle 관련 질문
안녕하세요, 강의 늘 잘 듣고 있습니다.다름이 아니라, 뷰의 레이아웃을 잡아주는 과정에서 Drawing Cycle & 생성자 중 어디에 무엇을 작성해야 할지 헷갈려서 개인적으로 알아보던 중 궁금증이 생겨서 질문드립니다! Drawing Cycle에 맞추어 뷰 업데이트하는 몇가지 예시init(생성자)subview 추가 (addSubview, stackView.addArrangedSubview)제약 생성 + NSLayoutConstraint.activate (1회)정적인 스타일(폰트, 색, axis, spacing 등)즉, ‘한번 바뀌고 안 바뀔 것들’을 세팅해 준다.updateConstraints()상태에 따라 레이아웃이 바뀔 때 (expanded/collapsed, 이미지 크기 토글, padding 변경, 어떤 뷰 숨김에 따른 높이 변경)constraint를 프로퍼티로 보관해두고updateConstraints()에서 constant 바꾸거나 isActive 토글필요 시 setNeedsUpdateConstraints() 호출즉, ‘동적으로 바뀔 레이아웃’을 세팅해 준다.layoutSubviews()frame이 계산된 뒤의 후처리를 수행해줘야 할 때 (그림자 경로, cornerRadius 등 frame의 정보가 필요한 것들) 먼저 제가 정리한 바는 다음과 같습니다.그런데, constraint를 updateConstraint() Drawing Cycle 내에서 지정해주는 강의 내 파트와 살짝 충돌이 발생하더라구요.GPT 및 개인적인 공부를 통해 확인했을 때에는,'constraint가 여러번 중복 적용될 수도 있으므로, 동적으로 constraint를 변경할 상황이 아니라면 생성자에서 초기화해주는 것이 좋다'라고 이해했습니다.동적으로 변경되지 않는 기본 레이아웃 제약은 생성자에서 설정하는 것이 원칙적으로 더 적절한지, 아니면 updateConstraints()에서 설정하는 방식도 올바른 패턴인지 궁금합니다.어떤 방식이 더 권장되는지 명확히 알고 싶습니다..!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
project JDK is misconfigured
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.뭐가 문제일까요,,
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, 강사님! 강의를 듣다가 리포지토리 추상화와 관련하여 실무적인 고민이 생겨 질문드립니다. ( java 학습 전에 안드로이드 kotlin 개발 중에 겪었던 문제)현재 인터페이스를 통해 리포지토리를 추상화하고, 향후 데이터 저장소가 바뀌어도 MemberService 등 비즈니스 로직을 보호하는 설계를 공부하고 있습니다. 그런데 만약 외부 시스템이나 DB의 ID 규격이 바뀌어 데이터 타입 자체가 달라지는 경우에는 어떻게 대처하는 것이 정석인지 궁금합니다.1. 타입 불일치 및 형변환의 한계 예를 들어, 현재 우리 시스템의 도메인(Member) ID는 Long인데, 나중에 도입할 외부 API의 ID가 2131293e-r1232... 같은 UUID(String) 형태라면, 물리적으로 Long으로의 형변환 자체가 불가능합니다.2. 이 경우 어떤 방식이 가장 권장되는 '정석'인가요?방안 A: 도메인 모델은 우리 시스템의 기준(Long)을 유지하고, 리포지토리 구현체 내부에서 외부 ID(String)를 별도의 필드에 매핑(저장)하며 우리만의 PK를 새로 생성한다.방안 B: 인터페이스와 도메인의 ID 타입을 처음부터 가장 범용적인 String으로 변경하여 외부 규격에 맞춘다.방안 C: 기타 실무에서 주로 사용하는 별도의 전략이 있는지 궁금합니다.3. 고민의 요지 구현체 내부에서 '임의로 타입을 가공하거나 재조립'해서 서비스에 넘겨주는 것이 도메인의 순수성을 지키는 올바른 방향인지, 아니면 애초에 이런 타입 변경의 가능성까지 고려하여 인터페이스를 더 유연하게(예: Generic 사용 등) 설계해야 하는 것인지 강사님의 실무 노하우를 듣고 싶습니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
단위/통합 테스트 버전충돌 문제
취준생으로서 아주 유용하게 강의를 듣고있습니다. 그런데 테스트코드를 실행할 때 현재상황에서 기본설정된 junit6이 지원되지않는 상황이고 build.gradle 의존성에서 junit5로 지정변경하고 테스트 케이스를 작성하고 실행할때 junit5와 6이 버전충돌해서 테스트코드가 실행이 안됩니다. 어떻게 해결해야 할까요?
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
안녕하세요, 해당 강의 18:00분 경에 앨런님께서 말씀하신 '앱을 만들 때 주로 코드로 만든다'라는 말씀에 궁금증이 들어 질문 남깁니다.UIKit을 통해 앱을 제작하실 때, 스토리보드 대신 주로 이전 강의 섹션과 같이 주로 코드를 이용해 UI를 구성한다는 말씀이신가요?스토리보드와 코드 둘 다 짧게나마 겪어본 제 입장에서는, 세그웨이를 수행하는 것 제외 스토리보드가 더욱 많은 이점이 느껴져서요.대표적으로는 VC에 UI 관련한 코드가 없어 더욱 VC가 본인의 책임에 집중하게 된다는 생각도 들고, 코드로 UI를 짜다 보면 하나 둘 빼먹게 될 확률도 높아지는 것 같아서요(스토리보드에서는 이를 바로 에러로 잡아주지만, 코드는 잡아주지 않기도 하구요)어떤 부분에 의해, 주로 코드로 UI를 구성하는 것을 선호하는지가 궁금합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
SQL 중심적 개발의 문제점에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 선생님 SQL 중심적 개발의 문제점에 대해 궁금증이 많아 글 남겨 봅니다. 선생님의 강의를 들으면서 결국 애플리케이션의 핵심 역할은 DB라는 종착지에 가기 전 데이터를 정제하고 그 정합성을 책임지는 것이라고 생각합니다. 애플리케이션이 이 책임을 다하려면, 데이터를 담는 DB설계에 끌려다는 것이 아닌 데이터를 가공하는 주체인 객체지향 설계가 우선되야 한다고 생각이 듭니다. 하지만 현실에서는 여전히 DB무결성을 이유로 DB설계를 최우선되고 객체는 그저 데이터의 운반책으로 쓰는 경우가 많았는데, 데이터 정합성의 책임을 다하기 위해 객체지향 설계가 DB설계보다 앞서야 한다는 제 생각이 맞는지 , 혹시 이런 관점이 실무에서 DB 무결성을 놓치는 위험한 발상은 아닌지 시니어 개발자이신 선생님의 고견을 듣고 싶습니다.
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
동기와 비동기 엔진 부분에 대해서 궁금해서 문의드립니다.
실제 현업에서는 동기 엔진 모듈과 비동기 엔진 모듈 두개를 만들어두고, 상황에 따른 api를 정의 후 호출해서 사용되는지 궁금합니다.
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
델리게이트 패턴 관련 질문
영상 초반부(00:30 - 04:00)에 대한 의문점이 생겨 질문 남깁니다!텍스트필드의 경우 VC(뷰컨트롤러)와 '완전히 분리된 객체'이며 유저와 직접적인 커뮤니케이션을 하고, 버튼의 경우 VC와 '직접적인 커뮤니케이션을 한다' 라고 하셨는데, 이 부분에서 살짝 의문이 듭니다.텍스트필드와 버튼의 차이가 동작의 형태나 이벤트 흐름의 복잡성에서 발생한다는 점에는 공감하지만, 버튼 역시 UITextField와 마찬가지로 VC와는 별도의 객체로 존재하고, 이벤트 발생 시 target–action 메커니즘을 통해 결과를 VC로 전달하는 구조로 이해하고 있습니다.이런 관점에서 봤을 때, “버튼은 VC와 직접 커뮤니케이션한다”는 표현이 개념적으로 어떤 의미를 가지는지 조금 더 설명을 부탁드려도 될까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
혹시 Containing 을 안쓰신 이유가 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이Like 검색에서 그냥 where like '%ㅁ%' 이렇게 앞뒤 같이 체크하는거면 그냥 Like 보다는 findByItemNameContaining 이렇게 Containing 을 쓰는게 더 맞을 거같은데 혹시 이걸 안쓰고 like 를 쓴 이유가 별도로 있을까요?!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
질문은 아니지만, 타임리프 3.X 버전에서 발생하는 에러가 있어 공유 목적으로 글을 작성하였습니다.An error happened during template renderingcannot 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.htmlTighter restrictions on the use of classes in expressions
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
다 루트도 제대로 잡혀있는데 왜 저기서 MVC가 해결할 수 없다고 뜨는지 알 수 있을까요?!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
[공유] 스프링부트 4.x 버전 mybatis 연동
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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'로 버전 수정하면 잘 됩니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
❗️springboot 4.0.2 버전 aspectj dependency 설정❗️
스프링 버전 4.0.2 기준 aspectj 라이브러리 dependency 설정은 다음과 같습니다. (gradle 기준) implementation 'org.springframework.boot:spring-boot-starter-aspectj'계속 boot-starter-aop로 빌드 시도했다가 삽질하면서 20분 날렸네요..