저는 IT 엔지니어입니다. 언젠가 직업란에 "회사원?", "개발자?", "강사?" 어떤 단어를 선택해야 할 지 고민이 되었던 때가 있었습니다. 그러다가, IT 엔지니어라는 표현이 제가 잘 어울리는 직업명이라는 생각이 들어 지금까지도 직업란에는 "IT 엔지니어"라고 적고 있습니다.
직업이라는 것은 자신의 일을 나타내는 것이고, 일이라는 것은 재미있고, 도움이 되는 일이면 좋겠다는 생각을 가지고 있습니다. 누구나 다 원하는대로 일을 하며 살수는 없지만, 저는 제가 하는 있는 이 일을 좋아하는 있고, 잘하고 싶어하는 사람입니다. 개발자로써, 강사로써, 컨설턴트로써의 역할을 해 오면서, 매번 새롭게 출시되고 변화하는 IT 신기술을 따라가기에 급급하지만, 그래도, 남들보다 조금이라도 먼저 접하고, 전파하고, 사용하고 싶은 사람 중 한명입니다.
최근 관심을 가지고 있는 분야는 온라인 교육 컨설팅입니다. 그리고 관심있는 기술은 Cloud Native Architecture, Blockchain, Machine Learning, Kafka, Kuberbetes 등입니다. 이러한 기술은 실제로 강의도 하고 있고 업무에 적용해서 사용도 하고 있습니다. 하지만, 워낙 방대한 주제이다 보니, 아직까지도 계속 공부하고 있습니다.
머리속에 가지고 있는 것은 진정한 지식이 아니라고 합니다. 저는 제가 가진 지식과 경험을 다양한 방벙을 통해 공유하려 합니다. 그리고, 새로운 분야, 새로운 기술에 계속 도전하고 있는 IT 엔지니어가 될 것입니다.
- 現) 엔제이원컴퍼니 대표
- 現) 동국대학교 국제정보대학원 정보보호학과 대우교수
- 前) JP Mogan Chase AMJ Tech consultant (일본)
- 前) 삼성 SDS CMS 사업본부 책임 엔지니어
저는 IT 엔지니어입니다. 언젠가 직업란에 "회사원?", "개발자?", "강사?" 어떤 단어를 선택해야 할 지 고민이 되었던 때가 있었습니다. 그러다가, IT 엔지니어라는 표현이 제가 잘 어울리는 직업명이라는 생각이 들어 지금까지도 직업란에는 "IT 엔지니어"라고 적고 있습니다.
직업이라는 것은 자신의 일을 나타내는 것이고, 일이라는 것은 재미있고, 도움이 되는 일이면 좋겠다는 생각을 가지고 있습니다. 누구나 다 원하는대로 일을 하며 살수는 없지만, 저는 제가 하는 있는 이 일을 좋아하는 있고, 잘하고 싶어하는 사람입니다. 개발자로써, 강사로써, 컨설턴트로써의 역할을 해 오면서, 매번 새롭게 출시되고 변화하는 IT 신기술을 따라가기에 급급하지만, 그래도, 남들보다 조금이라도 먼저 접하고, 전파하고, 사용하고 싶은 사람 중 한명입니다.
최근 관심을 가지고 있는 분야는 온라인 교육 컨설팅입니다. 그리고 관심있는 기술은 Cloud Native Architecture, Blockchain, Machine Learning, Kafka, Kuberbetes 등입니다. 이러한 기술은 실제로 강의도 하고 있고 업무에 적용해서 사용도 하고 있습니다. 하지만, 워낙 방대한 주제이다 보니, 아직까지도 계속 공부하고 있습니다.
머리속에 가지고 있는 것은 진정한 지식이 아니라고 합니다. 저는 제가 가진 지식과 경험을 다양한 방벙을 통해 공유하려 합니다. 그리고, 새로운 분야, 새로운 기술에 계속 도전하고 있는 IT 엔지니어가 될 것입니다.
- 現) 제이원 컨설팅 대표
- 前) JP Mogan Chase AMJ Tech consultant (일본)
- 前) 삼성 SDS CMS 사업본부 책임 컨설턴트
강의
로드맵
전체 1수강평
- [개정판] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정
- [개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
- [구버전] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정 (2020 ver.)
- [개정판] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정
게시글
질문&답변
강의 자료
안녕하세요, 이도원입니다.강의자료는 PDF 파일 형식으로 공유되어 있습니다. 소스 코드가 공유 된 Github 에서 브랜치를 pdfs로 변경하시면 됩니다.(사진) 감사합니다.
- 0
- 2
- 138
질문&답변
섹션 1이나 2 등등 강의 자료는 없는 걸까요?
안녕하세요, 이도원입니다. 강의자료는 PDF 파일 형식으로 공유되어 있습니다. 소스 코드가 공유 된 Github 에서 브랜치를 pdfs로 변경하시면 됩니다. (사진) 감사합니다.
- 0
- 2
- 18
질문&답변
tomcat 서버 배포 원리
안녕하세요, 이도원입니다. 실습을 어디까지 진행하셨는지 몰라서 올려주신 내용만으로 답변을 드립니다. 젠킨스에서 Plugin 중에 Deploy to container라는 플러그인을 설치하면, 빌드 된 Archive 파일을 WAS(Web Application Server, Tomcat 등)에 배포할 수 있습니다. 말씀하신 hello-world.war 파일로 빌드가 된 다음에 해당 파일을 deploy 계정을 이용하여 Tomcat에 배포(복사)하게 되는데, 이때는 배포하려는 Tomcat 에 배포 권한을 가진 사용자 계정이 필요합니다. 보통 deployer 라는 계정으로 script 형식으로 배포를 할 수 있도록 권한 설정이 되어 있는 계정으로 배포하게 됩니다. 강의 실습에서도 특정 Tomcat 서버에 hello-world.war 파일이 복사되었다면, deployer 계정 설정과 "빌드 후 조치" 항목에서 "Deploy war/ear to a container" 를 추가하여 작업하신 내용이 있을 것으로 생각됩니다. 아래 항목에서처럼 Tomcat URL을 보시면, 배포하려는 Tomcat의 주소와 계정 정보가 설정되어 있는 것을 확인해 보실 수 있습니다. (사진) 추가 질문사항 있으시면 다시 글 남겨 주세요. 감사합니다.
- 0
- 2
- 48
질문&답변
ssh를 사용한 docker-server 접속 시, IP 주소에 대해서
안녕하세요, 이도원입니다. 도커 컨테이너를 기동할 때 Port mapping(Port publish)라고 해서, 컨테이너 내부에서 사용되는 포트를 컨테이너 외부 (즉 로컬 PC 등)에서 사용하는 포트와 연결(매핑)하여 사용할 필요가 있습니다. 강의에서처럼 도커 컨테이너 내부의 SSH 포트인 22번을 컨테이너 외부인 로컬 PC에서 사용하기 위해 10022:22 와 같이 포트 매핑을 거쳐 사용하게 됩니다. 그러면 로컬 PC에서는 로컬 PC에 매핑 된 10022 포트로 접속을 시도할 경우, 컨테이너 내부의 포트하고 연결이 되게 됩니다. 따라서 로컬 PC에서 SSH 접속 시 IP주소:10022 와 같이 사용하게 됩니다. 다음으로, 모든 컨테이너를 기동하게 되면, 도커 네트워크와 아이피 주소가 할당 됩니다. 이것은 사용자가 지정하지 않고, 기본으로 선택되는 값을 사용할 수도 있고, 명시적으로 네트워크와 IP 주소를 지정해서 사용할 수도 있습니다. 강의에서는 대부분 자동으로 할당되는 방식으로 사용하였습니다. 예를 들어 도커 컨테이너를 하나 기동했을 때, 172.17.0.2와 같이 아이피가 부여되게 되며, 이는 어떤 네트워크에 포함되는지와 컨테이너를 몇번째 기동했는지에 따라서, 값이 다르게 할당됩니다. 대부분 첫번 째 기동하는 컨테이너는 172.17.0.2와 같이 할당되는데, 이는 172.17.0.1번은 외부로 연결되는 게이트웨이로 할당되기 때문입니다. 아래 예제는 제가 2번째가 기동한 컨테이너의 상세보기 정보를 출력한 내용입니다. 이 내용을 보면, 저의 Gateway는 172.17.0.1 이고, 할당된 IP는 172.17.0.3 인것을 알 수 있습니다."Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "MacAddress": "02:42:ac:11:00:03", "DriverOpts": null, "NetworkID": "aa52b13704404736af9d6f9af83091f54989bb19a791a2827fc574231116a147", "EndpointID": "1ba4df0fa1ec437c86da7903a7297e0ea8718ca45503d168ee74ab538894dfd2", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DNSNames": null } }같은 도커 네트워크에 포함된 컨테이너들은 (위 예제에서 172.17.0.x 의 컨테이너 들) 서로 통신할 때, 컨테이너 IP로 직접 통신이 가능합니다. 예를 들어, 172.17.0.2 컨테이너에서 172.17.0.3 컨테이너의 SSH 접속하는 경우에는 172.17.0.3:22 이렇게 컨테이너 IP와 포트 번호를 명시하면 되는데, 컨테이너 외부에서의 접속이 아니기 때문에 Post mapping된 값이 아닌 원래의 포트 번호로 접속을 시도하면 됩니다. 질문하신 내용은 결과적으로 같은 컨테이너에 접속하게 되는 것이며, 어디에서 (컨테이너 외부? 같은 네트워크? 등) 접속하는 지에 IP와 포트를 확인하여 접속시도 하시면 됩니다. 추가 질문 사항 있으시면 다시 글 남겨 주세요.감사합니다.
- 0
- 2
- 54
질문&답변
데이터가 null만 나오는 이유
안녕하세요, 이도원입니다. ModelMapper를 사용하는 부분에서 변환이 되지 않은 것 같습니다. CatalogEntity와 ResponseCatalog 간의 속성 이름이 일치 하는지 확인해 봤을 때는 이상이 없어 보입니다. 추가로 @Data annotation을 이용해서 Getter/Setter 메소드를 사용하고 있는 것으로 보이기 때문에, 직접적인 setXxxx/getXxxx를 구현해서 디버깅하는 것도 좋을 것 같습니다. 마지막으로 user-service에서는 동일한 로직으로 사용자 목록을 가져오는 데 문제가 없다고 하셨는데, user-serviser와 catalog-service 가 사용하고 있는 라이브러리등의 버전 확인도 해 보시면 좋을 듯 합니다. ModelMapper를 별도로 구현해서 사용하시려면 아래 코드를 참고하시어 작업해 보시기 바랍니다. @Bean public ModelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.STRICT) .setFieldMatchingEnabled(true) .setSkipNullEnabled(true) .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE); return modelMapper; }감사합니다.
- 0
- 3
- 49
질문&답변
도커 컨테이너로 동작할 때 user-service에서 403 forbidden 오류 관련
안녕하세요, 이도원입니다. 답변이 늦어 죄송합니다. 먼저, WebExpressionAuthorizationManager 에 등록 된 IP Address 가 어떤 주소인지 확인해 보는 게 필요할 것 같습니다. 127.0.0.1은 Loopback이니까 생략하도록 하고, 172.18.0.5 하고 192.168.0.172 2개가 PC1 번의 물리적인 Network(Wireless 등)IP 인지? Docker 컨테이너에 발급 된 IP 인지? Gateway의 IP를 지정했기 때문인지? 등을 확인해 봐야할 것 같습니다. PC2번과 IP 또는 컨테이너의 IP 등의 확인이 필요할 것 같습니다. 만약 같은 공유기에 연결 된 PC가 아니라, 다른 공유기나 다른 장소의 PC라면 말씀하신 것처럼 작동되지는 않을 거라 생각됩니다. 추가 질문사항 있으시면 다시 글 남겨 주세요. 감사합니다.
- 1
- 1
- 108
질문&답변
Serializable에 대해서 질문입니다!
안녕하세요, 이도원입니다. 자바에서 직렬화란 JVM에서 사용중인 객체 또는 데이터를 외부의 JVM에서도 사용할 수 있도록 Byte 형태로 변환하는 기술입니다. 객체 데이터를 바이트로 변환하는 작업과 직렬화된 바이트 형태의 데이터를 객체화 하는 과정에서 직렬화, 역직렬화라는 표현을 사용하기도 합니다. 예를 들어, DB나 Network를 통해 다른 환경으로 자바의 객체를 저장하거나 전달하여 다시 원래 형태인 객체로 변환하려면 직렬화 과정이 필요하게 됩니다. 다만, 해당 직렬화 작업이 Spring framwork 등에서 사용하는 라이브러리 등에서 지원하는 경우라면 사용자가 직접 직렬화하지 않아도 됩니다. 예를 들어, 사용자 객체 User를 Jackson에서 사용할 수 있는 객체로 변환하는 과정에서 직렬화 작업이 포함되어 Jackson에서 사용되기 때문에, 사용자 객체에서 추가로 명시하지 않아도 됩니다. 강의에서 사용된 부분에 있어서는 같은 환경의 JVM 환경에서 작동되기 때문에, 별도의 직렬화 없이 작업이 가능합니다. 추가 질문사항 있으시면 다시 글 남겨 주세요.감사합니다.
- 0
- 1
- 70
질문&답변
자료 다운받고 굿노트에
안녕하세요, 이도원입니다. 자료 다운로드 하는 부분은 인프런에 문의하시면 좋을 것 같습니다. 혹시 필요하시면, 인프런에 등록 된 자료와 동일한 버전은 공유해 드릴 수 있습니다. edowon0623@gmail.com로 문의주시기 바랍니다. 감사합니다 .
- 1
- 2
- 128
질문&답변
user service에서는 토큰 검증을 하지 않나요?
안녕하세요, 이도원입니다. 답변이 늦었습니다. AI 답변이 되었지만, 추가로 몇가지 말씀드리면, 403 오류는 어려 형태로 발생될 수 있습니다. apigateway-service에서 토큰 유효성까지 모두 확인되었고, user-service로 요청이 넘어간 상태에 403 오류가 발생될 수 있습니다. 예를 들어 SecurityConfig에서 접속한 IP를 제어하고 있는 상황에서 IP 주소가 달라도 403 오류가 발생될 수 있습니다. 한가지 상황에서 발생되는 것이 아니기 때문에, 에러코드를 상세화 하여 구분하거나, 디버깅으로 403의 원인을 찾아가는 방법이 필요할 수 있습니다. 작업하신 코드와 현재 올려진 github의 코드하고는 방식이 조금 다르기 때문에, 2개를 비교하시고 라이브러리 버전과 사용되는 API를 비교하는 것도 필요할 수 있습니다. 강의 설명 부분은 이전 라이브러리 사용이고, 실습 관련해서는 작년에 업데이트 된 부분이 있기 때문에, 2개의 차이도 확인해 보시기 바랍니다. 강의 설명에 대한 최신화는 상반기 중으로 업데이트 예정입니다. 감사합니다.
- 1
- 2
- 157
질문&답변
docker run -p 8080:8080 --name mytomcat docker-server
안녕하세요, 이도원입니다. 문의하신 내용에 대해 확인한 내용 다시 한번 정리해 보려고 합니다. 아래에서 설명하고 있는 모든 서비스들은 모두 Docker container로 실행되었습니다. Jenkins에서 docker-server로 실행 된 서버를 등록 (SSH 접속을 위해)docker-server에 미리 저장되어 있는 Dockerfile을 수정 Jenkins에서 Item 생성 후 "빌드 후 조치(Post actions)"로 아래 항목 추가 docker-server로 hello-world.war 파일 전송 docker builddocker conatiner run docker-server에 SSH로 접속해서 docker image 생성 및 컨테이너 실행이 정상적으로 되었는지 확인MacOS의 웹 브라우저에서 확인 위 내용에 대한 이미지를 아래와 같이 첨부해 드립니다. 1.Jenkins에서 docker-server로 실행 된 서버를 등록 (SSH 접속을 위해)docker-server는 배포되는 tomcat 테스트를 위해 8081 port를 미리 오픈(publish) 함(사진) 2.docker-server(container id: 2a38d7f65548)에 미리 저장되어 있는 Dockerfile을 수정tomcat 이미지를 latest 말고 9.x 버전으로 테스트 해 보시기 바랍니다. (사진) 3.Jenkins에서 Item 생성 후 "빌드 후 조치(Post actions)"로 아래 항목 추가 docker-server로 hello-world.war 파일 전송 docker build, docker conatiner run (-> Exec commands 에 2개의 실행 문장 작성)이미지 명 -> hello-world:v2(사진)빌드 결과 화면(사진) 4.docker-server에 SSH로 접속해서 docker image 생성 및 컨테이너 실행이 정상적으로 되었는지 확인(사진) 5.MacOS의 웹 브라우저에서 확인(사진)제가 실행했던 환경은 MacOS m1에서 위 과정을 실행 시, docker-server에 생성 된 docker image는 arm64로 빌드되었습니다. 그러나, 그 이후로 실행할 때도 모두 같은 m1 환경이라, arm 이미지 생성에 따른 문제는 없습니다. 추가로 확인해 보시면 좋다고 생각되는 부분은 docker-server 에 포함된 Dockerfile에서 base image를 tomcat:latest로 하지 마시고, 9.x 버전으로 변경해서 해 보시기 바랍니다. (저도 tomcat;9.0.98-jdk17 로 테스트 했습니다)계속 같은 오류 발생 시, 작업하신 스크립트도 다시한번 공유해 주시면, 저도 동일한 환경으로 다시한번 확인해 보도록 하겠습니다. 감사합니다.
- 0
- 5
- 219