묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티
파일이 수시로 이름이 바껴있네요 ㄷㄷ
CustomAuthenticationProvider 로 폼인증방식 강의 진행하셨는데요. Ajax인증방식에서는 FormAuthenticationProvider로 파일명이 Custom에서 바껴있는데 중간에 이름만 바꾸신건가여?? 강의를 듣다보면 파일이름이 달라져서 헷갈립니다. ㄷㄷ강의진행시에 바로직전까지 했던 소스의 버전관리가 필요해보입니다. 다음강의 들으면 파일명이 혹은 실제코드가 달라져있는게 초짜인 수강생들에겐 좀 힘듭니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java 17을 깔고 세팅도 다 맞췄는데 이런메세지가 떠요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]밑에 무슨 경고문이 뜨고 실행버튼이 여기서는 보이지 않아요 이걸 어떻게 하면 되나요 ㅠㅠ++)build.gradle 을 open as project 로도 해보았습니다.
-
미해결스프링 시큐리티 OAuth2
keycloak인증 인가 정보에 부가정보를 추가할 수 있나요?
안녕하세요. 인증 인가 방법에 대해서 강의를 통해 많은 도움이 되고 있습니다.인증 인가 후 또는 인증 인가시에 부가 정보를 토큰 정보에 포함시킬 수 있는지 궁금합니다.예를 들면 해당 사용자의 서비스별 구독 정보등을 토큰에 포함시켜 이 정보를 인가 정보로 활용하고 싶은데요. 이런 정보는 access_token과 별개로 인증 후에 따로 토큰을 생성하여 관리해야 하나요.아니면 혹시 keycloak에서 생성하는 access_token에 포함시키는 방법이 있는지 궁금합니다.조언 부탁드립니다. 감사합니다.
-
미해결코틀린 문법부터 실무까지 (실전 자바->코틀린 변환)
실습. gradle update/script 강의 문의
강의내용대로 project structor와 setting에서 SDK설정을 하고 grade build를 했으나 다음과 같이 오류가 납니다.오류메시지/prince-maker-main/build.gradle.kts:5:59: Unresolved reference: id 오류 라인 소스id("org.springframework.boot") version springBootVersion id("io.spring.dependency-management") version "1.1.4"해당부분이 해결되지 않으면 이후 강의는 눈으로만 봐야될꺼 같아서 문의드립니다~
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트실행중 테스트는 잘 되는데 오류가 한 줄 계속 발생합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended이 오류는 무엇인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
model.addAttribute
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이미지와 같이 model.addAttribute("data","hello!!"); 입력했을 때, 아래와 같은 오류가 발생합니다.Cannot resolve method 'addAttribute' in 'Model'
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트가 올바르게 되지 않는 것 같아요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); } @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }강의를 따라하다가 좀 잘 안되서 pdf내용을 그대로 긁어왔는데 import org.junit.jupiter.api.AfterEach;가 빠져있더라구요. 그것만 수정하면 될 줄 알았는데, get()과 assertThrows에서 문제가 발생하고있는것 같습니다 왜그럴까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
맥 터미널창에서 파일을 찾을수 없다고 떠요,,
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]spring 파일에 hello-spring을 생성했고터미널에서 cd spring을 입력하면 파일을 찾을 수 없다고 뜨는데 어떻게 해야하나요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberRepositoryTest 오류 NoMatching
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트를 하는데 noMatch라는 문구가 뜹니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
@RequestBody 사용 이유
ADD API 에서는 "@Request Param" 을 DTO 타입(CalculatorAddRequest request)으로 인자를 받으며 생략했는데 @RequestBody 는 DTO 타입으로 인자를 받았음에도 생략하지 않은 이유가 궁금합니다.DTO 타입을 사용하는것이 쿼리에 있는 name 과 DTO 의 변수명이 동일한 것을 자동으로 매칭시켜 주는 것이라면왜 BODY 에 있는 변수명과 DTO 의 변수명이 동일할 때는 @RequestBody 없이 매칭되지 않는지요...!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
main -java 밑의 클라스에서 실행시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위 화면과 같이 hellospring을 다운 받아서 인텔리제이에 환경 세팅을 끝내고 설치까지 완료했는데 클래스를 실행하려고 했더니 선생님의 화면과 다르게 public static void main(String[] args)라는 main 메서드는 없고 실행시키면 위와 같은 경고 메세지가 출력됩니다.... 뭐가 잘못된건지 모르겠습니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
DispatcherServlet과 프로젝트 동작의 이해
Port번호 변경이 안 됩니다. debug모드는 적용이 되는 것 같은데 왜그럴까요
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
dto 관련 질문입니다.
컨트롤러(Api) 패키지 안에 만드신 dto(request, response)는 private final로 선언하셔서 데이터가 변경되지 않도록 선언하셨고,서비스단 패키지 안에 만드신 ReviewDto는 private으로만 선언하여 데이터가 언제든 변경이 되게끔 선언하셨는데이 차이가서비스단 로직의 데이터는 비즈니스 로직을 통해 언제든 변할 수 있기 때문이고컨트롤러단 로직은 받아온 데이터와, 응답하는 데이터이기 때문에 변할 일이 없기에 선언 방식이 다른 것이 맞을까요? 너무 기초적인 부분일 수 있지만제가 이해한 바가 맞는지 궁금하여 질문드립니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
모임참가 취소 할때 로직 질문
안녕하세요이부분에서 event.removeEnrollment(enrollment);이 메서드를 타고 들어가면이 메서드가 실행되는데 이때 106라인->enrollment.setEvent(null);이 코드는 꼭 필요 한건가요 ??첫번째 사진 보시면 어차피enrollmentRepository.delete(enrollment);이걸 실행 하는데 왜 있는건지 이해가 잘 안갑니다 ! =================두번째 질문===========이 부분에서 취소를 하면 대기하던사람이 자동 확정 하는 로직인데대기 하던 사람들 중 제일 먼저 신청을 해놓은 사람들을정렬해서 true 처리 해야하는데 이건 안되있는거 아닌가요 !!?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
QClass 생성시 EnumPath 문제
안녕하세요 강의 실습 따라 진행하다가 조금 다른 점이 생겨서 문의 드립니다.package com.group.libraryapp.domain.book; import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.PathMetadata; import javax.annotation.processing.Generated; import com.querydsl.core.types.Path; /** * QBook is a Querydsl query type for Book */ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QBook extends EntityPathBase<Book> { private static final long serialVersionUID = -608098416L; public static final QBook book = new QBook("book"); public final NumberPath<Long> id = createNumber("id", Long.class); public final StringPath name = createString("name"); public final EnumPath<BookType> type = createEnum("type", BookType.class); public QBook(String variable) { super(Book.class, forVariable(variable)); } public QBook(Path<Book> path) { super(path.getType(), path.getMetadata()); } public QBook(PathMetadata metadata) { super(Book.class, metadata); } } 위와 같이 EnumPath의 경우에 type 패키지 아래에 정의해 둔 이넘 클래스를 제대로 가져오지 못하는 문제가 발생하고 있습니다.QUserLoanHistory에서도 UserLoanStatus에 대해 똑같은 상황이 발생해서 생성된 QClass를 수동으로 고쳐서 사용중입니다. 이게 제 IDE에서만 이상 현상이 발생하는 것인지 모르겠습니다.public final EnumPath<com.group.libraryapp.type.UserLoanStatus> status = createEnum("status", com.group.libraryapp.type.UserLoanStatus.class); 이 부분도 수정 전에는 아래와 같은 상태였습니다.public final EnumPath<com.group.libraryapp.domain.user.UserLoanStatus> status = createEnum("status", com.group.libraryapp.domain.user.UserLoanStatus.class); 제가 설정을 무언가 잘못한 부분이 있는 걸까요?감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
try-catch 3개로 구현한 이유?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 ~ 순수 JDBC 11:08를 보면리소스를 해제하는 close 메서드가 있습니다.3개의 try - catch 문에서 매개변수 3개가 null이 아니면 close를 하고 예외가 발생하면 SQLException을 던지는 방식인데요 발생하는 모든 예외가 다 똑같이 SQLException인데 try - catch 3개로 한 특별한 이유가 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터 초기화하는 방법(@PostConstruct)
제 문제 해결 접근이 맞는것인지 질문드립니다! 테스트할 때마다 회원, 상품을 새로 등록해야하는 것이 번거로워서, 기본편에서 배운 초기화 콜백을 이용해 우선 Item을 초기화해보려고 했습니다. // ItemService.java @PostConstruct @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }위와 같이 ItemService에 초기화 메서드를 추가했는데 계속 해서 에러가 났습니다. 검색해보니 아무래도 초기화 콜백과 트랜젝션 처리를 initData()하나로 동시에 처리하려다보니 발생한 문제 같았습니다. 초기화 콜백을 확실히 완료하고나서 트랜젝션 처리를 해야 트랜젝션이 정상적으로 작동하는 것 아닌가 싶습니다. 단순히 코드상으로 이를 보장할 방법이 떠오르지 않았습니다. 이 때 떠오른게 DB2편의 @EventListener(ApplicationReadyEvent.class)인데, ApplicationReadyEvent가 스프링 컨테이너 초기화를 완전히 마치고 발생하는 이벤트라고 알고 있습니다. 이렇게 하니 초기화가 잘 됐습니다. 이처럼 선언적 트랜젝션을 적용하는 상황에서 초기화를 하기 위해서는 @EventListener(ApplicationReadyEvent.class)를 적용하는 것이 맞는 접근법일까요?@EventListener(ApplicationReadyEvent.class) @Transactional public void initData() { Book book1 = new Book(); book1.setName("book1"); book1.setPrice(1000); book1.setStockQuantity(10); book1.setAuthor("Steven"); book1.setIsbn("10000"); itemRepository.save(book1); }정상 작동한 최종 코드입니다.
-
미해결스프링 시큐리티
HttpSessionSecurityContextRepository를 사용안하는 문제
선생님 안녕하세요.스프링 시큐리티 업데이트 버전만 손꼽아 기다리는 중입니다ㅠㅠ우선 저는 프로젝트에서 기존 버전이 아니라 최신 버전으로 Security를 적용하고 session 저장소로 @EnableRedisHttpSession를 사용해 Redis를 사용하는 중입니다.Redis에 sessionId가 저장되는것까지 확인했습니다.선생님 강의보면서 참고하면서 잘 따라왔다고 생각했는데, 아래처럼 에러가 뜹니다. HttpSessionSecurityContextRepository에서 SPRING_SECURITY_CONTEXT Key를 이용해서 찾은게 SecurityContext가 아닌 Authentication 인증객체라는 내용 같은데요.Authentication < SecurityContext < SecurityContextHolder가 아니라 Authentication < SecurityContextHolder가 된것 같습니다.20240322 21:08:43.930 [http-nio-8080-exec-2] WARN o.s.s.w.c.HttpSessionSecurityContextRepository - SPRING_SECURITY_CONTEXT did not contain a SecurityContext but contained: '{authentication={authorities=[{authority=ROLE_ADMIN}], details={remoteAddress=0:0:0:0:0:0:0:1, sessionId=null}, authenticated=true, principal={password=null, username=sejinpark@email.com, authorities=[{authority=ROLE_ADMIN}], accountNonExpired=true, accountNonLocked=true, credentialsNonExpired=true, enabled=true}, credentials=null, name=sejinpark@email.com}}'; are you improperly modifying the HttpSession directly (you should always use SecurityContextHolder) or using the HttpSession attribute reserved for this class?그래서 로그인한 상태에서 아래 내용을 출력해도 AnonymousUser가 뜨는데요.SecurityContextHolder.getContext().getAuthentication() 인증 저장소 필터 챕터에서 SecurityContextPersistenceFilter를 deprecated되서 SecurityContextHolderFilter를 디버깅해봤더니, SecurityContextRepository 구현체 2개 (HttpSessionSecurityContextRepository, DelegatingSecurityContextRepository) 중에서 DelegatingSecurityContextRepository로만 가서 문제인것 같습니다. 아예 HttpSessionSecurityContextRepository로 들어가질 않더라구요. 이게 문제인것 같은데, 어느부분을 확인해아할지, 혹은 어떤 필터를 커스텀해야할지 여쭙고싶습니답참고로 securityContext를 아래처럼 설정했습니다 .securityContext((securityContext) -> securityContext .securityContextRepository(new DelegatingSecurityContextRepository( new HttpSessionSecurityContextRepository() ))
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello페이지에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]페이지 에러가 뜹니다 에러내용은 이렇습니다타임리프쪽이 에러이고 다른파일에서는런이안돼는데 HelloSpringAplication파일에서만 런이되는데 원래 이런건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Entity 클래스에 기본 생성자가 없는데 왜 에러가 안나는 걸까요
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]섹션 2 - 엔티티 클래스 개발2 15:18쯤에 강사님께서도 말씀하셨고, 직접 보여주셨듯이 Entity 클래스에 기본생성자가 없으면 컴파일 에러가 발생한다고 알고 있는데 저는 왜 컴파일 에러가 발생하지 않을까요?? @Embeddable 어노테이션 때문에 그런가 싶어서 다른 Entity 클래스에서도 확인해봤지만 똑같이 기본 생성자가 없어도 컴파일 에러가 발생하지 않습니다.