목록CS 지식/운영체제 (13)
개발놀이터
TCP프로토콜은 전세계적으로 가장 많이 사용되는 프로토콜 중 하나인데요. 이 TCP프로토콜이 OS레벨에서는 어떻게 움직이는지 살짝 궁금해져서 공부해보고 정리해봤습니다! OS레벨에서 개요를 살펴보고 여기에 Nginx, Tomcat이 들어가고 데이터베이스가 어떻게 데이터를 가져오는지 흐름에 대해서 정리해봤습니다. 해당 포스팅은 TCP/IP에 대한 내용이 생략되어있습니다. 아래의 링크에 부족하지만 어느정도 정리가 되어있으니 참고해주시면 감사하겠습니다. https://coding-review.tistory.com/466 네트워크 흐름제어와 혼잡제어 (Flow Control, Congestion Control)우리가 흔히 말하는 네트워크 통신은 TCP 3way handshaking에 의해 일어납니다. 그리고..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bITJfF/btsKsy40gwB/DNcu1VP6UgpyEjJE0VoRjk/img.png)
이번 포스팅에선 리눅스가 어떻게 파일을 읽고 쓰는지에 대해서 공부해본 내용을 정리하려합니다. 요즘 리눅스 커널에 대해서 공부하고있는데요. 아직 배경지식이 전무하다시피해서 공부하는데 애먹고있습니다. 바로 시작해보죠! cf) 이 포스팅 전 읽고 오시면 좋은 글이 있습니다! 파일시스템에 대한 간략한 정보들이 정리되어있습니다. https://coding-review.tistory.com/564 리눅스 기본 명령어 동작 원리 : 디렉토리 구조편 (cd, ls, rm, mv, cp)이번 포스팅은 이전 포스팅에서 영감을 얻었습니다. https://coding-review.tistory.com/563 데이터베이스 쿼리를 실행하면 내부적으로는 어떤 일이 벌어질까?오랜만에 포스팅을 쓰는 것 같습니다. 거coding-r..
이번 포스팅은 이전 포스팅에서 영감을 얻었습니다. https://coding-review.tistory.com/563 데이터베이스 쿼리를 실행하면 내부적으로는 어떤 일이 벌어질까?오랜만에 포스팅을 쓰는 것 같습니다. 거의 열흘만인 것 같은데 요즘 쿠버네티스를 공부하느라고 실습을 위주로 공부하고 있느라 공부할 시간이 마땅히 나지 않았네요... 이번 포스팅은 평소coding-review.tistory.com제 공부 방향은 항상 문득 떠오르는 주제이거나 이전 주제에서 깊이있게 공부해볼만한 주제를 따로 선정해서 더 공부하는 편입니다. 이전에 데이터베이스 쿼리를 실행하면 OS레벨에서 어떤 일이 벌어지는지 공부했는데 이때 System Call이나 파일시스템에 대해서 많은 공부가 되었고 이 내용을 잘 활용하면 기..
오랜만에 포스팅을 쓰는 것 같습니다. 거의 열흘만인 것 같은데 요즘 쿠버네티스를 공부하느라고 실습을 위주로 공부하고 있느라 공부할 시간이 마땅히 나지 않았네요... 이번 포스팅은 평소에도 너무나도 궁금했던 데이터베이스의 연산과 그 속사정입니다. 이번 포스팅에선 OS레벨에서의 속사정과 데이터베이스 내부의 속사정 두가지 관점에서 톺아보도록 하겠습니다. 쿼리를 실행하면 OS레벨에선 어떤 일이 벌어질까?우리는 아래와 같은 쿼리를 날렸습니다. SELECT * FROM USER u LEFT JOIN ORDER o ON u.user_id = o.user_id WHERE u.user_id = 20; 그럼 데이터가 어떻게 우리 눈에 보일 수 있게 될까요? 이 질문이 머리속에서 떠오르고 난 뒤 곰곰히 생각해봤을 때..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/5kLKj/btsHQ8Oy6Hh/NqKm8crWCzGxlo0EqQKTY1/img.png)
리눅스에선 rm 명령어를 이용해서 파일이나 폴더를 삭제합니다. rm -f deploy.sh파일 삭제rm -rf deploy폴더 삭제 근데 문제는 이제 진짜 컴퓨터에서 완전히 삭제된다는 것입니다. 개인적으로 너무 위험해보여서 윈도우처럼 휴지통으로 이동하는 기능이 있으면 좋겠다싶었습니다. 찾아보니까 alias라고 별칭을 만들어주는 기능이 있어서 그 기능을 이용해서 그 기능을 한번 적용해서 안전장치를 하나 둬보겠습니다. Alias리눅스에선 자신이 많이 사용하는 명령어를 alias로 만들 수 있습니다. alias를 사용하는 방법은 두가지 방법이 있습니다. 현재 사용자만 alias 등록모든 사용자의 alias 등록먼저 현재 사용자의 alias를 등록해보겠습니다. 현재 사용자 alias 등록현재 사용자..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b13McE/btsHMLmvlmq/VPpzMQbm5kZLuDY2kRFp21/img.png)
리눅스에는 파일 혹은 폴더에 권한을 부여하고 관리할 수 있습니다. 정확히는 유닉스라고 해야겠네요. 이번 포스팅에선 파일 혹은 폴더에 권한을 부여하고 관리하는 방법에 대해서 공부한 내용을 정리해보도록 하겠습니다. 파일, 폴더 권한 부여파일, 폴더에 권한을 부여하는 방법에는 두가지 방법이 있습니다. 777과 같이 숫자로 부여하는 방법과 u+x와같이 문자로 부여하는 방법입니다. 먼저 숫자로 부여하는 방법에 대해서 알아보도록 하겠습니다. 기본적으로 파일이나 폴더를 만들면 상태는 rwxr-xr-x입니다. 폴더를 소유한 ec2-user와 폴더를 소유한 그룹인 ec2-user는 이 파일에 대한 권한을 나눠받습니다. 소유자인 ec2-user는 읽고, 쓰고, 실행할 권한이 있고, 그룹인 ec2-user는 읽고..
리눅스를 공부하다보니 리눅스 커널이라는 것을 공부하면 좋다고 하더군요. 원래 이론공부는 나중에 하는 편이지만 이론공부도 좋아하기 때문에 한번 공부해봤습니다. 리눅스 커널우선, 커널이 뭔지 개념을 잡고 넘어가면 좋을 것 같습니다. 커널은 컴퓨터에 장착되어 있는 하드웨어 제품들 (하드디스크, 메모리, CPU, 키보드, 마우스, 모니터 등등...) 을 소프트웨어로 추상화하여 OS가 사용할 수 있도록 하는 것입니다. 즉, 쉽게 말해 커널은 OS가 하드웨어 디바이스를 제어하기위한 중계자 역할을 한다는 것입니다. 우리는 그 중에서 리눅스 커널에 대해서 알아볼 것입니다. 윈도우도 커널이 있습니다! 하지만 우리는 윈도우로 개발할 것은 아니기 때문에 리눅스로 한번 알아봤습니다. 리눅스 커널에는 크게 다섯가지 관리..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KrUf6/btsHIAkZiX4/UXT12vwlXf5rH0qzSxjtY0/img.png)
저는 현재 소규모 스타트업에서 일하고 있는데요. 회사에서 큼직하지 않은 잡다한 인프라 담당을 겸하고 있습니다. 사용자 권한 관리하고 서버 내리고 올리고 라우팅이나 포트 관리하고 이런 서버관리 업무가 제 업무에 포함되어있습니다. 그러다보니 평소에 안그래도 부족했던 리눅스관련 지식이 더 티가 잘나더군요... 그래서 이번 기회에 리눅스 명령어부터 리눅스 커널에 대해서 좀 공부를 할 생각입니다. 평소의 제 방식처럼 일단 사용법부터 들이박아보고 이론은 조금 시간이 지나고 배워보도록 하겠습니다. 리눅스 사용자 추가서버 컴퓨터는 대부분 리눅스로 되어있습니다. 보통 제가 프로젝트를 할 때는 AWS에서 제공해주는 기본 사용자를 사용하곤 했었죠. 회사에선 개발전용 사용자가 있고 루트 사용자가 있더군요. 이 사용..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b5OCTw/btscYVFxrMS/6bK4dei7S4O6abfSJennZk/img.png)
프로세스 동기화에 대한 면접질문을 외우다가 문득 생각이 들었습니다. "Critical Section (이하 임계구역) 에 접근하는 것을 제어하기 위해 세마포어나 뮤텍스를 사용합니다." 라는 문장에서 세마포어가 뭐지? 뮤텍스는? 원래 이런 궁금증이 생기진 않았습니다. 하지만 문득 들더군요. 저것에 대한 꼬리질문이 나올 수도 있겠다는 생각이말이죠. 때문에 오늘 포스팅에선 세마포어와 뮤텍스에 대해서 알아보도록 하겠습니다. 세마포어와 뮤텍스 우선 결론부터 말해보겠습니다. 뮤텍스는 락을 걸어서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. 우리가 자바에서 흔히 사용하던 synchronized 키워드가 바로 뮤텍스입니다. 세마포어는 신호를 주고받아서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dz0FjM/btsb6ZDh4JX/Qn4KHoHL07STesk1Y1csm1/img.png)
잘 기억은 안나지만 2022년 여름 주말이었는데 지인들끼리 다같이 모여서 쿠팡이츠로 점심을 시켜먹으려고 했는데 서버가 내려가 주문이 안된 사태가 있었습니다. 여자친구가 당시 쿠팡이츠에서 일하고 있었고 사내톡으로 해당 문제가 교착상태 (DeadLock) 때문에 발생한 문제라고 판단하고 이내 두시간정도에 걸쳐서 문제를 해결했던 일이 생각납니다. 가장 매출이 잘 나오는 주말 점심에 이런 일이 터졌기 때문에 고객들은 부정적인 고객경험과 경쟁사에 고객을 뺏기는 상황이 발생했죠. 이처럼 데드락, 교착상태는 서비스를 운영함에 있어서 큰 문제가 될 수 있는 상황입니다. 오늘 시간에는 교착상태에 대해서 알아보고 왜 교착상태가 일어나는지, 해결하려면 어떻게 해야하는지에 대해서 알아보도록 하겠습니다. 교착상태 교착상태 (이..