안녕하세요 선생님 귀중한 강의 너무 잘 듣고있습니다 감사합니다. 한 가지 궁금한 점은 예시에서 설명해주신 자동차를 인터페이스로 구현하면 엑셀, 브레이크 등 자동차의 기능적인 측면의 것들이 선언될 것이라고 생각합니다. 기능이 아닌 자동차의 상태적인 측면(색깔, 경유차/휘발유차/전기차, 4륜/후륜 등)을 생각했을 때, 공통적인 속성들을 상속하는 구조가 좋을 것으로 생각하는데 그럼 실제 코드로 구현한다고 하면 Car라는 공통 속성들이 정의된 부모클래스에 엑셀, 브레이크 등이 선언된 인터페이스, 그 외에 다양한 기능들이 정의된 또 다른 인터페이스들이 implements 되고 Car 클래스를 K3, Avante 등의 클래스에서 extends 해서 엑셀, 브레이크 등의 메서드를 오버라이딩 한다고 생각해야 하는건가요 ?? 그런식이라면 애초에 Car를 추상클래스로 선언해야하는건가요 ?? 헷갈리네요. 즉, 인터페이스로 역할을 정의할 때, 속성에 관련된 측면들은 어떻게 처리되어야하는지 궁금합니다. 감사합니다
[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
검색관련 메소드를 만들때 uri 를 localhost:8080/search 이런식으로 GET Method 를 만들고 파라미터에 따라 유저든 포스트든 전부 통합해서 하는게 좋다는 말인가요 ? 그리고 추가적으로 웹사이트를 만들때 이런식으로 REST api 로 만든다면 뷰 부분은 보통 뭘로 만드나요 ?
질문1 self-descrive messages 기준에 대해 질문: front 에서 backend로 api 요청을 날려 응답을 받았을때 그 응답 데이터가 문서화 되어 제목을 통해 응답 데이터의 용도를 유추할수 있거나 아니면 응답 객체중 응답의 의미가 뭔지 알수 있게끔 하는 어떤 형식의 데이터가 포함되어 있으면 self-descrive messages 라는 기준을 만족하는건가요? 질문2: hateoas는 응답과 연관된 다른 요청을 프론트엔드에서 직접작성하는게 아니라 응답 내의 데이터를 이용해 바로 링크 설정을 할수 있게 한다는 의미인가요?
다음 새로운 강의로는 AWS기반의 EKS, NLB, SSL, Nginx, Aurora for mysql을 활용한 쿠버네티스 강의를 만들어주시면 감사하겠습니다. EKS(Elastic Kubernetes Service)로 node 구성시 multi-AZ으로 해주시고, ECR(Elastic Container Registry)사용법, ALB for Ingress로 할지 아니면 'NLB + Nginx for Ingress로 할지', SSL(혹은 TLS)인증서를 어디에 구성할지(Termination할지?), Jenkins 와 쿠버네티스 연동 그리고, 웹서버 혹은 WAS서버가 Scale-In될 때 웹클라이언트 세션 유지 용도로 ElasticCache for Redis도 추가 부탁 드립니다. 이 정도 커리큘럼이면 괜찮은 강의가 구성될 것 같습니다. 여력이 되신다면 쿠버네티스 모니터링용으로 프로메테우스와 그라파나, 그리고 로그서버로 fluentd도 부탁 드립니다.
안녕하세요. 마스크 api 서비스가 종료되어서 백업으로 올려주신 url 로 강의를 따라가고 있습니다. sample.json 으로 진행할 때에도 url 에 /?m=5000 을 적용하면 위치 반경의 데이터를 먼저 보여주나요? 강의에서는 url에 /?m=5000 을 적용하시고 위도, 경도 데이터를 쿼리로 보내니 오산시 데이터를 먼저 보여주는데, 제 app 에서는 /?m=5000을 추가하기 전과 똑같이 순서변경없이 서울시 데이터를 보여주고 있습니다. 혹시나 하는 마음에 서울시의 특정 위치의 위도, 경도를 설정해서 진행해 보았지만, 순서 변경없이 출력되고 있었습니다. --- 결론--- 혹시 /?m=5000 은 api 서비스에서만 작동되는 건지 질문드립니다.
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
1.구조체는 어느 상황에 쓰이나요? 그냥 객체가 해줄 수 있는 역할이 구조체의 역할을 포괄하고 같은 계층의 비슷한 데이터를 묶는 역할은 열거형이 할 수 있으니까 구조체는 별로 안 쓰일것 같아서요..아,열거형은 문자열만 사용 가능한가요? 2.Knight Clone()도 함수인가요? 반환값이 객체인 함수라고 보면 되는 건가요? 3.얕은 복사는 그냥 한 객체를 다른 이름으로 참조하는 것이라 볼 수 있겠고 깊은 복사는 같은 값을 가진 아예 다른 객체를 만드는 거라고 보면 되나요?
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
코드중 mc.CellPos = pos; 이 부분에서 NullReferenceException: Object reference not set to an instance of an object GameScene.Init () (at Assets/Scripts/Scenes/GameScene.cs:31) BaseScene.Awake () (at Assets/Scripts/Scenes/BaseScene.cs:12) 이런 에러가 나서 진행이 안됩니다. 찾아보니 널값을 가질수 없는 오브젝트에 널값을 할당해서 나는 오류라고 하여서, 명시적으로 mc.CellPos = new Vector3Int(10,10,0); mc.CellPos.set() 등으로 해보아도 같은 오류 메세지가 뜹니다.
[기초-응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant)
현재 rhel 8에서 ansible 및 vagrant를 진행중입니다. 아래 vagrant up 부분에서 오류가 나서 출력된 메세지를 첨부합니다. [root@master ~]# vagrant up Bringing machine 'default' up with 'libvirt' provider... ==> default: Checking if box 'generic/rhel8' version '3.2.10' is up to date... Traceback (most recent call last): 35: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/batch_action.rb:86:in `block (2 levels) in run' 34: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/machine.rb:201:in `action' 33: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/machine.rb:201:in `call' 32: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/environment.rb:613:in `lock' 31: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/machine.rb:215:in `block in action' 30: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/machine.rb:246:in `action_raw' 29: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/runner.rb:89:in `run' 28: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/util/busy.rb:19:in `busy' 27: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/runner.rb:89:in `block in run' 26: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builder.rb:149:in `call' 25: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:48:in `call' 24: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builtin/config_validate.rb:25:in `call' 23: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:48:in `call' 22: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builtin/box_check_outdated.rb:92:in `call' 21: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:48:in `call' 20: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builtin/call.rb:52:in `call' 19: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builder.rb:189:in `to_app' 18: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/builder.rb:189:in `new' 17: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:34:in `initialize' 16: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:34:in `map' 15: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:34:in `block in initialize' 14: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:121:in `finalize_action' 13: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/action/warden.rb:121:in `new' 12: from /root/.vagrant.d/gems/2.6.6/gems/vagrant-libvirt-0.3.0/lib/vagrant-libvirt/action/create_networks.rb:26:in `initialize' 11: from /root/.vagrant.d/gems/2.6.6/gems/vagrant-libvirt-0.3.0/lib/vagrant-libvirt/provider.rb:29:in `driver' 10: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 9: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 8: from /root/.vagrant.d/gems/2.6.6/gems/vagrant-libvirt-0.3.0/lib/vagrant-libvirt/driver.rb:1:in `<top (required)>' 7: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 6: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 5: from /root/.vagrant.d/gems/2.6.6/gems/fog-libvirt-0.8.0/lib/fog/libvirt.rb:4:in `<top (required)>' 4: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 3: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 2: from /root/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/libvirt.rb:11:in `<top (required)>' 1: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /root/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError) 실행 환경이 윈도우가 아니여서 죄송합니다. 현재 ANSIBLE 진행 환경이 꼭 CentOS, RHEL 이여야만 합니다. 만약 해결이 안된다면 초기화라도 해서 다시 시도 하고싶은데 도움을 꼭 받고싶습니다. 감사합니다. 환경 : RHEL 8.3 PROVIDER: kvm 방화벽 : dead
멀티 쓰레드 질문 드립니다. GameRoom 이 JobQueue를 가지고 있어서 멀트 쓰레드에서 안전하다고 하셨는데 GameRoom 의 Broadcast , Enter,Leave 등은 JobQueue 를 이용 하니 멀티 쓰레드에서 안전 한거 같은데 GameRoom 의 Flush 는 어떻게 안전 할수가 있나요?