안녕하세요 홍팍님 강의 다시 듣고 있습니다 ㅎㅎ 우선 교재 출간 축하드립니다. 본론으로 들어가면, DB연결에서 resources 아래 data.sql을 만들고 insert문을 통해 더미들을 생성하는 부분에서 에러가 발생합니다. Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/tttzk/Desktop/firstproject/firstproject/out/production/resources/data.sql]: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ARTICLE" not found (this database is empty); SQL statement: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111') [42104-214] data.sql 파일 삭제 후 h2를 보면 article테이블은 생성되는데, data.sql파일 작성 후 서버를 작동하면 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ARTICLE" not found (this database is empty); SQL statement: INSERT INTO article(id, title, content) values (1, 'dummy1', '1111') [42104-214] 위와 같이 에러가 발생하면서 Process finished with exit code 1 이렇게 띡 하고 끝납니다. 구글링 했을 때는 저와 다른 사례가 나오는 게 많아서 해결이 안됩니다. 도와주십셔
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] SpringDataJpaMemberRepository에 JpaRepository를 extends 하였음에도 Bean 등록이 되지 않아 Test시 어떠한 코드도 실행이 안되는 것 같습니다. 강의를 돌려보아도 문제점을 찾지 못하여 질문 남깁니다.
지금 강의에서는 Firstcontroller에 username, nickname 두가지를 선언해서 각각 사용하셧는데, username 을 출력하고자 하니 추상클래스로 username 구문을 선언해두고, controller 페이지에서 오버라이드해서 사용하면서 model 페이지에 값만 보내줄 수 있다면 controller가 조금더 깔끔해지고 최적화가 되지않을까 라는 생각이 들었습니다. 가능할까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 localhost :8080이 에러가나서 localhost :8090으로 접속하려고 Edit configurations와 application.yaml에도 포트 번호 사진과 같이 추가하였는데도 계속 에러가 나네요...ㅠ 어디가 잘못된걸까요...?
[질문 내용] 배운 내용을 바탕으로 혼자 프로젝트 생각해서 만들고 있는데요 어떤게 궁금한지 간단히 말씀드리면 멤버라는 엔티티가 있습니다.. 멤버라는 엔티티에는 오늘의 추천 할 일이 필요하고 날마다 바뀝니다. 추천할 일은 개발자 혹은 운영자가 직접 넣는 것이구요.. 이러면 member랑 추천선행이랑 연관관계가 필요가 없지 않나요?? 이러면 추천선행은 ERD? 같은거 설계할때 연관관계ㅒ 없이 동떨어져있는 걸로 그리면 될까요?? 혹시라도 전에 사용했던 추천선행이 안나오게 하려면 이 경우는 연관관계를 세팅하는게 좋을까요?
강의 : 검증 아키텍처 이해 - BearerTokenAuthenticationFilter 안녕하세요 강사님, 강의 학습중 질문이 있습니다. 다음은, 시큐리티 설정 파일 일부 코드이며 여기서 JwtAuthorizationRsaPublicKeyFilter 를 추가로 Bean 등록하였는데요. 일단 Bearer 에 관련된건 BearerTokenAuthenticationFilter가 수행하고 doFilterInternal 메서드에서 시큐리티 컨텍스트에 저장 하는 코드를 확인했습니다. 여기서 수업시간에 생성한 JwtAuthorizationRsaPublicKeyFilter 필터입니다 첫번째 질문 강의 예제 한에서는 시큐리티 컨텍스트에 저장하는 초점에 있어서는, JwtAuthorizationRsaPublicKeyFilter 필터가 없어도 문제 없는것 같은데 제 생각이 맞나요? 두번째 질문 두 필터의 순서는 어떻게 지정되는건가요? 세번째 질문 또한 JwtAuthorizationRsaPublicKeyFilter 필터에 추가적인 로직을 부여한다면, 1. 직접 커스텀 필터를 특정 필터 전/후에 등록 2.리프레쉬 토큰 로직 3.DB 커넥션이 필요한 작업 4. 토큰 유효시간 검증 등과 같은 작업할때 일까요? 아니면 또다른 상황이 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 이번에 기본적으로 필요한 자바와 db를 독학한 후 스프링을 시작하였습니다. 이번 빌드를 실행할 때, 저는 자바 17버전과 스프링부트 3.0 이상 버전을 다운했기에 교안에 나와있는 '자주하는 질문'에 나와있는 [Querydsl 부트 3.x 설정] 의 gradle 버전에 맞게 코드를 옮겨붙인 후 실행하였습니다. gradle의 코드를 처음 그대로의 상태(gradle 수정 전)에서 실행할 때는 intellij 와 윈도우 모두 잘 실행되었으나, gradle 부분을 Querydsl 부트 3.x 설정로서 실행하니 intellij에선 이상이 없었지만, 윈도우 cmd에서 실행할 시 /hello 는 연결이 안되었습니다. gradle 수정으로 인한 에노테이션 연결이 달라져 라이브러리를 가져오지 못한 건가 라는 생각은 들지만, 이게 확실치 않고 어떻게 수정을 해야할지 찾아봐도 해결책을 찾지 못해 질문드립니다. (빌드를 하는데는 오류가 발생하지 않았습니다.) 1.수정 전의 gradle 수정 후의 gradle - ( '자주하는 질문'에 나와있는 [Querydsl 부트 3.x 설정] ) plugins { id 'java' id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } jar { enabled = false } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } cmd에서의 실행순서 1. 저장해놓은 hello-spring 디렉토리로 이동 2. gradlew.bat build -x check 으로 빌드 ( -x check 없이 빌드 시 에러가 발생하여 구글링을 통해 찾아낸 방법입니다.) 3. java -jar (빌드한 jar 파일) 결과 수정 전 gradle 에서는 이상이 없으나. 수정 후 gradle로 실행 시, intellij에서는 이상없이 잘 작동하지만, cmd로 실행 시 localhost:8080/hello 에서 whitelable error page가 발생 저의 오류원인 추측 1.애노테이션이 제대로 되지 않아 라이브러리를 불러오지 못했다. 2. 지정된 파일 경로가 잘못되어 에러가 발생했다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] gradlew.bat 는 BUILD SUCCESSFUL 이 떴는데 gradlew build 는 아래와 같은 오류가 발생합니다. 자바 버전은 20이고, 스프링 버전은 3 입니다. > Task :test FAILED Error: Could not find or load main class worker.org .gradle.process.internal.worker.GradleWorkerMain Caused by: java.lang.ClassNotFoundException: worker.org .gradle.process.internal.worker.GradleWorkerMain
안녕하세요 강의 정말 잘보고있습니다!! 쿠키의 수명이 30일인데 만약 토큰의 세션값(UUID)이 탈취된다면 해당방식에선 어떻게 대응할수있을까요? httpOnly나 Secure옵션 등으로인해 현실적으로 탈취는 쉽지않을것이다.. 로만 생각하기엔 뭔가 찝찝한부분이 있는것같은데 제가 놓치고있는부분이 있을까요?? 또한 호돌님이 생각하시는 해당강의에서 다뤘던 쿠키에 세션토큰을 담아서 인증하는 방식의 단점이 궁금합니다!!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 프론트와 백앤드로 나눠서 프로젝트를 진행중입니다. swagger를 강의를 참고하여 적용중인데, 다음과 같이 문서화가 되지 않고있습니다. @Configuration @EnableSwagger2 @EnableAsync @EnableWebMvc public class SwaggerConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() // ApiSelectorBuilder 생성 .apis(RequestHandlerSelectors.basePackage("com.example.petree.domain")) // API 패키지 경로 todo 패키지 경로 수정 .paths(PathSelectors.ant("domain/**/controller/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정 .build() .apiInfo(apiInfo()) // API 문서에 대한 정보 추가 .useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거 .securityContexts(Arrays.asList(securityContext())) .securitySchemes(Arrays.asList(apiKey())) ; } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API 문서") .description("API에 대해서 설명해주는 문서입니다.") .version("1.0") .build(); } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) .build(); } private List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return Arrays.asList(new SecurityReference("Authorization", authorizationScopes)); } private ApiKey apiKey() { return new ApiKey("Authorization", "Authorization", "header"); } } 위는 저희 프로젝트의 패키지경로입니다. 무엇이 문제인가요..? 혹시 몰라 SecurityConfig도 올려보겠습니다..
OAuth 2.0 Resource Server - MAC & RSA 토큰 검증 [기본 환경 및 공통 클래스 구성] 강의 편에서 JWT Filter 등록 부분입니다. JWT 필터가 어떤 AuthenticationManager를 사용할지 이 메서드로 set 해주잖아요. 이떄 명시적으로 null을 넘겼는데 @Bean으로 등록했으니 자동주입 받음으로서 명시적 null을 무시하고 스프링 컨테이너에서 가져온다고 이해하는게 맞을까요?
안녕하세요 security에서 username이랑 password를 db에서 자동으로 비교해주나요? 만약 소셜 로그인만 존재하는 페이지는 비밀번호를 db에 저장하지 않는데, 이 경우엔 어떤 식으로 처리해야 할까요? 소셜로그인에서 로그인 성공 시 username을 받아와서 다시 security로 api호출을 해 주는 방식으로 로그인 하려고 했는데, 비밀번호가 없으니 어떻게 해야할지 모르겠습니다,,!!
안녕하세요, 배운 내용을 기반으로 스스로 개발 연습을 하고 있었습니다. Article이라는 엔티티에 본문에 첨부되어 뷰에서 보일 이미지 파일들과 버튼을 누르면 다운로드가 가능한 첨부 파일들을 동시에 넣고자 했습니다. 이미지 파일과 첨부 파일은 모두 UploadFile이라는 엔티티를 사용하였습니다. 서버에서 실험차 Article 엔티티를 작성해보니, 이미지 파일과 첨부 파일 리스트가 각각 적용 되는 것이 아니라 합쳐졌습니다. 예를 들어 이미지 파일을 2개 등록하고 첨부 파일을 3개 등록하였으면, imageFiles와 attachedFiles List의 사이즈가 각각 2, 3개 인 것이 아니라 똑같이 5, 5개였습니다. 이미지 파일과 첨부 파일이 다른 종류의 파일임에도 불구하고 결국 같은 엔티티를 공유하고 있어서 발생한 문제인걸까요? 현재 생각하고 있는 해결책은 이미지 파일과 첨부 파일을 각각 다른 엔티티로 만들어서 따로 테이블을 관리하면 되겠다고 생각중입니다. 하지만 혹시 이보다 더 좋거나 근본적인 해결책이 있지 않을까 싶어서 질문을 올려봅니다. 두 엔티티의 코드는 다음과 같은데 혹시 다른 코드가 더 필요한 것이라면 올리겠습니다! // 게시글 엔티티 @Entity @Getter public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "article_id") private Long id; private String writer; private String title; @Lob private String content; @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, orphanRemoval = true) private List<UploadFile> imageFiles = new ArrayList<>(); @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, orphanRemoval = true) private List<UploadFile> attachedFiles = new ArrayList<>(); public static Article createArticle(ArticleAddForm articleAddForm, List<UploadFile> imageFiles, List<UploadFile> attachedFiles) { Article article = new Article(); article.writer = articleAddForm.getWriter(); article.title = articleAddForm.getTitle(); article.content = articleAddForm.getContent(); article.imageFiles.addAll(imageFiles); article.attachedFiles.addAll(attachedFiles); for (UploadFile imageFile : imageFiles) { imageFile.setArticle(article); } for (UploadFile attachedFile : attachedFiles) { attachedFile.setArticle(article); } return article; } } // 업로드 파일 엔티티 (이미지 파일, 첨부 파일의 엔티티로서 동시에 사용됨) @Entity @Getter public class UploadFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "upload_file_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "article_id") private Article article; private String originalName; private String storeName; public UploadFile() { } public UploadFile(String originalName, String storeName) { this.originalName = originalName; this.storeName = storeName; } public void setArticle(Article article) { this.article = article; } }