inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

게시글 테스트 데이터 삽입

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

DataInitializer 자체가 이해가 안되는게 있습니다. Test 환경에서 @Autowired 가 가능한건지 궁금하네요

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
w ho 댓글 2 좋아요 0 조회수 76

문제 3-2 질문드립니다

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

문제 3-2번 코드를 따로 리스트 작성하지 않고 아래와 같이 작성 시 감점 요인이나 코드 오류가 있을까요? df['f3'] = df['f3'].map({'silver' : 1, 'gold' :2, 'vip' :3}).fillna(0) sum(df['f3'])

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
허수현 댓글 2 좋아요 0 조회수 63

강의파일 통합본

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

안녕하세요. 강의 너무 잘 보고 있습니다. 새로운 강의마다 자료를 하나하나 다운받아야해서 불편한데, 통합본은 따로 올라와있지 않은건가요? 강의는 노트북으로 보고, 강의자료는 탭에서 다운받아 필기중인데 여간 불편한게 아니라 질문드립니다.

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
fpemvneld 댓글 2 좋아요 0 조회수 90

수강기간 연장 문의 드립니다.

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 2026년 6월 20일에 실기 시험을 재응시할 예정인데, 강의 수강기간이 6월 3일 마감이라 학습을 이어가기 위해 혹시 강의 수강기간 연장이 가능할지 문의 드립니다. 이메일 주소는 lche0503@naver.com 입니다. 감사합니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
lche0503 댓글 2 좋아요 0 조회수 81

통합 강의 교재 부탁드려요.

미해결

[핵집] 2025 빅데이터 분석기사(필기)_과목 3~4

안녕하세요. 저도 통합 강의 교재가 필요합니다. butecon@naver.com로 부탁드립니다. 감사합니다.

  • 빅데이터
박은정 댓글 2 좋아요 0 조회수 70

Orchestration SAGA 패턴 보상에 대한 질문입니다.

해결됨

카카오 면접관이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴

Orchestration SAGA 패턴 구현에 대해 고민하다가 질문이 생겨 남깁니다. 보상을 요청하는 메서드가 명시적으로 나와있어 호출할 때(동기로 호출) 만약 rollback을 요청하는 호출이 실패하게 된다면 이후의 순서대로 service에 보상 요청을 하는 동작을 멈춰야 할지 계속 진행하는 게 바람직할지 고민이 됩니다. 예를 들어 서비스 1,2,3,4가 있고 center server가 orchestration 관리를 하고 1,2,3,4 순서대로 서비스 호출해서 관리를 진행한다고 했을 때 3에서 장애가 발생해서 2를 롤백하던 중 2 롤백에서 예외가 발생해서 롤백에 실패한 경우 orchestration에서 1에 대한 롤백을 진행해줘야 할지 아니면 일단 멈춰야 할지 고민입니다. 고민의 이유는 순서대로 롤백을 해주는 것은 앞에 작업이 뒤의 작업에 의존성이 있을 때만 그렇게 해주면 되나에 대한 고민이 있었습니다. 두 롤백 간에 데이터 의존성이 없다면 괜찮지 않을까 고민했습니다. 다음으로 일단 1도 롤백을 한다면 어디서부터 어디까지 롤백이 진행됐는지 추적이 어려워지지 않을까 고민했습니다. 롤백을 어떤 것은 해주고 어떤 것은 안해준다면 어디까지 롤백했는지 추적이 힘들어지지 않을까 생각이 들었습니다.

  • java
  • spring
  • mysql
  • spring-boot
  • msa
won 댓글 2 좋아요 0 조회수 79

변수, 칼럼 , df 구분

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

“실기 코딩할 때 변수로 받는 경우, 컬럼으로 바로 계산하는 경우, df를 다시 덮어쓰는 경우가 헷갈립니다. 각각 언제 쓰는지 쉽게 설명해주실 수 있을까요?”

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
parkjieun24 댓글 2 좋아요 0 조회수 83

남은 기간 학습방향

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

안녕하세요 강의 잘 듣고있습니다. 프로그래밍을 배운적이 있어서 기출 문제 강의 부터 보고 킬러문제 1,2개 제외한 나머지는 대체로 이해 하고 푸는 수준입니다. 올려주신 문제는 모두 다 풀었는데 현시점에서 새로운문제를 더 풀어보는게 나은지 이론암기와 현재까지 풀었던 문제 복습하고 시험장 가는게 나을지 .. 조언을 구해 봅니다..

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
김선경 댓글 2 좋아요 0 조회수 123

[건의][6장][작전1] deprecated 메소드

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

형 ... @Bean public Step threatAnalysisStep( JpaPagingItemReader<Human> humanThreatDataReader, ItemProcessor<Human, TargetPriorityResult> threatAnalysisProcessor, FlatFileItemWriter<TargetPriorityResult> targetListWriter ) { return new StepBuilder("threatAnalysisStep") .<Human, TargetPriorityResult>chunk(10, transactionManager) .reader(humanThreatDataReader) .processor(threatAnalysisProcessor) .writer(targetListWriter) .taskExecutor(taskExecutor()) // deprecated 되어서 안씀 // .throttleLimit() .build(); } ... 에서 .throttleLimit() 부분이 5 이후로 deprecated 된다고 명시되어 있어. 관심사 분리로 인해서 taskExecutor 정의 부분에서 설정하라고 권장하는 것을 확인했거든. 현재 강의가 사실상 Spring Batch 5.x 까지의 기본 내용과 원리를 살펴봤잖아 ? 그렇다 하더라도 혼란을 줄 수 있기 때문에 해당 부분은 삭제하던지 아니면 추가 내용을 기재해야 할 것으로 보여.

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
댓글 2 좋아요 1 조회수 101

제조사측 문의시 대처하는 방법

해결됨

센서데이터를 수집하는 내가 만드는 ESP32 IoT 기기 - 초보자·아두이노 사용자

JLCPCB에 주문을 넣으면, 어떤때에는 담당자가 이메일로 부품의 위치나 방향이 맞는지 물어보는 경우가 있습니다. 아래는 그런 예시입니다. (제가 받은 이메일입니다.) Hi there, Sorry to bother you, but there is one thing that we want to confirm with you about your SMT order before proceeding. Since we are not so sure about the polarities of the components D6 D8 are correct or not. Could you please kindly check if the polarities and placements of the SMD components are correct in the below 2D picture? Is it okay to proceed with production? Your early reply will be highly appreciated, thank you so much! Best regards 번역기를 돌려서 내용을 살펴보면, 다이오드 D6과 D8의 방향이 정말 맞는지 확인해 달라는 내용입니다. JLCPCB는 부품의 위치와 방향 등에 대한 간단한 확인을 항상하며 (보통 다이오드나 칩의 방향) 주문자에게 문의 사항이 있을 경우, 위에서 처럼 이메일로 확인을 받습니다. 아래는 위의 메일과 함께 첨부된 사진입니다.각 각 보드에 보시면 왼쪽 아래에 D6, D8이 있고, 방향이 제대로 되어 있습니다. 그래서 답변을 작성하고, 영어로 번역해서 아래와 같이 응답합니다. Yes, for D6 and D8, their polarities are correct. "+" is right and "-" is left in the attached figure. 그럼 아래와 같이 담당자로부터 답변이 오면서 조립을 진행합니다. Hi there, Thank you for your reply. Well noted, we will continue to proceed. Best regards 문의의 내용은 그때마다 조금씩 다를 수 있으나 대게 방향에 관한 것입니다. 혹여나 담당자에게서 이메일이 왔는데 어떤 내용인지, 어떻게 해야 좋은지 잘 모르시겠으면 제게 도움을 요청하시기 바랍니다.

  • 빅데이터
  • iot
  • 임베디드
  • hardware
  • esp32
GreenTam 댓글 0 좋아요 0 조회수 64

H2데이터베이스 파일 생성

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] H2 데이터베이스 파일 생성방법 강의자료에서는 저장된 설정이 server가 아닌 embedded로 되어있는데 어떤것을 따라야할까요?

  • java
  • jpa
김주현 댓글 2 좋아요 0 조회수 94

[예제][3장][작전2] windows 에서 마지막 예제

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

... @Slf4j @Configuration @RequiredArgsConstructor public class LogProcessingJobConfig { private final JobRepository jobRepository; private final PlatformTransactionManager transactionManager; private final String BASE_PATH = "C:\\Users\\user\\Desktop\\batch\\section3\\flatfileitemwriter"; @Bean public Job logProcessingJob( Step createDirectoryStep, Step logCollectionStep, Step logProcessingStep ) { return new JobBuilder("logProcessingJob", jobRepository) .start(createDirectoryStep) .next(logCollectionStep) .next(logProcessingStep) .build(); } @Bean public Step createDirectoryStep(SystemCommandTasklet mkdirTasklet) { return new StepBuilder("createDirectoryStep", jobRepository) .tasklet(mkdirTasklet, transactionManager) .build(); } @Bean @StepScope public SystemCommandTasklet mkdirTasklet( @Value("#{jobParameters['date']}") String date ) { SystemCommandTasklet tasklet = new SystemCommandTasklet(); tasklet.setWorkingDirectory(BASE_PATH); String collectedLogsPath = "collected_ecommerce_logs\\" + date; String processedLogsPath = "processed_logs\\" + date; try { tasklet.setCommand("cmd.exe", "/c", "mkdir", collectedLogsPath, processedLogsPath); tasklet.setTimeout(3000); } catch (Exception e) { log.error("mkdirTasklet error: ", e); } return tasklet; } @Bean public Step logCollectionStep(SystemCommandTasklet scpTasklet) { return new StepBuilder("logCollectionStep", jobRepository) .tasklet(scpTasklet, transactionManager) .build(); } @Bean @StepScope public SystemCommandTasklet scpTasklet( @Value("#{jobParameters['date']}") String date ) { SystemCommandTasklet tasklet = new SystemCommandTasklet(); tasklet.setWorkingDirectory(BASE_PATH); String processedLogsPath = "collected_ecommerce_logs\\" + date; StringJoiner commandBuilder = new StringJoiner(" & "); for (String host : List.of("localhost")) { // Windows 환경에서 해당 코드를 적용하려면 ssh 관련 설정들을 찾아야 해서 주석 처리 // String command = String.format("scp %s:~/ecommerce_logs/%s.log %s\\%s.log", host, date, processedLogsPath, host); String sourcePath = BASE_PATH + "\\ecommerce_logs\\" + date + ".log"; String command = String.format("copy %s %s\\%s.log", sourcePath, processedLogsPath, host); commandBuilder.add(command); } tasklet.setCommand("cmd.exe", "/c", commandBuilder.toString()); tasklet.setTimeout(10000); return tasklet; } @Bean public Step logProcessingStep( MultiResourceItemReader<LogEntry> multiResourceItemReader, LogEntryProcessor logEntryProcessor, FlatFileItemWriter<ProcessedLogEntry> processedLogEntryJsonWriter ) { return new StepBuilder("logProcessingStep", jobRepository) .<LogEntry, ProcessedLogEntry>chunk(10, transactionManager) .reader(multiResourceItemReader) .processor(logEntryProcessor) .writer(processedLogEntryJsonWriter) .build(); } @Bean @StepScope public MultiResourceItemReader multiResourceItemReader( @Value("#{jobParameters['date']}") String date ) { MultiResourceItemReader<LogEntry> resourceItemReader = new MultiResourceItemReader<>(); resourceItemReader.setName("multiResourceItemReader"); resourceItemReader.setResources(getResources(date)); resourceItemReader.setDelegate(logFileReader()); return resourceItemReader; } private Resource[] getResources(String date) { try { String formattedBasePath = BASE_PATH.replace("\\", "/"); String location = "file:///" + formattedBasePath + "/collected_ecommerce_logs/" + date + "/*.log"; PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); return resolver.getResources(location); } catch (IOException e) { throw new RuntimeException("Failed to resolve log files", e); } } @Bean public FlatFileItemReader<LogEntry> logFileReader() { return new FlatFileItemReaderBuilder<LogEntry>() .name("logFileReader") .delimited() .delimiter(",") .names("dateTime", "level", "message") .targetType(LogEntry.class) .build(); } @Bean public LogEntryProcessor logEntryProcessor() { return new LogEntryProcessor(); } @Bean @StepScope public FlatFileItemWriter<ProcessedLogEntry> processedLogEntryFlatFileItemWriter( @Value("#{jobParameters['date']}") String date ) { String outputPath = Paths.get(BASE_PATH, "processed_logs", date, "processed_logs.jsonl").toString(); ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))); objectMapper.registerModule(javaTimeModule); return new FlatFileItemWriterBuilder<ProcessedLogEntry>() .name("processedLogEntryJsonWriter") .resource(new FileSystemResource(outputPath)) .lineAggregator(item -> { try { return objectMapper.writeValueAsString(item); } catch (JsonProcessingException e) { throw new RuntimeException("Error Converting item to JSON", e); } }) .build(); } @Data public static class LogEntry { private String dateTime; private String level; private String message; } @Data public static class ProcessedLogEntry { private LocalDateTime dateTime; private LogLevel level; private String message; private String errorCode; } public enum LogLevel { INFO, WARN, ERROR, DEBUG, UNKNOWN; public static LogLevel fromString(String level) { if (level == null || level.trim().isEmpty()) { return UNKNOWN; } try { return valueOf(level.toUpperCase()); } catch (IllegalArgumentException e) { return UNKNOWN; } } } public static class LogEntryProcessor implements ItemProcessor<LogEntry, ProcessedLogEntry> { private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_DATE_TIME; private static final Pattern ERROR_CODE_PATTERN = Pattern.compile("ERROR_CODE\\[(\\w+)]"); @Override public ProcessedLogEntry process(LogEntry item) throws Exception { ProcessedLogEntry processedLogEntry = new ProcessedLogEntry(); processedLogEntry.setDateTime(parseDateTime(item.getDateTime())); processedLogEntry.setLevel(parseLevel(item.getLevel())); processedLogEntry.setMessage(item.getMessage()); processedLogEntry.setErrorCode(extractErrorCode(item.getMessage())); return processedLogEntry; } private LocalDateTime parseDateTime(String dateTime) { return LocalDateTime.parse(dateTime, ISO_FORMATTER); } private LogLevel parseLevel(String level) { return LogLevel.fromString(level); } private String extractErrorCode(String message) { if (message == null) { return null; } Matcher matcher = ERROR_CODE_PATTERN.matcher(message); if (matcher.find()) { return matcher.group(1); } // ERROR 문자열이 포함되어 있지만 패턴이 일치하지 않는 경우 if (message.contains("ERROR")) { return "UNKNOWN_ERROR"; } return null; } } } 윈도우즈에서는 scp 명령어 관련해서 windows 서비스에서 open-ssh-server 실행 현재 사용하고 있는 사용자(windows 사용자) 가 관리자 권한을 보유 할 경우 programdata/sshd_config 파일 수정 필요 기타 파일 권한 정리 필요 로 인하여 scp 프로그램을 windows 환경의 intellij idea 에서 id, 비번치게끔 ide 콘솔에서 지원하지 않는거 같아. 그래서 제미니가 추천해준대로 실습 환경에서 scp 접속 단을 copy 로 그냥 퉁치는 것으로 바꿔놨어. 나처럼 windows 환경인 사람들이 있으면 혹시나 참고했으면 좋겠네. ObjectMapper, JavaTimeModule 같은 경우는 org.springframework.boot:spring-boot-starter-json 의존성 추가 필요

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
qlghwp123 댓글 2 좋아요 1 조회수 94

직접 만들어 봐야 내 지식이 된다

해결됨

센서데이터를 수집하는 내가 만드는 ESP32 IoT 기기 - 초보자·아두이노 사용자

안녕하세요, 그린탐입니다. 이미 여러 수강생분들이 완강하신것으로 보입니다. 그러나 강의를 끝까지 다 들었다고 내 지식이 되는 것은 아닙니다. 반드시 직접 만들어보고 동작하는 것까지 직접 경험해 보셔야 내 지식과 경험이 되고, 그제서야 내가 아는 것이 됩니다. 그래서 수강생 여러분들은 강의 내용을 그대로 따라서 직접 제작해 보시고, 주문 제작 후 보드구동까지 해보시기 바랍니다. 처음 제작할 때 가장 어려운 부분은 "내가 만든 보드가 정말로 동작할까?"입니다. 그래서 처음 시작은 항상 이미 남이 만든 것을 따라하기 입니다. 맨처음 만들때는 강의 동영상과 자료를 통해서 얻은 KiCad 프로젝트 파일을 이용해서 그대로 따라서 제작해 보시기를 권합니다. 그런 후, 그 다음 버전을 제작할 때 각자의 필요에 의해서 추가하면 됩니다. 또한 제작 시 가장 자주 부딪히는 문제는 부품 수급 문제입니다. 자주 사용되는 부품들, 저항이나 캐패시터는 제조사가 다량 보유하고 있으므로, 교체할 필요가 낮으나, 가장 잘 자주 재고가 떨어지는 것들은 스위치, LED, 커넥터 류 들입니다. 이 때에는 같은 기능을 하는 다른 부품을 검색해서 사용하면 됩니다. 이때 KiCad에 새로운 부품을 라이브러리에 추가하는 방법을 강의에서 설명했으니 그대로 따라하시면 됩니다. 제작하시다가 어려운 점이나 잘 모르는 사항이 있으시면 본 게시판 혹은 디스코드, 아니면 개인적인 이메일로라도 문의 주시면, 가능한 빨리 답변드리겠습니다. 제작 후 동작까지 성공하신 분이 있으시면 여기나 디스코드에 후기를 올려주시면 감사하겠습니다.

  • 빅데이터
  • iot
  • 임베디드
  • hardware
  • esp32
GreenTam 댓글 1 좋아요 0 조회수 67

DFS/BFS

미해결

2026 코딩테스트 올인원 [JAVA]

학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요. 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요. 편하게 질문주세요:) 직접 답변 드리도록 하겠습니다~ 안녕하세요. 제가 DFS/BFS부분이 많이 약해서 ㅠㅠ 질문입니다. lockers = [[1, 2], [3], [], [0]] 이런 이중행렬인데 인접리스트로 코드 변환 안하고 생각해도 괜찮다는 의미 인거죠…? 감사합니다.

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
제비꼬리 댓글 2 좋아요 1 조회수 78

수강기간 연장 문의드립니다.

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요! 작년 개인 일정으로 인해 응시하지 못했던 실기 시험을, 이번 6월에 공부하여 응시하고자 합니다. 현재 수강 중인 강의의 종료일이 2026년 5월 13일까지이나, 혹시 2026년 제1회 실기 시험일(26-06-20)까지라도 기간 연장이 가능할지 여쭤보고 싶습니다. 만약 가능하다면, 남은 기간 열심히 수강하여 꼭 합격의 결실을 맺도록 하겠습니다. 감사합니다. 이메일 : tomatobad@naver.com

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
권영우 댓글 2 좋아요 0 조회수 61

운영체제 강의 27분 (CPU 스케줄링 - SRTF)

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

CPU 스케줄링에서 SRTF(Shortest Remaining Time First)에 대해 질문 있습니다. 실제 시험에서 SRTF or SRT or SRF 셋 중에 하나를 쓰면 정답인가요? 시중에 있는 기출문제집의 해답에서는 SRT라고 되어 있어서 질문 드립니다.

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
준상 댓글 2 좋아요 0 조회수 75

2022년 2회차 실기 4번

미해결

윤파고의 정보처리기사 DB/프로그래밍 All-In-One

col2만 세어야 하니까 3이죠,,?

  • python
  • java
  • c
  • dbms/rdbms
  • 정보처리기사
andrew98038@gmail. 댓글 1 좋아요 0 조회수 46

이론 v0.91 오타 문의

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

10. 프로그래밍 언어 활용 에서 3.java 관계연산자/비트연산자의 문제풀이 보시면 F | T 할때 F 를 0000 T를 1111로 표현하던데 true는 0001 아닌가요? F|T -> 0000 | 1111 -> 1111 -> T 라고 되어잇고 XOR 연산자에도 T를 1111 로 표기해서 묻습니다.

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
최민영 댓글 2 좋아요 0 조회수 89

9장 상속 문제와 풀이 질문

미해결

김영한의 실전 자바 - 기본편

@Override public void print() { super.print(); System.out.println("- 저자: " + author + ", isbn:" + isbn); } 다름이 아니고 @Override를 하는 이유가 부모에서 사용하는 메서드를 자식에서 재사용을 위해서 사용하신다고 했는데 궁금한 게 강의 내용 중에 객체를 생성하고 메서드를 사용할 경우 먼저 자식을 보고 그다음에 없으면 부모를 보신다고 하셨는데 그러면 이미 자식에는 print가 있으니까 저렇게 super.print();를 붙이면 굳이 @Override를 안 붙여도 상관없지 않나요? 관례가 있어서 많은 개발자분들께서 붙인다고 하셨는데 저 경우에는 재사용이 아니고 바로 자식 쪽에서 메서드가 있으니까 굳이 부모까지는 갈 필요가 없지 않나요??

  • java
  • 객체지향
탕면이 댓글 1 좋아요 0 조회수 71

NaverBookRepository.class 의 위치에 따른 모듈간의 의존성에 대해 질문드립니다.

해결됨

서버개발자 과제전형 완벽가이드 - 1편

학습관련 질문을 남겨주세요! 상세히 작성주시면 더 좋아요 🙂 안녕하세요, 강사님 🙂 이번 질문도 혼자 먼저 구현 후, 강사님의 강의를 들으며 리팩토링을 진행하며 궁금증이 하나 생겨 질문 드립니다. 저는 search-api 모듈의 com.library.repository의 NaverBookRepository.class 위치를 강사님과 다르게 external:naver-client 에 위치시켰습니다.(NaverBook/KakaoBook은 external 에 종속된 구현체라고 생각) 그러다 보니, naver-client 모듈이 search-api 모듈에 있는 BookRepository, PageResponse, SearchResponse 를 알아야 했으며, naver-client 모듈이 search-api 모듈을 implementation('...') 으로 의존?참조? 하게 되었습니다. // search-api 모듈 public interface BookRepository { PageResponse<SearchResponse> search(...); } 이렇게 external -> search-api 로 흘러가는 의존 방향에 이질감이 듭니다.(외부 API 가 app 을 안다..?) 그래서 모듈간 의존 방향이 search-api -> external 되도록 강사님 강의처럼 NaverBookRepository 를 search-api 모듈에 위치 시켜도 NaverClient 때문에 search-api에 feign 종속성이 생긴 다는 것이 모듈간 의존성 격리가 되지 않아서 멀티모듈의 장점이 퇴색되었다고 생각합니다. 강사님은 과제가 아닌 실무에서 search-api 와 external 간의 모듈 격리를 어떻게 하시며, 의존 방향을 어떻게 하시는지 궁금합니다. 저의 부족한 지식을 확장할 수 있게 강사님의 인사이트 공유해주시면 감사하겠습니다!

  • java
  • spring
  • spring-boot
  • database
종혁 댓글 2 좋아요 1 조회수 73

인기 태그

인프런 TOP Writers

주간 인기글