강의
로드맵
전체 4수강평
- 기초 탄탄! 독하게 시작하는 Java Part 3(상) : 멀티스레드와 동기화
- 넓고 얕게 외워서 컴공 전공자 되기
- 외워서 끝내는 네트워크 핵심이론 - 응용
- 이해하면 인생이 바뀌는 Windows API hook
- C개발자를 위한 최소한의 C++
게시글
질문&답변
강의내용 질문드립니다
대부분의 내용이 중첩됩니다. 다만 '모든 웹 개발자가 봐야 할 단 한 장의 지도'가 가장 최근에 촬영된 것입니다. 그러므로 불필요하다면 수강 전에 환불하시는 것도 좋을 것 같습니다. 고맙습니다. 😄
- 0
- 2
- 19
질문&답변
네이키드 함수와 트램폴린 관련해서 궁금한 점이 있습니다.
우선 AI 답변을 참고하시기 바랍니다. 그리고 제 생각을 몇 가지 말씀드리자면...그렇게 하면 스택 프레임에 변화가 생깁니다. Naked 함수를 이용하게 되면 기존 코드의 스택프레임을 그대로 이용할 수 있기 때문에 구조가 간결해지고 함수 호출에 의한 오버헤드가 발생하지 않습니다. 원한다면 Naked가 아닌 일반 함수를 이용해도 되겠으나 권장되지 않으며 구조가 훨씬 복잡해집니다. 물론 성능도 떨어지고요.강의에서 설명한 방법 중 생각하시는 방식도 있고 Naked 함수를 이용하는 경우 기존 코드를 수정해 점프한 다음 추가 코드를 실행한 후 본래 함수 코드가 실행되도록 처리하고 있습니다. 그러니 훅 함수로 돌아가는 것은 아니겠습니다. 참고하시기 바랍니다. 😄
- 0
- 2
- 19
질문&답변
cpu 코어와 쓰레드 개수
한 JVM의 스레드 개수라 CPU 코어 개수에 맞춘다 하더라도 생각하시는 것처럼 다른 응용 프로그램들의 스레드들도 함께 실행되기 때문에 잦은 스위칭을 피할 수는 없습니다. 그래서 보통 서버들은 서버로 기능하기 위해 필요한 것만 남기고 대부분의 프로세스들을 실행시키지 않습니다. 그렇게 최소화 시키는 것이 최적화라 할 수 있고요. 어쨌든 그것은 환경적인 문제이고 서버 응용 프로그램을 구동하는 JVM만 놓고 생각하면 CPU 개수 만큼으로 한정하는 것이 여러 면에서 낫긴 합니다만 이것도 정답은 아닙니다. 서버 구조에 따라 스레드를 더 늘리는 것이 좋을 수도 있습니다. 이는 전적으로 어떤 처리가 이루어지는 것인가에 달려 있습니다.그리고 스레드 개수가 많다고 하더라도 유휴 상태가 되어 있다면 실제로 실행으로 이어지지 않습니다. CPU 사용을 요청하는 스레드들에 대해서만 운영체제가 CPU 사용에 대해 스케쥴링합니다. 스케쥴링 기준은 스레드 우선순위에 따라 달라질 수 있습니다. 만일 모든 스레드가 우선순위가 같다면 공평하게 분배가 될 것입니다. 그렇지 않다면 순위가 높은 스레드가 더 오래도록 CPU를 사용하게 되고요.이와 관련된 이야기들은 운영체제론을 공부하면 알 수 있습니다. 백엔드 개발자로 성장하고 싶다면 IT인프라에 대한 이해와 운영체제는 반드시 공부하시기 바랍니다. 실무를 경험하면서 발생하는 문제를 해결하려면 CS기본 이론은 언제나 중요하게 작용하기 때문입니다. 참고하시기 바랍니다. 😄
- 0
- 2
- 18
질문&답변
추가 강의 요청
웹을 논하기 전에 우선 컴퓨터에 대한 최소한의 상식이 필요합니다. 그래야 더 깊은 이론들도 이야기를 할 수 있는데 그런 측면에서 제 강의 중 몇 가지를 소개해드리겠습니다.넓고 얕게 외워서 컴공 전공자 되기https://inf.run/ifRtWIT에 관련된 이론을 배우기에 앞서 반드시 알고 있다고 가정하는 것들에 관한 내용들이 포함되어 있습니다.외워서 끝내는 SSL과 최소한의 암호 기술https://inf.run/62UsCSSL 인증서를 포함해 각종 인증 기술에 대해 알 수 있습니다.외워서 끝내는 네트워크 핵심이론 - 기초https://inf.run/jLodY네트워크에 대한 기본적인 이론들을 알 수 있습니다.우선 이 정도만 알고 있더라도 IT담당자분들과 어느 정도 커뮤니케이션이 될 수 있으리라 생각합니다. 만일 보안까지 생각하신다면 '곰책으로 쉽게 배우는 최소한의 운영체제론'(https://inf.run/5xPbv)도 보시기 바랍니다.(유튜브에서는 무료로 볼 수 있습니다.) 특히 보안에 관한 부분은 꼭 보시기 바랍니다. 유튜브에도 올려져 있으니 굳이 구매하실 필요도 없습니다.https://youtu.be/ZrNp9Be83qQ?si=EhpGYFgD8YixrMwD대략 한 20시간 정도 투자하셔야 합니다. 참고하시기 바랍니다. 😄
- 0
- 2
- 32
질문&답변
용어 질문드립니다.
인스턴스는...예를 들어 Excel 프로그램을 PC에 설치한 후 Excel을 실행해 문서를 편집할 수 있습니다. 이 때 실행된 Excel 프로세스를 Excel 프로그램에 대한 인스턴스라고 부를 수 있습니다. 인스턴스는 개념적 용어로 여러 곳에서 사용됩니다. 객체지향 프로그래밍에서는 객체를 통상 class로 정의하며 정의한 클래스에 대한 변수를 인스턴스라고 부릅니다. 다른 예로는...'인간'이라는 형식이 있고 철수나 길동이는 인간 형식에 대한 인스턴스가 된다고 보면 되겠습니다. 그리고 JSON은 파일 형식입니다. 프로그램 코드처럼 생겼으며 객체를 기술하기에 용이한 문법을 가지고 있습니다. 참고하시기 바랍니다. 😄
- 0
- 1
- 22
질문&답변
세션 질문
이미 좋은 답변이 있네요. JS가싫어요님의 답변을 참고하시면 되겠습니다. 😄
- 0
- 2
- 19
질문&답변
택배차 즉 Frame의 생명주기
아니오. 생각하시는 방식과 전혀 관련이 없습니다. 조금 이상하게 들릴 수 있는데...정확히 말해 Frame이 사라지는 것이 아니라 Frame 영역 안쪽을 처리하면서 Frame이 없는 것처럼 처리되는 것입니다. 모든 패킷은 L2구간을 통과하면서 Frame단위로 확장됩니다. 어쨌든 패킷처럼 한 덩어리 단위가 됩니다. 다만 Frame 메모리 영역을 다루지 않는 것으로 마치 메모리가 없어진 것처럼 처리 할 수 있고 패킷에 대한 모든 처리가 완료되는 시점에 Frame까지 한 번에 날리는 방식으로 메모리가 관리됩니다. '사라져서 없다.' 혹은 '존재하지 않게 됐다.'는 말은 대상을 인식하는 사람의 주관적 판단에 불과 합니다. 눈에 보이지 않는 것이라 하여 존재하지 않는 것이 아니고 내 눈에 10광년 밖 별이 보인다 하여 지금 이 순간 그 별이 실존한다 말하지 못하지요. 없는 것처럼 처리하는 것으로 사라지는 결과를 얻을 수 있습니다. 참고가 되기 바랍니다. 참, 이런 추상적인 이야기 말고 구체적으로 코드수준에서 내용을 확인하고 싶다면 제가 만든 다른 강의 중 '이해하면 인생이 바뀌는 네트워크 프로그래밍' https://inf.run/zNigN 강의를 보시기 바랍니다. 😄
- 0
- 2
- 24
질문&답변
JVM/GC 최적화 관련 질문드립니다!
우선 전체적인 질문의 내용이 수업범위를 벗어나는 높은 수준임을 말씀드립니다. 😄즉, 안타깝지만 제가 해드릴 이야기가 별로 없다는 것입니다. 이것이 이론과 실무의 실질적 차이이고 누구도 정확한 답을 해주기 어려운 이유입니다. 인프런 AI 답변을 보시더라도 알 수 있습니다. 힙 크기가 10GB 미만인 경우는 권장하지 않습니다. 권고되는 수준은 50GB 이상의 초대형 힙환경에서 유리합니다.서버는 기본적으로 미리 메모리를 할당해주는 방식을 취합니다. 이유는 간단합니다. 메모리를 동적으로 확보하는 것도 상당히 부하가 걸리는 일이기 때문입니다. Thread 1개가 소모하는 개별 스택 메모리는 기본적으로 1MB 입니다. 물론 설정에 따라 달라질 수 있지만 수정하지 않았다면 그렇습니다. 스레드가 500개만 되더라도 벌써 500MB가 단순히 스택 메모리 만으로 소진됩니다. 그런데 힙 비중으로 75%나 잡은 것은 비교적 가혹조건이 아닐까 싶습니다. 저라면 65% 수준으로 낮출 것 같습니다. 아무리 높게 잡더라도 70%를 넘기지 않는 것이 좋겠습니다. 개발된 시스템이 생성하는 스레드 개수가 얼마나 될지 잘 확인해보시기 바랍니다. 거기에 도커 컨테이너 오버헤드까지 고려한다면...메모리는 꽤나 부족한 상황이기 때문입니다.JVM의 NMT기능을 사용하면 정확한 측정이 가능합니다. 그러나 메모리, CPU 모두 5~10%이상 오버헤드가 발생한다고 알려져 있습니다. 디버깅 및 운영 문제 해결을 위한 한시적 사용이면 몰라도 상시 사용은 바람직하지 않습니다.이것은 정말 상황에 따라 차이가 큽니다. 서버가 제공하는 기능이 제각각이기 때문입니다. 이것은 정말이지 정답이 없습니다. 직접 부딪혀가며 답을 찾아가야 합니다. 다만 이미 그렇게 하고 있는 것으로 보입니다.첫 번재는 어쩌면 너무나 당연하지만 실행 중인 스래드 개수 입니다. 스레드 풀 기반의 작동방식이라면 활성 스레드 개수가 계속 Full 상태인지 확인해봐야 할 것입니다. 그리고 다른 지표로는 HTTP request 응답시간, TPS나 QPS같은 처리량 등을 봐야 합니다. 서버 부하가 증가함에도 TPS가 정체되거나 감소한다면 문제가 발생한 것으로 추정할 수 있습니다. WhaTap 같은 모니터링 도구를 활용해보는 것도 좋은 대응이 될 수 있을 것입니다.'현업'이라는 말은 생각보다 의미가 없습니다. 상황에 따라 대응 방법이 천차만별이기 때문입니다. 거기에 원인도 정말 온갖 것들이 있을 수 있습니다. 공부를 많이 하는 것 외에 다른 대안도 없고요. 많은 기업들이 CS 전공자를 찾는 이유도 이 때문입니다. 아무튼 지금 좋은 경험을 하고 있는 것으로 보입니다. 의견을 구할 길이 없어 답답한 마음은 아마도 모든 개발자들의 공통된 심정일 것입니다. 대신 잘 이겨내신다면 분명히 좋은 결과가 있으리라 확신합니다. 건투를 빕니다! 😄
- 0
- 2
- 25
질문&답변
백엔드 개발자가 갖춰야 할 네트워크 지식의 범위와 깊이에 대해 질문드립니다.
드릴 말씀이 많기도 하고 길어지기도 하네요. 관련 내용에 대해 이미 여러 차례 제가 운영중인 유튜브 채널에서 답변을 드린 적이 있습니다. 이 영상들을 참고하시면 도움이 되리라 생각됩니다. 😄https://www.youtube.com/@nullnull_not_eq_null/search?query=%EB%B0%B1%EC%97%94%EB%93%9C그리고 네트워크에 대해서 한정해 말씀드리자면 외워서 끝내는 네트워크 핵심이론 - 기초는 물론 꼭 응용편까지 보시기 바랍니다. 부하분산에 관한 문제는 중요하기 때문입니다.https://www.youtube.com/watch?v=GAyZ_QgYYYo
- 0
- 2
- 28
질문&답변
게임에서 랜선 뽑았다 다시 꽂을 때, 입력 몰아 보내기가 가능한 이유가 궁금합니다
버퍼링 영역이 영역은 소켓에도 있고 TCP같은 전송 구현 자체(보통 OS에 구현되어 있음)에도 있습니다. 다만 UDP는 버퍼링 없이 즉시 전송합니다. 필요하다면 응용 프로그램 수준에서 버퍼를 구현해야 합니다. 그런데 그보다 더 큰 문제는 응용 프로그램 수준에서 UDP 소켓 사용 시 물리적으로 랜 케이블이 분리된 상황을 인지할 수 없다는 점 입니다.TCP와 버퍼네. 그렇게 작동합니다. 다만 그런 상황이 '혼잡' 상황과 연결됩니다. 이는 철저히 혼잡제어 규칙에 따릅니다. 버퍼링은 응용 프로그램 수준 및 OS수준 모두에서 일어납니다. 이런 절차를 간소화 하는 방식으로 불필요한 메모리 복사를 줄여 성능을 높이기도 합니다. (대표적으로 윈도우의 IOCP)그리고 몰아 보내기는 가능합니다. 이런 문제를 해결하기 위한 노력은 전적으로 게임서버 개발자의 몫이 되겠습니다.그리고 상점 뚫기를 넘어 아이템 복제같은 버그가 발생하기도 합니다. 참고하시기 바랍니다. 😄
- 0
- 1
- 17