Dowon Lee
@kenneth
Học viên
32,143
Đánh giá khóa học
1,787
Đánh giá khóa học
4.8
저는 IT 엔지니어입니다. 언젠가 직업란에 "회사원?", "개발자?", "강사?" 어떤 단어를 선택해야 할 지 고민이 되었던 때가 있었습니다. 그러다가, IT 엔지니어라는 표현이 제가 잘 어울리는 직업명이라는 생각이 들어 지금까지도 직업란에는 "IT 엔지니어"라고 적고 있습니다.
직업이라는 것은 자신의 일을 나타내는 것이고, 일이라는 것은 재미있고, 도움이 되는 일이면 좋겠다는 생각을 가지고 있습니다. 누구나 다 원하는대로 일을 하며 살수는 없지만, 저는 제가 하는 있는 이 일을 좋아하는 있고, 잘하고 싶어하는 사람입니다. 개발자로써, 강사로써, 컨설턴트로써의 역할을 해 오면서, 매번 새롭게 출시되고 변화하는 IT 신기술을 따라가기에 급급하지만, 그래도, 남들보다 조금이라도 먼저 접하고, 전파하고, 사용하고 싶은 사람 중 한명입니다.
최근 관심을 가지고 있는 분야는 온라인 교육 컨설팅입니다. 그리고 관심있는 기술은 Cloud Native Architecture, Blockchain, Machine Learning, Kafka, Kuberbetes 등입니다. 이러한 기술은 실제로 강의도 하고 있고 업무에 적용해서 사용도 하고 있습니다. 하지만, 워낙 방대한 주제이다 보니, 아직까지도 계속 공부하고 있습니다.
머리속에 가지고 있는 것은 진정한 지식이 아니라고 합니다. 저는 제가 가진 지식과 경험을 다양한 방벙을 통해 공유하려 합니다. 그리고, 새로운 분야, 새로운 기술에 계속 도전하고 있는 IT 엔지니어가 될 것입니다.
現) 엔제이원컴퍼니 대표
現) 동국대학교 국제정보대학원 정보보호학과 대우교수
前) JP Morgan Chase AMJ Tech consultant (일본)
前) 삼성 SDS CMS 사업본부 책임 엔지니어
Khóa học
Đánh giá khóa học
- Công nghệ ảo hóa Docker dành cho DevOps (Private Harbor Registry)
- Phát triển dịch vụ LLM thực tiễn dành cho lập trình viên Spring
- Ứng dụng kiến trúc microservice (MSA) phát triển với Spring Cloud
- Ứng dụng kiến trúc microservice (MSA) phát triển với Spring Cloud
- Hướng dẫn xây dựng môi trường ảo hóa để sử dụng đa hệ điều hành (Docker + Kubernetes)
Bài viết
Hỏi & Đáp
service-discovery 프로세스 가동 이유
안녕하세요, 이도원입니다. 먼저 답변이 늦어 죄송합니다. AI 답변이 추가되고 있어 바로바로 체크하기 못했었습니다. API Gateway가 Service Discovery와 함께 동작하는 이유는 각 마이크로서비스의 실제 위치(IP/Port 를 Gateway가 직접 관리하지 않고, 서비스 이름으로 동적으로 찾아서 호출하기 위해서입니다.API Gateway는 Service Discovery를 통해 이 인스턴스 목록을 조회하고 적절한 서버로 요청을 전달합니다. 주요 장점은 다음과 같습니다.로드밸런싱동일 서비스의 여러 인스턴스에 요청을 분산할 수 있습니다.동적 위치 탐색서비스의 IP나 Port가 변경되어도 Gateway 설정을 매번 수정할 필요가 없습니다.Scale-out 대응서비스 인스턴스가 추가되거나 제거되어도 Service Discovery가 이를 자동으로 반영합니다.장애 인스턴스 제외비정상 인스턴스를 서비스 목록에서 제외하여 정상 인스턴스로 요청을 전달할 수 있습니다.Spring Cloud Gateway에서는 보통 다음과 같이 사용합니다.uri: lb://USER-SERVICE여기서 lb://는 Service Discovery에서 USER-SERVICE의 인스턴스를 찾고, 그중 하나를 선택하여 요청을 전달하라는 의미입니다.추가 문의사항 있으시면 글 남겨 주시기 바랍니다. 감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 78
Hỏi & Đáp
Inner class로 Config를 지정하는 이유
안녕하세요, 이도원입니다. Inner Config 클래스는 해당 Gateway Filter에 필요한 설정값을 필터 내부에 캡슐화하고, Spring Cloud Gateway의 설정 바인딩 구조와 자연스럽게 연결하기 위한 용도로 사용됩니다. Config를 CustomFilter의 inner class로 두는 장점을 간단하게 정리하면 다음과 같습니다.필터 전용 설정을 한 곳에 묶을 수 있음Config가 CustomFilter에서만 사용된다면 별도 파일로 분리하는 것보다 응집도가 높습니다.설정값 바인딩이 쉬움AbstractGatewayFilterFactory와 연결되어 YAML/Properties의 필터 파라미터를 Config 객체로 받을 수 있습니다.가독성이 좋아짐 필터 동작과 그 필터가 사용하는 설정 구조를 같은 클래스에서 확인할 수 있습니다.불필요한 클래스 증가 방지 작은 설정 객체를 위해 별도 Java 파일을 만들 필요가 없습니다.필터별 설정 캡슐화다른 필터의 설정과 섞이지 않고 CustomFilter.Config라는 명확한 범위를 가집니다.추가 문의사항 있으시면 글 남겨 주세요.감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 58
Hỏi & Đáp
장애 격리 관련해서 궁금한 부분이 있어요
안녕하세요, 이도원입니다. 네, 이해하신 방향이 맞습니다. MSA에서 말하는 장애 격리(Fault Isolation) 는 “한 서비스에 장애가 발생해도 다른 서비스는 전혀 영향을 받지 않는다”는 의미라기보다는, 장애의 영향 범위를 줄이고 장애가 연쇄적으로 확산되는 것을 제어하기 쉬운 구조를 만든다는 의미에 가깝습니다. 서비스별 실행 환경과 자원을 분리하고 Timeout, Circuit Breaker, Bulkhead, Fallback, 비동기 메시징 등의 패턴을 통해 장애의 영향 범위와 전파 경로를 통제할 수 있다는 의미입니다.말씀하신 예처럼 회원 서비스가 여러 서비스의 공통 의존 대상이라면 충분히 장애 전파가 발생할 수 있습니다. 단순히 서비스를 나누었다고 해서 자동으로 장애가 격리되는 것은 아닙니다. 오히려 서비스 간 의존 관계를 잘못 설계하면 MSA에서도 하나의 서비스 장애가 여러 서비스로 연쇄적으로 퍼지는 Cascading Failure가 발생할 수 있습니다. 그래서 말씀하신 것처럼 MSA의 장애 격리는 다음과 같이 이해하는 것이 좋습니다.장애를 완전히 없앤다 -> (X)장애가 발생했을 때, 영향 범위를 제한하고 연쇄 장애를 제어할 수 있도록 한다 -> (O)추가 문의사항 있으시면 다시 글 남겨 주세요.감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 50
Hỏi & Đáp
pg사가 있다고 가정하면
안녕하세요, 이도원입니다. 답변이 늦어 죄송합니다. 지금이라도 문의하신 내용에 대한 추가 답변이 되었으면 하는 마음에 글 남깁니다. 말씀하신 내용은 PG 결제 처리부분에 있어 전체적인 방향은 맞습니다. 다만 PG 연동이 들어가는 경우에는 Saga를 단순히 “결제 완료 → 재고 차감”으로 보기보다는, 주문·재고·결제의 상태를 각각 관리하고 실패 시 보상할 수 있도록 구성하는 것이 좋습니다.우선 질문하신 2번의 주문서버 → 결제서버 호출은 동기식으로 처리해도 전혀 문제가 없습니다.사용자가 결제하기 버튼을 누른 뒤 PG 결제창을 바로 받아야 하기 때문에,Client → 주문서버 → 결제서버 → PG 결제 준비 API구간은 일반적인 Request/Response 흐름으로 보는 것이 자연스럽습니다. 결제를 시작하기 전에는 동기 요청 흐름을 처리하시고, 그 이후에는 아래와 같이 Saga 처리를 위한 일관성 관리가 중요합니다.예를 들어,1. 주문 생성 주문 상태 = PENDING 2. 재고 예약 재고 서버에서 실제 차감보다는 RESERVED 상태로 일정 시간 확보 3. 결제 준비 주문 서버 → 결제 서버 동기 호출 결제 서버: - Payment 생성 - 상태 = READY - PG 결제 준비 API 호출 - paymentId / redirectUrl 반환 4. 사용자가 PG에서 결제 5. PG 결제 인증 완료 PG → callback/redirect → 서버 6. 결제 서버가 PG 승인 API 호출 7. 승인 성공 Payment = PAID PaymentCompleted 이벤트 발행 8. 주문 서버 PaymentCompleted 수신 Order = PAID 또는 COMPLETED 9. 재고 서버 예약된 재고를 실제 판매 확정 RESERVED → CONFIRMED 위 예시와 같은 흐름으로, Saga 관점에서는 실패 시 보상 트랜잭션도 같이 설계해야 합니다. 추가로, Saga라고 해서 모든 서비스 호출을 비동기 이벤트로 만들어야 하는 것은 아닙니다.2번의 주문서버 → 결제서버 동기 호출은 잘못된 것이 아니고 오히려 적절하다고 볼 수 있습니다.추가 문의사항 있으시면 다시 글 남겨 주세요.감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 78
Hỏi & Đáp
verify.sh 4단계 실패 — Jenkins 컨테이너에서 127.0.0.1:6443 connection refused
안녕하세요, 이도원입니다. 정보 공유해 주셔서 감사드립니다. macOS에 Docker Desktop을 설치했다고 해서 /etc/hosts에 kubernetes.docker.internal 항목이 반드시 생성되는 것은 아닙니다.Docker Desktop은 내부 DNS/가상 네트워크를 통해 host.docker.internal, kubernetes.docker.internal 같은 이름을 해석하는 경우가 많아서, /etc/hosts에 명시적으로 다음 항목이 없어도 동작할 수 있습니다. kubernetes.docker.internal은 Docker Desktop에서 Kubernetes를 활성화했을 때 Kubernetes API 서버 접근용 이름으로 사용될 수 있지만, 버전이나 설정에 따라 /etc/hosts에 직접 기록되는 방식이 아닐 수 있습니다.말씀하셨던 문제를 해결하는 방법으로 /etc/hosts 를 수정하는 것과 현재의 kubeconfig를 확인해서 적용하시는 것이 좋다고 생각됩니다. kubectl config view --minify감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 55
Hỏi & Đáp
햅틱? 백틱?
안녕하세요, 이도원입니다.말씀하신 내용처럼 백틱을 의미했습니다.` 백틱(backtick)``` 마크다운 코드블록확인 감사합니다.
- Lượt thích
- 0
- Số bình luận
- 1
- Lượt xem
- 48
Hỏi & Đáp
api응답내용이 한글이 아닌 다른 언어와 섞여서 나옴.
안녕하세요, 이도원입니다. Spring AI에서 gpt-4o-mini를 사용할 때 응답에 영어, 중국어, 일본어 같은 한글 이외의 문자가 간헐적으로 섞이는 현상은 Spring AI 자체의 인코딩 문제라기보다 대부분 모델의 생성 특성과 프롬프트 구성 문제입니다.특히 gpt-4o-mini 같은 다국어 모델은 입력 문맥에 여러 언어가 섞여 있으면 그 언어 패턴을 그대로 따라가는 경향이 있다고 합니다. OpenAI도 일관된 언어 출력을 원한다면 가능하면 프롬프트 전체를 한 언어로 유지하는 것을 권장합니다.질문은 한글이지만 모델에게 "반드시 한국어로 답하라"는 제약은 없습니다. 따라서 학습 데이터나 내부적으로 참고한 문맥에 따라 다음과 같이 섞일 수 있습니다.아래와 같이 system() 메서드에서 출력 형식을 지정해 볼 수 있습니다.String response = chatClient.prompt() .system(""" 당신은 한국어로 답변하는 AI Assistant입니다. 다음 규칙을 반드시 지키세요. - 모든 답변은 한국어로 작성합니다. - 영어, 일본어, 중국어 등 다른 언어를 사용하지 않습니다. - 단, 기술 용어와 고유명사는 원문을 사용할 수 있습니다. """) .user(question) .call() .content();추가로 temperature도 일반 질의응답/RAG 서비스라면 0.0~0.3 정도를 사용하고, 창의적 글쓰기 라면 0.5~0.7 정도를 사용해 보는 게 조을 것 같습니다. 추가 문의사항 있으시면 다시 글 남겨 주세요.감사합니다.
- Lượt thích
- 0
- Số bình luận
- 1
- Lượt xem
- 44
Hỏi & Đáp
5강 녹음 소리 ㅠㅠ
안녕하세요, 이도원입니다. 강의를 수강하시는데에 불편을 드려 죄송합니다. 말씀하신 "섹션5. Prompt Enginnering" 파트의 26~40 강의 내용 중 특정 강의 항목인지, 전체 강의를 말씀하시는 건지 추가로 알려주실 수 있을까요? 저희쪽에서 확인 중이기는 한데, 하울링이 심한 강의를 알려주시면, 개선 여부를 확인하는데에 도움이 될 것 같습니다. 감사합니다.
- Lượt thích
- 1
- Số bình luận
- 3
- Lượt xem
- 68
Hỏi & Đáp
github주소가 안보여요. ㅠ
안녕하세요, 이도원입니다. 강의에서 사용된 소스코드에 대한 깃헙 주소는 https://github.com/joneconsulting/spring-ai-part1 입니다. "섹션3. 13[실습] 첫번째 프로젝트 생성" 강의에서 안내하고 있습니다. 추가 문의사항 있으시면 글 남겨주세요. 감사합니다.
- Lượt thích
- 0
- Số bình luận
- 2
- Lượt xem
- 68
Hỏi & Đáp
녹음 소리
안녕하세요, 이도원입니다. 강의에 관심을 가져 주셔서 감사드립니다.말씀하신 6~8강의 내용 외에 9~16강 까지의 파일이 모노로 녹음된 것을 확인했습니다. 그 이후 파일은 모두 스테레오로 녹음되었습니다. 모노 파일을 스테레오 타입으로 변환 가능한지 확인해 보고 다시 답변 드리도록 하겠습니다.감사합니다.
- Lượt thích
- 0
- Số bình luận
- 1
- Lượt xem
- 118







