블로그

김동찬

[2024 인프콘] 올해 들어 가장 잘한 일 인프콘 서포트즈 하기!

2024 INFCON 서포터즈 후기 및 비하인드 스토리 1.인프런 워밍업 클럽 스터디https://www.inflearn.com/course/offline/inflearn-warmup-club-study-0인프런 워밍업 클럽은 BE와 FE부분에 대해서 코치님의 지식공유를 토대로 여러 스터디원들과 주마다 성장하며작은 과제와 사이드프로젝트까지 진행하며 빠른 성장을 도와준 인프런 프로그램이다 난 여기에 BE파트로 진행해워밍업 클럽을 이수 했고 참여자들을 대상으로 인프런팀에서 감사하게도 인프콘 서포터즈 참여기회를 주셨다 2.인프콘 서포터즈 OT 이렇게 참여 전 온라인 OT를 통해 인프런팀에서 친절하게 설명을 해주시면서 당일 업무,역할 분배등을 진행했습니다 인프콘 진행!저희 서포터즈분들은 아침 8시에 모여서 사전교육및 오늘 활동에 대한 리마인드를 듣고 A팀 B팀 나뉘어 인프콘을 진행했습니다 저는 B팀으로 오전에는 부스체험+세션참여 위주로 인프콘을 즐겼습니다 인프콘에는 datadog, 무신사, jetbrains 등 많은 기업과 단체에서 부스를 운영해주셔서 IT관련 커뮤니티를 생성하기에 좋은 기회라고 생각했습니다이렇게 스템프 투어를 통해 인프런에서 준비한 많은 프로그램과 행사에 참여하다인프콘의 메인 세션에 참여했습니다사실 저는 아직 학부생과정이라 실무내용을 들으면서 100%받아드리고 이해는 하지 못했지만 새로운 인사이트를 경험하고 BE과정에서뿐만아니라PM,디자인 다양한 분야의 이야기를 들을 수 있어 값진 경험이였던 것 같습니다저희 B팀 서포터즈들은 이렇게 세션에 오시는분들 인원체크 및 세션종료후 지식공유자님들과의 QNA를 위해 장소 이동안내 역할들을 수행했습니다 중요업무는 아니더라도 인프콘 행사를 운영하는일원중 한사람이라는 느낌을 받을 수 있어서 좋았습니다이렇게 점심시간에는 도시락과 커피와 중간휴식시간 마다 간식거리들도 제공해주시고 저희 서포터즈분들을 많이 인프런팀에서 배려해주신다는 느낌을 받았습니다  인프콘에 이렇게 세션 외에 네트워킹 파티를 통해 저와 비슷한 관심사를 가지고있는 분들을 만나 다양한 이야기와 새로운 지식들을 알 수 있어서 세션 외 프로그램도 매우 유용하다고 생각했습니다. 이렇게 인프런측에서 철저하게 준비해주신 인프콘행사에 서포터로 활동하게 되니 따로 인프콘에서 제공하는 굿즈를 받을 시간이 없어서 아쉬워하고 있었는데인프런에 자미님께서 굿즈 부스에서 저희를 기억해주시고 따로 메일을 주셨습니다ㅜㅜ어째서 인프런에는 이렇게 좋으신 분들만 가득한건가요...!!! 덕분에 인프콘 다녀오고 나서 하루하루가 따뜻해지는 기분입니다 이렇게 마무리까지 감동이 가득한 2024 인프콘 서포터즈 후기였습니다 자미님 뿐만 아니라 제트님 저희 서포터즈분들을 챙겨주신 태리님 등 많은 인프런 관계자분들에게 감사한 2024 인프콘이였습니다 다음에도 비슷한 기회가 있으면 꼭 다시 참여하고싶습니다

커리어 · 자기계발 기타인프콘인프랩백엔드PM

디프만

[인프런 X 디프만 16기] 디프만이 인프런으로 성장하는 방법

안녕하세요. 디자이너와 프로그래머가 만났을 때, 디프만 16기 운영진 입니다. 디프만 16기에서는 국내 대표 교육 플랫폼인 인프런의 후원을 받아디퍼들이 원하는 강의를 할인받고 수강하며 함께 성장할 수 있는 소중한 기회를 얻었습니다!디퍼 : 디프만 멤버들을 명칭하는 말이예요. 그렇다면, 실제로 인프런 스터디에 참여했던 디퍼들은 어떤 과정을 거쳐 성장했을까요?🏆인프런 우수 스터디상🏆을 수상한 카프카 스터디 팀의 생생한 이야기를 통해,16기 디퍼들이 인프런과 어떻게 협업하며 성장했는지 함께 살펴보고자 합니다. 성장의 기회, 인프런 스터디감사하게도 디프만은 지난 3기수 연속으로 인프런과 협업하며, 디퍼들이 원하는 강의를 할인받아 수강할 수 있도록 쿠폰을 지원받았습니다.디프만에서는 이 쿠폰을 효과적으로 활용할 수 있도록, 스터디원을 모집해 함께 공부하는 ‘인프런 스터디’를 운영했어요.이를 통해 프로젝트의 기술 수준을 한층 높일 수 있었고, 참여한 모든 디퍼들이 각자의 성장도 이뤄낼 수 있었습니다.인프런 스터디를 진행한 디퍼들의 생생한 후기!안녕하세요! 이번에 Kafka 스터디를 직접 모집하게 된 특별한 배경이 있었을까요?최태규Kafka는 실무에서 정말 많이 쓰이는 중요한 기술이지만, 핵심 원리를 완전히 이해하고 활용하는 게 쉽지만은 않더라고요.마침 인프런에서 할인 쿠폰을 지원받게 되어, 이 기회를 활용해보고 싶었고, 혼자보다는 함께 공부하면서 느낀 점을 공유하면 더 효과적일 것 같아 스터디를 모집하게 되었습니다. 카프카 완벽 가이드 인프런 강의를 수강하면서 가장 좋았던 점은 무엇인가요?김수빈강의에서 제공한 다양한 이미지와 시각 자료를 활용해 개념을 보다 직관적으로 이해하는 데 큰 도움이 되었습니다. 강의 내용을 실무 경험과 연결해보며, 카프카의 핵심 개념과 아키텍처를 보다 깊이 있게 이해할 수 있었습니다. 조익현강의를 수강하면서 모호하던 kafka의 내부 동작원리를 보다 깊게 알 수 있었어요. 특히 강사님이 만드신 이미지 자체가 머리 속에 박혀서 면접에서 kafka의 내부 구조에 대해 이해하는데 참 도움이 많이 되었습니다. 강지원강사님께서 준비해주신 시각적 자료들이 추상적인 개념을 구체화하는 데 큰 도움이 되었어요. 또 실무에 계시는 팀원분들의 경험과 해결사례들을 들으며 실질적인 문제 해결방법들을 배울 수 있었습니다. 그렇군요! 이번 스터디 외에도 인프런 강의를 활용해보신 경험이 있다면, 인프런 강의만의 매력이나 장점은 무엇이라고 느끼셨나요?이한음최근에는 Kotlin을 공부하면서, 기존 Java 프로젝트를 Kotlin으로 리팩토링하는 인프런 강의를 수강하고 있어요.Kafka 스터디를 포함해서 대부분의 인프런 강의가 다양한 시각 자료와 실습 중심으로 구성되어 있어서 이해하기 쉽고 실무 감각을 익히는 데 큰 도움이 됩니다. 글을 작성하며, 디프만과 인프런이 같은 방향을 바라보며 꾸준한 성장을 고민하고 있다는 점을 다시금 느낄 수 있었습니다.단순한 강의 제공을 넘어, 개인과 팀의 실질적인 성장을 함께 도모해주신 인프런에 진심으로 감사드립니다.앞으로도 디프만에서는 인프런과 함께하는 다양한 성장의 기회를 만들어갈 예정이니, 많은 관심과 응원 부탁드립니다! 

커리어 · 자기계발 기타디프만인프런스터디디프만16기

솔앤유 전자책 독립출판사

전 이렇게 지식공유를 시작했어요 - "완벽하지 않아도 괜찮아요. 일단 시도해볼게요!"

 저는 강의를 아직 등록하지 못하고, 망설이고 계시는 예비 지식공유자분들께 제 인프런 강의의 시작이야기를 나누고 싶어요. 저도 아직 배우고 발전하고 있는 단계의 초보 지식공유자이지만, 시작하기까지 고민을 많이 했던 경험이 있습니다. 그래서 인프런 강의를 등록하기 어려워하시는 분들의 마음을 잘알아요. 인프런에서 지식공유를 시작하기 전에 제 마음 속에 세 가지 장벽이 있었어요. 세 가지 장벽1. 내가 강의를 해도 될까? 2. 강의하기에는 준비가 부족해?3. 누가 내 강의를 사줄까? 하나씩 어떻게 마음의 장벽을 넘어섰는지 나누어 볼게요.  1. 내가 강의를 해도 될까?가장 큰 장벽이었어요. 아마 많은 분들이 처음 드는 생각일거에요.  '내가 뭐라고''나보다 더 능력자들이 많은데, 내가 강의를 해도 될까?' 저도 이렇게 자존감이 낮은 마음 때문에 몇 년 동안 강의를 시작하지도 못했어요. 여러번 오프라인에서 강의 요청이 와도 "저는 아직 강의할 수준은 아니라서요." 라고 거절하곤 했었죠. 가끔 강의를 할 때는 무료 강의를 했답니다.  그런데 무료로 강의를 들으신 분들이 유료로도 강의를 듣고 싶다고 말씀해주셨어요. 그래서 조금씩 유료 강의도 개설을 했습니다. 그렇게 시작된 강의가 인프런 지식공유까지 오게 되었어요. 먼저 "강의"라고 생각하지 말고, "지식공유" 라고 생각해보세요.  인프런에서 단어를 정말 잘 만들어주셨어요. "지식공유" 처음에는 정말 내가 알고 있는 지식을 공유한다는 마음으로 시작해보세요. 쉬운 내용도 좋고, 누구나 아는 내용이라도 좋습니다. 무료여도 좋고요. 지식공유를 해보세요. 저도 그렇게 무료로 시작한 지식공유가 첫 걸음이 되었어요. https://www.youtube.com/watch?v=yWY7w6R4Wlg무엇보다도 제주도에 사는 지식공유자 유준모님의 영상이 제게 큰 동기부여가 되었어요. 거의 처음부터 인프런에 강의를 올려주시고 꾸준히 지식공유를 하시는 모습을 보면서 제 롤모델이 되었습니다.  2. 강의하기에는 준비가 부족해?가장 커다란 첫번째 장벽을 넘어섰지만 그 다음에는 마치 지루한 사막과도 같은 여정이 남아있었어요. '강의가 완벽해야해, 준비가 부족해' 라는 늪에 빠져버렸습니다. 오히려 첫번째 장벽보다 두번째 장벽이 극복하는 데 시간이 오래걸렸어요. 강의 커리큘럼이 완벽해야해.강의 내용이 충분해야해.마이크가 음질이 좋아야해.녹화 화질은 얼마나 좋아야 할까? 와, 정말 미루기 대장이 되버렸습니다. 그렇다가 딱히 마이크를 구매하거나 샘플 녹화를 해보거나 하는 행동이 뒤따라오진 않았어요. 막연히 걱정만 하고 있었을 뿐이죠. 문득, 제가 출판 강의를 할 때마다 수강생분들께 하는 말이 떠올랐습니다.  "완벽하지 않아도 괜찮아요.""일단 써보세요!""맞춤법이 틀려도 괜찮아요." 가르칠 때는 쉽게 하던 말들을 막상 내 일이 되니 너무나 어려운 거 있죠? 그러던 차에 온라인 줌 수업을 하게 되었고, 줌 수업이 자동녹화가 되었어요. 생각해보니 줌 수업 녹화영상이 바로 온라인 동영상 수업이더라고요. 그동안 너무 어렵게만 생각했었는데, '줌에서 수업하듯이 동영상을 녹화하면 되겠다' 깨닫게 되니 일사천리로 동영상 강의를 완성했습니다.  그리고 커리큘럼은 이미 강의했던 커리큘럼이 있으니 활용하고, 부족한 부분은 앞으로 보완해나가자는 마음으로 인프런 지식공유자를 신청하고, 강의를 등록했습니다.  정말 처음 등록한 강의는 영상도 1개 였었고, 상세소개도 부족해서 자동 피드백 알림 메세지에서 "SEO 내용이 부족합니다." 라는 내용이 떴었어요. 하나씩 하나씩 채워나갔습니다.  영상도 하나씩 하나씩 추가해서 업데이트를 했고, 상세소개 내용도 인프런의 가이드를 따라서 차근차근 작성했어요.  그리고 인프런 MD 미팅 신청하기를 작성해서 코니님과 온라인으로 미팅을 하고 강의 피드백을 받았어요. 객관적인 평가를 받아서 좀 더 타켓을 명확히 하고 디테일한 부분을 수정할 수 있었습니다.   3. 누가 내 강의를 사줄까?강의만 등록되면 모든 것이 끝!동화 속 공주님과 왕자님은 행복하게 살았습니다. 해피엔딩이 저를 기다리는 줄 알았어요. 아니, 강의 영상 찍고, 상세소개 작성하는 것도 정말 어려운데!!그 다음에 또 강의 홍보를 해야 한다고요!!?? 어쩌면 강의를 시작하고, 강의를 만들고, 하는 단계보다 가장 중요한 단계는 "강의를 알리고, 강의를 판매하는 단계" 같아요. 열심히 강의를 만들었는데, 아무도 강의를 안 사주면 너무나 속상하잖아요. "누가 내 강의를 사줄까?" 는 강의를 시작하기 전에 마음의 장벽이기도 하지만 반대로 생각하면 내 강의를 누가 사줄까? 하는 고객 타켓팅의 중요한 고민이기도 합니다.  막연히 아무도 내 강의를 안 사주면 어떡하지? 걱정하기 보다는 인프런 가이드에 있는 "내 강의 더 잘 알리는 법"을 읽으며 열심히 홍보를 했어요.   인프런에 강의를 오픈했다는 소식과 강의 업데이트 소식을개인 블로그, 링크드인과 같은 SNS와 독립출판 카카오톡 오픈채팅방, 리모트워커 오픈채팅방, 독립출판 네이버 카페 등등 다양한 커뮤니티에 홍보 했습니다.  그리고 1월 새해맞이 강의 할인 이벤트를 자체적으로 진행해서 인프런에서 최대할인 폭인 25% 할인을 2주간 적용하고 개인 SNS 채널에 홍보한 상태이고, 마지막으로 인프런 지식공유자 클럽에 가입해서 지식공유자 후기 이벤트에 참가하려고 열심히 지금 글을 작성 중이죠!다른 지식공유자분들은 어떤 홍보 방법이나 루트가 있을지 궁금합니다. 😄 https://inf.run/y7gk6 "책을 만들어보장" 강의 보러 가기 전 이렇게 인프런 지식공유를 시작했습니다."완벽하지 않아도 괜찮아요. 일단 시도해볼게요." 

커리어 · 자기계발 기타독립출판전자책출판지식공유지식공유경험나누기

딩코딩코

이게 이해가 안돼? - #인프런 #지식공유경험나누기

"이게 이해가 안돼?"컴퓨터공학과 선배들이 저에게 자주 하던 말이었습니다.C++, 객체지향, 구조체 같은 낯선 단어들.바이트, 메모리, 운영체제처럼 머릿속에 쉽게 그려지지 않는 개념들.그 속에서 저는 길을 잃곤 했습니다.(실제 모교 강의실 사진입니다)모르는 내용을 이해하려고 질문을 해봐도 돌아오는 대답은 늘 같았습니다."전공책을 다시 읽어봐."적성에 맞지 않는다며 포기하고 싶었지만, 개발자의 꿈을 져버리고 싶지 않았습니다.몇 달 동안 여러 책을 찾아 읽으며 공부하니, 조금씩 개념이 잡히기 시작했습니다.그리고 다시 듣게 된 재수강 강의.그제야 이런 생각이 들었습니다."왜 이렇게 설명하지?" 그 강의를 이해하기 위해서는 사전에 배워야 하는 컴퓨터 관련 개념을 모두 알아야 했습니다.의존적인 설명 때문에 기본 개념조차 잡기 어려운 구조였습니다.이건 초심자를 위한 강의가 아니었습니다.처음부터 더 쉽게 배울 수도 있었을 텐데."이렇게 간단한 개념이었어? 그런데 왜 이렇게 어렵게 가르쳤을까?"라는 생각이 가득 차올랐습니다.그래서 저는 강의를 만들었습니다.가능한 한 개념을 독립적으로 설명하고 싶었습니다.일상에서 쉽게 연관 지을 수 있는 용어를 활용해 개념을 친숙하게 다가가도록 했습니다.그래야 누구나 편하게 코드를 작성할 수 있으니까요."이렇게 설명하면, 처음 보는 사람도 이해할 수 있을까?"그 고민이, 저의 가장 큰 숙제였습니다.이해가 잘 될지 궁금해서, 컴퓨터와 전혀 관련 없는 지인에게 설명해보기도 했습니다.(결과는… 실패였습니다. 😂) 그렇게 시행착오를 거쳐 만든 강의에서, 다양한 수강평을 받았습니다.누군가가 새로운 분야를 시작할 때 제가 자신감을 줬다는 것이 너무나 기뻤습니다.그 이후로 저는 다짐했습니다.사람들에게 지식을 최대한 쉽게 전달해야 겠다는 것을요. 내가 가진 지식을, 남들이 더 쉽게 이해할 수 있도록 돕는 것.이보다 더 기쁜 일이 있을까요? 초심자에게 친절한 강의를 만들어보고 싶다면,인프런에서 강의 만들기를 도전해보시길 추천드립니다!#지식공유경험나누기

커리어 · 자기계발 기타인프런지식공유경험나누기

애완로트와일러개

[K-DEVCON] 9월엔 치맥! (네트워킹 데이)

🍺 K-DEVCON 9월엔 치맥 🍗 퇴근길, 시원한 맥주 한 잔만큼 완벽한 힐링이 있을까요?이번 9월 K-DEVCON 네트워킹은 치맥의 밤으로 강남에서 개최합니다.  맥주 한 모금에 하루의 피로는 잊고, 치킨 한 입에 대화가 술술 풀리는 시간.서로의 아이디어와 경험을 가볍게 나누며, 새로운 인연을 만드는 자리에 여러분을 초대합니다. 📅일시: 9월 18일(목) 19:30 ~ 22:00 (2시간 30분)📍장소: 송송카레 (서울 강남구 역삼로 207, 역삼역 1번 출구에서 도보 약 593m)📌 참여신청 : https://event-us.kr/kdevcon/event/110980 편하게 오셔서 맥주잔 부딪히며 이야기꽃 피워보세요!이번 9월, K-DEVCON과 함께 치맥만큼 즐거운 네트워킹을 경험해보세요 🍻 주최 : K-DEVCONK-DEVCON은 IT 전문가 커뮤니티 그룹으로 다양한 IT 기술을 연구하며 회원간의 소통을 공유하는 모임 입니다. 현재 IT업계에 종사하고 있거나, 종사할 예정이거나, IT를 공부하는 학생 그리고 IT에 관심이 있다면 누구나 함께할 수 있습니다. 기술 세미나, 스터디, 토론 등 다양한 활동을 하고 있으며, 주요 소통 및 이벤트 공유는 오픈챗 및 홈페이지 등을 통해서 공유하고 있습니다.소프트웨어 엔지니어, 데이터 엔지니어, 머신러닝 엔지니어, 시스템 엔지니어, 시큐리티 엔지니어, 데브옵스, SRE, PM, Educator, UI/UX, 스타트업, 대학생 등 다양한 구성원이 활동 중입니다. K-DEVCON에 대한 자세한 소개는 K-DEVCON 홈페이지 (https://k-devcon.com) 에서 확인 가능합니다.K-DEVCON 커뮤니티는 슬랙을 이용하여 소통하고 있습니다. 행사 참여 참고사항1. 건강한 공동체를 위해 구성원들은 K-DEVCON 행동강령을 준수하고, 주의 받은 구성원은 즉시 행동강령을 준수할 것을 요구합니다.2. 행사 당일 행사장 내부에서 사진과 영상 촬영이 진행될 수 있습니다. 촬영된 사진과 영상은 데브콘 행사 마케팅 용도로 사용될 수 있는 점 미리 양해 부탁드립니다.3. 이번 행사는 미성년자는 참여 불가능 합니다.4. 개별 주문은 불가능합니다. 음주사고를 막기 위해 1인 제공 주량을 제한합니다. 기타후원 및 기타 문의: info@k-devcon.com

커리어 · 자기계발 기타K-DEVCON네트워킹IT

애완로트와일러개

[K-DEVCON] 고투런 2기 멘티 모집!

[유료] K-DEVCON 고투런(Go-to-Learn) 2기 모집고투런이란?고투런(Go To Learn)이란 기술적 성장을 원하는 신입, 주니어 개발자들을 위한 멘토링 트랙은 최소 4주, 최대 8주간 미들급 이상의 개발자들이 멘토가 되어 직접 멘토링 주제 기획부터 멘티 선발, 학습까지의 과정을 진행하는 멘토 리딩 트랙입니다. 1⃣ 멘티 모집 대상, 모집 기간, 참가비📌 모집 대상: 기술적 성장이 필요한 신입 ~ 주니어 개발자 (전/현직 개발자분들을 대상으로 합니다) 📅 모집 기간: 2월 15일 ~ 2월 28일 23:59까지 📢 선발 발표: 3월 5일 💰 참가비: 50,000 2⃣ 지원 절차📌 지원서 제출 -> 멘토님의 지원서 검토 (또는 인터뷰) -> 합류 결과 안내 📝 지원 링크: https://forms.gle/c4sFfYFxpwgRVPRw93⃣ 멘토링 주제✅ 확장성, 회복탄력성, 고가용성을 보장하는 애플리케이션 설계 / 온오프라인 / 김정우 멘토님✅ 프로젝트로 배우는 안드로이드 프로그래밍 A to Z / 온오프라인 / 서준수 멘토님 ✅ 객체지향 101 - 객체지향을 쓰게된 이유 / 오프라인 / 이현재 멘토님✅ 20년차 AI 엔지니어에게 배우는 AI 에이전트의 모든 것 / 온오프라인 / 정유선 멘토님4⃣ 멘토링 세션에서 얻을 수 있는 것🚀 멘티가 얻을 수 있는 혜택:🔹 사수가 없거나 도움을 받기 어려운 상황이라면 검증된 멘토와 함께 빠르게 성장할 수 있다.🔹 기술적 성장을 목표로 하는 트랙이기 때문에, 본인의 실무 역량 향상에 도움을 받을 수 있다.🔹 4 ~ 8주간의 깊이 있는 멘토링을 통해서 기술 성장 이상의 깊이있는 성장 경험을 할 수 있어 향후 커리어 빌딩에도 도움을 받을 수 있다.자세한 내용은 Go To Learn 노션을 참고해주세요.https://bluepicture08.notion.site/K-DEVCON-Go-To-Learn-2-16becf714ca380f58b78edac54401608📩 문의: [이메일 or Slack DM]info@k-devcon.com 지금 바로 지원하고 성장할 기회를 잡으세요! 🚀K-DEVCON이 궁금하다면? 홈페이지 / Slack 대화방 / 링크드인 / 인스타그램

커리어 · 자기계발 기타K-DEVCON스터디멘토링

뚜이

향로님의 추석 챌린지 회고

추석 연휴 동안 완강을 목표로 매일 1강을 인증하는 향로님의 챌린지에 참여했습니다.평소에도 블로그나 SNS를 통해 향로님의 글을 보는 것을 좋아했는데, 추석기간 동안 챌린지까지 여시다니!취준생의 입장에서 너무 좋았습니다. 참여하는 동안, 인출을 조금이라도 하고 싶어 미션 인증할 때 제목이나 글에 배운 내용을 넣어 어그로를 끌려고도 했습니다 ㅎㅎ; 챌린지 동안 열린 오픈 카톡방에서 본 다른 분들의 컴퓨터 세팅 이야기, 카공 인증샷 등을 보며 더 재밌게 챌린지를 참여할 수 있었던 것 같습니다.  참여하며 놀랐던 것 중 하나는 향로님이 1,000명이 넘는 참여자 분들의 글에 답변을 달아주시고 있다는 점이였습니다. 그리고 연휴인데도 불구하고 오픈카톡방에서 다양한 분들의 질문에 답변해주시고, 중간 중간 좋은 글과 라이브까지..!  라이브에서 언뜻 들었던 내용은 모든 분에게 한 번씩 닿기 위해서 글에 답변을 단다는 말을 들었던 것 같습니다. 진심이 전달된다는 게 사실 이 때까지 잘 느껴보지 못했던 것 같은데, 인프런이라는 플랫폼과 향로님과 마케팅팀분들이 열어주신 챌린지 덕분에 어떤 활동이라도 시간을 들여 고민을 한다면, 진심을 전달하는 게 가능하다는 걸 느낀 것 같습니다.  [이다의 도시 관찰 일기]라는 책에서, 버스 안에 항상 클래식 FM을 틀어두던 기사분의 이야기가 나왔습니다.각기 다른 목적지를 향해 탄 승객들이지만, 그 음악 덕분에 버스는 잠시 일상의 밖으로 벗어난 또 다른 공간이 되었다고 합니다. 인프런 추석 챌린지에 참여하며 저도 그런 느낌을 받았습니다.다들 다른 길을 걷고 있지만, 같은 클래식 안에서 한 마음으로 달리는 듯한 시간들이었습니다.  또 향로님의 글에서 운동 후 보장된 근육통이라는 표현을 보고, 어떤 것에 도전했을 때 남는 아쉬움과 상처같은 부정적인 감정도 운동 후의 근육통처럼 여긴다면좀 더 쉽게 다음에 시도할 수 있지 않을까라는 생각이 들었습니다.  연휴 동안 목표를 정해놓고 달성하는 것의 즐거움을 느낀 것 같습니다.모두 운동이나 사이드 프로젝트 등 다음 아궁이 불을 찾아 때워서, 다음 챌린지 때 뵈었으면 좋겠습니다.추석 연휴 동안 수고 많으셨습니다!     

커리어 · 자기계발 기타회고챌린지

neo

PPT는 단순한 도구가 아니라, 당신의 상상을 실현하는 무대입니다.

세상은 빠르게 변하지만, 콘텐츠의 본질은 변하지 않습니다.‘전달하고 싶은 메시지를 시각적으로 표현하는 것.’그 핵심에 있는 도구가 바로 파워포인트(PowerPoint)입니다.많은 사람들에게 PPT는 여전히 ‘발표용 슬라이드’의 도구로만 인식됩니다.하지만 지금의 PPT는 더 이상 단순한 프레젠테이션 툴이 아닙니다.영상, 인쇄, 웹, 브랜딩 콘텐츠까지 —피피티 하나로 모든 콘텐츠를 제작할 수 있는 시대가 왔습니다. 🎨 PPT는 가장 강력한 ‘콘텐츠 허브’다•       유튜브 영상 오프닝? 👉 애니메이션과 자막, 배경음악까지 PPT로 완성•       쇼핑몰 상세페이지? 👉 세로로 길게 디자인, 이미지/텍스트 배치, GIF 모션까지 한 번에•       인스타 릴스나 숏폼? 👉 세로형 슬라이드에서 컷 편집으로 완벽한 디자인 숏폼 제작•       리플렛·포스터? 👉 디자인 및 인쇄용 고해상도 PDF로 내보내기•       제안서와 기업 홍보자료? 👉 디자인 일관성과 브랜딩 유지까지 완벽한마디로,PPT는 디자이너와 영상편집자, 마케터를 모두 품은 통합 제작 스튜디오입니다. ⚡ ‘툴의 한계’가 아니라 ‘활용의 한계’다많은 분들이 이렇게 말합니다.“그건 PPT로 못해요.”하지만 제가 매일 보여드리는 건 그 반대입니다.“그것도 PPT로 할 수 있어요.”그 차이는 ‘툴의 한계’가 아니라 ‘활용의 한계’에서 생깁니다.PPT는 생각보다 훨씬 강력합니다.모션 그래픽, 키프레임 애니메이션, 비디오 합성, 반투명 레이어, 색보정, 도형 마스킹 —이 모든 기능이 이미 안에 들어있습니다.이제는 ‘어떤 툴을 쓰느냐’보다 ‘어떻게 활용하느냐’가 승부를 가릅니다. 🧭 NEO(이희정)이 제시하는 방향제가 말하는 ‘PPT 하나로 모든 콘텐츠를 접수하기’는 단순한 슬로건이 아닙니다.이건 콘텐츠 제작의 패러다임을 바꾸는 새로운 관점이에요.•      PPT로 영상 제작까지 확장•      PPT로 브랜드 무드를 표현•      PPT로 교육, 마케팅, 제안서를 통합 관리•      PPT로 1인 크리에이터의 모든 콘텐츠 제작즉, 누구나 크리에이터가 될 수 있는 시대의 실무형 해답이 바로 PPT입니다. 🚀 당신이 PPT 하나로 세상을 접수할 때지금 이 순간에도 수많은 콘텐츠가 만들어지고 사라집니다.하지만 진짜 힘을 가진 크리에이터는 ‘툴’을 아는 사람이 아니라‘표현의 언어’를 아는 사람입니다.PPT는 그 언어를 가장 직관적으로 말할 수 있는 도구입니다.이제 당신의 아이디어, 브랜드, 비전 —모두 PPT 하나로 세상을 향해 표현하세요.NEO 이희정 | 네오프레젠테이션010 2401 7329 PPT는 단순한 도구가 아니라, 당신의 상상을 실현하는 무대입니다. 

커리어 · 자기계발 기타창업영상제작디자인홍보AIppt파워포인트제안서상세페이지

neo 10일 전
한국산업기술협회연수원

[PLC제어 유지보수 관리자 자격증 연수 과정] 개설 안내

단 5일, PLC 실무+자격까지 한 번에 끝내는 [PLC제어 유지보수 관리사 자격과정] 개설 안내  ● 참여 대상관련 분야 실무 종사자 또는 관련 학과 재학생(자동제어, 자동화 시스템, 공정제어 시스템설계자 및 운용자, 생산, 기술 공무설계, 자동화 관련실무자, 관리자 등) ● 프로그램 내용PLC제어 설비의 책임자로서 시스템의 설계, 제작, 운용, 보수, 활용 능력을 갖춘 인력을 양성하기 위해,한국산업기술협회가 주관하여 이론 교육과 함께 전자회로 및 시퀀스 제어이론을 기본으로생산자동화를 위한 PLC제어 설비의 유지보전 및 보수기술 능력을 종합적으로 평가하는 자격 과정입니다.*본 자격은 자격기본법 제 17조에 따라 한국직업능력연구원에 등록된 민간자격으로, 산업통상지원부의 심의 절차를 거쳐 등록된 자격입니다.따라서, 따라서 이력서 기재 및 경력인정에 활용 가능한 신뢰도 있는 자격증입니다! ● 진행 일시2025년 8월 18일(월) ~ 2025년 8월 22일(금) 10:00 ~ 17:00*5일 교육 과정 이수 후, 교육 마지막 날인 8월 22일(금) 13:00에 자격시험이 진행됩니다.  ● 진행 장소한국산업기술협회연수원(서울시 금천구 범안로 1130) ● 신청 기간2025년 7월 29일(화) ~ 2025년 8월 13일(수) 23:59 ● 참여 혜택- 단기간에 자격증 취득 가능(교육 수료 후 시험 바로 응시 가능)- 취득 시부터 평생 유지되며 유효 기간이 없는 자격증- 전문적인 맞춤강의 및 주요내용 핵심강의 추가 ● 신청 방법홈페이지 통해 접수 -> 신청 바로가기  ● 유의 사항교육비 및 응시료에 대한 내용은 홈페이지를 참고해주시기 바랍니다. ● 문의 사항한국산업기술협회연수원 연수본부T. 02-6959-5842E. sehoon@kitanet.or.kr카카오톡에서 '한국산업기술협회연수원' 검색인스타그램에서 'kita_0fficial' 검색 ● 진행 일시2025년 8월 18일(월) ~ 2025년 8월 22일(금) 10:00 ~ 17:00*5일 교육 과정 이수 후, 교육 마지막 날인 8월 22일(금) 13:00에 자격시험이 진행됩니다.  ● 진행 장소한국산업기술협회연수원(서울시 금천구 범안로 1130 14층) ● 신청 기간2025년 7월 29일(화) ~ 2025년 8월 13일(수) 23:59 ● 참여 혜택- 단기간에 자격증 취득 가능(교육 수료 후 시험 바로 응시 가능)- 취득 시부터 평생 유지되며 유효 기간이 없는 자격증- 전문적인 맞춤강의 및 주요내용 핵심강의 추가 ● 신청 방법홈페이지 통해 접수 -> 신청 바로가기  ● 유의 사항교육비 및 응시료에 대한 내용은 홈페이지를 참고해주시기 바랍니다. ● 문의 사항한국산업기술협회연수원 연수본부T. 02-6959-5842E. sehoon@kitanet.or.kr카카오톡에서 '한국산업기술협회연수원' 검색인스타그램에서 'kita_0fficial' 검색 

커리어 · 자기계발 기타교육자격증취업준비전기전자자동제어관리자

한국산업기술협회연수원

몰입기법을 이용한 현장 고질적인 불량 해결 실습 및 창의적 개선 실무 과정

한국산업기술협회연수원과 몰입아카데미가 주관하는 서울대학교 명예교수 황농문 교수님의 몰입 기반 실무 개선 전략 특강을 소개합니다.불량 문제의 근본 원인을 파악하고, 몰입을 통한 문제 해결 접근법에 관심이 있는 분들의 참가를 기다립니다. ● 주제 몰입적 사고 및 다각적인 시야를 통해 고질적인 현장의 문제를 정확히 파악과 해결, 몰입을 통한 변화로 효율성을 높여 생산성을 증가  ● 대상몰입적 사고 및 창의적 문제 해결을 학습하고자 하는 모든 분산업현장의 각 분야별 고질적인 불량 문제 및 현장의 반복적 문제 해결에 관심 있는 분기업의 연구개발 담당자, 신규사업 담당자, 현장개선 담당자 등 ● 일시2025년 9월 3일(수) ~ 9월 5일(금), 10:00~17:00 ● 장소한국산업기술협회연수원(서울시 금천구 범안로 1130, 14층) ● 교수 소개 : 황농문 교수現) 몰입아카데미 대표現) 한국산업기술협회연수원 수석교수現) 서울대학교 재료공학부 명예교수現) aSSIST 석좌교수저서 : '몰입 인생을 바꾸는 자기혁명', '몰입, 두번째 이야기', '공부하는 힘', '몰입 영어', '슬로싱킹'출강이력 : 삼성 사장단 협의회, 대우건설, 법무연수원, 청와대 이민포럼, 서울대학교, KAIST ● 내용 1일차)- 고질적인 불량 해결을 위한 몰입의 과학적 원리 이해- 몰입을 활용한 고질적 불량해결 사례 분석- 슬로싱킹을 통한 문제해결 및 불량대책 접근법 2일차)- 슬로싱킹 방법론- 고질적 불량해결을 위한 검증 및 보완 3일차)- 슬로싱킹 기반 산업현장 불량해결 실습- 조별 발표 및 교육 마무리 ● 신청 방법홈페이지 통해 신청  ● 혜택3인 동시신청 시 20% 할인5인 동시신청 시 30% 할인대학생, 대학원생 30% 할인 (3인, 5인 동시신청 시 추가할인 有) ● 문의한국산업기술협회연수원TEL : 02-6959-5252EMAIL : info@kitanet.or.kr홈페이지 : https://www.kitanet.or.kr/카카오톡 : '한국산업기술협회연수원' 검색 인스타그램 : @kita_0fficial 검색

커리어 · 자기계발 기타몰입기법슬로싱킹기업교육실무교육문제해결불량해결기술교육산업기술산업기술교육

이지민

인프런 워밍업 클럽 CS 3기 3주차 발자국

강의 내용 요약운영체제가상 메모리1. 가상 메모리가상 메모리는 물리적 메모리(RAM)의 크기가 부족한 경우에 대한 해결책가상 메모리의 크기는 물리 메모리의 크기와 CPU의 비트수에 따라 결정32bit CPU → 2^32(약 4GB)64bit CPU → 2^64  2. 가상 메모리를 이용한 여러 프로세스 실행물리 메모리 내용의 일부를 하드 디스크 내의 스왑 영역에 보관처리가 필요할 때 메인 메모리에 가져와서 실행 동적 주소 변환메모리 관리자는 물리 메모리(RAM)와 스왑 영역을 합쳐서 프로세스가 사용하는 가상주소를 물리주소로 변환이를 동적주소변환(Dynamic Address Translation)이라 부름동적 주소 변환을 거치면 사용자 데이터를 물리 메모리에 배치 가능메모리 관리자의 임무물리 메모리를 어떻게 나눌지프로세스를 메모리의 어디에 배치할지부족한 물리 메모리는 어떻게 처리할지가상 메모리 시스템에서 메모리를 관리하는 방식운영체제 영역을 제외한 나머지 영역을 일정한 크기로 나누어서 프로세스에게 할당메모리 분할 방식과 마찬가지로 가변 분할 방식(세그멘테이션)과 고정 분할 방식(페이징)을 사용각각 외부 단편화와 내부 단편화 문제가 있으므로 둘을 혼합한 방식인 세그멘테이션-페이징 혼용기법을 사용 가상주소와 물리주소의 매핑메모리 관리자는 가상주소와 물리주소를 일대일 매핑 테이블로 관리  3. 세그멘테이션 기법가변 분할 방식을 이용하는 기법프로그램(사용자) 관점의 메모리: 각 세그먼트는 인접할 필요가 없음프로세스 관점의 메모리: 각 세그먼트 영역이 서로 인접한 것처럼 바라봄 논리주소와 물리주소, 메모리 관리자논리주소 : 사용자, 프로세스, CPU 입장에서의 주소물리주소 : 실제 메모리 내의 주소논리주소와 물리주소의 변환은 메모리 관리자(MMU)가 처리 메모리 관리자는 세그멘테이션 테이블에 대한 정보를 가지고 있음세그멘테이션 테이블 자체는 메인 메모리에 저장세그멘테이션 테이블에는 Base Address와 Bound Address가 저장되고 이를 이용하여 물리 메모리 주소를 계산 세그멘테이션을 이용한 주소 변환 과정CPU에서 논리주소 전달 → 메모리 관리자는 해당 논리주소의 세그먼트 번호를 알아냄 → 메모리 관리자 내의 Segment Table Base Register(STBR)를 이용하여 물리 메모리 내에 있는 세그멘테이션 테이블을 찾음 → 세그먼트 번호를 인덱스로 Base Address와 Bound Address를 찾음 Bound Address는 세그먼트의 크기를 나타냄메모리 관리자는 CPU에서 받은 논리주소와 Bound Address를 비교하여 논리주소 < Bound Adrress라면 논리주소 + Base Adress하여 물리주소를 구하고 논리주소 > Bound Adrress라면 메모리 침범으로 인식하여 해당 프로세스 종료 세그멘테이션의 장/단점장점메모리를 가변적으로 분할 가능코드, 데이터, 스택, 힙 영역을 모듈로 처리할 수 있어 공유 및 메모리 접근 보호가 편리단점가변 분할 방식의 단점인 “외부 단편화”가 발생  4. 페이징 기법고정 분할 방식을 이용하는 기법 논리주소공간사용자와 프로세스가 바라보는 주소공간페이지 → 논리주소공간을 일정한 크기로 나눈 것물리주소공간실제 메모리에서 사용되는 주소공간프레임 → 물리주소공간을 페이지의 크기와 동일하게 나눈 것 페이징을 이용한 주소변환 과정CPU에서 논리주소 전달 → 메모리 관리자는 이 논리주소의 페이지 번호, 오프셋을 알아냄 → 메모리 관리자 내의 Page Table Base Register(PTBR)를 이용하여 물리 메모리 내에 있는 페이지 테이블을 찾아냄 → 페이지 번호를 인덱스로 프레임 번호를 알아냄 → 오프셋을 이용해 물리주소로 변환(프레임이 invalid라면 스왑영역에 있음)  5. 세그멘테이션 vs 페이징세그멘테이션은 프로세스마다 크기가 달라 Bound Address를 가짐페이징은 모든 페이지의 크기가 동일하여 크기를 표현하는 Bound Address가 필요하지 않음세그멘테이션은 세그먼트마다 크기를 다르게 나눌 수 있기 때문에 논리적인 영역별로 세그먼트를 나눌 수 있는 반면, 페이징은 페이지의 크기가 고정되어 있어 논리적인 영역을 나눌 수 없음 페이지 테이블에서 가장 신경써야 하는 것은 페이지 테이블 크기프로세스가 많아질 수록 페이지 테이블의 개수도 많아짐메모리 관리자가 참조하는 페이지 테이블도 물리 메모리의 운영체제 영역에 저장되어 있음따라서 페이지 테이블의 크기가 너무 크면 사용자 영역이 부족해짐  6. 페이지드 세그멘테이션세그멘테이션과 페이징을 혼합하여 장점을 취한 방식 메모리 접근 권한메모리의 특정 번지에 부여된 권한읽기(Read),쓰기(Write),실행(Execute) 3가지 존재프로세스의 각 영역마다 접근 권한이 존재메모리 접근 권한에 대한 검사는 가상주소에서 물리주소로 변환될 때마다 발생 페이지드 세그멘테이션기존 세그먼테이션 테이블에서 변화한 점권한비트 추가Base address → 페이지 넘버Bound address → 페이지 개수페이지 넘버와 페이지 개수는 이름만 달라졌을 뿐 수행 역할은 거의 동일 페이지드 세그멘테이션 과정가상주소가 들어오면 가상주소를 이용해 세그먼트 번호를 알아냄 → 해당 세그먼트가 메모리 접근 권한을 위반하는 검사 (접근 권한 위반 시 프로세스를 종료시킴) → 페이지 넘버와 페이지 개수를 가져옴 (페이지 개수를 통해 메모리 침범 검사) → 페이지 넘버를 통해 페이지 테이블에 접근하여 프레임 번호를 가져옴 → 물리 메모리내의 해당 프레임에 접근하여 그 위치에서 페이지 개수를 더해 물리주소를 구함 (물리 메모리에 해당 프레임이 없다면 스왑 영역에서 물리 메모리로 가져옴) 페이지드 세그멘테이션의 단점물리 메모리 접근을 위해 메모리에 2번 접근해야 함세그멘테이션 테이블 참조 (1번) + 페이지 테이블 참조(1번) = 2번이러한 단점이 있어 현대 운영체제는 페이징과 페이지드 세그멘테이션 기법을 적절히 섞어서 사용함  7. 디멘드 페이징지역성 이론과 디멘드 페이징지역성 이론: 조만간 쓰일 데이터만 메모리에 올리고 당분간 필요하지 않을 것 같은 데이터는 스왑 영역으로 보내 성능을 향상시킴공간의 지역성: 현재 위치와 가까운 데이터에 접근할 확률이 높음시간의 지역성: 최근 접근했던 데이터가 오래 전에 접근했던 데이터보다 접근할 확률이 높음 디멘드 페이징 ← 지역성 이론을 구현한 정책디멘드 페이징의 목적은 스왑 영역으로 데이터를 이동시키는 것을 최소화시키는 것스왑인 : 스왑영역에서 물리 메모리로 데이터를 가져오는 것스왑아웃: 물리 메모리에서 스왑영역으로 데이터를 보내는 것 페이지 테이블 엔트리페이지 테이블은 데이터가 물리 메모리, 스왑영역 중 어디에 위치해있는지 알아내기 위해 인덱스, 프레임 외에도 여러 비트가 존재페이지 테이블 엔트리(PTE) → 페이지 테이블을 이루는 하나의 행 접근 비트페이지가 메모리에 올라온 후 데이터에 접근이 있었는지 알려주는 비트메모리에 읽기나 실행 작업을 했다면 1로 바뀜 변경비트페이지가 메모리에 올라온 후 데이터의 변경이 있었는지 알려주는 비트메모리에 쓰기 작업을 했다면 1로 바뀜 유효비트페이지가 물리 메모리에 있는지 알려주는 비트유효비트가 1 → 페이지가 스왑영역에 있음유효비트가 0 → 페이지가 물리메모리에 있음 읽기/쓰기/실행 비트권한비트해당 메모리에 접근권한이 있는지 검사하는 비트 디멘드 페이징 과정전체적인 과정프로세스가 가상 메모리에 접근요청→ 메모리 관리자는 페이지 테이블을 보고 물리 메모리의 프레임을 찾아냄→ 만약, 물리 메모리에 없다면 Page Fault라는 인터럽트를 발생 시킴→ Page Fault가 발생 시 보조저장장치의 스왑영역에 접근, 해당 프로세스는 대기상태가 됨→ 스왑 영역의 데이터가 메모리로 올라감→ 메모리로 올라가면 대기상태의 프로세스가 다시 실행  8. 페이지 교체 정책Page Fault가 발생했을 때 메모리에 빈 공간이 없다면 메모리에 있는 페이지 중 어떤 페이지를 스왑영역으로 옮길 지 결정하는 방법 Random무작위로 선택해서 교체하는 방법지역성을 고려하지 않으므로 자주 사용되는 페이지가 선택될 수도 있어 성능이 좋지 않음 FIFO(First In First Out)가장 먼저 메모리에 들어온 페이지를 선택하는 방법자주 쓰이는 페이지가 먼저 들어왔다는 이유로 교체될 수도 있음구현이 간단하고 성능도 준수하기에 FIFO 정책을 변형하여 많이 사용 Optimum앞으로 가장 오랫동안 쓰이지 않을 페이지를 선택하는 방법사실상 구현이 불가능한 이론적 방법알고리즘 성능 비교 시 참조용으로 사용 LRU(Least Recently Used)최근 가장 사용이 적은 페이지를 선택하는 방법시간 지역성(최근 접근했던 데이터가 접근할 확률이 높음)에 근거한 방식Optimum 알고리즘에 근접한 성능을 보임프로그램이 지역성을 가지지 않을 때는 성능이 떨어짐페이지 테이블 엔트리에 시간 정보를 저장하기 위해서는 많은 비트가 필요실제 LRU를 구현할 때는 접근 비트를 이용하여 LRU에 근접하게 구현 빌레이디의 역설Page Fault를 줄이려고 프레임 수를 늘렸는데 오히려 Page Fault가 더 많이 발생하는 현상FIFO에서만 발생하고 LRU에서는 발생하지 않음 클락 알고리즘(Clock Algorithm)LRU와 유사하게 구현하는 방법클락 알고리즘은 접근비트 하나만 이용일정 시간 간격마다 모든 페이지의 접근비트를 0으로 초기화접근비트의 초기값은 0으로 설정되며 페이지 참조 시 1로 수정페이지를 원형으로 연결하고 스왑영역으로 옮길 페이지를 포인터로 가리키는데 이를 클락 핸드라고 부름클락 핸드는 시계 방향으로 돌며 Page Fault가 발생하여 스왑영역으로 보내야하는 상황이 나오면 클락 핸드는 현재 참조하고 있는 페이지의 접근비트를 봄접근비트가 1이면 0으로 바꾸고 다음 페이지를 가리킴접근비트가 0이면 해당 페이지를 스왑영역으로 보냄 향상된 클락 알고리즘(Enhanced Clock Algorithm)접근 비트와 변경 비트 모두 이용 스왑 영역으로 보내지는 순위접근 비트 0, 변경 비트 0 > 접근 비트 0, 변경 비트 1 > 접근 비트 1, 변경 비트 0 > 접근 비트 1, 변경 비트 1 2차 기회 페이지 교체 알고리즘FIFO 방식을 개선한 방식자주 사용되는 페이지에게 또 한번의 기회를 주는 방식Page Fault 없이 페이지 접근에 성공했다면 해당 페이지를 큐의 맨 뒤로 이동시켜 수명을 연장시키는 방법FIFO 보다는 성능이 좋지만 LRU보다는 성능이 좋지 않음 스레싱(Thrashing)CPU 사용률을 올리기 위해 멀티프로그래밍의 정도를 올렸지만 CPU가 작업하는 시간보다 스왑작업의 시간이 더 길어져 CPU 사용률이 0%에 가까워 지는 것 스레싱의 해결책하드웨어적인 방법 → 물리 메모리의 크기를 늘리는 것소프트웨어적인 방법 → 워킹셋과 적절한 페이지 수 할당 적절한 페이지 수 할당프로세스가 실행되면 일정량의 페이지 할당Page Fault 발생 시 더 많은 페이지 할당해당 프로세스에서 Page Fault가 매우 적게 발생하면 메모리 낭비라 판단하여 페이지 회수이 절차를 반복하면 해당 프로세스에 맞는 적절한 페이지 수가 결정됨 워킹셋지역성 이론에 따라 현재 메모리에 올라온 페이지들을 하나의 셋트로 묶어서 실행하는 방법프로세스가 준비상태에서 실행상태가 되는 컨텍스트 스위칭을 할 때 사용됨  주변 장치1. 주변 장치 개요주변장치 내부 구조주변 장치들은 메인보드에 있는 버스로 연결됨하나의 버스는 Address 버스, Data 버스, Control 버스로 이루어져 있음 주변 장치들은 메인보드에 있는 버스로 연결됨하나의 버스는 Address 버스, Data 버스, Control 버스로 이루어져 있음 주변 장치의 구성 요소외부 인터페이스버스 인터페이스레지스터장치의 상태와 데이터를 보관입출력 작업 시 데이터를 저장하는 역할레지스터의 값들은 CPU가 사용하기 위해 메모리로 이동되기도 함컨트롤러로직주변 장치의 종류캐릭터 디바이스데이터 전송 단위가 캐릭터(글자)로 상대적으로 크기가 작음마우스, 키보드, 사운드카드, 직렬/병렬 포트 등이 포함블록 디바이스데이터 전송 단위가 블록(범위)로 상대적으로 크기가 큼SSD, HDD, 그래픽 카드 등이 포함 CPU와 주변 장치 간의 전체적 구조CPU는 I/O 명령을 만나면 입출력 제어기에게 입출력 작업을 맡기고 다른 작업을 수행입출력 제어기는 시스템 버스와 입출력 버스로 구분함시스템 버스 → 고속으로 작동하는 CPU와 메모리가 사용입출력 버스 → 주변장치가 사용느린 장치와 빠른 장치를 구분하여 속도 병목 현상을 해결하기 위해 고속 입출력 버스와 저속 입출력 버스로 나뉨그래픽 카드가 다루는 데이터는 매우 대용량이라 시스템 버스를 이용입출력 제어기가 메모리에 접근하기 위해서는 CPU가 필요한 문제가 있었음. 이를 해결하기 위해 DMA(Direct Memory Access) 제어기를 추가하였고 DMA 제어기를 통해 데이터를 직접 메모리에 저장 및 가져올 수 있음Memory Mapped I/O → CPU와 DMA가 사용하는 메모리가 겹치지 않도록 구분하게 하는 것  2. 마우스/키보드마우스DSP(Digital Signal Processor)가 마우스 움직임 혹은 클릭 같은 데이터 감지→ 디바이스 컨트롤러가 CPU에게 인터럽트를 보냄→ 마우스 드라이버가 동작하여 데이터를 읽어감→ 마우스 드라이버가 운영체제에게 이벤트 신호를 줌→ 운영체제는 이벤트를 Foreground 애플리케이션으로 전달→ 애플리케이션에서 받은 마우스 이벤트 처리 키보드키보드의 디바이스 컨트롤러가 어떤 키를 입력 받았는지 알아냄→ CPU에게 인터럽트→ 키보드 드라이버가 운영체제에게 이벤트를 보냄→ 운영체제는 Foreground 애플리케이션으로 이벤트 전달→ 애플리케이션에서 그에 맞는 키보드 이벤트 처리  3. 하드디스크와 플래쉬 메모리하드디스크스핀들: 하드디스크의 달린 막대플래터: 자기화된 원판으로 이루어짐디스크암: 읽기/쓰기 헤드로 플래터의 표면을 읽음플래터는 여러 개의 트랙으로 구성되어 있음플래터 표면에는 자성이 있기 때문에 N극을 띠면 0, S극을 띠면 1로 인식헤드는 디스크암에 고정되어 있으므로 모든 헤드는 항상 같이 움직임실린더: 여러 개의 플래터에 있는 같은 트랙의 집합섹터: 하드디스크의 가장 작은 단위, 여러 섹터가 모여 트랙을 이룸 하드 디스크에서 데이터를 읽어오는 예시실린더 C로 가서 트랙 B에 있는 섹터 D를 읽어라Seek: 헤드를 특정 실린더로 이동시키는 것Seek time: 헤드를 특정 실린더로 이동시키는 데 걸리는 시간 (ms 단위)실린더 C까지 이동했으면 트랙 B의 섹터 D가 헤드에 닿을 때까지 스핀들을 회전시킴헤드에 섹터 D가 읽히면 작업이 끝남 플래쉬 메모리장점크기가 HDD에 비해 작음Flash Memory는 전기적으로 읽기 때문에 굉장히 빠르고 조용자기성을 띄는 HDD에 비해 안전함충격에 강함단점데이터 덮어쓰기 불가능데이터를 지우기 가능한 횟수가 정해짐  파일시스템1. 파일시스템파일시스템 → 운영체제가 파일을 관리하기 위해 만든 관리자가상 메모리의 메모리 관리자와 하는 일이 비슷함파일시스템은 파일 테이블을 이용하여 파일을 관리 파일시스템의 기능파일과 디렉토리 생성파일과 디렉토리 수정/삭제파일 권한 관리무결성 보장백업과 복구암호화 저장장치의 전송단위는 블록이지만 사용자는 바이트 단위로 접근이 필요함. 이를 파일 관리자가 중간에서 관리해줌 파일의 구조파일은 헤더와 데이터로 구성헤더 → 파일의 속성(파일 이름, 식별자, 유형 등)들이 담겨져있음 파일 디스크립터File Descriptor (File Control Block)파일을 관리하기 위해 정보를 보관하는 곳파일 디스크립터는 파일마다 독립적으로 존재저장장치에 존재하다가 파일이 오픈되면 메모리로 이동파일시스템(운영체제)이 관리, 사용자가 직접 참조 불가능 파일의 종류순차파일구조파일의 내용이 연속적으로 이어진 형태모든 데이터가 순서대로 기록되기 때문에 공간의 낭비가 없고 구조가 단순특정 지점으로 바로 이동이 어려움(삽입/삭제 시 탐색 시간이 걸림) 직접파일구조저장하려는 데이터의 저장 위치를 해시 함수를 통해 결정하는 파일구조자료구조의 Hash Table 구조와 같음해시 함수를 이용하기 때문에 데이터 접근이 굉장히 빠름해시 함수의 선정이 굉장히 중요저장공간이 낭비될 수 있음 인덱스 파일구조순차접근과 직접접근 방식의 장점을 취한 방식으로 2가지 방식 모두 가능기본적인 접근은 순차적으로 접근특정 위치를 선택하면 인덱스 테이블의 인덱스에 접근해 블록 번호를 알아내고 순차 데이터의 해당 블록 번호로 이동하여 접근 가능  2. 디렉토리관련 있는 파일들을 하나로 모아둘 수 있는 구조디렉토리는 1개 이상의 파일을 가질 수 있고 자식 디렉토리도 가질 수 있음루트 디렉토리 → 가장 최상위에 있는 디렉토리 디렉토리와 파일은 다른 구조가 아님일반 파일에는 데이터가 저장되어 있음디렉토리에는 해당 디렉토리 내의 파일 정보가 저장되어 있음 디렉토리 구조초기 파일 시스템의 경우 루트 디렉토리에서만 하위 디렉토리를 생성할 수 있었고 그 외의 디렉토리에서는 생성할 수 없는 단순한 구조였음파일이 많아지며 관리의 불편함이 생겨 다단계 디렉토리 구조가 등장다단계 디렉토리어떠한 디렉토리에서도 하위 디렉토리를 만들 수 있는 트리구조현대의 운영체제는 트리구조에서 순환이 생김ex)윈도우/맥 의 바로가기 아이콘  3. 파일과 디스크파일 시스템은 메모리와 비슷함페이징과 같이 전체 디스크 공간을 일정한 크기로 나누고 그 공간에 주소를 할당하여 관리일정한 크기로 나눈 공간을 파일시스템에서는 블록이라 부름한 블록의 크기는 1~8KB정도 파일시스템은 파일정보를 파일테이블로 관리파일테이블에는 파일이 시작하는 블록의 위치정보가 담겨있음 하나의 파일은 여러 개의 블록으로 구성되어 있으며 연결하는 방식에 따라 연속할당, 불연속할당으로 나눌 수 있음 연속 할당파일을 구성하는 블록들을 디스크에 연속적으로 저장하는 방식파일의 시작 블록만 알면 파일 전체를 찾을 수 있음외부 단편화가 발생하기 때문에 실제로는 사용되지 않음 불연속 할당디스크의 비어있는 공간에 데이터를 분산해 저장하는 방식분산된 블록은 파일 시스템이 관리불연속 할당의 방식은 연결 할당, 인덱스 할당이 존재 연결 할당파일에 속한 데이터를 연결리스트로 관리파일테이블에는 시작 블록에 대한 정보만 저장하고 나머지는 연결리스트를 이용해 다른 블록에 접근하는 방식 인덱스 할당테이블의 블록 포인터가 데이터 블록에 직접 연결하는 것이 아닌 데이터들의 인덱스를 가지고 있는 인덱스 블록을 연결인덱스 블록에 있는 참조하면 모든 데이터를 찾을 수 있음데이터가 많아 테이블이 꽉 찬 경우, 인덱스 블록을 더 만들어 연결하는 방식이기 때문에 테이블 공간을 확보할 수 있음 파일의 크기가 작음 → 블록 포인터를 이용파일의 크기가 큼 → 간접 포인터를 이용이 방식은 리눅스 및 유닉스에서 i-node라는 이름으로 사용되고 있음 파일 시스템에서 빈 공간을 관리하는 전략디스크에 파일을 저장할 때마다 빈 공간을 찾기 위해 모든 공간을 뒤지는 방식은 매우 비효율적파일시스템은 효율적인 관리를 위해 빈 공간을 모아둔 free block list를 가지고 있음특정 파일 삭제 시, 파일시스템은 모든 정보를 지우는 것이 아니라 파일의 헤더만을 삭제하고 free block list에 추가사용자는 파일이 삭제된 것처럼 느끼지만, 사용했던 블록의 데이터는 그대로 남아있기 때문에 포렌식을 통해 데이터 복구가 가능  자료구조1. 삽입 정렬(Insertion Sort)배열을 정렬된 영역과 정렬되지 않은 영역으로 나누고, 정렬되지 않은 값을 하나씩 정렬된 영역에 삽입하는 방식정렬 과정 예시: [4, 1, 5, 3, 6, 2]정렬된 영역: [4], 삽입할 값: 1 → [1, 4, 5, 3, 6, 2]다음 값 5는 4보다 크므로 그대로3은 5보다 작아, 5와 4를 오른쪽으로 밀고 → [1, 3, 4, 5, 6, 2]반복하여 최종 정렬 결과: [1, 2, 3, 4, 5, 6] 삽입 정렬의 성능시간 복잡도 : O(n^2) 장/단점장점: 구현이 간단, 데이터가 거의 정렬된 경우 최적의 성능을 보임단점: 역순 배열이면 최악의 성능을 보임, 큰 배열에서는 성능이 떨어짐  2. 병합 정렬(Merge Sort)재귀적으로 정렬하는 알고리즘분할 정복 알고리즘에 속함배열들의 데이터를 최소한을 쪼갠 후 각 단계 별로 병합을 하면서 정렬을 진행하는 방식 데이터를 반으로 나누어 분할.각각을 정렬한 후 병합하며 정렬.두 개의 데이터가 하나로 합쳐질 때 비교 연산이 두 번 발생.네 개의 데이터가 두 개로 병합될 때 비교 연산이 네 번 발생.단계마다 영역의 수가 반으로 줄어들기 때문에 O(log n)의 성능을 가짐.병합할 때 n개의 데이터를 비교하므로 전체 시간 복잡도는 O(n log n). 병합 정렬의 성능시간 복잡도 : O(n log n) 장/단점장점: 성능이 좋음단점: 이해와 구현이 어려움. 메모리 공간이 추가적으로 필요 3. 퀵 정렬(Quick Sort)분할 정복(Divide and Conquer) 알고리즘정렬 전에 배열에서 하나의 원소를 피벗(Pivot)으로 선택.피벗을 기준으로 작은 값과 큰 값으로 나누어 재귀적으로 정렬 수행. 퀵 정렬의 성능평균 : O(n log n)최악: O(n^2) -> 피벗이 한 쪽으로 지나치게 치우친 경우퀵 정렬은 최악의 피벗을 선택할 확률이 매우 낮아 병합 정렬에 비해 안정적인 성능을 보장병합 정렬에 비해 더 적은 비교와 더 적은 메모리 공간을 사용하기에 효율적  4. 동적 프로그래밍 - 메모이제이션(Memoization)재귀 사용 시 콜 스택 영역 차지 이외에도 같은 계산을 반복해서 수행하는 단점 존재이에 대한 해결책으로 동적 프로그래밍의 메모이제이션(Memoization)을 사용메모이제이션이미 계산된 값을 메모(캐싱)하여 재사용하는 방법.주로 재귀 함수에서 중복되는 연산을 방지하기 위해 많이 사용재귀를 이용하는 하향식(Top-down) 방식 메모이제이션을 통한 피보나치 수열 최적화시간 복잡도: 중복 계산을 방지하여 O(n^2) -> O(n)으로 줄일 수 있음장점재귀 함수 이용 시 성능 향상중복 계산 방지단점메모리 사용량 증가(계산한 값을 메모(캐싱)해야 하기 때문)  5. 동적 프로그래밍  - 타뷸레이션(Tabulation)하위 문제부터 해결하는 상향식 접근 방법. 반복문을 사용메모이제이션과 원리는 같음 (중복될 것 같은 값을 저장했다가 필요하면 계산이 아니라 값을 가져다 쓰기)장점재귀 호출을 이용하지 않아 과도한 콜 스택 호출로 인한 메모리 걱정이 없음단점가장 최하단의 하위 문제들에 대한 계산이 필요. 불필요한 계산이 발생할 수도 있음 메모이제이션과 타뷸레이션 중 어떤 것을 사용해야 할까?문제에 따라 다르지만눈에 보이는 재귀 or 분할 정복으로 풀기 쉬움 -> 메모이제이션(Memoization)복잡한 재귀 or 메모리 사용량이 중요함 -> 타뷸레이션(Tabulation) 일주일 간의 회고🍷칭찬하고 싶은 점강의를 1회독 완주한 점멘토님과 적극적으로 소통하려고 노력한 점😅아쉬웠던 점전공 시간에 이미 한 번 배웠던 것들인데 아직 완전한 내 것이 아닌 점이 아쉽네요... 좀 더 분발!🛠보완하고 싶은 점워밍업 클럽이 끝나고 운영체제, 자료구조와 알고리즘 강의를 개인 노션에 정리한 내용을 보면서 다시 정주행 돌릴 예정인데 그 때는 정리에 급급하기 보다는 차분하게 시간을 들여 내 것으로 만들도록 노력해야겠습니다.강의 재생 도중에 궁금한 점이 있으면 당장 찾아보는 것이 아니라 일단 다 듣고 찾아보기공부 흐름 끊어먹지 않고 온전히 집중하기 

커리어 · 자기계발 기타

이지민

인프런 워밍업 클럽 CS 3기 2주차 발자국

강의 내용 요약운영체제프로세스간 통신프로세스는 독립적으로 실행되는 경우도 있지만 다른 프로세스와 데이터를 주고 받으며 통신을 하는 경우도 있음프로세스는 한 컴퓨터 내에서 실행 중인 다른 프로세스와 통신하거나 네트워크로 연결된 다른 컴퓨터에 있는 프로세스와 통신할 수도 있음. 프로세스 간 통신의 종류한 컴퓨터 내에서 프로세스 간 통신 파일 : 파일을 이용해 데이터를 주고 받으며 통신파이프 : 운영체제가 제공한 파이프를 통해 데이터를 주고 받으며 통신 2. 하나의 프로세스 내에서 쓰레드를 이용한 통신쓰레드는 코드, 데이터, 힙영역을 공유하고 스택만 각자의 것을 가지고 있음데이터 영역의 전역 변수 or 힙을 이용하면 쓰레드 간 통신이 가능3. 원격의 컴퓨터의 프로세스 간 통신(네트워크 이용)운영체제가 제공하는 소켓통신4. 다른 컴퓨터에 있는 함수를 호출하는 RPC(Remote Procedure call : 원격 프로시저 호출)  공유자원과 임계구역1. 공유자원과 동기화 문제프로세스/쓰레드 간 통신을 할 때 여러 프로세스/쓰레드가 공동으로 이용하는 자원(메모리, 변수, 파일, 데이터 등…)을 공유자원이라함공유자원은 여러 프로세스/쓰레드가 공유하고 있기 때문에 프로세스/쓰레드가 공유자원에 접근하는 순서에 따라 실행 결과가 달라질 수 있음시분할처리, 멀티스레드 환경 등의 이유로 인해 프로세스/쓰레드의 실행 순서를 파악하기 어려움참고 사항운영체제는 프로세스의 실행 순서를 관리 및 결정하지만, 실행 결과에는 관여하지 않는다. → 실행만 하고 결과는 알 바가 아니다따라서 공유 자원에 대한 접근 순서가 올바르게 조정되지 않으면 예상치 못한 결과가 발생함이 문제를 동기화 문제 라 부름동기화 문제는 공유 자원에 대한 접근 순서가 잘못된 경우, 공유 자원에 동시 접근 등 공유 자원 사용과 관련된 모든 문제를 아우르는 개념 2. 동기화 문제의 예시// 물약을 먹는 코드 int currentHealth = getHealth(); health = currentHealth + 50; // 체력 50 회복 // 공격받는 코드 int currentHealth = getHealth(); health = currentHealth - 10; // 체력 10 감소 공격받는 코드가 먼저 실행된다고 가정공격받는 코드의 int currentHealth = getHealth(); 가 실행되어 currentHealth에 20이 저장컨텍스트 스위칭이 발생 → 물약먹는 코드가 실행int currentHealth = getHealth();가 실행되어 currentHealth에 20이 저장되고 health = currentHealth + 50; 가 실행되어 health를 70으로 변경다시 컨텍스트 스위칭이 발생 → 공격받는 코드가 실행health = currentHealth - 10; 가 실행되어 health를 10으로 변경물약먹는 코드가 먼저 실행된다고 가정물약먹는 코드의 int currentHealth = getHealth();가 실행되어 currentHealth에 20이 저장컨텍스트 스위칭이 발생 → 공격받는 코드가 실행int currentHealth = getHealth();가 실행되어 currentHealth에 20이 저장되고 health = currentHealth - 10;가 실행되어 health를 10으로 변경다시 컨텍스트 스위칭이 발생 → 물약먹는 코드가 실행health = currentHealth +50가 실행되어 health를 70으로 변경예상 결과값으로는 health가 60이지만 health라는 공유자원에 여러 프로세스가 잘못된 순서로 접근하여 엉뚱한 값이 되어버림 3. 임계구역(Critical Section)과 경쟁 조건(Race Conditon)여러 프로세스/쓰레드가 동시에 사용하면 안되는 영역을 임계 구역이라 함공유자원을 수정하는 코드 부분이며 한 번에 하나의 프로세스/쓰레드만 접근해야 하는 영역여러 프로세스/스레드가 동일한 공유 자원을 동시에 접근해 문제가 발생할 수 있는 상황을 경쟁 조건(Race Condition)이라고 부름경쟁 조건은 동기화 문제의 한 가지 경우에 해당 4. 상호 배제(Mutual Exclusion) 매커니즘임계 구역 문제를 해결하기 위한 원칙상호 배제의 요구사항임계구역에는 동시에 하나의 프로세스만 접근해야 한다여러 개의 요청에도 하나의 프로세스의 접근만 허용한다임계구역에 들어간 프로세스는 최대한 빠르게 나와야한다  세마포어(Semaphore)1. 세마포어의 개념직원 A와 직원 B가 프린터 이용을 하고 싶음프린터 이용 시 작업물이 섞이는 것을 방지하기 위해 프린터실을 따로 만들고 프린트 작업을 원할 때마다 프린터실 열쇠 관리자에게 단 하나의 열쇠를 받아서 프린터실을 이용해야 함한 직원이 프린터실에 들어가있는 동안에는 다른 직원은 절대 프린터실에 출입할 수 없으며 들어간 직원이 나올 때까지 대기해야 함직원 A가 프린터 작업을 마치고 프린터실에서 나와서 열쇠를 열쇠 관리자에게 반납함 프린터를 사용하려는 직원 : 프로세스프린터: 여러 프로세스/쓰레드가 같이 쓰고 있는 공유자원프린터를 쓰기 위해 대기하는 공간: 대기큐프린터실 열쇠 관리자: 운영체제열쇠: 세마포어 2. 세마포어를 코드에 적용하기// 세마포어 선언 int semaphore = 1; // 물약을 먹는 코드 wait(semaphore); //열쇠를 요청해서 열쇠를 받고 문을 잠금 int currentHealth = getHealth(); health = currentHealth + 50; // 체력 50 증가 signal(semaphore); // 방에서 나와 열쇠 관리자에게 열쇠 반납 // 공격받는 코드 wait(sempahore); //열쇠를 요청해서 열쇠를 받고 문을 잠금 int currentHealth = getHealth(); health = currentHealth - 10; // 체력 10 감소 signal(semaphore); // 방에서 나와 열쇠 관리자에게 열쇠 반납 물약을 먹는 코드가 먼저 실행세마포어 변수 semaphore를 가지고 wait() 함수 호출 → **wait()함수**는 세마포어(열쇠)를 획득할 때까지 기다렸다가 획득하면 방에 들어가 문을 잠구는 함수현재 세마포어(열쇠)가 있으니 받아서 문을 잠굼공격받는 코드로 컨텍스트 스위칭이 발생공격받는 코드에서 wait()함수를 호출했지만 세마포어(열쇠)가 없으므로 세마포어(열쇠)를 받을 때까지 대기 → 다음 코드가 실행되지 않고 멈춰있음시간이 지나 다시 물약을 먹는 코드로 컨텍스트 스위칭이 발생signal() 함수가 호출될 때까지 물약을 먹는 코드가 실행물약을 먹는 코드가 signal() 함수를 호출하여 세마포어(열쇠)를 반납하였고 그제서야 공격받는 코드의 wait()함수가 종료됨시간이 지나 다시 공격받는 코드로 컨텍스트 스위칭이 발생하면 health 값을 변경하고 signal() 함수로 세마포어(열쇠)를 반납함초기 health값을 20이라고 하면 health는 20 → 70 → 60으로 변화위 설명을 통해 세마포어를 이용하면 여러 프로세스/쓰레드가 공유자원에 동시에 접근하지 못하기 때문에 동기화 문제가 발생하지 않음세마포어는 여러 개의 값을 가질 수 있음공유자원의 개수에 따라 세마포어의 값을 다르게 조정 가능ex) 공유자원이 3개 → 세마포어의 값은 3 3. 세마포어의 단점wait(s); // 임계 구역 wait(s); wait(s); // 임계 구역 signal(s); signal(s); // 임계 구역 wait(s); 위 그림과 같이 wait()과 signal()의 순서를 이상하게 호출하여 세마포어를 잘못 사용할 가능성이 있음.반납을 안해서 다른 프로세스가 임계 구역에 접근이 불가능하다 등..위 문제는 모니터라는 기법을 통해 해결 가능 4. 모니터세마포어의 단점을 해결한 상호배제 메커니즘운영체제가 아닌 프로그래밍 언어 차원에서 지원하는 방법ex) 자바의 synchronizedpublic class Health{ private int health = 100; synchronized void increase(int amount){ health += amount } synchronized void decrease(int amount){ health -= amount } } // synchornized 키워드가 붙은 함수들은 동시에 여러 프로세스/쓰레드에서 실행 불가능 // ex)(동일한 객체에 속한) increase 함수가 프로세스/쓰레드 A에서 실행 중이면 // 프로세스/쓰레드 B에서는 increase, decrease 모두 실행 불가능   데드락(Deadlock)1. 교착상태(데드락)이란?여러 프로세스/쓰레드가 서로 다른 프로세스/쓰레드의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태일상생활 속 교착 상태 → 교차로에서의 교통 마비 상태교착 상태의 발생 이유는 공유자원 때문임어떤 자원을 여러 프로세스/쓰레드가 공유하지 않는다면 교착상태는 발생하지 않음 2. 식사하는 철학자원형으로 된 탁자에 음식이 준비되어 있고 철학자들은 각자 의자에 앉아서 음식을 먹는 상황각 철학자는 포크를 1개씩 가지고 있으며 음식을 먹기 위해서는 포크를 2개 사용해야 함철학자 3명이 동시에 자신의 오른쪽에 있는 포크를 집음모든 철학자가 포크가 1개 더 필요한 상황이지만 아무도 양보를 하지 않음아무도 식사가 불가능한 교착상태에 빠짐 3. 교착상태의 필요조건아래의 4가지 필요조건 중 하나라도 충족되지 않는다면 교착상태는 발생하지 않는다.상호 배제어떤 프로세스/쓰레드가 한 리소스를 점유했다면 그 리소스를 사용하는 동안 다른 프로세스에게 공유되면 안됨 식사하는 철학자에서 포크가 리소스에 해당먼저 포크를 집었다면 그 포크는 다른 사람이 사용할 수 없는 리소스 비선점프로세스/쓰레드 A가 리소스를 점유하고 있는데 프로세스/쓰레드 B가 그 리소스를 빼앗을 수 없어야 함식사하는 철학자에서 철학자 A가 들고 있는 포크를 철학자 B가 뺏을 수 없는 상황 점유와 대기어떤 프로세스/쓰레드가 리소스를 가지고 있는 상태에서 추가적인 리소스를 원하지만 추가 리소스를 사용할 수 없어 대기하는 상태식사하는 철학자에서 오른쪽 포크를 손에 쥔 채로 왼쪽 포크를 기다리는 상태 원형 대기점유와 대기를 하는 프로세스/쓰레들의 관계가 원형(순환 구조)을 이루며, 각 프로세스가 다음 프로세스가 보유한 리소스를 기다리는 상황. 식사하는 철학자에서 서로가 서로의 포크를 원하는 상황이 원형(순환구조)을 이룸 4. 교착상태의 예방(Prevention)아예 교착상태 자체가 일어나지 않도록 방지하는 방법운영체제 연구자들은 앞의 4가지 필요조건을 통해 교착상태를 예방하려고 했으나 제약이 많고 비효율적이기 때문에 예방이 아닌 교착상태를 해결하는 방법을 연구하기 시작함 5. 교착상태 회피(Avoidance)운영체제가 프로세스들에게 자원을 할당할 때 어느 정도의 자원을 할당해야 교착상태가 발생하는지 파악하여 교착상태가 발생하지 않는 수준의 자원을 할당하는 방식교착상태가 발생할 수 있지만 최대한 발생하지 않도록 미리 대비하는 방법교착상태 회피는 전체 자원의 수와 할당된 자원의 수를 기준으로 안정상태와 불안정 상태로 나눔운영체제는 최대한 안정 상태를 유지하는 방향으로 자원을 할당함불안정 상태에 있더라도 무조건 교착상태에 빠지는 것이 아니라 교착상태에 빠질 확률이 높아지는 것은행원 알고리즘(Banker’s Algorithm)은행(운영체제)이 사업가들(프로세스/쓰레드)에게 돈(리소스)을 빌려줄 때 은행의 여윳돈(시스템의 총 자원)과 사업가들에게 빌려준 돈들(현재 할당된 자원)을 보고 대출 가능한 상황(안전상태)인지 확인하고 빌려주는 원리의 알고리즘 안정 상태안정상태의 경우 P2 혹은 P3이 추가 자원을 요청할 경우 사용 가능한 자원 2개를 사용하여 할당해줄 수 있음.추가 자원이 할당된 P2 혹은 P3의 작업이 끝나면 자원을 반납받아 P1의 추가 자원 요청에도 대응할 수 있음 불안정 상태현재 운영체제가 사용 가능한 자원이 1개임이 자원으로는 P1, P2, P3가 요청할 수 있는 최대 요청인 2개를 충족하지 못함불안정 상태에 있더라도 프로세스가 추가로 최대 자원을 요청하지 않는다면 교착상태에 빠지지 않을 수도 있지만 안정 상태에 비해 확률이 높음은행원 알고리즘은 교착상태를 회피하는 좋은 방법이지만 비용이 비싸고 비효율적5. 교착상태 검출가벼운 교착 상태 검출타이머를 이용하는 방식 → 프로세스가 일정시간 동안 작업을 진행하지 않는다면 교착상태가 발생했다고 간주하고 교착상태를 해결(프로세스 종료)일정 시점마다 체크포인트를 만들어 작업을 저장하고 타임아웃으로 교착상태가 발생했다면 마지막으로 저장된 체크포인트로 롤백무거운 교착 상태 검출자원할당 그래프를 이용하는 방식 → 현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결(프로세스 종료) 프로세스는 각자 자원을 차지하고 있고 화살표를 통해 추가로 다른 자원을 요청하고 있음왼쪽 그래프 : 순환 구조가 생기지 않음 → 교착상태가 없는 그래프오른쪽 그래프: 순환 구조가 발생 → 교착상태가 있는 그래프그래프를 통해 교착 상태를 검출했다면 교착상태를 일으킨 프로세스를 강제종료시키고 다시 실행될 때 체크포인트로 롤백시킴이 방식은 운영체제가 지속적으로 자원 할당 그래프를 유지하고 검사해야 하므로 큰 오버헤드가 발생하지만 가벼운 교착 상태보다 정확한 교착상태 검출 가능(타이머에 의한 강제 종료가 아니라 그래프를 근거로 판단하기 때문)  컴파일과 프로세스1. 프로그래밍 언어의 종류컴파일 언어작성한 코드를 컴파일이라는 과정을 거쳐 0과 1로 이루어진 기계어로 실행파일을 만드는 언어컴파일 과정에서 문법 오류를 검사하고 CPU에서 바로 처리 가능한 기계어로 실행파일을 만들어두기 때문에 속도가 빠름번역가가 원고를 읽고 통째로 번역한 다음 전달해주는 느낌C, C++, C# 등의 언어가 이에 해당인터프리터 언어작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 1줄씩 해석해 실행하는 언어컴파일 과정이 없기 때문에 오류가 발생할 수 있고 컴파일 언어에 비해 속도도 느림동시통역사가 중간에서 즉석으로 통역해주는 느낌Javascript, Python, Ruby등의 언어가 이에 해당 2. 컴파일 과정가장 먼저 전처리기에서 전처리 과정이 진행됨전처리 구문이 처리됨전처리 구문: #으로 시작하는 구문#include, #define …코드에 있는 모든 주석은 제거됨printf()함수의 원형을 가져옴매크로 값인 MY_NUMBER가 100으로 치환 됨 컴파일러는 C언어 작성된 파일(.i)을 기계어에 가까운 어셈블리어로 변환시킴 어셈블리어로 변환된 파일은 어셈블러를 통해 오브젝트파일(.o)파일로 변환됨오브젝트 파일은 0과 1로 된 기계어로 구성되어 있기 때문에 일반적인 텍스트 에디터로는 내용을 확인할 수 없음오브젝트 파일은 코드 영역과 데이터 영역이 분리되어 있음 링커는 여러 개의 오브젝트 파일을 하나의 코드영역과 데이터영역으로 묶음실제로 실행될 주소를 매핑시켜줌링커까지 거치면 실행파일(.exe)파일이 생성됨 사용자가 프로그램을 실행시키면 운영체제가 프로세스를 생성운영체제는 exe파일에 있는 코드영역과 데이터영역을 가져와 프로세스의 코드영역과 데이터영역에 넣어주고 빈 상태의 스택과 힙을 할당PCB를 만들어 프로세스 관리가 가능하도록 만듦PCB의 프로그램 카운터를 생성한 프로세스의 코드영역의 첫번째 주소로 설정운영체제의 CPU 스케줄링에 따라 프로세스가 실행되다가 작업을 마치고 종료됨  메모리1. 메모리 종류레지스터가장 빠른 기억장소로 CPU내에 존재전원이 공급되지 않으면 데이터가 사라지는 휘발성 메모리32bit 크기의 레지스터를 가짐 → 32bit CPU64bit 크기의 레지스터를 가짐 → 64bit CPUcpu는 계산을 할 때 메인메모리에 있는 값을 레지스터로 가져와서 계산계산결과는 다시 메인메모리에 저장캐시레지스터와 메모리의 중간 다리 역할을 하는 메모리레지스터가 필요로 할 것 같은 데이터를 메인메모리에서 미리 가져와서 저장해두는 장소휘발성 메모리캐시는 성능의 이유로 L1, L2, L3등 여러 개가 존재CPU가 값을 요청해 레지스터로 값을 옮겨야 할 때 가장 속도가 빠른 L1 → L2 → L3 → 메인메모리의 순서대로 참조하여 값을 가져옴 (값이 없으면 하위 단계를 참조하는 방식)메인메모리실제 운영체제와 다른 프로세스들이 올라가는 공간전원이 공급되지 않으면 데이터가 사라지는 휘발성 메모리보조저장장치보다 가격이 비싸고 휘발성이기 때문에 실행중인 프로그램만 올림보조저장장치(HDD/SSD)가격이 저렴하고 전원이 공급되지 않아도 데이터가 지워지지 않는 비휘발성 메모리 2. 메모리와 주소유니프로그래밍 환경에서는 하나의 프로세스만 메모리에 올라오기 때문에 메모리 관리가 어렵지 않았음멀티프로그래밍 환경에서는 여러 프로세스가 메모리에 올라오기 때문에 메모리 복잡하고 어려워졌음주소 변환 필요프로세스 간 메모리 침범 방지 대책 필요동적 메모리 할당 및 해제가 복잡프로세스 간 메모리 공유 및 보호 문제32bit CPU와 64bit CPU32bit CPU레지스터 크기, ALU, 버스의 크기가 모두 32bit최대 메모리의 크기: 2^32 = 4GB64bit CPU레지스터 크기, ALU, 버스의 크기가 모두 64bit최대 메모리의 크기: 2^64 = 거의 무한대64bit CPU가 1번에 처리할 수 있는 양이 더 많으므로 속도가 더 빠름물리주소와 논리주소 물리 주소 공간: 메모리의 실제 주소공간논리 주소 공간: 사용자 관점에서 바라본 주소공간 경계 레지스터사용자 프로세스가 운영체제의 영역에 함부로 접근하지 못하도록 하드웨어적으로 운영체제 공간과 사용자 공간을 나누는 역할을 하는 레지스터CPU내에 존재하는 레지스터로 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킴 절대주소와 상대주소 실제 프로그램은 4000번지에서 시작되지만 컴파일러는 0번지에서 시작한다고 생각함절대 주소(물리 주소)메모리 내에서 프로세스가 실행되는 실제 주소 공간메모리 관리자 관점으로 바라본 주소그림에서는 실제 프로그램이 올라간 4000번지상대 주소(논리주소)사용자 관점으로 바라본 주소그림에서는 컴파일러가 생각한 0번지 CPU가 100번지의 값을 요청하면 재배치 레지스터 저장된 값인 4000번지의 값을 더한 4100번지의 값에 접근하여 데이터를 가져옴재배치 레지스터에는 프로그램의 시작주소가 저장되어 있음메모리 관리자는 사용자 접근 시마다 위의 방식대로 계산메모리 관리자 덕분에 주소에 대해 크게 신경쓰지 않아도 프로그램을 만들 수 있고 시작영역이 변경되더라도 재배치 레지스터의 값만 변경하면 되기에 굉장히 유연함 3. 메모리 할당방식메모리 오버레이메모리의 크기보다 더 큰 프로그램을 실행시키는 방법큰 프로그램을 작게 나누어 일부만 메모리에서 실행하고 나머지는 하드디스크의 스왑영역에 저장 하지만 스왑영역도 하드디스크의 일부 영역이고 스왑영역의 데이터와 메모리의 데이터를 교체하는 작업이 필요하므로 실제 메모리보다는 느리게 동작함가변 분할 방식과 고정 분할 방식 한 프로세스가 메모리의 연속된 공간에 할당되므로 연속 메모리 할당 이라고도 부름 한 프로세스가 메모리에 분산되어 할당되기 때문에 비연속 메모리 할당 이라고도 부름가변 분할 방식의 장/단점장점 단점 프로세스의 크기에 딱 맞게 할당됨 → 내부 단편화가 없음 외부 단편화가 발생고정 분할 방식의 장/단점장점 단점 같은 크기로 나누기 때문에 단순함 → 구현이 간단하고 오버헤드가 적음 작은 프로세스가 큰 공간에 할당되어 낭비되는 공간이 발생 → 내부 단편화가 발생외부 단편화충분한 메모리 공간이 있음에도, 연속된 빈 공간의 크기가 부족하여 프로세스를 메모리에 할당할 수 없는 상태 조각 모음을 통해 외부 단편화가 발생한 공간을 합칠 수 있지만 실행중인 프로세스들을 일시 중지해야하고 메모리 공간을 이동시키는 작업을 수행해야 하므로 오버헤드 발생내부 단편화분할 메모리의 크기가 프로세스가 필요한 크기보다 크게 할당되어 내부에 빈 공간이 생겨 낭비되는 현상 낭비되는 공간을 해결할 뚜렷한 방법은 없으나, 분할 메모리의 크기를 조절하여 내부단편화를 최소화하는 전략을 취함버디 시스템2의 제곱수로 메모리를 분할하여 메모리를 할당하는 방식 메모리를 2의 제곱수로 나누어 프로세스가 필요로 하는 크기보다 작을 때까지 나눔위 그림에서는 500이므로 256까지 메모리를 나눔나눴을 때 가장 작은 단위보다 한 단계 위의 공간에 프로세스를 할당256에는 할당할 수 없으므로 512에 할당여기서도 내부 단편화가 발생하지만 그 값을 최소화할 수 있음프로세스가 종료되어 메모리가 다시 확보되었을 때 비슷한 크기 혹은 같은 크기의 분할 공간이기에 메모리를 다시 합치기도 용이함 버디 시스템 방식가변 분할 방식처럼 프로세스의 크기에 따라 유동적으로 메모리를 할당 가능외부 단편화 방지를 위해 메모리 공간을 확보하는 것이 용이외부고정 분할 방식처럼 내부 단편화가 발생하지만 많은 공간 낭비가 발생하지 않음 자료구조재귀(Recursion)1. 재귀란?어떠한 것을 정의할 때 자기 자신을 참조하는 것재귀적으로 정의된 함수를 재귀함수라고 부름 2. 재귀 함수의 간단한 예시// 잘못된 방식의 재귀함수 function myFunction(number){ console.log(number); myFunction(number + 1); } myFunction(1); // 이 함수를 실행하면 정확한 종료 조건(기저 조건)이 없기 때문에 // 콜스택이 쌓여 계속 메모리 공간이 가득 차서 자동으로 종료됨 // 올바른 형식의 재귀함수 function myFunction(number){ if (number > 3) return; console.log(number); myFunction(number + 1); } myFunction(1); // 이 함수는 1 ~ 3까지는 재귀적으로 자신을 호출하다가 // 종료 조건(기저 조건)인 number > 3에 걸리게 되면 함수를 종료 3. 콜스택스택의 영역의 일부 중 함수가 호출되면서 올라가는 영역재귀 함수 호출 시 플로우 차트 위 그림처럼 함수를 호출할 때마다 위와 같이 콜스택에 쌓이게 됨재귀를 사용하는 이유 : 더 복잡한 문제를 쉽게 해결하기 위해팩토리얼, 피보나치 수열문제 등 4. 재귀적으로 생각하기 (재귀로 풀 수 있는 유형 알아보기)단순 반복 → 반복문을 재귀로 변경하기반복문을 재귀로 변경하면 성능 상 이점이 크게 없음 (메모리 문제 때문에 오히려 감소할 수도…)하위 문제의 결과를 상위 문제의 해결에 사용하는 경우 (하향식 계산) ⭐⭐⭐배열의 합, 문자열의 길이, power 함수 … 5. 하노이의 탑 ⭐⭐⭐하향식 접근을 통한 하노이의 탑 풀이하노이의 탑 코드 /** * @param {*} ringCount 원반 개수 * @param {*} from 출발지 기둥 * @param {*} to 임시 기둥 * @param {*} temp 목적지 기둥 * @returns */ function hanoi(ringCount, from, to, temp) { /* 종료(기저) 조건 */ if (ringCount == 0) return; /* 재귀 조건 */ // 기둥 A에 있는 원반 1,2를 B로 옮김 hanoi(ringCount - 1, from, temp, to); // 기둥 A에 있는 원반 3을 C로 옮김 console.log(`원반 ${ringCount}을(를) ${from}에서 ${to}로 이동`); // 기둥 B에 있는 원반 1,2을 C로 옮김 hanoi(ringCount - 1, temp, to, from); } hanoi(3, 'A', 'C', 'B'); 일주일 간의 회고🍷칭찬하고 싶은 점절대적 시간이 부족했지만 포기하지 않고 운영체제 강의는 끝까지 완주한 점배운 내용까지 최대한 디테일하게 정리한 점😅아쉬웠던 점자료구조 및 알고리즘의 재귀까지는 제대로 강의를 들었지만 정렬 부분은 아직 정리를 못했습니다. ㅠㅠㅠ예비군 2박3일 일정을 알고 있었는데도 시간 관리를 제대로 하지 못한 점이 아쉽습니다.🛠보완하고 싶은 점시간에 쫒겨서 제대로 정리하지 못한 부분을 제대로 정리하고 마지막 주차 잘 준비했으면 합니다.일단 이해가 가지 않더라도 중간에 끊지 않고 먼저 1번 듣고 그 다음에 정리하는 습관을 몸에 들여야겠습니다.

커리어 · 자기계발 기타

cs

[인프런 워밍업 클럽 3기 CS] 자료구조와 알고리즘 / 운영체제 회고2

운영체제 요약 FIFO 스케줄링의 장단점• 장점: 구현이 간단하고 공정함.• 단점: 긴 작업이 먼저 오면 짧은 작업이 지연되는 Convoy Effect 발생. SJF를 사용하기 어려운 이유• 실행 시간을 미리 알기 어려움.• 긴 작업이 계속 뒤로 밀려 기아 상태(Starvation) 발생 가능. RR에서 타임 슬라이스가 작을 때 문제• 문맥 전환 비용 증가 → 성능 저하 발생. MLFQ에서 CPU Bound vs. I/O Bound 구분 방법• I/O Bound: 짧은 CPU 사용 후 대기 → 높은 우선순위 유지• CPU Bound: CPU 사용이 길어짐 → 낮은 우선순위로 강등 공유 자원이란?• 여러 프로세스가 동시에 접근하는 자원 (파일, 메모리, CPU 등). 교착 상태(Deadlock) 발생 조건1. 상호 배제 – 한 번에 한 프로세스만 사용 가능.2. 점유 및 대기 – 자원을 점유한 채 추가 자원 대기.3. 비선점 – 자원을 강제로 빼앗을 수 없음.4. 순환 대기 – 프로세스들이 서로 자원을 기다리는 순환 구조. 자료구조와 알고리즘 요약재귀 함수에서 기저 조건 오류 문제• 잘못 설정하면 무한 재귀 → Stack Overflow 발생. 0부터 n까지 홀수의 합 구하는 재귀 함수 (JavaScript)function sumOdd(n) { if (n <= 0) return 0; return (n % 2 !== 0 ? n : 0) + sumOdd(n - 1); } console.log(sumOdd(10)); // 25재귀를 이용한 디렉토리 탐색 코드 (JavaScript)const fs = require("fs"); const path = require("path"); function traverseDirectory(directory) { const files = fs.readdirSync(directory); for (const file of files) { const filePath = path.join(directory, file); const fileStatus = fs.statSync(filePath); if (fileStatus.isDirectory()) { console.log('디렉토리:', filePath); traverseDirectory(filePath); } else { console.log('파일:', filePath); } } } traverseDirectory(".");기존 반복문 방식 → 재귀 함수로 변환하여 모든 파일 및 폴더 탐색.

커리어 · 자기계발 기타

cs 7개월 전
채널톡 아이콘