묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[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 각각에 대해 하나의 회선만 연결되어 있었기 때문에, 해당 회선이 제공할 수 있는 대역폭의 한계로 인해 병목현상이 발생한 것으로 이해했습니다.이후 추가 회선을 연결함으로써 전체 대역폭을 확장하는 효과를 가져와 병목현상이 해소된 것으로 이해했는데, 제 이해가 정확할까요?감사합니다.
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
44강 질문
안녕하세요.44강을 듣던 중 CRC 부분에서 “XOR 기반 이진 나눗셈“ 이라는게 무엇인지 여쭤봅니다.(어떤식으로 계산하는 것이 XOR 기반 이진 나눗셈인지가 궁금합니다.) 감사합니다.
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
버스 토폴로지 질문 있씁니다
버스 토폴로지의 중앙 회선, 백본이라는 것이 결국 하나의 링크를 말하는 것이 맞을까요?즉, 모든 노드가 연결되어 있는 형태? 그리고 단점이 중앙 회선이 공격 받으면 문제가 생기는 것 같은데다른 토폴로지들도 마찬가지로 중앙의 노드나 최상단의 노드와 연결된 회선이 공격 받으면 결국 아래의 것들도 다 문제 생기는 것이 아닐까 싶은데 그렇다면 모두 동일한 위험성을 가지고 있는 걸까요?강의에서는 보안 집중이 가능한 점에서 더 낫다고 하셨는데 그러면 버스 토폴로지도 메인 회선에 보안을 강화하면 되지 않나 궁금합니다!
-
미해결개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
리눅스, 윈도우, IOS 등등 대부분의 운영체제는 같은 구조로 이루어져 있나여?
?
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
프로세스가 많아질수록 segment table도 많아지는 건가요?
각 프로세스가 segment table을 가진다고 하셨는데, 프로세스가 많아질수록 segment table도 계속해서 많아지는 건가요?
-
해결됨시니어 면접관이 알려주는 개발자 취업과 이직 한방에 해결하기 [실전편]
RabbitMQ 익스체인지 질문
11장 9분 40초 정도에'큐에는 팬아웃으로 이 order.completed 라고 하는 라우팅 키를 가지고 큐에 적재하고 있으면 이 order.completed를 보고 있는 모든 서비스가 팬아웃으로 분배되어 있는 컨슈머 역할을 하는 거기 때문에..'라고 하셨는데, Fanout은 라우팅 키를 무시한 채 모든 큐에게 전송(브로드캐스트)하는 익스체인지가 아닌가 싶습니다. 하여 order.completed에 매칭되는 모든 큐에 보내는 건 Direct(혹은 동일한 패턴인 Topic)이라고 생각되어 제가 잘못 이해하고 있는 건지 문의 드립니다.
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
자바스크립트, xml 문법 관련
xml 까지 들었는데 저는 c++ 만 배웠어서 듣는데 정확히 해당 문법을 제가 코딩으로 짤만큼 익숙하지 않고 그냥 대충 이론 정도만 알겠어요.... 문법적인 부분을 제가 직접 구사할만큼 수준으로 강의를 따라가야 하는걸까요? 아님 이론이 중요한 걸까요. (데이터 교환이 뭔지 , 직렬화가 뭔지등만 이해하면 되나요)
-
해결됨[CS 기술면접 1] 말이 트이는 컴퓨터 구조
CPU-명령어 처리 흐름
안녕하세요 강의 잘 수강하고 있습니다.강의 후반 부 6:47초 부근에서 Fetch단계에서 그림에 대해서 의문이 있습니다. 앞서 배운 시스템 버스의 구조상 메모리는 주소 버스에 접근하지 않는 걸로 이해(CPU -> 주소 버스 -> 메모리; 단방향)했습니다. 하지만 해당 그림에서는 메모리에서 기억장치 주소 레지스터에 접근하여 명령어 주소를 가져오는 것으로 이해가 되는데요. 기억장치 주소 레지스터가 메모리에 명령어 주소를 넘겨주는 단방향 흐름이 아닌가요?
-
미해결[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
깃허브 권한 요청
안녕하세요 구글 폼 작성 완료하였습니다. 깃 허브 권한 부탁드립니다!
-
미해결[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
강의자료 문의
안녕하세요. 제가 강의 신청을하고 디스코드랑 강의자료를 받는걸 깜빡했습니다 ㅠㅠ 깃허브 구글폼은 작성하였는데 깃허브자료주소와 디스코드링크는 어디에서 확인가능할까요? 안녕하세요 취업폭격기 제로미니 입니다.정규과정을 신청하신분은 Zeromini-lab 권한, Zeromini Git Hub 취업자료 권한 신청 관련하여디스코드 (제로미니 IT취업 공부방) [초대장] 을 통해 '취업폭격기 제로미니'에게 다이렉트 메시지를 남겨주시면내용을 안내해드리도록하겠습니다!
-
미해결[취업폭격기] 공공기관 전산직(IT) 취업 준비를 위한 정규과정 (기초~고급)
[문의] 스터디 모집 일정
안녕하세요, 제로미니님. 좋은 강의로 도움 많이 받고 있습니다. 다름이 아니라, 다음 스터디 모집(기초, 필기, 면접 등) 일정에 대해 문의 드립니다.제가 이번 스터디를 못듣게 되어서 아쉬운 마음에 문의 남깁니다.말씀 주시면 다음 기수에 꼭 참여하겠습니다. 감사합니다 :))