묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결게임 프로그래머 취업 전략 가이드
지금도 학원이 유효한가요
지금도 독학보다는 c++, directx 기반 학원 1년이 더 낫다고 보시나요?
-
미해결게임 프로그래머 취업 전략 가이드
왜 클라 공부하는데 그래픽스가 시너지가 좋은건가요?
directx에서 코딩하면서 배우는걸 유니티, 언리얼 실무할땐 거의 안쓰지 않나요?뭘 최적화해야할지에 대해 알게되는건 약간 도움이 될 거같긴 한데, 그 목적으로로 그래픽스를 공부하기에는.. 너무 과하지 않나요?
-
해결됨회사에서 모셔가는 이력서 작성법
수업자료는 PDF로 못받을까요?
인프런 PDF 뷰어 문제인지 PDF 원본 문제인지 모르겠지만 글자가 깔끔하지 못합니다..
-
해결됨[CS 기술면접 1] 말이 트이는 컴퓨터 구조
그림(제어 버스) 내 화살표 오류 문의
안녕하세요."9.컴퓨터 하드웨어 구성 요소 및 시스템 버스의 역할" 강의 내용 중, 10:17 에 나오는 제어 버스 그림 내 화살표 오류 여부 문의드립니다. CPU: 메모리/입출력 장치에게 READ/WRITE 동작 지시 신호를 보냄 그림에서 "메모리"에게 설명대로 CPU가 READ/WRITE 신호를 보내고 있으나,"입출력 장치"에게 "CPU"가 Read/Write 신호가 아닌, "Ready/Wait" 신호를 보내고 있습니다. 따라서 아래와 같이 되어야 한다고 이해됩니다.READ/WRITE = CPU가 보내는 신호READY/WAIT = 장치가 보내는 신호설명 주신 제어 버스 동작 원리와 화살표 표기에 오류가 있을까요?
-
미해결게임 프로그래머 취업 전략 가이드
언리얼 관련 준비 질문드려요
현재 인서울 컴공 3학년 마치는 학부생입니다.사회복무요원 일정으로 대략 3년정도의 시간적 여유가 있고 이 기간 동안 취업 및 포폴 준비로 언리얼 인디게임 제작을 목표하고 있습니다. 최종적으로도 취직 이후에 인디게임쪽도 생각중입니다. 일단 제 상황을 말씀드리자면 원하는 취직 분야를 선택하지 못해서 일단 그냥 학부 성적이라도 챙겨놓자는 마인드로 CS 공부 위주로 했고 메인 CS 과목은 전부 들은 상태입니다. 다른 활동은 안했어서 목표 분야로 게임을 선택하고 일단 준비를 하려고 합니다.현재 유데미의 언리얼 강의를 보고 기본적인 움직임을 만들어 낼 수 있지만 너무 얕은 수준이라 첫번째로 UE 입문자 시리즈 언리얼 C++ 수강을 하고 그 다음 강의부터 제 프로젝트랑 강의를 병행하는데 다이렉트x11을 들어야할지 게임 서버 강의를 들어야할지 어떤 순서로 어디까지 강의를 들어야할지 고민이라 질문드려요 인디게임까지 생각이 있어서 모든 과정을 알아야한다고 생각해서 다이렉트 X -> 게임 서버를 들으면 될지 아니면 그 이후에는 어떻게 하는게 좋을지 조언을 구하고 싶습니다.
-
미해결게임 프로그래머 취업 전략 가이드
c++는 왜 필수인가요?
질문게시판에 비슷한 질문이 없어 질문드립니다. 왜 c++ 경험은 무조건 필수인 것일까요?c# 경험만 잔뜩 쌓인상태는 왜 위험할까요?
-
해결됨[CS 기술면접 4] 말이 트이는 데이터베이스
제2정규형 예시 질문
제2정규형 예시에서 등급 테이블을 보면 PK가 중복 되는 것처럼 표현됐는데 오류인가요?
-
해결됨회사에서 모셔가는 이력서 작성법
mockup image 관련 질문
내용에서 이해가 안가거나, 어떻게 적용할지 모르겠는 부분에 대해서 질문을 주시면 좋습니다.이력서 전체를 업로드하시고, 피드백 요청하시는건 답변이 어렵습니다. 안녕하세요!우선 좋은 강의 자료 감사합니다.강의를 보고나니 고민이 생겼습니다.Mockup image의 장점에 대해 공감했지만 어떻게 만들지 고민이 생겼습니다. 예를 들면 CI/CD 파이프라인 개선이나 새로운 개발 문화를 주도적으로 만든 프로젝트 같은 경우 어떤 목업 이미지를 사용해야할지 고민입니다.draw io로 설계도를 간단하게 그려서 추가해야할지 고민인데 혹시 이에대한 꿀팁이 있을지 궁금합니다.
-
해결됨[CS 기술면접 3] 말이 트이는 네트워크
면접관은 결과론적인 설명을 좋아하나요? 아님 디테일한 설명을 원하나요?
### HTTP 캐싱이 무엇이며 관련된 HTTP 헤더를 설명해주세요.HTTP 캐싱은 클라이언트나 중간 캐시 서버가 동일한 리소스를 재요청하지 않고, 저장된 사본을 사용해 네트워크 트래픽을 줄이는 기술입니다. 이를 위해 캐시 동작을 제어하는 헤더와, 리소스 변경 여부를 확인하는 검증 헤더, 조건부 요청 헤더가 사용됩니다.대표적인 캐시 제어 헤더로는 최신 HTTP에서 사용하는 Cache-Control, 구버전 브라우저와 호환을 위한 Pragma, 그리고 만료일을 지정하는 Expires가 있습니다. 리소스 변경 여부를 검증하는 ETag와 Last-Modified 헤더를 통해 서버는 클라이언트가 가진 리소스가 최신인지 판단하고, 조건부 요청 헤더If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since)를 활용하면 변경되지 않은 경우 전체 데이터를 전송하지 않고 304 Not Modified를 반환할 수 있어 효율적인 데이터 전송이 가능합니다.VS### HTTP 캐싱이 무엇이며 관련된 HTTP 헤더를 설명해주세요.HTTP 캐싱은 클라이언트(브라우저)나 중간 캐시 서버가 동일한 리소스를 재요청하지 않고, 저장된 사본을 사용하여 네트워크 트래픽을 줄이는 기술입니다.이를 제어하기 위해 캐시 제어 헤더, 검증 헤더와 조건부 요청 헤더가 사용됩니다. 캐시 제어 헤더는 클라이언트와 중간 캐시 사이에서 리소스의 캐싱 동작을 제어하는 핵심적인 역할을 합니다. 대표적으로 Cache-Control, Pragma, Expires 헤더가 사용됩니다.- Cache-Control 헤더는 최신 HTTP 에서 사용되며 캐시 동작을 제어합니다.- Pragma 헤더는 HTTP/1.0 이전에서 사용되며, 구버전 브라우저와의 호환성을 위해 사용됩니다.- Expires 헤더는 HTTP/1.0 부터 사용되며, 캐시 만료일을 정확한 날짜로 지정할 수 있습니다. Cache-Control: max-age 와 함께 사용되면, 해당 헤더는 무시됩니다.검증 헤더와 조건부 요청 헤더는 클라이언트가 이미 가지고 있는 리소스가 최신인지 확인하고, 변경되지 않았다면 서버가 불필요하게 전체 데이터를 전송하지 않도록 하는 기능을 합니다. 대표적으로 ETag & Last-Modified, If-Match, If-None-Match & If-Modified-Since, If-Unmodified-Since 헤더가 사용됩니다.- 검증 헤더- Last-Modified : 리소스가 마지막으로 수정된 날짜를 바탕으로 리소스가 변경되었는지 확인합니다.- ETag : 리소스의 고유 식별자(Tag)를 제공하여, Last-Modified 보다 정확하게 리소스가 변경되었는지 확인할 수 있습니다.- 조건부 요청 헤더- If-Match : 클라이언트가 가진 ETag와 서버의 ETag가 일치할 때만 요청을 수행합니다.- If-None-Match : 클라이언트가 가진 ETag와 서버의 ETag가 다를 때만 요청을 수행하며, 일치하면 304 Not Modified를 반환합니다.- If-Modified-Since : 클라이언트가 가진 마지막 수정 시각 이후로 리소스가 변경되었을 때만 응답을 반환하며, 변경되지 않았다면 304 Not Modified를 반환합니다.- If-Unmodified-Since : 지정한 시간 이후로 리소스가 수정되지 않았다면 요청을 수행합니다.면접관은 첫번째 답변과 두번째 답변 중 어떤 답변을 선호할까요? 첫번쨰는 결과론적이지만 뭔가얕다는 생각이 들지만 면접관이 꼬리질문하기 쉽게 말한거같고 (물론 꼬리질문도 대비했습니다) 두번째 답변은 디테일을 중심으로 말해서 좋게보일 순 있지만.. 면접관이 꼬리질문하기 어려울거같아서.참 고민이군요.. 지식 공유자님은 위 두가지 답변 중 어떤 답변을 선호하시나요? 그리고 그 이유가 있을까요?
-
해결됨[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
깃허브 권한 요청드립니다~
안녕하세요 취업폭격기 제로미니 입니다.정규과정을 신청하신분은 Zeromini-lab 권한, Zeromini Git Hub 취업자료 권한 신청 관련하여디스코드 (제로미니 IT취업 공부방) [초대장] 을 통해 '취업폭격기 제로미니'에게 다이렉트 메시지를 남겨주시면내용을 안내해드리도록하겠습니다! 폼작성 완료했습니다(잘못보내서 다시 제출하였습니다) 깃허브 권한 요청드립니다~
-
해결됨[CS 기술면접 6] 말이 트이는 자바와 객체지향
강의 잘 들었습니다. 혹시 다음 내용 추가하실 생각 있으실까요?
강의 정말 잘 들었습니다! 혹시 아래 내용들을 추가해주실 계획이 있으실까요?예외 처리 파트에서 Checked Exception & Unchecked Exception 관련 간단한 언급StringBuilder & StringBuffer 설명 시, String Constant Pool 개념에 대한 보충별개로 네트워크 강의 부분에서도 HTTP 버전별 특징과 Keep-Alive 지원 여부에 대한 설명 추가지금도 매우 훌륭한 강의이지만. 위 내용이 포함되면 취준생 입장에서 조금 더 많이 도움을 받을 수 있을 것 같습니다. 혹시 고려해주실 수 있을까요? 감사합니다!
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
헤더 압축부분 질문드립니다
1.1에서 네이버의 이미지를 예시로 들어주셨는데예시로 드신 이미지에는 동일헤더가 포함되어있는데 그럼 헤더중복을 제거되지 않은것으로 보이는데 맞을까요? 아니면 서버에서 전달은 하되 클라이언트에서 처리되는건가요?
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
공유 캐시 관련 질문 드립니다.
안녕하세요.https://inf.run/j6Fso위 질문과 답변이 제가 궁금했던 내용과 유사하여 글을 읽어보게 되었습니다.그리고 추가로 궁금한 점이 있어 질문을 드리고 싶습니다.먼저 제가 이해한 내용은 다음과 같습니다.공유 캐시는 클라이언트와 서버 사이에 있으며 사용자간에 공유할 수 있는 응답을 저장할 수 있고, 공유 캐시는 중간 프록시 서버에 저장하는 건데, 이 프록시의 종류는 forward proxy와 reverse proxy가 있다. 그리고 reverse proxy의 경우는 대표적으로 nginx서버가 있다.그리고 질문드리고 싶은 내용은,nginx의 경우는 서버 앞단에 있기 때문에 ip 주소를 알아야지 접근할 수 있다고 알고 있습니다. 그래서 위에서 말씀하신 '브라우저 캐싱과 공유 캐싱이 DNS캐시보다 먼저 수행됩니다.' 의 뜻은 '브라우저 캐싱과 공유 캐싱(forward proxy, CDN 캐시)이 DNS캐시보다 먼저 수행되고, 공유 캐싱(reverse proxy)이 수행된다.'로 이해하면 되는지 여쭙고 싶습니다.질문 읽어주셔서 감사합니다.
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
노션 공유가 안됩니다!
노션 공유 이메일에서 accept invite를 클릭하면 이 페이지에 접근할 권한이 없습니다. 라고 뜹니다 왜 그런 건가요???
-
해결됨[CS 기술면접 2] 말이 트이는 운영체제
메모리 공간을 선택할 때 메모리 탐색 순서
프로그램을 적재할 메모리 공간을 선택할 때, 선형탐색을 한다 하셨는데요. low addr(OS) -> high addr(User Prog) 순으로 탐색하나요? 아님 그 반대인가요?
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
컨텍스트는 context와 contextual information으로 나눠진다는게 무슨뜻인가요?
안녕하세요 강의 잘듣고있습니다.교안에 컨텍스트는 context와 contextual information으로 나눠진다고 서술되어 있는데 information이 context안에 포함된 구조가 아니라 나눠진 개념인가요?
-
해결됨[CS 기술면접 2] 말이 트이는 운영체제
Suspend는 Ready 나 Blocked 상태에서 가능한거 아닌가요?
이전 프로세스 상태 파트에서, Suspend는 Ready 나 Block 상태에서 가능하다고 배웠는데요! 중기 스케줄러에 보시면 "실행 중인 프로세스를 메모리에서 디스크로 이동(Swap out)하거나 디스크에서 다시 메모리로 복구함" 이라고 나와있습니다. 실행 중인 프로세스는 실행 데이터가 메모리에 적재되고 CPU 자원을 할당받은 상태 아닌가요..?
-
해결됨면접 전에 알고 가면 좋을 것들 - 신입 Java 백엔드 개발자편
JVM/GC 최적화 관련 질문드립니다!
안녕하세요! 강의에서 GC와 JVM 메모리 관리에 대해 설명해주신 부분을 듣다가, 제가 겪었던 Thread Starvation 문제가 떠올라 질문을 남기게 되었습니다 🤓 제가 겪었던 상황에 대해서 정리해보겠습니다. ✔ 1차 문제 발생[프로젝트 환경]- Spring Boot 3.x, Java 21- AWS EC2 t3.small (2 vCPU, 2GB RAM)- Docker 컨테이너 배포- 개발 서버 (비용 최적화 목적) [문제 발생 과정]초기에는 Docker 메모리 제한 없이 JVM만 -XX:MaxRAMPercentage=75.0로 설정했습니다. 카카오 소셜 로그인 기능을 추가한 후 배포 시 Thread Starvation 문제가 발생했습니다.# 초기 설정 (문제 발생)- Docker: 메모리 제한 없음- JVM: -XX:MaxRAMPercentage=75.0 (호스트 2GB의 75% = 1.5GB) [결과]- JVM이 힙 1.5GB + 스택/Metaspace 400MB = 총 1.9GB 사용- OS/Docker 600MB 사용- 총 2.5GB 필요 → t3.small 2GB 초과- Thread Starvation 발생 [1차 해결]Docker 메모리 제한을 추가하고 JVM heap을 축소했습니다.# DockerfileENTRYPOINT ["java", "-XX:+UseZGC", "-Xms512m", "-Xmx1g", "-jar", "app.jar"]# 배포 스크립트docker run -d --memory="1.5g" --memory-swap="1.5g" --cpus="1.8" ... ✔ 2차 문제 발생이후 구글/네이버 소셜 로그인, CRUD API들이 추가되면서 다시 Thread Starvation이 발생했습니다.AWS EC2 서버를 재부팅하고 SSH로 서버에 접속해서 원인을 파악해보았습니다. 아래 내용은 당시 작성했던 깃허브 이슈 내용입니다.✏ 문제 상황 정리1. 컨테이너 상태 확인- docker ps -a | grep nugudi-dev (컨테이너는 실행중이지만 unhealthy 상태)- docker top nugudi-dev (컨테이너 내부 프로세스 확인: 아무런 프로세스도 출력되지 않았습니다 → Java 프로세스가 죽은 상태) 2. 헬스체크 실패 원인 확인- Connection reset by peer 에러 → Spring Boot 애플리케이션이 정상적으로 응답할 수 없는 상태 3. 컨테이너 로그 확인- HikariCP에서 반복적으로 Thread Starvation 경고 → GC가 CPU를 독점하여 애플리케이션 스레드들이 실행될 기회를 얻지 못하고 있는 상태 4. OOM Killer 확인- docker inspect 명령으로 OOMKilled 여부 확인 → false → Linux의 OOM Killer가 프로세스를 강제 종료한 것이 아니라, Java 프로세스가 메모리 부족으로 인한 GC Thrashing 상태에서 스스로 응답 불가 상태 5. 메모리 사용량 측정- EC2 인스턴스의 실제 메모리 사용 현황을 파악하기 위해 컨테이너를 중지한 상태에서 free -m 명령 실행- OS + Docker 데몬: 256MB 사용- t3.small 인스턴스의 총 메모리: 1901MB- → 컨테이너에 안전하게 할당 가능한 메모리: 1901MB - 256MB = 1645MB (약 1.6GB) 6. Docker 메모리 사용량 확인 (docker stats nugudi-dev --no-stream)- 재부팅 후 안정화된 상태에서 컨테이너의 메모리 사용량 확인: 866MB / 1.5GB (56%) 사용- 안정화된 상태의 메모리 사용량. (따라서 애플리케이션 시작 단계에서의 피크 메모리 사용량은 아닙니다.) 7. CPU 크레딧 확인- 78-90 크레딧 유지하고 있음. 따라서 CPU 크레딧 고갈 문제는 아니라고 생각했습니다.- 문제의 원인은 메모리 부족으로 인한 GC Thrashing으로 예상됩니다. 🧐 원인 파악[메모리 부족 원인]애플리케이션 시작 단계에서는 모든 클래스를 한 번에 로딩하고, 모든 Spring Bean을 생성하며, DB 커넥션 풀을 초기화하는 등 메모리 사용량이 피크에 달합니다. 이 시점에서 필요한 메모리가 Docker limit인 1.5GB를 초과하면서 메모리 부족 상태가 발생했습니다.메모리를 확보할 수 없게 된 GC는 계속해서 메모리 확보를 시도하며 CPU의 90% 이상을 소비하게 되고, 이로 인해 애플리케이션 스레드들이 실행될 기회를 얻지 못하는 Thread Starvation 상태에 빠지게 된 것으로 예상됩니다.[ZGC의 문제점]현재 사용 중인 ZGC는 초저지연을 목표로 설계된 GC 알고리즘입니다. 이를 위해 복잡한 메모리 구조를 사용하며, 이 과정에서 heap 크기의 10-20%를 Native Memory로 추가 소비합니다. 현재 너구디의 설정인 1GB heap 기준으로 약 200MB의 Native Memory를 사용하는 것입니다.반면 G1GC는 heap의 약 5%만을 Native Memory로 사용하므로 약 50MB 정도만 필요합니다.따라서 ZGC를 G1GC로 변경하면 약 150MB의 Native Memory를 절약할 수 있습니다.ZGC는 수백 GB 이상의 대용량 heap과 초저지연이 중요한 프로덕션 환경에 적합하지만, 1GB 정도의 작은 heap을 사용하는 너구디 개발 서버에서는 오히려 메모리 오버헤드가 부담이 됩니다. G1GC는 10-50ms의 pause time을 가지지만, 개발 서버에서는 이 정도의 지연은 문제가 되지 않으며, 메모리 효율성이 훨씬 중요하다고 판단했습니다.[애플리케이션 시작 vs 안정화 메모리 차이]docker stats로 확인한 866MB(56%)는 애플리케이션이 시작을 완료하고 안정화된 상태의 메모리 사용량입니다. 하지만 애플리케이션 시작 단계에서는 훨씬 더 많은 메모리가 필요합니다.시작 단계(0-2분)에서는 JVM이 모든 클래스를 메모리에 로딩하고(+200MB), Metaspace를 초기화하며(+150MB), Spring Boot가 모든 Bean을 생성하고(+300MB), DB 커넥션 풀을 초기화하며(+100MB), 캐시를 초기화(+100MB)합니다.이 시점의 피크 메모리 사용량은 1400-1500MB 입니다. 시작이 완료된 후(3분 이후)에는 GC가 불필요한 임시 객체들을 정리하면서 메모리 사용량이 800-900MB로 감소하여 안정화됩니다. 🤔 질문1. GC 알고리즘 선택에 대해1GB 수준의 heap에서 ZGC보다 G1GC가 적합하다고 판단하여 변경했습니다. 이러한 판단이 적절한지 여쭤보고싶습니다. ZGC는 어느 정도 규모의 heap부터 효과적인지 궁금합니다. 2. -Xms = -Xmx 설정에 대해gemini 코드 리뷰에서 "서버 애플리케이션은 초기 힙과 최대 힙을 동일하게 설정하여 힙 확장 오버헤드를 제거하는 것이 좋다"는 의견을 받았습니다.메모리가 빡빡한 상황(여유 100MB)에서 처음부터 1.2GB를 할당하는 것이 안전한 선택이 맞을까요..! 오히려 512MB로 시작해서 필요할 때 늘리는 게 더 안전한것일지 여쭤보고 싶습니다. 3. Docker 메모리 제한과 JVM heap 비율에 대해현재 Docker 1.6GB 중 JVM heap 1.2GB (75%)로 설정했는데, 이 비율이 적절한지 여쭤보고 싶습니다. 일반적으로 권장되는 비율이 있는지 궁금합니다! 4. Native Memory 측정에 대해현재는 관련해서 정리해둔 기술 블로그 등을 통해 (G1GC는 heap의 5%, Metaspace 100MB 등)로 추정했는데, 실제로 정확히 측정하려면 어떻게 해야 하는지 궁금합니다! -XX:NativeMemoryTracking=detail 같은 옵션을 운영 환경에서 사용해도 성능에 영향이 없을까요?! 5. 현업에서의 리소스 관리이런 제한된 리소스 환경을 어떻게 관리하시나요?! 메모리 설정의 기준은 어떻게 정하시는지 궁금합니다! 6. 모니터링 지표Thread Starvation을 사전에 감지하려면 어떤 지표를 모니터링해야 할까요?? 강의 내용과 연결하여 최근에 개발하면서 궁금했던 부분들을 남기게 되었습니다! 초기 스타트업에서 백엔드 개발을 하고 있는데 개발하면서 이슈가 생기면, 강의들을 보기도 하고 구글링을 열심히 하기도 하고 AI와 정말 긴 대화를 나누기도 하면서 원인을 찾고 저희 상황에 제일 적합한 해결책을 찾고있습니다. 하지만 제가 문제 상황을 맞게 파악한건지, 가장 최선의 해결책을 찾은게 맞는지 늘 더 생각하게 되는 것 같습니다. 그리고 스스로의 판단에 확신을 갖기 위해서 더욱 더 많이 공부하고 기반을 탄탄하게 해야함을 느낍니다.Thread Starvation 문제를 겪고 제가 파악하고 해결한 방법이 적합한지, 리소스 관리와 관련해서 현업에서는 어떻게 관리하고 모니터링하는지 여쭤볼 수 있는 분이 주변에 없어서 긴 글을 남기게 되었습니다 🤓..읽어주셔서 감사합니다 :)
-
해결됨[CS 기술면접 3] 말이 트이는 네트워크
비대칭키 대칭키에 대해 정리해보았습니다.
비대칭키의 역할 (보안성 확보)- 통신 초기 핸드셰이크 과정에서만 비대칭키 암호화 방식 사용- 주된 목적은 클라이언트와 서버가 이후 사용할 대칭키(세션 키)를 안전하게 전달하는 것 -클라이언트는 서버의 공개키를 이용해 난수 바이트(대칭키를 정의하는 데 사용됨)를 암호화하여 서버에 보내고, 서버는 자신의 비밀키로 이를 복호화대칭키의 역할 (효율성 확보)- 대칭키 교환이 완료된 후, 이후의 모든 대용량 데이터 전송은 대칭키 암호화(AES 등)를 사용하여 처리-대칭키의 빠른 속도와 효율성을 활용하기 위함연휴동안 네트워크를 빠르게 정리할 수 있어 감사드립니다.선생님께서도 즐거운 추석 연휴 보내시길 바랍니다!좋은 강의 감사합니다
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
회선과 대역폭의 관계
안녕하세요.41강의 병목현상 해결 사례에서 설명해 주신 내용을 보고 회선과 대역폭의 관계에 대해 제가 이해한 부분이 맞는지 확인하고 싶습니다.기존 로드밸런서에는 WAS와 DB 각각에 대해 하나의 회선만 연결되어 있었기 때문에, 해당 회선이 제공할 수 있는 대역폭의 한계로 인해 병목현상이 발생한 것으로 이해했습니다.이후 추가 회선을 연결함으로써 전체 대역폭을 확장하는 효과를 가져와 병목현상이 해소된 것으로 이해했는데, 제 이해가 정확할까요?감사합니다.