묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
특정 도구에서 서버를 실행하면 에러가 발생합니다.
안녕하세요. 강의를 들으면서 코드를 실행하다가 막힌 부분이 있어 질문드립니다.특정 도구에서 사용하면 서버가 실행이 되지 않습니다.인텔리제이 터미널에서 실행한 경우 에러가 발생합니다.PS C:\workplace\user-service> mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003' -e[INFO] Error stacktraces are turned on.[INFO] Scanning for projects...[INFO] [INFO] ----------------------< com.example:user-service >----------------------[INFO] Building user-service 0.0.1-SNAPSHOT[INFO] from pom.xml[INFO] --------------------------------[ jar ]---------------------------------[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.326 s[INFO] Finished at: 2023-06-27T21:49:08+09:00[INFO] ------------------------------------------------------------------------[ERROR] Unknown lifecycle phase ".run.jvmArguments=-Dserver.port=9003". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: pre-clean, clean, post-clean, validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy. -> [Help 1]org.apache.maven.lifecycle.LifecyclePhaseNotFoundException: Unknown lifecycle phase ".run.jvmArguments=-Dserver.port=9003". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: pre-clean, clean, post-clean, validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy. at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings (DefaultLifecycleExecutionPlanCalculator.java:225) at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions (DefaultLifecycleExecutionPlanCalculator.java:197) at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:119) at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan (DefaultLifecycleExecutionPlanCalculator.java:135) at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan (BuilderCommon.java:93) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:100) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283) at org.apache.maven.cli.MavenCli.main (MavenCli.java:206) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:566) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)[ERROR][ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR][ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException PowerShell에서 실행한 경우 에러가 발생합니다.PS C:\workplace\user-service> java -jar -Dserver.port=9004 .\target\user-service-0.0.1-SNAPSHOT.jarError: Unable to access jarfile .port=9004※ PowerShell에서 실행한 명령어를 명령 프롬프트에서 실행하면 정상작동됩니다.감사합니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
카프카 컨슈머에서 본문과 같이 출력되는데,
/14523769<;B@C8:ED?A=>FKHLOGMNQRISJPTWZ^XUb_`]a\[YVd 소스코드 내에서 완전히 동일하게 따라했는데 왜 이렇게 나타나는지 혹시 아시나요..
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
클러스터 구성 가능 여부
클러스터 3노드(VM 3개 띄울 예정)로 구성하고자 합니다. confluent kafka로 3노드의 클러스터 구성이 가능한가요??? 확인 부탁드립니다. 감사합니다...
-
미해결실습으로 배우는 선착순 이벤트 시스템
apply method가 자꾸 성공이 됩니다(Redis incre 적용전)
안녕하세요 .. 위 부분에서 apply메소드는 raceCondition으로 인하여 정합성이 어긋나야하는데왜 자꾸 assertEquals가 100으로 되며 성공하는걸까요.. apply에 Thead.sleep(10)을 넣어도 ExcutorService thread 개수를 1로 하여고아니면 requestCount 개수를 1000으로 늘려도 무조건 성공이 됩니다..
-
해결됨[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
custom partitioner 을 이용한 메세지역전 현상 해결방안
원영님 안녕하세요. 강의 항상 잘듣고있습니다.다름아니라, CDC커넥터에서 발생된 메시지 처리시 '메세지 역전현상'을 해결하기 위해 테이블의 PK값을 기준으로 특정 파티션으로 데이터가 보내질수 있도록 cusomPartitioner을 구현하고 commitSync로 메시지 순서를 보장하려고 하는데요.ex) 1번 pk -> 1번 파티션 -> 1번 consumer.2번 pk -> 2번 파티션 -> 2번 consumer.이럴 경우에 특정파티션으로 데이터가 쏠리면 스케일아웃을 한 의미가 없어지더라구요. 실시간성이 요구되는 비지니스라 일정 이상의 TPS가 나와야되거든요. 문제 접근방식이 잘못됬는지... 메시지역전문제와 TPS 성능을 위해선 컨슈머에서 다른 도구들을 이용해서 해결해야 하는건지... 확신이 안서더라구요.. 혹시 비슷한 경험을 통해서 위와같은 문제를 해결해보셨다면 조언부탁드리겠습니다. 감사합니다!
-
미해결실습으로 배우는 선착순 이벤트 시스템
그럼 gradle에 redis: host: 와 port: 는 어떤 역할인 건가요?
다른 예제들을 보면spring: redis: host: localhost port: 6379이런식으로 셋팅해서 사용하던데왜 여기에는 이런게 필요가 없는 건가요?처음 접해봐서 모르겠씁니다ㅠㅠ..
-
미해결15일간의 빅데이터 파일럿 프로젝트
가상 server01 putty 접속시 오류 현상 (접속 끊김)
안녕하세요! "5. 빅데이터 클러스터 구성 4 - putty로 서버환경 접속"을 수강중에 있습니다.putty server01 login : root는 입력되는데,password가 쳐지지 않고 조금 있으면 접속이 끊긴다는 오류 메세지가 출력됩니다."Remote side unexpectedly closed network connection"어떻게 조치해야 하나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
로그인 요청시 401 상태 반환
로그인 시도 시 401 오류를 반환하고 있습니다.user-service의 AuthenticationFilter 에서 인증이 실패가 된지 알아 디버깅을 해보니 인증이 성공해서 도대체 어디가 문제인지 알 수가 없습니다.그래서 유저 서비스에 직접 접근을 할 시 똑같은 401 오류를 반환하고 있습니다.그리고 유저 서비스에 직접 접근을 하거나 게이트웨이로 접근해도 성공에 관한 메소드는 작동하지 않습니다.< 스프링 부트, 시큐리티는 현재 최신 버전입니다. > AuthenticationFilter 클래스@RequiredArgsConstructor @Slf4j public class AuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final UserService userService; @Value("${token.expiration_time}") private Long EXPIRATION_TIME; @Value("${token.secret}") private String secretKey; @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { log.info("attemptAuthentication"); try{ RequestLoginVo cred=new ObjectMapper().readValue(request.getInputStream(), RequestLoginVo.class); log.info(cred.getEmail()+" "+cred.getPassword()); return this.getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken( cred.getEmail(), cred.getPassword(), new ArrayList<>() )); } catch(IOException e){ throw new RuntimeException(e); } } @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { String userName = ((User)authResult.getPrincipal()).getUsername(); UserDto userDto = userService.getUserDetailByEmail(userName); String token = Jwts.builder() .setSubject(userDto.getUserId()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) .signWith(SignatureAlgorithm.HS512, secretKey) .compact(); response.addHeader("token",token); response.addHeader("userId",userDto.getUserId()); } }loadUserByUsername 메소드@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("loadUserByUsername "+username); Optional<UserEntity> userEntity = userRepository.findByEmail(username); log.info(userEntity.get().getEmail()+" "+userEntity.get().getName()+" "+userEntity.get().getEncryptedPwd()); if(userEntity.isEmpty()){ throw new UsernameNotFoundException("해당 유저는 존재하지 않습니다."); } return new User(userEntity.get().getEmail(), userEntity.get().getEncryptedPwd(), true, true, true, true, new ArrayList<>()); }WebSecurity 클래스@Configuration @EnableWebSecurity @RequiredArgsConstructor public class WebSecurity{ private final BCryptPasswordEncoder bCryptPasswordEncoder; private final UserService userService; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) .headers(headers -> headers .frameOptions((frameOptions) -> frameOptions.disable())) .authorizeRequests(authorize -> authorize .requestMatchers(PathRequest.toH2Console()).permitAll() .requestMatchers("/**").hasIpAddress("127.0.0.1") ) .addFilter(getAuthenticationFilter()); return http.build(); } @Bean public AuthenticationManager authenticationManager() { DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); provider.setUserDetailsService(userService); provider.setPasswordEncoder(bCryptPasswordEncoder); return new ProviderManager(provider); } private AuthenticationFilter getAuthenticationFilter() { AuthenticationFilter authenticationFilter = new AuthenticationFilter(userService); authenticationFilter.setAuthenticationManager(authenticationManager()); return authenticationFilter; } }ApiGateWay - Application.yml 유저 서비스 부분 routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/login - Method=POST filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment} - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/users - Method=POST filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment} - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*) , /$\{segment} - AuthorizationHeaderFilter
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
Debezium Source 에서 topic에 저장되는 UTC시간대 질문
안녕하세요. topic에 UTC 시간대로 저장되는 문제가 있습니다.해결 접근방법에 조언을 듣고 싶습니다.Sink를 적용했을때 customers, products,order_items는 문제없이 적용되었으나 orders테이블의 timestamp타입의 order_datetime컬럼에 문제가 발생하여 SMT 옵션을 추가하다가 발견한 문제입니다.결론적으로 mysql_cdc_oc_sink_orders_01.json에 "transforms": "ConvertDateTimeType", "transforms.ConvertDateTimeType.type": "org.apache.kafka.connect.transforms.TimestampConverter$Value", "transforms.ConvertDateTimeType.target.type": "Timestamp", "transforms.ConvertDateTimeType.field": "order_datetime", "transforms.ConvertDateTimeType.format": "yyyy-MM-dd'T'HH:mm:ss'Z'", "transforms.ConvertDateTimeType.timezone": "Asia/Seoul"위 옵션을 추가하여 sink로 저장을 해결하였으나 topic에 저장되는 시간이 다르게 저장되는것을 발견했습니다.source 데이터베이스에서는 2023-06-20 13:56:40 에 저장하였으나sink 데이터베이스에서는 2023-06-20 04:56:40으로 저장되고 있었습니다.이에 topic을 확인해보니 저장되는 시간대가 2023-06-20 04:56:40으로 topic에서부터 저장되는 값이 다른 것을 알 수 있었습니다.따라서 source설정쪽이 문제일 것 같은데 "database.connectionTimeZone": "Asia/Seoul"옵션을 넣었음에도 UTC로 적용되고있어 질문드립니다. 감사합니다. mysql_cdc_oc_source_01.json{ "name": "mysql_cdc_oc_source_01", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "192.168.56.101", "database.port": "3306", "database.user": "connect_dev", "database.password": "connect_dev", "database.server.id": "10001", "database.server.name": "mysql01", "database.include.list": "oc", "table.include.list": "oc.customers, oc.products, oc.orders, oc.order_items", "database.history.kafka.bootstrap.servers": "192.168.56.101:9092", "database.history.kafka.topic": "schema-changes.mysql.oc", "key.converter": "org.apache.kafka.connect.json.JsonConverter", "value.converter": "org.apache.kafka.connect.json.JsonConverter", "transforms": "unwrap", "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState", "transforms.unwrap.drop.tombstones": "false", "database.connectionTimeZone": "Asia/Seoul" } }MYSQL의 TIME_ZONE은 한국시간대입니다.mysql> select @@system_time_zone; +--------------------+ | @@system_time_zone | +--------------------+ | KST | +--------------------+
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
[질문 아님]
나름 대로 개인 프로젝트 만들어가는중입니다.요 강의에서 Zookeeper과 Kafka 분리 설치 및 3노드 구성하여 클러스터 구축 완료...제가 오라클 DBA 14년차이지만 이게 저랑 잘맞는거 같습니다. 좋은 강의 끝까지 열심히 들을게요수고하세요~
-
미해결카프카 완벽 가이드 - 코어편
자바 클라이언트 메세지 전송 테스트 실패
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.자바 클라이언트에서 메세지 전송시 아래와 같은 오류가 발생합니다.저는 m1 유저라 UTM으로 가상환경 구성하였고,터미널에서 테스트시에는 이전 수업내용은 잘 작동하였는데, 자바클라이언트에서 오류가 발생하네요어떻게 해결하면 좋을까요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
우지 설치중 오류 발생
설치중 해당 오류가 발생합니다.어떤게 원인일까요? 전에 꺼놨던 서비가 원인일까 전부 재기동해봤지만 동일하네요...
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의를 다 듣고난 후 YAML 설정파일 관련 궁금한 부분이 있습니다.
각 마이크로서비스 내에서도 application.yml을 두고,config service으로 부터 읽어오는 설정파일을 지정할 수 있다는 부분을 강의를 통해 배웠습니다. 1) 제가 궁금한 부분은 애플리케이션 내부 설정파일과 config service가 읽어오는 설정파일에 적는 정보는 어떤 기준으로 나뉘나요? 즉, 어떠한 정보를 애플리케이션 내부 설정파일에 두며, 어떤한 정보는 애플리케이션 내부 보다는 config-service로 부터 읽어들이는 설정파일에 정보를 두게되는 기준이 있으실까요?2) 또 다른 궁금점은 꼭 필요한 설정을 제외하고는 대부분의 설정 정보를 config-service로부터 읽어오는 설정파일에 넣어놔도 괜찮나요?? 감사합니다.
-
해결됨[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
카프카 클러스터 ID 충돌 이슈가 있습니다.
처음에 강의를 보면서 주키퍼와 브로커를 띄우면 문제없이 실행되는데, 다음날 다시 실행하려고 하면 kafka.common.InconsistentClusterIdException: The Cluster ID 8Q9ArKFaQjG9sOAyuBI3DQ doesn't match stored clusterId Some(golWFU1QQCWt7dC6LX9zhw) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.위와 같은 메시지가 뜨면서 브로커가 실행을 못합니다. data 디렉토리에 생성된 meta.properties를 삭제하고 다시 실행하면 문제없이 동작하는데, 번거롭기도 하고, 실제로도 이렇게 사용하는게 맞는건가 하는 의문도 드네요. 해당 부분에 대해 조언 좀 부탁드리겠습니다. :)
-
해결됨실습으로 배우는 선착순 이벤트 시스템
docker-compose 파일 재시작 시 group_1: partitions assigned: []
도커 컴포즈 재시작시 consumer 서버 실행시킬때마다 가끔 partition이 할당되지 않는 경우가 생겨 테스트코드가 실패하는 경우가 생기는데요 해당 에러를 consumer서버 재시작을 통해 해결하고 있습니다.할당을 받지 못하면 어떤식으로 해결하는 것이 좋은지 자문을 구하고 싶습니다.
-
미해결카프카 완벽 가이드 - 코어편
addShutdownHook() 과 mainThread.join()
안녕하세요! 설명을 너무 잘 해주셔서 유익하게 잘 듣고 있습니다 ㅎㅎWakeup을 이용하여 Consumer를 효과적으로 종료하기 부분에서 질문이 있는데요,프로그램이 종료되는 시점에 새로운 쓰레드를 만들어 실행하는 함수인 addShutdownHook() 안에 mainThread.join() 부분이 잘 이해되지 않습니다. 새로운 스레드가 ConsumerNetworkClient의 wakeup을 부르고 메인 스레드가 종료될 때까지 기다려야 해서 mainThread.join()을 부른다고 하셨는데, 메인 스레드의 종료 절차(메모리 정리 등?)를 마칠 때까지 기다린다는 의미가 맞을까요? addShutdownHook() 함수가 프로그램이 종료될때 실행되는 함수인데 그 안에 종료를 기다리는 함수가 또 들어있어 헷갈렸습니다. 그리고 만약 mainThread.join()이 메인 스레드가 종료를 마칠 때까지 기다리는 게 맞다면, mainThead.join()을 먼저 부르고 kafkaConsumer.wakeup()을 이후에 호출해도 문제가 없는지도 궁금합니다~
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
Kafka port 9092 already in use 문제
안녕하세요 zookeeper 실행 완료하고이제 마지막으로 Kafka 를 실행하면 완료 되는데요. (이미지 안보이시면 ㅠ,ㅠhttps://cdn.inflearn.com/public/files/posts/769307aa-6074-40cd-9d9d-94ffb82f7508/cccccc.PNG) 기본 default port 가 9092 설정된 상태에서 실행하면 이미 사용된 포트라고 에러가 발생 됩니다.혹시나 해서 9093 으로 설정해도 문제가 발생되네요... 참고로 꼭!! 9092 포트로 설정하고 프로세스 올리고 싶습니다 ㅠ,.ㅠ 그래서 혹시 9092 포트가 사용되고 있나 netstat -ano | findstr :9093 명령어 통해 확인을 해도 사용하는 포트가 없다고 나오는데요... 무슨 문제일까요?... 참고로 OS는 윈도우 입니다.
-
해결됨실습으로 배우는 선착순 이벤트 시스템
Coupon 도메인 중복
안녕하세요. 좋은 강의 항상 감사드립니다.Coupon 도메인 중복 관련해서 질문이 있습니다.consume 모듈을 새로 생성하면서 Coupon 도메인을 api 모듈에서 복붙을 하셨는데요.gradle 멀티 모듈을 만들 때 부모/자식 관계로 만들면 Coupon 도메인을 중복되지 않게 사용할 수 있을 것 같은데 강의에서는 시간상 패스한 것인가요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
Kafka 등의 메시지 브로커를 사용하는 이유에 대해 질문있습니다!
안녕하세요, 좋은 강의 올려주셔서 잘 배우고 있습니다 :)강의에서 Kafka 도입 이유에 대한 궁금증이 생겨 질문 드립니다. 'Redis를 활용하여 문제 해결하기' - '문제점' 강의에서 해당 쿠폰 API에 요청이 몰리면 DB 서버에 부하가 갈 수 있다고 설명해주셨는데요. 그 해결방법으로 Kafka를 사용하셨고 API에서 직접 쿠폰을 생성할 때와 다르게 처리량을 조절해서 부하를 줄일 수 있다고 하였습니다. 이 내용 중 "처리량을 조절한다"는 의미는 어떻게 이해하면 좋을까요? 컨슈머 애플리케이션에서 처리량을 조절하는 로직을 추가하여 RDB 부하를 분산시키는 걸까요? 혹은 카프카에서 그러한 기능을 지원하는 걸까요? 혹은 마지막 강의에 있는 에러를 발생했을 때, 백업 데이터를 통해 실패 처리를 하는 경우에 대한 이야기일까요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
고사양 환경에서 초기에 cloudera는 꺼져 있는 상태인가요?
만약 그렇다면 켜서 설치되어 있는 것들과 강의를 보면서 설정값들을 확인해 보고 싶은데 어떻게 하는지 모르습니다. 공식문서도 어딜 봐야 할 지 모르겠어서요.파일럿 프로젝트 진행하는 데에는 아무 문제가 없다는 걸 알지만 그래도 하나씩 짚어보고 싶어요.