묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
http://localhost:8080/hello에서 에러가 나요
서버도 껐다가 켜서 다시 하고 새로고침하고 클리어도 했는데 안돼요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드가 안돼요
윈도우 빌드가 안돼요 제발 도움좀요파일 이름은 Spring으로 했고 나머지는 다 강사님과 맞췄습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
new-form.jsp 404 에러 도와주세요!
new-form.jsp 파일에서 계속 404 에러가 뜹니다.강의 영상대로 진행하였고, 강의 자료 파일로 적용해보아도 해결되지 않았습니다.도움이 필요합니다.스프링 부트는 2.6 으로 만들었습니다. https://drive.google.com/file/d/1qjHK8LSMmQcBbh2bLGNK7coLZ_F1g1HB/view?usp=sharing
-
미해결스프링 핵심 원리 - 고급편
api 결과에 대한 질문
restapi로 댓글 crud를 할때에 대한 질문입니다. (crud 모두 restapi로 구현하였습니다.) create, update, delete에 대한 결과값으로 return new ResponseEntity<>(200); 을 하게 만들었습니다. 그리고 성공하면 클라이언트가 댓글리스트를 가져오는 api를 요청하도록 만들었습니다. 이렇게 만드는 게 맞는 건가요? ResponseEntity를 리턴하는 컨트롤러의 경우 @RestController말고 @Controller를 달아도 되던데, @RestController로 명시적으로 해주는 게 맞을가요? 자신이 쓴 댓글에는 수정 및 삭제를 보이게 하고 싶습니다. 다양한 방식이 있던데 일반적으로는 어떤 방식으로 하는지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession에서 쿠키를 Response에 넣어주기
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, SessionManager와 HttpSession을 비교하다 의문점이 들어 질문 드립니다.SessionManager를 구현할 땐 Cookie를 생성한 후 이를 response에 넣주도록 했습니다. 그래서 이를 사용할 때 파라미터로 response를 넣어줬구요.public void createSession(Object value, HttpServletResponse response) { // 세션 ID 생성하고 값을 세션에 저장 String sessionId = UUID.randomUUID().toString(); sessionStore.put(sessionId, value); // 쿠키 생성 Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId); response.addCookie(mySessionCookie); }그런데 서블릿에서 구현한 HttpSession을 사용했을 땐 Session을 생성한 후HttpSession session = request.getSession(true);setAttribute로 값을 넣어준 후 (이 때 쿠키가 생성된다고 이해했습니다.)session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);따로 response에 쿠키를 넣어주지 않았는데도 클라이언트에 쿠키가 저장되는것 같습니다. HttpSession이 이를 가능하게 해주는 걸까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
스프링 데이터 jpa
스프링 데이터 jpa 사용 시에 삭제하는 기능을 구현하면findById로 삭제할 엔티티를 찾은 다음에 delete하는 것그냥 바로 삭제할 id를 가지고 native쿼리 1번은 두번 db를 들락거리고2번은 한번 db를 들락거리는데2번이 좋은것 아닌가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
enumerate에 대한 질문
enumerate로 저장한 필드는 어떻게 string으로 바꾸는 건가요? enum으로 WAIT('대기'), REMOVE('삭제')이 있을때 화면에서는 대기, 삭제 등 한글로 출력하고 싶으면 responseDTO에서 변환해주는 게 맞을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
404 오류 질문입니다.
안녕하세요 5강의 GET 부분 진행하는데 404 오류가 계속 떠서 문의드립니다. 서버도 정상적으로 실행되고 타 프로젝트에서는 정상적으로 localhost:8080이 동작하는데 이 프로젝트만 계속 404 오류가 발생하네요..Java 11 사용중이고 Gradle Reload 해봐도 해결이 안돼 질문글 남깁니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
build.gradle 빌드 실패 에러(JDK 17.0.6, Spring boot 3.0.7)
안녕하세요, build.gradle의 빌드 실패가 나서 문의드립니다. JDK 버전은 다음과 같이 17.0.6입니다.그리고 인텔리제이 설정은 다음과 같습니다.java 컴파일러 설정2. 빌드 도구 설정3. 프로젝트 설정마지막으로 처음 프로젝트를 다운로드 받았던 설정은 다음과 같습니다.(spring boot 3.0.7 버전 사용)처음 build.gradle을 실행할 때부터 에러 로그 하나도 없이 그냥 빌드 실패했다는 에러가 뜹니다.컴퓨터를 여러번 껐다가 켜봐도 여전히 같은 에러가 뜹니다. 인텔리제이와 스프링이 완전 처음이라서 이 에러를 어떻게 해결해야 하는지 모르겠습니다. 커뮤니티의 다른 글들을 참고해봐도 딱히 도움이 되지는 않는 것 같습니다. 도와주시면 너무 감사하겠습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
ItemMapper Bean
[질문 내용]MyBatisConfig 에서 private final ItemMapper itemMapper; 이 부분이 bean을 찾을 수 없다고 하는데 테스트는 정상적으로 동작하는 이유가 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
NPE가 발생하는 이유를 모르겠습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위 사진에 보면 NPE가 발생하는데, 원인을 잘 모르겠습니다.policies에 값이 할당이 안되서 그런거같은데,,, 코드는 강의 자료와 똑같습니다.아래 소스 코드 첨부합니다.package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member, price); } } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
영속성 컨텍스트 저장(persist())과 커밋의 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요!에서 커밋되지 않기 때문에 INSERT문 안나가는건 이해 되는데요. persist()에 의해 영속성 컨텍스트에는 저장이 되어서 SELECT문도 안나가고 그냥 영속성 컨텍스트에서 가져와야 하는거 아닌가 라는 의문이 생겨서요.커밋 직전에 플러시 되면서 디비로 쿼리 나가는 건 알고 있었는데, 혹시 영속성 컨텍스트에 저장되는 것도 커밋이 되어야 일어나는 일인가요??어느 부분을 잘못 생각하고 있는건지 모르겠어요. 답변 부탁드려요!!
-
미해결토비의 스프링 부트 - 이해와 원리
DataSource 자동구성클래스 실습오류 발생
안녕하세요 강사님 항상 수업 잘 듣고 있습니다! 10강 DataSource 자동구성클래스 수업 실습을 따라하면서 오류가 발생했는데 원인을 못찾아서 질문드립니다! Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
-
미해결스프링 핵심 원리 - 기본편
MyLogger 의존성 주입 질문드립니다.
컨트롤러와 서비스에 MyLogger가 주입받는 것인지 질문드립니다. 컨트롤러는 LogDemoService와 ObjectProvider를 주입받습니다.public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; // ... }서비스는 ObjectProvider를 주입받습니다.public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; // ... } 결국 컨트롤러와 서비스에는 MyLogger가 주입받는 것이 아닌 것인지요? MyLogger는 DI가 아니라 DL의 역할만 해도 충분한 것일까요? 그렇다면 DI와 DL의 차이는 클라이언트에서 getObject()를 한번더 해서 찾아야 한다는 번거로움 말고는 없을까요? getObject() 이후 생성된 MyLogger는 @Autowired를 받는 것이 없는 것으로 보아 의존성 주입 없이 빈만 생성된 것으로 이해하면 될까요? 질문 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
MyLogger 싱글톤 추가 질문
이전 질문에 대한 궁금증이 생겨 추가 질문드립니다.https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55392&tab=community&category=questionDetail&q=541279 LogDemoController 단에서의 myLogger와 2. LogDemoService 단에서의 myLoger는 같은 객체인가요? 라는 질문에서스프링 컨테이너 생성 시점에 myLogger는 생성되기 전이라 의존성 주입이 안 되는 것 아닌가요? 이 때 생성되지 않은 myLogger 객체를 비교하는 테스트는 어떻게 해야 하는지 질문드립니다. 그 다음 강의에서 Provider의 getObject() 메서드를 이용하는 방법을 학습했습니다.컨트롤러에서 getObject() 메서드로 읽어온 후 println으로 toString을 찍어봤습니다.@Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody // String 반환값인 문자열을 그대로 보낼 수 있음 public String logDemo(HttpServletRequest request){ // HttpServletRequest는 고객 요청 정보를 얻을 수 있음 String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); System.out.println("Controller.myLogger.toString() = " + myLogger.toString()); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK!"; } }서비스에서 getObject() 메서드로 읽어온 후 println으로 toString을 찍어봤습니다.@Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id){ MyLogger myLogger = myLoggerProvider.getObject(); System.out.println("Service.myLogger.toString() = " + myLogger.toString()); myLogger.log("service id = " + id); } }생성된 myLogger나 컨트롤러, 서비스 모두 같은 객체라는 것을 확인했습니다.[64d203f8-a2d5-4923-ad77-fcad3bd19d21] request scope bean create : hello.core.common.MyLogger@6cc43735 Controller.myLogger.toString() = hello.core.common.MyLogger@6cc43735 [64d203f8-a2d5-4923-ad77-fcad3bd19d21][http://localhost:8080/log-demo] controller test Service.myLogger.toString() = hello.core.common.MyLogger@6cc43735 [64d203f8-a2d5-4923-ad77-fcad3bd19d21][http://localhost:8080/log-demo] service id = testId [64d203f8-a2d5-4923-ad77-fcad3bd19d21] request scope bean close : hello.core.common.MyLogger@6cc43735 그렇다면 컨트롤러와 서비스가 싱글톤 스코프라서 같은 객체를 불러오는 것이 아니라(myLogger를 주입한 것이 아니라서), ObjectProvider가 스프링 컨테이너에 등록된 myLogger 빈을 lookup하기만 해서 찾아온 것으로 이해하면 될까요??질문 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
TestBean 클래스에서 required = false 호출 가능하게 하는 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.강의를 듣다가 TestBean 클래스의@Autowired(required = false) 도 호출이 되게 하고 싶어서 테스트하고 있습니다.그래서 위 사진 39 ~ 45 라인과 같이 생성자를 만들어 주었습니다.Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.example.core.member.Member' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}그런데 위와 같은 에러가 발생하는데 어떻게 해야 required = false 도 호출 가능하게 할 수 있을까요??
-
해결됨스프링 핵심 원리 - 기본편
인텔리제이 단축키
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]혹시 인텔리제이 한 줄 선택 하는 단축키가 뭔가요??..검색해서 나온거 해봐도 안되요ㅠ
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
MVC07 파일 업로드 부분 수강중인데 갑자기 mysql 쿼리가 느려졌습니다..
평소에는 바로 insert , delete 됐는데등록 버튼을 눌러도 한참 기다리다가 갑자기 timeout에러가 뜨네요ㅜ그래서 테이블 자체를 drop하려고 해도 sql의 status창에 started 라고 뜨고 succeed나 failed도 안뜨구요..ㅠ어떻게하면 좋을까요..
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
다음 강의 또 언제 나오나요
ㅠㅠ 6월 5일인데 언제나오나요
-
해결됨스프링부트 시큐리티 & JWT 강의
PrincipalDetails, PrincipalDetailsService에 대한 질문
PrincipalDetails시큐리티가 /login을 낚아채서 로그인을 진행시킨다.PrincipalDetailsService시큐리티 설정에서 loginProcessingUrl("/login") 처리 이게 view를 리턴하는 방식에서는 formLogin을 처리해줘서 이렇게 여기서 작성하면 controller에서 기능을 구현하지 않아도 login을 시큐리티가 알아서 해주는 걸로 알고 있는데요.그러면 REST API 방식일때는 SecurityConfig에 formLogin.disable()로 처리하는 걸로 알고 있는데 그러면 PrincipalDetails, PrincipalDetailsService은 REST 방식에서는 작성하지 않는건가요? 근데 그러면 의문이 저 2개의 클래스를 생성하지 않으면@Data public class PrincipalDetails implements UserDetails, OAuth2User { private User user; private Map<String, Object> attributes; // 일반 로그인 public PrincipalDetails(User user) { this.user = user; } // Oauth 로그인 public PrincipalDetails(User user, Map<String, Object> attributes) { this.user = user; this.attributes = attributes; } // 해당 User의 권한을 리턴하는 곳 @Override public Collection<? extends GrantedAuthority> getAuthorities() { Collection<GrantedAuthority> collection = new ArrayList<>(); collection.add(new GrantedAuthority() { @Override public String getAuthority() { return user.getRole(); } }); return collection; } // 사용자의 패스워드를 반환 @Override public String getPassword() { return user.getPassword(); } @Override public String getUsername() { return user.getEmail(); } // 계정 만료 여부 반환 @Override public boolean isAccountNonExpired() { // 만료되었는지 확인하는 로직 // true = 만료되지 않음 return true; } // 계정 잠금 여부 반환 @Override public boolean isAccountNonLocked() { // true = 잠금되지 않음 return true; } // 패스워드의 만료 여부 반환 @Override public boolean isCredentialsNonExpired() { // 패스워드가 만료되었는지 확인하는 로직 // true = 만료되지 않음 return true; } // 계정 사용 가능 여부 반환 @Override public boolean isEnabled() { // 계정이 사용 가능한지 확인하는 로직 // true = 사용 가능 return true; } @Override public Map<String, Object> getAttributes() { return attributes; } @Override public String getName() { return null; } } 여기서 UserDtails, OAuth2User을 상속받아서 Override하는 부분은 어떻게 구현하나요?