묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
generate에 getter sectter이 없어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이게 다예요alt + insert 도 눌러보고 마우스 우클릭하고 접근해봐도 게터섹터가 없네요
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
Itemservice-db와 item service-db-start 두개다 존재하는데 어떤거 여나요?
두개의 폴더가 모두 존재하는데 start의 폴더를 이름변경하여 덮어쓰는것인지 아니면 이미 존재하는 itemservice-db를 오픈하면 되는것인지 혼란이 옵니다.두개의 폴더 모두 오픈해보았는데 db-start폴더는 item클래스가 영상과 같지만 generated폴더가 존재하지 않고 그냥 db 폴더는 item클래스가 영상과 다르지만 generated폴더가 존재합니다 어떤걸 이용하면 되나요?
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
asp.net sercurity에 대한 추후 강의 계획 있으신가요?
해외 원서로 공부하고 있긴 한데, 막상 적용하려니 체감이 잘 되지 않아서요.. 혹시나 해서 질문 남깁니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
POST 컨트롤러를 수행한 뒤에도 현재 페이지를 보여주는 방법
POST 매핑 동작을 수행한 뒤에도 기존에 머물렀던 페이지로 리다이렉트 하는 방법이 있을까요?예를 들어, 로그아웃 버튼을 클릭한 뒤에도 기존 페이지를 보여주는 상황이 이에 해당됩니다.그렇다면 현재 페이지의 주소에 대한 정보를 컨트롤러에서 가지고 있어야 할텐데 어떤 방식으로 구현하는 것이 좋을지 궁금해서 질문 남깁니다.
-
해결됨ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
CS1963 오류
안녕하세요 강사님현재 올려주신 강의를 근간으로 현업에서 새로운 페이지를 개발중입니다...그런데 제가 뭘 잘 못 했는지 아래와 같은 오류를 계속 발생시키는데 뭐가 문제일까요..?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
"상품 목록 - 타임리프" 강의 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.thymeleaf 템플릿을 이용하여 만든 items.html의 코드 상에 <link th:href="@{/css/bootstrap.min.css}" href="../css/bootstrap.min.css" rel="stylesheet">이 부분에 대해서 질문이 있습니다.localhost:8080/basic/items 로 접속을 하면 BasicController의 items 메소드에 의해서 /basic/items.html 인 뷰 템플릿을 렌더링 하는것 까지는 이해했습니다.제가 아직 html 코드에 익숙하지 않아서 궁금한 점인데, 1번째 질문.th:href="@{/css/bootstrap.min.css}" 이 부분에서 thymeleaf가 자동으로 내부에서 localhost:8080/css/bootstrap.min.css 를 호출해서 정적 리소스 내에 존재하는 bootstrap.min.css 파일을 찾고 items.html 과의 관계(rel="stylesheet")를 정의해주는건가요...??? 2번째 질문.그래서 th: 태그가 없는 경우에는 정적으로 static/html/items.html이기 때문에 href="../css/bootstrap.min.css" ../를 통해서 static 디렉토리로 올라간 다음 거기서 부터 다시 static/css/bootstrap.min.css 를 탐색하는건가요??
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
gradle
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]2분 14초 상품 상세로 넘어가는 과정에서 다른 질문 글을보고 Gradle을 사용해서 빌드하고 실행하는 과정을 하니 해결이 되었는데요. 혹시 이방법 말고는 없나요? 느리다는 이유로 Gradle을 사용하지 않은걸로 아는데 이후에도 그냥 gradle로 사용해도 상관없나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 활용 질문이 있습니다.
1.HandlerExceptionResolver 활용 8분 10초에서 40초사이 String result= objectMapper.writeValueAsString(errorResult); 이 구문에 대해서요.jason을 문자로 바꿔준다. 객체를 문자로 바꿔준다고 하셨느데요. 그래서 객체랑 jason이 같은 줄알았는데요.https://velog.io/@wong0220/%EA%B0%9D%EC%B2%B4-Object-%EC%99%80-JSON-%EC%B0%A8%EC%9D%B4 여기 링크보면 다르다고 하는데 이 링크가 틀린건가요?아니면 객체(jason)형태를 문자로 바꿔준다라는 의미로 이해해도 되나요?2.위 사진은 API 예외 처리 교재 8페이지 사진입니다. HandlerExceptionResolver 시작 강의코드에서는 위에사진 빨간색 표시된 곳에서 response.sendError가 나오는건가요? 즉 서블릿 컨테이너까지 에러가 갔다가 다시 재요청을 한 것이 (2,3,4번과정)이 맞나요?활용 강의에서는 (2,3,4,5번과정)이 맞나요? 근데 BasicErrorController로 재요청하는 방식은 몇 번에서 일어나는건가요? 이전 강의 코드package hello.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 현재 강의 코드package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.Map; @Slf4j public class UserHandlerExceptionResolver implements HandlerExceptionResolver { private final ObjectMapper objectMapper = new ObjectMapper(); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof UserException) { log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("accept"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); if ("application/json".equals(acceptHeader)) { Map<String, Object> errorResult = new HashMap<>(); errorResult.put("ex", ex.getClass()); errorResult.put("message", ex.getMessage()); String result = objectMapper.writeValueAsString(errorResult); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(result); return new ModelAndView(); } else { // TEXT/HTML return new ModelAndView("error/400"); } } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 3. 모델과 뷰를 반환한다고 하셨는데 모델을 반환할려면 모델에 저장할려는 코드가 필요할 텐데요. setattribute처럼요. 그런 코드가 없어서요..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
./gradlew build 후 에러가 났습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]이렇게 에러가 났는데, 초심자라 전혀 해석을 못하겠습니다.JDK17, Gradle8.7, SpringBoot 3.1.11 로 실행하고 있습니다. 처음 JAVA8을 사용하고 있다가, springboot가 3.0만이 지원되고 있다고 하여, JAVA17을 설치하여 환경변수 등 모두 잘 설정하였습니다. 이외에 수강 내용대로 잘 따라가서, 인텔리제이에서 실행할 때에는 잘 되고 있었는데, wsl에서 build를 하니 에러가 났네요. 어떤 점이 잘못된 걸까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
동적 jsp, 정적 jsp
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jsp 파일중에new-form.jsp 는 동적으로 처리되는 부분이 없고save.jsp 는 자바 코드가 동적으로 처리되는 부분이 있는데 보통 웹서버에서 정적으로 html 을 내려주곤 하는데 new-form.jsp같은경우 위와같이 정적파일을 내려주는건가요?? jsp를 사용하지 않고 //자바코드 in html PrintWriter w = response.getWriter(); w.write("<html>"); w.write("<head>"); w.write(" <meta charset=\"UTF-8\">"); w.write(" <title>Title</title>"); w.write("</head>"); w.write("<body>"); w.write("<a href=\"/index.html\">메인</a>"); w.write("<table>"); w.write(" <thead>"); w.write(" <th>id</th>"); w.write(" <th>username</th>"); w.write(" <th>age</th>"); w.write(" </thead>"); w.write(" <tbody>");이런식으로 동적으로 html을 만드는거는 알겠는데 save.jsp 이렇게 프로젝트에 파일 자체가 있어도 그 안에 동적인 로직이있으면 동적으로 브라우저한테 내려주는건가요??? 3. 그럼 jsp로는 정적 동적 둘 다 가능한건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 인터셉터 - 요청 로그 질문있습니다.
1.스프링 인터셉터 - 요청 로그 강의 2분 10초에서 3분까지 LogInterceptor가 싱글톤이기 떄문에 String uuid를 preHandle위에 작성하면 안된다고 하셨는데요.그런데 MemberController에서도 private final MemberRepository memberRepository; 이 부분은 변수 선언 가능한데요. 2. 스프링 인터셉터 - 요청 로그 강의 14분 13초에서 위 코드가 호출한 컨트롤러 메서드의 모든 정보가 포함되어있다. 라고 나오는데요. hm이 회색으로표시(변수 사용안함) 무슨정보가 포함되어있는건가요? @Slf4j public class LogInterceptor implements HandlerInterceptor{ public static final String LOGIN_ID = "loginId"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); String uuid = UUID.randomUUID().toString(); request.setAttribute(LOGIN_ID,uuid); //@RequestMapping:HanddlerMethod //정적리소스:ResourceHttpRequestHandler if (handler instanceof HandlerMethod){ HandlerMethod hm=(HandlerMethod)handler; } log.info("REQUEST[{}][{}][{}]",uuid,requestURI,handler); return true; } 3.bean코드를 주석처리해줬는데 addInterceptors랑 FilterRegistrationBean 랑 코드 차이가 뭔가요?제 생각엔 필터랑 인터셉터 차이같은데 LoginCheckFilter 이부분은 주석처리 안해주셔서요.@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()) .order(1) .addPathPatterns("/**")//모든 경로에 대해 LogInterceptor를 실행하도록 지정합니다. 이는 모든 요청이 인터셉터를 통과하게 만듭니다. .excludePathPatterns("/css/**","/*.ico","/error");//.excludePathPatterns("/css/**","/*.ico","/error")은 /css/ 경로, .ico 파일 및 /error 경로를 제외하고 모든 요청에 대해 LogInterceptor가 실행되도록 설정합니다. } // @Bean public FilterRegistrationBean logFilter(){//스프링부트가 was를 들고 띄움. FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(new LogFilter()); filterRegistrationBean.setOrder(1); filterRegistrationBean.addUrlPatterns("/*");//어떤 url패턴을 할꺼냐. return filterRegistrationBean; }같은강의 12분 50초에서 선생님 코드에서는 items가 아래처럼 목록이 다 뜨는데 저는 안뜹니다 .혹시 버전 문제인가요?전체코드:https://drive.google.com/file/d/13MrBawN2imZlq9AJdH1h9_3_kN5CAueU/view?usp=drive_link
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션 6. 순수 jbdc
이 부분이 임포트가 아예 안 됩니다ㅠㅠimport org.springframework.jdbc.datasource.DataSourceUtils; 그래서DataSourceUtils.getConnection(dataSource);이렇게 인텔리제이에서 빨간 불이 들어오구요ㅠㅠ DataSourceUtils에만 빨간 불이 들어옵니다!!어떻게 해결해야 할까요!!private Connection getConnection() { return DataSourceUtils.getConnection(dataSource); } private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (pstmt != null) { pstmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { close(conn); } } catch (SQLException e) { e.printStackTrace(); } } private void close(Connection conn) throws SQLException { DataSourceUtils.releaseConnection(conn, dataSource); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링jpa 질문이 있습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository { @Override Optional<Member> findByName(String name); }이 스프링jpa 에서 저기 findByName 부분은 없어도 되는 걸까요? 이미 MemberRepository 인터페이스를 상속 받으니까? 만약에 MemberRepository 에서 메만약에 MemberRepository 에서 메소드명을 schByName 이라 SpringDataJpaMemberRepository 에서소드명을 schByName 이라고 짓는다면 어떡해야 SpringDataJpaMemberRepository 에서 어떡해야하나요?..스프링jpa를 염두해두고 미리 메소드명들을 만들어야 하나요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
css
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사진과 같이 수정, 등록 폼에 css가 강의 내용과 다른데 혹시 어떤이유인지 알 수 있을까요? [구글 드라이브]https://drive.google.com/file/d/1oDw7yGjUQYH6d4c1Br85hFX9HACaGzj3/view?usp=sharing
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
코드 생성과 처리구조
[질문 내용]여기에 질문 내용을 남겨주세요.조금 의아한 부분이 있어서요 @beforeEach 안에서 Repository 생성이 되었는데 윗줄에서 다시 선언이 되어서 클래스에 적용되는 건가요?? 기본적으로 코드는 위에서 아래로 처리되는 걸로 아는데요 위에서 선언이 먼저 되고 beforeEach 안에서 new 로 생성된 부분이 계속 버벅거립니다
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
Jdbc템플릿을 사용하면 지금까지 내용은 직접 사용하는 일은 없나요?
지금까지의 설명은 기술의 발전 과정을 설명해주신것이니 실무에서나 개인 프로젝트 할때는 JDBC템플릿을 이용하면 지금까지 설명해주신 부분이 모두 해결이 자동으로 되니 에러 변환이나 커넥션 가져오고 반환하는 등 모든 과정을 고민하지 않아도 되는것인거죠 ?그리고 멤버서비스v3_4테스트부터 오류가 발생하여 Jdbc템플릿을 이용하는 방법 테스트에까지 오류가 해결이 안됩니다. 기존에 질문글에 구글드라이브 링크를 올렸는데 해결 부탁드립니다 ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
코드 수정 후 자동으로 변경
안녕하세요, 강의 잘 보고 있습니다.코드 수정 후에 rerun 할때마다 너무 불편한데, 혹시 rerun 안해도 localhost:8080이 켜져있는 상태에서 자동으로 화면이 변경되는걸 볼 수 있을까요? 예를 들어서 리액트 같은경우는 싱글페이지의 장점을 가지고 있어서 코드 수정 후 저장만 하면 바로 바로 변경되는걸 볼 수 있는데 인텔리제이에서도 비슷한 내용이 있나 싶어서 문의드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
모델 키 설정 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]공부를 하다가 갑자기 궁금해져서 질문 드립니다MemberListControllerV3 클래스와 MemberSaveControllerV3에서 mv객체의 Model의 키를 각각 "members"와 "member"로 설정한 이유가 있나요?이전의 버전도 계속 그런 방식으로 설정을 하더라구요.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션 5
private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } /** * 회원 가입 */ public Long join(Member member) { // 같은 이름이 있는 중복 회원X validateDuplicateMember(member);// 중복 회원 검증 memberRepository.save(member); return member.getId(); }MemberRepository는 인터페이스인데, 아래 join에서 memberRepository.save(member)을 어떻게 사용하는 건가요? 인터페이스는 객체를 만들지 못하고 구현체를 만들어야하는데 그러면 필드에서 MemberRepository의 구현체인 MemoryMemberRepository를 받아야 되는게 아닌가 했습니다.이해가 잘 되지않아서 질문드립니다ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인텔리제이에서 자바스크립트 인라인 each 작성시 오류
[질문 내용]자바스크립트 인라인 each 작성시 정상적인 문법에도 불구하고 인텔리제이에서 에러 표시가 뜹니다.서버 실행후 페이지 소스를 보면 작동이 아예 안되는것 같습니다.인터넷 검색으로 해결법을 찾아보려고 했지만 관련된 오류가 하나도 없어서 질문 올려봅니다...ㅠㅠㅠ