AIOF 2기 3반 3주차 과제: 노트북 LM을 활용해 취업 전략 완성하기

소개

1,2,3주차 수업에서 배운 내용을 토대로 노트북 LM을 활용해 취업 전략을 완성해보았다.

진행 방법

STEP 1: 목표 기업 분석하기

분석하고 싶은 기업을 선정해 노트북 LM의 소스로 입력한다.

아래 프롬포트로 질문할 경우, 입력된 소스를 기반으로 답변을 얻을 수 있다.

[기업명]의 [직무명]에 필요한 핵심 역량을 알려줘.

1. 기술(Hard skill)과 성격(Soft skill)으로 나눠서 설명해줘.
2. 각 역량이 왜 중요한지도 간단히 덧붙여줘.
한국 텍스트 편집기의 스크린 샷

STEP 2: 맞춤 이력서 및 면접 준비

위 답변에는 추상적으로는 빠른 학습 및 적응력 등을, 구체적 기술로는 Kafka 등의 키워드를 핵심 역량으로 평가했다.

노트북 LM의 좌측 상단에 있는 탐색 탭을 눌러 위 키워드들을 붙여넣으면, 노트북 LM이 외부 소스를 찾아 추가학습할 수 있다.

또한 본인의 이력서나 포트폴리오가 있다면 이를 함께 제공해, 노트북 LM 이 참고하도록 한다.

이 과정을 반복하면 선별된 양질의 소스가 더해져 모델의 답변이 점점 정교해진다.

한국어 텍스트가있는 앱의 스크린 샷

학습된 노트북 LM을 기반으로 추가 질문 시행한다.

지금까지 분석한 모든 자료를 종합해서, 입사 지원을 위한 이력서 작성과 면접 준비를 도와줘.

- 이력서 '지원 동기' 항목에 강조하면 좋을 나의 강점과 경험을 추천해줘.
- 예상 면접 질문과 모범 답변을 소스 기반으로 만들어줘.
- '마지막으로 하고 싶은 말'에 활용할 만한 인상적인 멘트를 제안해줘.

STEP 3: 최종 정리 및 공유

정리된 내용을 기반으로 오른쪽 화면에서 다양한 시청각 자료를 생성할 수 있다.

(결과물)

  • 노트북LM이 작성한 마인드맵

NotebookLM Mind Map-2.png
9.63MB

  • 노트북LM이 작성한 보고서

분산 시스템 및 비동기 처리 학습 가이드

단답형 퀴즈 (10문항)

지시사항: 각 질문에 대해 2~3 문장으로 간결하게 답하시오.

1. RabbitMQ와 Kafka의 메시지 소비(Message Consumption) 방식의 근본적인 차이점은 무엇입니까?
2. Spring Boot 애플리케이션에서 비동기 처리를 활성화하고, 특정 메서드를 비동기적으로 실행하도록 지정하기 위해 사용되는 주요 어노테이션 두 가지는 무엇이며 각각의 역할은 무엇입니까?
3. RabbitMQ에서 메시지 처리 실패 시 무한 재시도를 방지하기 위해 사용하는 DLX(Dead-Letter-Exchange)는 어떤 역할을 합니까?
4. 분산 트랜잭션 패턴인 Saga에서 '보상 트랜잭션(Compensating Transaction)'의 목적은 무엇입니까?
5. 멱등성(Idempotency)의 개념을 설명하고, 이것이 분산 시스템에서 왜 중요한지 설명하십시오.
6. 마이크로서비스 아키텍처(MSA)는 기존의 모놀리식 아키텍처에 비해 어떤 이점을 제공합니까?
7. Node.js 이벤트 루프의 핵심 단계 중 하나인 Poll 단계가 수행하는 두 가지 주요 기능은 무엇입니까?
8. 이벤트 기반 아키텍처(Event-Driven Architecture, EDA)의 핵심 개념은 무엇이며, 전통적인 요청 기반 모델과 어떻게 다릅니까?
9. Kafka 프로듀서에서 메시지의 '정확히 한 번 전송(Exactly Once Delivery)'을 보장하기 위해 사용되는 두 가지 주요 기능은 무엇입니까?
10. Spring 비동기 처리에서 사용되는 반환 유형 중 Future와 CompletableFuture의 주요 차이점은 무엇입니까?


--------------------------------------------------------------------------------


퀴즈 정답

1. RabbitMQ는 브로커가 소비자에게 메시지를 밀어 넣는 '푸시(push) 모델'을 사용합니다. 반면 Kafka는 소비자가 능동적으로 브로커의 파티션에서 메시지를 가져와 마지막으로 읽은 위치를 추적하는 '풀(pull) 모델'을 사용합니다. 이 차이로 인해 RabbitMQ는 메시지 전달 보장에, Kafka는 대용량 데이터의 실시간 스트리밍 처리에 더 중점을 둡니다.
2. 비동기 처리를 활성화하기 위해서는 설정 클래스에 @EnableAsync 어노테이션을 사용해야 합니다. 특정 메서드를 비동기적으로 실행하려면 해당 메서드에 @Async 어노테이션을 지정해야 하며, 이 어노테이션이 붙은 메서드는 별도의 스레드에서 실행됩니다.
3. DLX(Dead-Letter-Exchange)는 특정 큐에서 처리하지 못한 실패한 메시지를 라우팅하는 역할을 합니다. 메시지 소비 중 예외가 발생하여 재시도가 불가능하거나 무의미할 때, 해당 메시지를 DLX로 보내 별도의 큐(Dead-Letter Queue)에서 처리하거나 분석할 수 있도록 하여 무한 재시도 루프를 방지합니다.
4. Saga 패턴에서 보상 트랜잭션은 일련의 로컬 트랜잭션 중 어느 한 단계가 실패했을 때, 그 이전에 성공적으로 완료된 로컬 트랜잭션들의 변경 사항을 취소(실행 취소)하는 역할을 합니다. 이를 통해 전체 분산 트랜잭션의 원자성을 보장하고 데이터 일관성을 유지합니다.
5. 멱등성은 동일한 연산을 여러 번 수행해도 결과가 달라지지 않는 성질을 의미합니다. 네트워크 지연이나 재시도 등으로 인해 동일한 요청이 여러 번 발생할 수 있는 분산 시스템에서, 멱등성은 중복 이체나 중복 데이터 생성과 같은 문제를 방지하고 시스템의 안정성과 데이터 일관성을 보장하는 데 필수적입니다.
6. 마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 서비스 단위로 분리하여 개발 및 배포를 가속화합니다. 각 서비스는 독립적으로 확장 및 장애 처리가 가능하여 시스템 전체의 복원력과 확장성을 높이며, 팀이 자율적으로 서비스를 관리할 수 있어 혁신을 장려합니다.
7. Node.js 이벤트 루프의 Poll 단계는 새로운 I/O 이벤트를 가져와 관련 콜백을 실행하고, I/O 작업이 얼마나 오래 블록되고 폴링해야 하는지 계산하는 두 가지 주요 기능을 수행합니다. 이는 이벤트 루프에서 가장 중요한 단계 중 하나로, 대부분의 비동기 I/O 작업이 여기서 처리됩니다.
8. EDA는 상태 변경이나 업데이트 같은 '이벤트'가 발생하면 이를 게시(publish), 소비(consume), 라우팅하는 분리된 서비스들로 구성된 아키텍처 패턴입니다. 요청 기반 모델이 클라이언트의 요청에 따라 서버가 응답하는 동기적 방식인 반면, EDA는 이벤트 생산자와 소비자가 서로를 알지 못하는 비동기적 방식으로 작동하여 느슨한 결합(loose coupling)을 촉진합니다.
9. Kafka에서 '정확히 한 번 전송'을 보장하기 위해서는 프로듀서에서 멱등성 옵션(enable.idempotence=true)을 활성화하여 메시지 중복을 방지하고, 트랜잭션 ID(transactional.id)를 설정하여 여러 메시지 전송과 소비를 원자적인 트랜잭션 단위로 묶어 처리합니다.
10. Future는 비동기 작업의 결과를 나타내는 기본 인터페이스로, get() 메서드를 호출하면 결과가 나올 때까지 스레드가 블로킹됩니다. 반면 CompletableFuture는 Future를 확장한 클래스로, 블로킹 없이 콜백을 등록하거나 여러 비동기 작업을 체이닝(chaining)하는 등 복잡한 비동기 흐름을 더 쉽고 유연하게 처리할 수 있는 다양한 유틸리티 메서드를 제공합니다.


--------------------------------------------------------------------------------


서술형 문제 (5문항)

지시사항: 아래 주제에 대해 자신의 지식을 종합하여 상세하게 서술하시오. (정답 미제공)

1. RabbitMQ와 Kafka의 아키텍처, 메시지 처리 방식, 성능 특성을 비교하고, 각각 어떤 유형의 애플리케이션에 더 적합한지 논하시오.
2. 마이크로서비스 아키텍처에서 데이터 일관성을 유지하기 위한 두 가지 패턴인 Saga와 이벤트 소싱(Event Sourcing)에 대해 설명하고, AWS 환경에서 각 패턴을 어떻게 구현할 수 있는지 논하시오.
3. Spring Boot의 비동기 처리 모델과 Node.js의 이벤트 루프 기반 비동기 모델을 비교 설명하시오. 각 모델의 핵심 메커니즘, 장단점, 그리고 개발자가 비동기 코드를 작성할 때 고려해야 할 사항을 중심으로 논하시오.
4. 이벤트 기반 아키텍처(EDA)의 이점과 당면 과제(challenges)를 설명하고, EDA가 어떻게 마이크로서비스 간의 느슨한 결합(loose coupling)을 촉진하는지 논하시오.
5. 분산 시스템에서 멱등성(Idempotency)이 왜 중요한지 설명하고, RESTful API 설계, 메시지 큐 시스템(Kafka), 은행 거래 시스템에서 멱등성을 보장하기 위한 구체적인 전략과 기술을 각각 논하시오.


--------------------------------------------------------------------------------


주요 용어집

용어	정의
마이크로서비스 아키텍처 (MSA)	애플리케이션을 자율적으로 동작하는 작은 서비스들의 조합으로 구성하는 아키텍처 스타일. 각 서비스는 독립적으로 배포, 확장 및 관리될 수 있다.
모놀리식 아키텍처	애플리케이션의 모든 구성 요소가 하나의 단위로 긴밀하게 결합된 전통적인 아키텍처 스타일.
이벤트 기반 아키텍처 (EDA)	시스템의 상태 변경을 나타내는 '이벤트'의 생성, 감지, 소비에 초점을 맞춘 소프트웨어 아키텍처. 서비스 간의 느슨한 결합을 촉진한다.
비동기 처리 (Asynchronous)	특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 실행하는 프로그래밍 방식. I/O 작업 등 시간이 오래 걸리는 작업의 효율성을 높인다.
멱등성 (Idempotency)	동일한 연산을 여러 번 수행해도 결과가 달라지지 않는 성질. 분산 시스템에서 중복 요청으로 인한 문제를 방지하는 데 중요하다.
Saga 패턴	여러 서비스에 걸친 데이터 일관성을 유지하기 위한 분산 트랜잭션 패턴. 각 서비스가 로컬 트랜잭션을 수행하고, 실패 시 보상 트랜잭션을 통해 이전 변경을 취소한다.
보상 트랜잭션	Saga 패턴에서 실패한 로컬 트랜잭션의 영향을 되돌리기 위해 수행되는 작업. 이전에 완료된 트랜잭션의 변경 사항을 취소한다.
안무 (Choreography)	Saga 구현 방식 중 하나로, 중앙 컨트롤러 없이 각 서비스가 이벤트를 발행하고 다른 서비스의 이벤트를 구독하여 워크플로를 조정하는 방식.
오케스트레이션 (Orchestration)	Saga 구현 방식 중 하나로, '오케스트레이터'라는 중앙 컨트롤러가 전체 트랜잭션을 관리하고 각 서비스에 수행할 작업을 지시하는 방식.
RabbitMQ	분산 메시지 브로커로, 복잡한 라우팅 규칙을 지원하며 푸시(push) 기반으로 소비자에게 메시지를 전달한다. AMQP 프로토콜을 기본으로 지원한다.
DLX (Dead-Letter-Exchange)	RabbitMQ에서 처리 실패한 메시지를 보내는 특별한 Exchange. 메시지 유실을 방지하고 실패 원인을 분석하는 데 사용된다.
Kafka	대용량 데이터의 실시간 스트림 처리를 위한 분산 스트리밍 플랫폼. 풀(pull) 기반으로 소비자가 메시지를 가져가며, 높은 처리량과 내구성을 제공한다.
파티션 (Partition)	Kafka에서 토픽 내의 데이터를 분산 저장하는 단위. 병렬 처리를 가능하게 하여 처리량을 높이며, 파티션 내에서는 메시지 순서가 보장된다.
정확히 한 번 전송 (Exactly Once)	분산 시스템에서 메시지가 중복되거나 유실되지 않고 정확히 한 번만 처리됨을 보장하는 의미 체계. Kafka는 멱등성 프로듀서와 트랜잭션을 통해 이를 지원한다.
Spring Boot Async	Spring 프레임워크에서 비동기 프로그래밍을 지원하는 기능. @Async 어노테이션을 통해 메서드를 별도의 스레드에서 실행할 수 있다.
스레드 풀 (Thread Pool)	여러 스레드를 미리 생성해두고 작업 큐의 요청을 처리하는 방식. 스레드 생성 및 소멸에 따른 오버헤드를 줄여 시스템 자원을 효율적으로 사용한다.
Future	Java에서 비동기 작업의 결과를 나타내는 인터페이스. get() 메서드로 결과를 얻을 수 있지만, 결과가 준비될 때까지 현재 스레드를 블로킹한다.
CompletableFuture	Future의 한계를 개선한 Java 8의 클래스. 콜백 등록, 비동기 작업 조합 및 체이닝 등 논블로킹 방식으로 복잡한 비동기 흐름을 처리할 수 있다.
Node.js 이벤트 루프	Node.js가 단일 스레드 기반으로 non-blocking I/O 작업을 수행하며 동시성을 확보할 수 있게 하는 핵심 메커니즘. 여러 단계(Phase)를 순환하며 콜백을 처리한다.
서버리스 (Serverless)	개발자가 서버나 인프라를 직접 프로비저닝하거나 관리할 필요 없이 애플리케이션을 구축하고 실행할 수 있는 클라우드 컴퓨팅 모델.
CI/CD	지속적 통합(Continuous Integration)과 지속적 제공/배포(Continuous Delivery/Deployment)의 약어. 소프트웨어 변경 사항을 신속하고 안정적으로 빌드, 테스트, 릴리스하는 DevOps 프랙티스.
REST (Representational State Transfer)	웹 서비스 아키텍처 스타일 중 하나로, HTTP 프로토콜을 기반으로 자원을 정의하고 자원에 대한 행위를 명시하는 방식.
관찰성 (Observability)	시스템의 내부 상태를 외부 출력(로그, 메트릭, 추적)을 통해 얼마나 잘 추론할 수 있는지를 나타내는 척도. 모니터링, 로깅, 분산 추적이 핵심 요소이다.

Tip.

추가적으로 1주차때 배운 것처럼 프롬프트를 더 체계적으로 작성하면 더 좋은 결과가 나올 것 같다고 생각했다

  • Task: GPT에게 맡길 작업을 정의합니다.

  • Context: 작업이 필요한 배경과 목적을 설명합니다.

  • Exemplar: 질문·출력 등 구체적인 예시를 제공합니다.

  • Persona: GPT가 어떤 역할을 맡을지 정합니다.

  • Format: 최종 출력물이 어떤 형태여야 할지 지정합니다.

  • Tone: 글의 어조와 스타일을 설정합니다.

도움 받은 글 (옵션)

1주차 과제(프롬프트 엔지니어링 최적화)

2
1개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.