소개
現 개발자 취업컨설팅 회사 대표
삼성전자 임직원 교육 출강
대학, 기업, 국비교육 특강 진행
면접관련 서적 집필 중(길벗 출판사)
'개발남노씨' 유튜브 채널 운영
前 카카오엔터프라이즈
성균관대 전자전기공학 학사
강의
로드맵
전체 1수강평
- 코딩테스트 [ ALL IN ONE ]
- 기출로 대비하는 개발자 전공면접 [CS 완전정복]
게시글
질문&답변
질문이 있습니다 선생님!
안녕하세요 alopp님중요한 핵심을 질문하셨어요. 이거 이해하는데 가장 좋은데 웹브라우저인데, 크롬이 대표적인 멀티프로세스이고, 파이어폭스나 예전 인터넷익스플로어가 멀티쓰레드입니다.참고자료: https://www.chromium.org/developers/design-documents/multi-process-architecture/ 제 식대로 간단하게 설명드리면, 크롬의 탭 있잖아요. 탭 생성할때마다 쓰레드를 생성해서 하나의 탭을 생성할건지, 프로세스를 새로 만들어서 하나의 탭을 생성할건지 선택하는거에요. 쓰레드로 하면 아무래도 메모리 공유하는게 많을테니 메모리효율이 좋겠죠. 하지만 공유하는 메모리가 많을 수록 동시성문제도 더 많아지고, 보안 문제도 생기기 쉬울 수 있어요. 같은 메모리 자원을 공유하기 때문에 한쪽에서 보안이 뚫리면 다른 쓰레드의 메모리에도 접근할 수 있는 거죠.프로세스는 그와 반대의 장단점이 있다고 생각하시면 쉽습니다.아래 내용은 챗지피티로 검색한 내용인데, 참고해보세요~~추가적으로 궁금한게 있으면 편하게 질문 주세요 :) 1. 멀티프로세스 (크롬의 예시) 구글 크롬은 멀티프로세스 방식을 채택한 대표적인 웹 브라우저입니다. 크롬에서는 각 탭이 별도의 프로세스로 실행됩니다. 이렇게 함으로써 얻을 수 있는 이점은 다음과 같습니다: 장점: • 안정성: 각 탭이 별도 프로세스로 실행되기 때문에, 한 탭에서 오류가 발생하거나 브라우저가 크래시(중단)되더라도 다른 탭에 영향을 미치지 않습니다. 즉, 하나의 탭에서 문제가 생겨도 브라우저 전체가 멈추지 않고 다른 탭은 계속 작동할 수 있습니다.• 보안성: 프로세스마다 별도의 메모리 공간을 사용하기 때문에, 각 프로세스는 격리되어 작동합니다. 이를 통해 보안 침해를 방지할 수 있습니다. 예를 들어, 악성 코드가 특정 탭에서 실행되더라도 다른 탭이나 브라우저 전체에 영향을 주지 않습니다.• 메모리 보호: 프로세스마다 독립적인 메모리 공간을 할당받기 때문에, 메모리 오염으로 인한 문제가 방지됩니다. 단점: • 높은 메모리 사용: 각 탭이 별도의 프로세스를 가지므로, 메모리 사용량이 증가합니다. 탭이 많아질수록 전체 브라우저의 메모리 소비가 증가할 수 있습니다. 크롬에서의 적용: • 크롬은 각 탭뿐만 아니라 확장 프로그램, 플러그인, 렌더링 엔진도 별도의 프로세스로 분리하여 안정성과 보안성을 극대화합니다. 2. 멀티스레드 (파이어폭스, 구형 IE의 예시) 파이어폭스는 초기에는 멀티스레드 방식을 사용했으며, 현재는 멀티프로세스와 멀티스레드의 혼합 방식을 사용합니다. 초기 인터넷 익스플로러(IE)도 멀티스레드 방식을 사용했습니다. 장점: • 더 적은 메모리 사용: 멀티스레드는 하나의 프로세스 내에서 여러 스레드를 사용하기 때문에 메모리 사용량이 상대적으로 적습니다. 모든 스레드가 동일한 메모리 공간을 공유하기 때문에 메모리 효율이 좋습니다.• 빠른 스레드 생성 및 종료: 스레드는 프로세스에 비해 생성과 종료가 빠르기 때문에, 자원의 빠른 할당 및 해제가 가능합니다. 예를 들어, 여러 작업을 동시에 수행하는 웹 브라우저에서 스레드를 빠르게 생성하여 작업을 처리하는 데 유리합니다. 단점: • 안정성 문제: 멀티스레드는 모든 스레드가 같은 메모리 공간을 공유하므로, 한 스레드에서 발생한 메모리 오염이나 충돌이 다른 스레드에도 영향을 미칠 수 있습니다. 만약 하나의 스레드가 문제를 일으키면, 전체 프로세스가 중단될 가능성이 있습니다.• 보안성 문제: 메모리를 공유하기 때문에 악성 코드가 침투하면 전체 브라우저의 메모리를 오염시킬 수 있습니다. 이는 보안에 취약한 구조입니다. 파이어폭스에서의 적용: • 파이어폭스는 현재 탭을 별도의 프로세스로 분리하여 동작하면서도 내부적으로 렌더링 엔진과 같은 특정 작업을 멀티스레드 방식으로 처리하는 하이브리드 방식을 사용하고 있습니다. 이렇게 함으로써 크롬과 같은 안정성을 확보하면서도 메모리 효율성을 유지하려고 합니다. 3. 멀티프로세스 vs 멀티스레드 선택 기준 멀티프로세스를 사용할 때: • 안정성과 보안이 중요할 때: 크롬과 같은 브라우저처럼, 여러 작업이 독립적으로 실행되어야 하며, 하나의 작업에서 오류가 발생해도 다른 작업에 영향을 미치지 않아야 할 때 사용합니다.• 프로세스 격리로 인한 보안성: 메모리와 자원을 격리하여 보안을 강화해야 하는 경우 유리합니다. 멀티스레드를 사용할 때: • 빠른 자원 생성과 해제가 필요할 때: 스레드를 빠르게 생성하고 제거해야 하거나, 자원의 공유가 필요할 때 멀티스레드를 사용합니다.• 메모리 사용을 줄여야 할 때: 메모리 자원이 제한적인 환경에서 효율적으로 사용하기 위해 스레드 방식을 채택할 수 있습니다. 요약: • 크롬: 멀티프로세스 방식을 채택하여 안정성, 보안성, 프로세스 격리를 강조.• 파이어폭스: 멀티프로세스와 멀티스레드를 혼합하여 안정성과 메모리 효율성을 추구.• 구형 IE: 멀티스레드 방식으로 메모리 효율성을 높였지만 안정성에서 약점을 보임.
- 1
- 2
- 72
질문&답변
질문이있습니다 선생님!
안녕하세요 alopp님.제가 설명한걸 명확하게 이해를 하셔서 오히려 이 질문을 하신 것 같아요.사실 s 가 3이상일때는 결국 다시 동시성 문제가 발생하는데 이상하죠. 여러 스레드가 같은 자원에 접근하여도 서로 독립적인 작업을 하는 경우에는 동시 접근이 문제가 되지 않아요. 하지만, 공유 자원에 접근하는 경우에는 그 부분만큼은 충돌이 발생하지 않도록 추가적으로 보호 메커니즘(예를들어 뮤텍스)을 사용해야합니다. 정리해보면 s=3이상일 때, 공유자원을 같이 쓰는경우가 생기면 그때 만큼은 뮤텍스를 사용하는 방식으로 동기화를 해줍니다. 결국 동시성 문제를 해결하는 궁극의 방법은 뮤텍스(s = 2 일때의 세마포어)라고 생각하시면 됩니다. 질문에 대한 답이 되었을까요!?또 편하게 질문 주세요 :)
- 0
- 2
- 50
질문&답변
질문이있습니다 선생님!
안녕하세요 alopp님네, 맞습니다. 페이징을 사용하지 않을 경우, 기본적으로 프로세스의 메모리는 물리 메모리에 연속적으로 할당됩니다. 이를 연속 메모리 할당(Contiguous Memory Allocation)이라고 부릅니다.다른것도 궁금한게 있으면 편하게 질문 주세요~
- 0
- 2
- 68
질문&답변
노션이 사라졌습니다.
안녕하세요 해빈님.노션 로그아웃 후 다시 로그인 해보실래요!?노션자체 에러일 가능성이 높습니다.그래도 안되면 다시 구글폼으로 신청해주시면 됩니다~~
- 1
- 2
- 113
질문&답변
답을 보면서 공부하는 게 좋을까요?
안녕하세요 민호님.상황마다 다릅니다.문제가 안풀릴때는 한문제를 가지고 4시간 이상 고민을 치열하게 해야될 때도 있습니다. 하지만 기본실력이 많이 없거나 시간이만 이 없으면 어쩔 수 없이 빨리 다른사람 풀이를 보고 이해하고 학습해야될 때도 있죠.제가 추천하는건,나 좀 기본실력이 있는것 같고, 대부분 잘 푸는데 가끔 못푸는 문제가 있다. - 치열하게 3~4시간 고민 하다가 답안 보기못푸는문제가 많다 - 30분에서 1시간 고민하고 다른사람들 풀이 다양하게 접하고 익히기이런식으로 지침을 드리면 될 것 같아요~! 더 궁금한게 있으면 편하게 질문주세요 :)
- 1
- 2
- 133
질문&답변
스택 안에 왜 -1과 1이 들어가는지 궁금합니다.
안녕하세요 민규님. stack[-1]은 스택의 top 부분을 지칭하고stack[-1][1]은 스택의 top부분에 있는 튜플 중에서 1번째 인덱스에 있는 값을 가리키는 것입니다. 즉 -1은 top을 지칭하기 위해서1은 튜플의 1번째 인덱스를 지칭하기 위해서 사용한 것입니다. 질문에 대한 답이 되었을까요!?항상 화이팅입니다 ㅎㅎ
- 1
- 2
- 228
질문&답변
for,while 문
안녕하세요, 옥윤님for문과 while문이 있다고 항상 일괄적으로 시간복잡도가 n이 되는 것은 아닙니다.해당 코드가 어떻게 동작되는지 이해를 해야됩니다. 아래 글도 참고해보시고 혹시 보셨는데, 궁금증이 해소가 안되었다면 다시 질문 남겨주시면 답변 드리도록 하겠습니다~!! https://www.inflearn.com/questions/882274
- 1
- 2
- 227
질문&답변
VS Code 사용법
안녕하세요, Data_E님.VS Code 사용법 관련해서 강의를 찍어보도록 하겠습니다.찍고 업로드 하고 메일 보내드리도록 할게요 :) 학습 재밌게 잘 하시길 바랄게요~~!
- 1
- 1
- 176
질문&답변
Singly-LinkedList의 append 시간복잡도
안녕하세요, 쇼콜라끼삐또리님.네, 맞습니다. queue를 구현할 때 singly ilnked list로 구현하면, enqueue() 또는 dequeue()중에서 하나의 연산은 O(n)이 되어버리네요.해당 내용은 doubly linked list이면서 head, tail을 둘다 가진상태로 구현되어야 합니다.상세하게 생각하지 않으면 놓쳤을 뻔한 내용인데, 질문주셔서 감사합니다!! 추가로 궁금한점 있으면 편하게 질문 주세요 :)
- 1
- 2
- 158
질문&답변
bfs 시간복잡도 관련 질문입니다!
안녕하세요 kse011010님.단순하게 보면 O(n^3), (여기서 n= vertex의 개수)이라고 볼 수 있지만,if v not in visited 이 조건문 때문에 상황이 달라집니다. 조건문이 있기 때문에 그냥 무작정 n번씩 반복하는게 아닙니다.그래서 이런경우는 코드가 어떤 동작을 하는지 살펴봐야 합니다. 해당 코드는 bfs 코드라서, O(vertex개수 + edge 개수) * O(vetex 개수) (visited에서 v가 있는지 찾는데 걸리는 시간복잡도)정도로 생각하시면 됩니다. O(V+E) * O(V) 정도가 되겠네요~! 모든 코드에 대해 시간복잡도를 완전 정확하게 알기는 쉽지가 않아요.그래서 시간복잡도를 계산하는 연습을 하는 것은 좋지만, 적당히 넘어가야 하는 코드들도 많이 만날거에요! 혹시 더 궁금하시면 질문 남겨주세요 ~
- 1
- 1
- 184