[Sites]
Youtube 바로가기
LinkedIn 바로가기
[Career]
現) JSCODE - 대표 멘토, CEO
前) (주)트라이포드랩 - CTO
前) (주)온리원유니버스 - CTO
前) 달리(DALY) - CTO
前) 팀메이트(Teammate) - CEO
[Books]
『Do it! JSCODE의 AWS 입문』, 이지스퍼블리싱 (2025.05)
[ETC]
- 기업 대상 개발 컨설팅 및 코딩 교육 활동
講義
受講レビュー
- 非専門者でも理解できるAWS中級/実戦(セキュリティ、可用性編)
- 非専門者でも理解できるNginx入門/実践
- 非専攻者でも理解できるMSA入門/実戦 (feat. Spring Boot)
- 大規模トラフィック処理のための負荷テスト入門・実践
- 非専攻者でも理解できるLinux入門/実践
投稿
Q&A
가용성에대한 질의..
안녕하세요 경용님! 질문 잘 해주셨어요 ~질문해 주신 내용에 대해 답변드려볼게요 !말씀해 주신 대로 사용자가 끊김을 느끼지 않게 하려면 각 서비스를 최소 2대 이상으로 구성하는 것이 맞아요!즉, 각 마이크로서비스를 2개 이상의 인스턴스로 실행해두면 장애가 발생하더라도 서비스가 중단되지 않고 정상적으로 동작할 수 있어요 !이런 구조가 바로 가용성을 확보하는 방식이에요 :)이를 통해 서비스 인스턴스에 문제가 생겨도 다른 인스턴스가 바로 요청을 처리할 수 있어서 사용자 입장에서는 서버 장애를 느끼지 못해요 ! 또한 트래픽이 여러 서버에 분산되어 부하가 한 쪽에 몰리는 걸 방지할 수 있어요 !추가로 배포 시에도 하나씩 교체가 가능하기 때문에 무중단 배포도 가능해져요 !이렇게 동일한 서비스를 여러 개 띄웠을 때, 주로 앞단에 ELB(로드밸런서)를 둬요 !ELB가 들어오는 요청을 여러 서비스 인스턴스에 자동으로 분배(로드밸런싱) 해주기 때문이죠 ! 쿠버네티스를 사용하신다면, 쿠버네티스 자체의 ReplicaSet 기능을 활용해서 동일한 Pod를 2개 이상으로 손쉽게 유지할 수 있어요~한 Pod가 죽더라도 다른 Pod가 바로 대체되기 때문에 자연스럽게 이중화 구조가 돼요 ! 참고로 게이트웨이, 사용자, 게시판 , 포인트 서비스 같은 무상태(stateless) 서비스는 2개 이상 띄워서 부하 분산을 하고, DB나 Kafka 같은 유상태(stateful) 자원은 RDS Multi-AZ나 MSK(매니지드 Kafka)를 사용해서 고가용성을 확보하는 게 좋아요 !추가로 궁금하신 점 있으시면 또 질문 남겨주세요~~
- 0
- 2
- 25
Q&A
컨슈머 서버 점진적 배포 시나리오
안녕하세요 sy님! 질문 잘 해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ! 점진적 배포를 할 때는 Rolling 배포 방식을 주로 사용합니다! Rolling 배포 방식을 사용하면 말씀해주신 대로 기존 서버가 죽고 새로운 서버가 생기면서 리밸런싱의 작업을 통해기존 컨슈머 서버의 작동에는 문제가 생기지 않습니다! 이 때, 신규 배포에 문제가 생겼다고 하더라도점진적으로 배포를 하는 방식이기 때문에신규 배포에 문제가 생겼다고 판단되는 즉시롤백으로 다시 기존 서버군을 배포하는 식으로 운영하면 크게 문제되지 않습니다:) 여기서 추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요 !
- 0
- 2
- 23
Q&A
무료 도메인
안녕하세요 garden님! 질문잘해주셨어요 ~질문하신 내용에 대해 답변드려 볼게요 ! "DNS에서는 ELB의 IP 주소를 반환하는건가요? 아니면 ELB 도메인 이름을 반환하는지 뭘 반환하는지 궁금합니다!"-> 결론적으로 말씀하신 상황에서 DNS는 최종적으로 ELB의 IP 주소를 반환해요 !CNAME 레코드 동작 과정에 대해 정리해서 설명드려볼게요 ~[1] 사용자가 도메인 입력사용자가 브라우저에 myservice.example.com를 입력하면 [2] DNS에 A 레코드 조회 요청브라우저가 DNS에게 "myservice.example.com의 IP 주소 알려줘~"라고 요청해요 ![3] DNS가 CNAME 레코드 발견그럼 DNS가 "이건 CNAME이네 ! 실제로는 my-elb-123456.ap-northeast-2.elb.amazonaws.com를 봐야 해"라고 인식해요 ![4] ELB 도메인의 A 레코드 조회DNS가 다시 my-elb-123456.ap-northeast-2.elb.amazonaws.com의 IP 주소를 조회해요 ![5] 최종 IP 주소 반환그리고 최종적으로 DNS가 브라우저에게 ELB의 실제 IP 주소(예: 3.39.193.254)를 반환해요 !즉 최종적으로 DNS는 ELB 도메인이 아니라 IP주소를 반환하게 되요:) 추가 또 궁금하신 점 있으시면 질문 남겨주세요 ~
- 0
- 2
- 36
Q&A
궁금한게있어요..
안녕하세요 경용님! 질문 잘 해주셨어요 ~~질문해주신 내용에 대해 답변드려 볼게요 ! "에우레카에대한 강의는 없나요?"-> 네 eureka에 대한 강의는 없어요 ~ eureka는 필수로 쓰지 않아도 되는 기술 스택이면서, 최근 현업에서는 자주 쓰지 않는 편이어서 이번 강의에서는 eureka에 대한 내용은 포함하지 않았어요 ! "localhost:8080/8081/8082 이렇게 하셨는데 실제 서비스할 때도 그렇게 적용해야하는것일지 궁금합니다."-> 실제 서비스를 운영하실 떄는 localhost가 아닌 실제 주소인 도메인(서비스)명 또는 ELB 주소 , Private IP등 을 설정해요 !또한 포트 번호는 실제 서비스가 돌아가는 포트에 맞춰서 설정하시면 됩니다 :)이 외로 또 궁금하신 점 있으시면 질문 남겨주세요~~
- 0
- 2
- 30
Q&A
최종 미션 아키텍처 적용 후에 CI/CD 문제 질문 드립니다
안녕하세요 Reverie님! 질문 잘해주셨어요 !질문해 주신내용에 대해 답변드려볼게요 ~ "이 방식으로 하려면 bastion host 보안 그룹 인바운드 규칙을 모든 IP 허용을 해야해서 이게 맞나 싶습니다."-> Bastion Host의 보안 그룹에서 모든 IP를 허용하는 것은 보안상 좋은 방법이 아니에요 !Bastion Host는 특정 IP에서만 접근할 수 있도록 제한하는 것이 원칙이에요 !또한 GitHub Actions의 러너 IP를 허용해야 하는데 이 IP가 계속 변경되기 때문에 결국 모든 IP를 허용해야해서 보안적으로 매우 취약해요 ! "github self-hosted runner"-> 첫번째 방법보다 훨씬 좋은 선택이에요 ~EC2에 GitHub Runner를 직접 설치하고, GitHub Actions는 외부가 아니라 Runner 내부에서 직접 실행되므로 SSH가 필요없어요 !그래서 내부 네트워크 안에서 docker pull, docker compose up 등을 바로 실행 가능해요 ~보안상 Bastion SSH 개방이 필요 없고, CI/CD 파이프라인을 완전히 내부망에서 실행 가능하다는 점이 장점이죠 :) "다른 방법 SSM Session Manager"-> SSM Session Manager를 사용하면 SSH 포트를 열지 않고도 프라이빗 EC2에 안전하게 접근할 수 있어요 !EC2에 IAM Role 부여를 통해 SSH 포트를 열 필요없이 GitHub Actions에서 AWS CLI로 SSM을 통해 명령을 실행할수 있어요 !아래 레퍼런스들 참고해보시면 도움이 되실것 같아서 첨부해드려요 :)https://itcodeheaven.tistory.com/118https://musma.github.io/2019/11/29/about-aws-ssm.html추가로 궁금하신 점 있으시면 또 질문 남겨주세요~~
- 0
- 2
- 20
Q&A
[비밀] 수업 관련 질문은 아닙니다.
안녕하세요 개발바닥님! 모델명 알려드릴게요ㅎㅎㅎ테이블 : https://ohou.se/productions/1241971/selling의자 : https://ohou.se/productions/201149/selling위에 링크로 구매했었습니다~~또 궁금한 점 있으시면 질문 남겨주세요:)
- 0
- 1
- 21
Q&A
Connection -1
안녕하세요 KMC님! 질문 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~현재 Kafka 연결 관련 에러가 발생하고 계시네요 !해당 에러는 주로 Kafka 브로커가 제대로 실행되지 않았거나, 네트워크 설정에 문제가 있을 때 발생해요 !우선 현재 질문해 주신 내용만으로는 정확한 문제 파악과 답변을 드리기가 어려워서어떤 섹션의 어떤 수업의 실습을 진행하시다가 해당 에러를 만나셨는지 공유해주시면 더 정확한 답변을 드릴 수 있을것 같아요~혹시 아직 해결이 안되셨다면 해당 내용을 포함해서 댓글 남겨주세요 :)
- 0
- 2
- 20
Q&A
지원하는 회사에 맞게 전부 다른 이력서를 작성해야하나요?
안녕하세요 경용님 ! 질문 잘 해주셨어요 ~질문해주신 내용에 대해 답변 드려볼게요! "이력서는 매번 다르게 작성해야 하나요?"-> 매번 완전히 새로 작성하는게 아닌 아래와 같이 기본 이력서 1개 + 맞춤형 수정 방식을 추천드려요 ![1] 기본 이력서 준비기본 이력서에는 본인의 모든 프로젝트, 기술 스택, 경험을 담은 완성본을 먼저 제작해요 ![2] 지원시 커스터마이징(회사별 JD에 따라 경험/강조 부분만 수정)해당 공고의 핵심 키워드 파악 후 관련 경험/프로젝트를 상단에 배치,이후 자기소개서나 포트폴리오 링크에서 해당 역량을 강조하시는 걸 추천드려요 ! "불명확한 채용공고, 어떻게 대응해야할까요 ?"-> 공고가 불명확하다면, 일반적으로 그 포지션에서 필수로 요구되는 역량과 자신만의 강점을 중심으로 작성하시는 게 좋아요 !“MSA 경험자”라고만 되어 있다면관련 이론과 연관이 있는 프로젝트 경험 혹은 실제 MSA를 제대로 구축한 경험이 없어도마이크로서비스 구조를 일부라도 구현한 경험이나 MSA 관련 학습, 스터디를 적어두시는걸 추천드려요 :) "실제 필요 인재상과 다른 경우, 지원자는 어떤 방식으로 준비해야하는것이 맞을까요?"-> 우선 시간을 최소한으로라도 투자해서 모두 지원해 보시는걸 추천드려요 !해당 과정을 통해 더 필요한 역량을 확인할 수도 있고 코딩테스트나 면접 경험을 할수도 있기 때문이에요 !하지만 너무 시간 낭비가 심하다고 생각되신다면 해당 공고의 경우 과감히 패쓰하시고, 다른 공고에 더 많은 시간을 투자해 보시는걸 추천드려요:) 추가로 궁금하신 점 있으시면 언제든 질문 남겨주세요 :D 늘 파이팅입니다 !!
- 0
- 2
- 58
Q&A
analyser를 인덱스 삭제후에 설정하던데 인덱스 생성후에도 analyser 수정이 가능한가요?
안녕하세요 dongk님! 질문 잘 해주셨어요 !질문해 주신 내용에 대해 답변드려 볼게요 ! "인덱스 생성후에도 analyser 수정이 가능한가요?"-> 인덱스가 이미 생성된 후에는 analyzer 설정을 수정할 수 없어요 !Elasticsearch에서 analyzer는 인덱스의 settings에 정의되는데, 이 settings는 인덱스 생성 시점에만 설정할 수 있고 이후에는 변경이 불가능합니다 ~추가로 궁금하신점 있으시면 편하게 질문주세요~~😄
- 0
- 2
- 22
Q&A
맨마지막 강의때 application.yml 에 db url 질문
안녕하세요 leeseongju님! 질문 잘해주셨어요~~질문해주신 내용에 대해 답변드려볼게요 ! "맨마지막 강의때 spring boot + mysql + redis 컨테이너를 docker compose 를 통해 배포하는 과정에서 jar 파일이 mysql 과 커넥션을 맺어주기 위해서는 전에 강의에서 했던 것 처럼 mysql 컨테이너 service 명으로 url 을 application.yml 에 변경해야 되는게 아닌가요??"-> 마지막 강의에서는compose를 사용해 여러 컨테이너(spring, mysql, redis)를 띄우기만 했어요 ~Mysql과 Redis는 Spring과 연결은 되지 않은 상태이고,단순히 스프링부트 이미지로 띄워진 스프링 컨테이너로 API의 동작만 확인해 봤어요 :) "디폴트로 in memory db(H2) 가 구동이 된 걸까요?"-> 아니에요 ! start.sptring.io에서 Spring Web과 Spring Boot DevTools만 추가하고,db 의존성을 추가하지 않았어요 !H2 같은 내장 DB가 돌아간 게 아니라, DB 관련 의존성을 아예 추가하지 않았기 때문에단순히 스프링 서버만 뜬 거예요 :)즉, 마지막 실습은 “Spring, MySQL, Redis 컨테이너를 한 번에 띄워본다”는 것에 집중한 거라Spring Boot 애플리케이션이 실제 DB(MySQL, Redis)와 연결된 상태는 아니었어요 ! 추가로 궁금하신점 있으시면 편하게 질문주세요~~😄
- 0
- 2
- 28