176만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
@ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(BindException.class) public ApiResponse<Object> bindException(BindException e) { 이런식으로 전역적으로 validation을 해주면 aop를 사용하지 않고 더 편하고 어노테이션도 안달아줘도 될거같은데 aop를 사용하면 장점이 무엇인가요?
spring-boot junit 소프트웨어-테스트
qheogus55
2024-08-21T02:56:30.694Z
댓글 2
좋아요 0
조회수 305
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
빌더 패턴을 사용하여 객체를 생성하는 방법과 정적 팩토리 메서드를 사용하여 객체를 생성하는 방법을 각각 언제 사용하면 좋을지 궁금합니다. 구글링해서 찾아보니 빌더 패턴은 파라미터가 많을때 사용하고 정적 팩토리 메서드는 파라미터가 적을때 사용한다고 하는데 파라미터가 많고 적음의 기준도 잘 모르겠고 명확하게 언제 사용하면 좋을지에 대한 글을 찾지 못해 질문글을 작성합니다.
java spring 웹앱 spring-boot jpa
감바스
2024-08-21T01:16:47.076Z
댓글 1
좋아요 0
조회수 1035
미해결
코드로 배우는 React 19 with 스프링부트 API서버
안녕하세요 Redux 수업 다 듣고 이해 되지 않아서 따로 프로젝트를 뽑아서 Redux를 연습 하고 있어요... 일단 이해는 다된거 같아요... 아래 dispatch 하는 부분에서 오류가 뜨네요.. 먼저 처리 순서가 ... input에 데이터를 입력하고 로그인 버튼을 클릭하고 다시 input에 데이터를 입력하면 오류가 뜨네요 cannot assign to read only property 'current' of object '# object ' 버튼 클릭하는 부분에 dispatch하는 내용을 넣었구요.. 구글에는 깊은 복사 뭐 이런거 있던데 그거랑 관련 없는거 같구... =================================== 리듀스 기본을 알면 저 문제 해결될꺼라는 어떤분의 답변이 야속하네요 ... 코드 시작 ============================= import { useState } from "react"; import { useDispatch } from "react-redux"; import {login} from "../slices/loginSlice" const initState = { email:'', password:'' } function LoginComponent(props) { const [loginParam, setLoginParam] = useState({...initState}) const disPatch = useDispatch() const handleChange = (e)=> { loginParam[e.target.name] = e.target.value setLoginParam({...loginParam}) } const handleLoginClick = (e)=>{ console.log(".......") disPatch ( login(loginParam) ) } const handleLogoutClick = (e)=>{ disPatch( login(initState) ) } return ( <div> <div className="flex flex=nowrap gap-x-8 place-content-center "> <div> <div> login </div> <div> <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md" name="email" type ={'text'} value={loginParam.email} onChange ={handleChange}> </input> </div> <div> <input className="text-base w-300 p-6 rounded-r border border-solid border-neutral-500 shadow-md" name="password" type={'password'} value={loginParam.password} onChange={handleChange} > </input> </div> <div> <button className = "rounded p-4 w-36 bg-blue-500 text-xl text-white" onClick={handleLoginClick} > Login.. </button> </div> </div> <button onClick={handleLogoutClick}> logout </button> </div> </div> ) } export default LoginComponent; =============================
react spring-boot jpa jwt redux-toolkit
just kim
2024-08-20T17:34:22.565Z
댓글 1
좋아요 1
조회수 137
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 자바 버전 17이상을 사용하는데 빌드가 안됩니다.
썩은도토리
2024-08-20T08:08:27.175Z
댓글 1
좋아요 0
조회수 367
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
선생님처럼 무한 루프로 안가고 500에러가 뜨는데 왜 그런건가요??
봉준
2024-08-20T07:01:36.134Z
댓글 2
좋아요 0
조회수 423
미해결
스프링 배치
package springbatch.batch.job.file; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepScope; import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.database.JpaItemWriter; import org.springframework.batch.item.database.builder.JpaItemWriterBuilder; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import springbatch.batch.chunk.processor.FileItemProcessor; import springbatch.batch.domain.Product; import springbatch.batch.domain.ProductVO; import javax.persistence.EntityManagerFactory; @Configuration @RequiredArgsConstructor public class FileJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; private final EntityManagerFactory entityManagerFactory; @Bean public Job fileJob() { return jobBuilderFactory.get("fileJob") .start(fileStep1()) .build(); } @Bean public Step fileStep1() { return stepBuilderFactory.get("fileStep1") .<ProductVO, Product>chunk(10) .reader(fileItemReader(null)) .processor(fileItemProcessor()) .writer(fileItemWriter()) .build(); } @Bean @StepScope public FlatFileItemReader<ProductVO> fileItemReader(@Value("#{jobParameters['requestDate']}") String requestDate) { return new FlatFileItemReaderBuilder<ProductVO>() .name("flatFile") .resource(new ClassPathResource("product_" + requestDate +".csv")) .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) .targetType(ProductVO.class) .linesToSkip(1) .delimited().delimiter(",") .names("id","name","price","type") .build(); } @Bean public ItemProcessor<ProductVO, Product> fileItemProcessor() { return new FileItemProcessor(); } @Bean public JpaItemWriter<Product> fileItemWriter() { return new JpaItemWriterBuilder<Product>() .entityManagerFactory(entityManagerFactory) .usePersist(true) .build(); } } application.yml spring: profiles: active: mysql jpa: hibernate: ddl-auto: update database-platform: org.hibernate.dialect.MySQL5InnoDBDialect show-sql: true open-in-view: false properties: hibernate.format_sql: true --- spring: config: activate: on-profile: mysql datasource: hikari: jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true&character_set_server=utf8mb4 username: root password: ---- driver-class-name: com.mysql.cj.jdbc.Driver batch: job: names: ${job.name:NONE} enabled: false jdbc: initialize-schema: always pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spring-batch</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-batch</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-batch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.4.4</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>9.0.0</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>5.3.7</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.20</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> 잘 작성한거 같은데, 디버그 중단점 걸어놓아도 안걸러지네요ㅠㅠ 원인을 모르겠습니다.. requestDate 부분이랑 fileItemReader이 동작을 안하는거 같습니다.
seungwan37
2024-08-20T06:26:13.002Z
댓글 1
좋아요 0
조회수 245
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
jar명령어까지 하여 스프링부트를 실행해주었는데 다음과 같은 오류가 뜨고 웹에서도 서버 내부 오류라고 뜹니다. 무엇이 잘못된건지 모르겠네요. https://www.inflearn.com/community/questions/1199055/45%EA%B0%95-dev-%EC%97%B0%EA%B2%B0-%EC%97%90%EB%9F%AC 이거 참고해도 이해가 안가요
java spring aws mysql spring-boot jpa
2024-08-19T14:49:00.233Z
댓글 1
좋아요 0
조회수 128
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의에서 @Transactional 을 테스트코드에 붙여서 테스트를 진행하였는데요 @AfterEach 어노테이션으로 void clean() { 메서드를 만들어 리파지토리를 정리하는거랑 차이가 있나요? 코드가 간결해지는 이점으로 @Transactional 를 자주 사용하게 되는건가요? 실무에서 어떻게 쓰이는지 궁금합니다.
java spring 웹앱 spring-boot jpa
gogo
2024-08-19T12:33:48.895Z
댓글 1
좋아요 0
조회수 148
미해결
견고한 결제 시스템 구축
강의 30분 40초에 보시면 success, failure, unknown 이렇게 상태를 변경하면서 메서드를 3개나 두시는데 이유가 궁금합니다. 만약 jpa나 querydsl을 사용한다면 코드가 달라질까요?
spring spring-boot dbms/rdbms backend payments 수업질문
victor
2024-08-19T11:02:33.038Z
댓글 2
좋아요 0
조회수 274
미해결
실전! 스프링 데이터 JPA
[질문 내용] 강사님이 save를 할때는, 데이터가 디비에서 한번 갔다온(디비에서 조회된) 친구들은 수정시 save호출시 merge가 일어난다고 하셨는데, 영속성 컨텍스트에 그 조회한 데이터가 있으면, merge가 안 일어나지 않나욤?? 디비에서 데이터를 가져왔을 때, 해당 데이터의 변경이 일어나면, 그냥 트랜잭션이 끝날때, flush()가 일어나니까, 놔두면 알아서 더티체킹이 일어나서 업데이트가 되는 것으로 알고있습니다. 그래서, 한번 테스트로 데이터를 변경시키고, 해당 데이터를 save하니 디비에서 한번 더 select가 안 날라가더라고요. 이랬을땐, 아무것도 안 일어나는 건가여? 그리고 트랜잭션이 끝날때 더티체킹이 일어나서 업데이트가 되는 건가여? 영한님이 말하신 건, 영속성 컨텍스트에 해당 데이터를 clear했을 때를 말하는 건가여? 아래 사진 첨부입니다. @Test public void test(){ Member member = memberRepository.findById(2L).orElseThrow(); member.setUsername("ㅎㅎ"); memberRepository.save(member); } @Test public void test(){ Member member = memberRepository.findById(2L).orElseThrow(); member.setUsername("gg"); em.flush(); em.clear(); memberRepository.save(member); }
wngus4278
2024-08-19T10:54:04.707Z
댓글 1
좋아요 0
조회수 178
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 컬렉션 패치 조인은 페이징이 불가능하지만 이 방법은 페이징이 가능하다. 이 말이 이해가 안되는게 batch size 설정 -> orderItemDto에서 컬렉션을 조회할때 in절을 통해서 하나의 쿼리로 가져오기위함 인것이지, 이 orderItemDto에서 페이징처럼 offset을 정해서 가져오고 이런게 불가능한거 아닌가요?
동현
2024-08-19T06:15:46.393Z
댓글 2
좋아요 0
조회수 254
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 김영한 선생님 이번에 자바를 시작하고, 스프링을 공부하고자 하는 학생입니다. 결론부터 말씀드리자면 spring 입문강의가 도저히 이해가 되지 않아서 공부방향에 대해 여쭙고 싶습니다. 자바는 충분히 학습하여 어느정도 개념이 숙지되어있는 상태입니다. 그래서 spring을 공부하려고 입문편부터 보니, spring의 개념이 무엇인지, 구조가 어떻게 되는지, 모두 이해가 되지 않습니다. 제가 cs가 부족한 탓일까요? 혹은 기본편에서 모든 궁금증이 해결되는 것일까요? 일단 아직 이해는 가지 않은 채, 코드만 따라 적고있습니다. 어떻게 공부하면 좋을지 말씀 주시면 감사하겠습니다.
bill5500
2024-08-19T06:10:15.731Z
댓글 2
좋아요 0
조회수 329
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 스프링 부트 버전이 3.3.2 로 하고 인텔리제이 얼티메이트 쓰고 있고 jdk 17버전으로 하는데 상관없나요?
mins199600
2024-08-19T04:13:33.123Z
댓글 1
좋아요 0
조회수 620
미해결
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scopedTarget.eurekaClient' defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration.class]: Unsatisfied dependency expressed through method 'eurekaClient' parameter 3: No qualifying bean of type ' com.netflix .discovery.shared.transport.jersey.TransportClientFactories<?>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 해당 오류가 나는데 혹시 이유가 어떤건지 알 수 있을까요?
spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq
칼리반
2024-08-19T02:00:01.647Z
댓글 3
좋아요 0
조회수 476
미해결
코드로 배우는 React 19 with 스프링부트 API서버
Refresh Token마저 만료되었을때 Todo 또는 Product 메뉴를 누르면 자동으로 로그아웃 및 메인페이지로 이동하려고 합니다. 강의 내용대로 쿠키 member를 삭제하여 로그아웃 처리는 하였으나 '/' Path로 이동은 안되어서 방법을 찾지 못하여 질문드립니다. 추가로 토큰만료시 jwtUtil의 beforeRes에서 쿠키를 삭제하였으나 todo 페이지가 호출 및 페이지 이동이 안되어서 todo 페이지 나오기전에 페이지 이동을 하고싶습니다. ListComponent의 useEffect에 hook을 사용했으나 실제로 이동안 되고 jwtUtil, todoAPI 는 모두 규칙 위반으로 hook이나 navigate를 사용할수 없더라구요. 어떻게 해야할까요..
react spring-boot jpa jwt redux-toolkit
ghoonpark
2024-08-18T15:52:36.501Z
댓글 1
좋아요 0
조회수 460
미해결
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
아래와 같이 실습 도중, No suitable driver found 에러가 나서 질문드립니다. docker-compose.yml을 통해 zookeeper, kafka broker, kafka connect, mariadb 컨테이너를 실행시켰습니다. version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:7.2.1 hostname: zookeeper container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 broker: image: confluentinc/cp-server:7.2.1 hostname: broker container_name: broker depends_on: - zookeeper ports: - "9092:9092" - "9101:9101" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CONFLUENT_BALANCER_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: broker:29092 CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1 CONFLUENT_METRICS_ENABLE: 'true' CONFLUENT_SUPPORT_CUSTOMER_ID: 'anonymous' connect: image: cnfldemos/cp-server-connect-datagen:0.5.3-7.1.0 hostname: connect container_name: connect depends_on: - broker - mariadb ports: - "8083:8083" volumes: - ./kafka-connect-jdbc:/etc/kafka-connect/jars # JDBC 드라이버가 설치된 경로를 마운트 environment: CONNECT_BOOTSTRAP_SERVERS: 'broker:29092' CONNECT_REST_ADVERTISED_HOST_NAME: connect CONNECT_GROUP_ID: compose-connect-group CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000 CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.2.1.jar CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor" CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor" CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/etc/kafka-connect/jars" CONNECT_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.I0Itec.zkclient=ERROR,org.reflections=ERROR mariadb: image: mariadb:10.5 container_name: mariadb hostname: mariadb environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: testdb MYSQL_USER: testuser MYSQL_PASSWORD: testpassword ports: - "3306:3306" volumes: - ./mariadb_data:/var/lib/mysql 확인 결과, kafka connect 컨테이너 내부의 /etc/kafka-connect/jars 경로 아래에 kafka-connect-jdbc-10.6.3.jar, mariadb-java-client-2.7.2.jar 가 잘 위치해있습니다. mariadb 컨테이너 내부로 접속하여 users 데이터베이스를 잘 생성하였고, 테스트 데이터도 잘 삽입해주었고 결과까지 확인했습니다. postman으로 아래와 같이 source 생성 요청 결과 201 응답이 정상적으로 잘 도착하였습니다. [POST] 127.0.0.1:8083/connectors { "name": "my-source-connector3", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mysql://mariadb:3306/testdb", "connection.user": "testuser", "connection.password": "testpassword", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1" } } 5. 그러나 127.0.0.1:8083/connectors/my-source-connector/status 으로 요청을 보내면 아래와 같은 오류가 발생합니다. { "name": "my-source-connector", "connector": { "state": "FAILED", "worker_id": "connect:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc:mysql://mariadb:3306/testdb\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:59)\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:94)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:141)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:118)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\nCaused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://mariadb:3306/testdb\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:80)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:52)\n\t... 12 more\n" }, "tasks": [], "type": "source" }
spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq
이현진
2024-08-18T15:43:14.939Z
댓글 3
좋아요 0
조회수 448
미해결
[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
어떤 작업을 한 것이고 단축키가 무엇인지 궁금합니다
kotlin spring-boot jpa spring-security jwt
2024-08-18T14:49:12.422Z
댓글 2
좋아요 0
조회수 215
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
spring: config: activate: on-profile: local datasource: url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER" username: "sa" password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.H2Dialect h2: console: enabled: true path: /h2-console --- spring: datasource: url : "jdbc:mysql://localhost/library" username : "root" password : "비번" driver-class-name : com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.MySQL8Dialect 2024-08-18 22:03:44.064 INFO 4232 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 11.0.23 on SeungWon with PID 4232 (C:\Users\Administrator\Desktop\library-app\library-app\build\classes\java\main started by Administrator in C:\Users\Administrator\Desktop\library-app) 2024-08-18 22:03:44.064 INFO 4232 --- [ main] c.g.libraryapp.LibraryAppApplication : The following 1 profile is active: "local" 제대로 다 작성을 한거같ㅌ은데 로그에 local이라고 나오는데 도서관리 웹으로 가면 이전에 넣어둔 데이터도 그대로 있고, H2WebConsol은 화이트레벨이 뜹니다ㅜ 현재 인텔리제이 무료버전이라 프로파일 바꾸는건 구글랑해서 햤는데 뭐가 문제인가요?
java spring aws mysql spring-boot jpa
우잉
2024-08-18T13:06:13.022Z
댓글 2
좋아요 0
조회수 123
미해결
스프링 시큐리티 OAuth2
Cannot invoke " org.springframework.security .oauth2.client.OAuth2AuthorizedClient.getAccessToken()" because "oAuth2AuthorizedClient" is null] with root cause keycloak 버전은 : 21.1.2 @GetMapping("/oauth2Login") public String oauth2Login(Model model, HttpServletRequest request, HttpServletResponse response) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); OAuth2AuthorizeRequest oAuth2AuthorizeRequest = OAuth2AuthorizeRequest .withClientRegistrationId("keycloak") .principal(authentication) .attribute(HttpServletRequest.class.getName(), request) .attribute(HttpServletResponse.class.getName(), response) .build(); OAuth2AuthorizationSuccessHandler successHandler = (authorizedClient, principal, attributes) -> { oAuth2AuthorizedClientRepository .saveAuthorizedClient(authorizedClient, principal, (HttpServletRequest) attributes.get(HttpServletRequest.class.getName()), (HttpServletResponse) attributes.get(HttpServletResponse.class.getName())); System.out.println("authorizedClient : " + authorizedClient); System.out.println("principal : " + principal); System.out.println("attributes : " + attributes); }; auth2AuthorizedClientManager.setAuthorizationSuccessHandler(successHandler); OAuth2AuthorizedClient oAuth2AuthorizedClient = auth2AuthorizedClientManager.authorize(oAuth2AuthorizeRequest); model.addAttribute("oAuth2AuthorizedClient", oAuth2AuthorizedClient.getAccessToken().getTokenValue()); return "home"; } keycloak: clientId: oauath2-client-app clientSecret: HPWAsKr9dEy9DPU1babedRmpstowiXOs clientName: oauath2-client-app authorizationGrantType: client-credentials clientAuthenticationMethod: client_secret_basic provider: keycloak <form sec:authorize="isAnonymous()" action="#"> <p><input type="button" onclick="authorizationCode()" value="AuthorizationCode Grant"/></p> <p><div sec:authorize="isAnonymous()"><a th:href="@{/oauth2Login(username='user',password='1234')}">Password flow</a></div></p> <div sec:authorize="isAnonymous()"><a th:href="@{/oauth2Login}">Client Credentials Flow Login</a></div> </form> @Configuration public class AppConfig { @Bean public DefaultOAuth2AuthorizedClientManager auth2AuthorizedClientManager(ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository) { OAuth2AuthorizedClientProvider oAuth2AuthorizedClientProvider = OAuth2AuthorizedClientProviderBuilder.builder() .authorizationCode() .password() .clientCredentials() .refreshToken() .build(); DefaultOAuth2AuthorizedClientManager defaultOAuth2AuthorizedClientManager = new DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository, oAuth2AuthorizedClientRepository); defaultOAuth2AuthorizedClientManager.setAuthorizedClientProvider(oAuth2AuthorizedClientProvider); defaultOAuth2AuthorizedClientManager.setContextAttributesMapper(contextAttributeManager()); return defaultOAuth2AuthorizedClientManager; } private Function<OAuth2AuthorizeRequest, Map<String, Object>> contextAttributeManager() { return oAuth2AuthorizeRequest -> { Map<String, Object> contextAttributes = new HashMap<>(); HttpServletRequest httpServletRequest = oAuth2AuthorizeRequest.getAttribute(HttpServletRequest.class.getName()); String userName = httpServletRequest.getParameter(OAuth2ParameterNames.USERNAME); String userPassword = httpServletRequest.getParameter(OAuth2ParameterNames.PASSWORD); if(StringUtils.hasText(userName) && StringUtils.hasText(userPassword)) { contextAttributes.put(OAuth2AuthorizationContext.USERNAME_ATTRIBUTE_NAME, userName); contextAttributes.put(OAuth2AuthorizationContext.PASSWORD_ATTRIBUTE_NAME, userPassword); } return contextAttributes; }; } } 이렇게 됩니다. 현재 상황으로 문제가 되어 있는 부분이 없는 것 같습니다. 어디부터 다시 확인해야 될지 조언 부탁드립니다.
java spring spring-boot oauth
2024-08-18T09:49:08.074Z
댓글 1
좋아요 0
조회수 238
해결됨
서버개발자 과제전형 완벽가이드 - 1편
안녕하세요 강사님 좋은 강의 감사드립니다. readme파일을 잘 작성하는 것도 과제전형을 진행하는데 중요한 요소라고 들었는데 예제 소스에 작성된 readme 파일 형식으로 실제 과제전형 시에 제출하기에는 조금 부족해보이는데 보통 어떤 형식으로 작성하시는 편이신가요? 또는 이 부분은 꼭 들어갔으면 하는 요소가 있을까요?
java spring spring-boot database
걈쟈
2024-08-18T06:18:03.003Z
댓글 1
좋아요 1
조회수 428