하드웨어 파보기(1) - 메모리 계층 구조가산 장치인 CPU는 우리가 알고 있는 컴퓨터의 뇌, 연산 장치입니다. 이는 엄청난 연산 속도를 갖고 있으며 기술이 고도화 되며, 유저가 갖고 있는 서비스에 대한 기댓값을 충족 시키기 위해 최신 기술은 CPU가 얼마나 더 빠른 연산을 해내는가에 초점이 맞춰져 있을 것입니다. CPU는 크게 봤을 때 RAM에 데이터를 임시로 올려 이를 연산합니다. 즉, 예를 들면 보조 기억 장치 등에 저장 되어 있던 데이터를 RAM에 올리는 것이죠. 그런데 여기에서 자세히 들어가면 메모리는 계층 구조를 갖고 있습니다. 이 구조는 왜 만들어졌으며, 어떠한 구조를 갖고 있을까요? 메모리 계층 구조는 크게 다음과 같습니다.Register(SRAM)Cache(SRAM)Main Memory(..
전체 글
하고 싶은 것들을 하며 성공하기개요HTTPS는 웹 클라이언트인 브라우저, 예를 들어 크롬이 서버에 리소스를 요청에서 받은 데이터를 어떻게 파싱하고, 어떻게 해석하는지에 대한 방식을 규칙으로 정리한 HTTP에 통신 시 보안(Secure)에 대한 규칙을 합한 것입니다. 이때 CA에서는 특정 서버에 접근하려는 클라이언트에게 '이 서버는 우리 기관에서 검증된 서버야!'라고 인증하여 알려주기 위해 인증서를 발급합니다. 여기서 CA(Certificate Authority)는 인증 기관입니다. 이후 발급된 CA 인증서는 서버가 갖게 되고, 마치 신분증처럼 클라이언트에게 제시할 수 있습니다. 이때 클라이언트가 서버에게 리소스를 요청하면 서버는 클라이언트에게 해당 CA 인증서를 보내게 되죠. 그렇다면 클라이언트는 어떻게 서버를 검증하고, 서버로부터 ..
개요발대식 및 내 목표처음 발대식에 참가하여 OSSCA에 대한 전체적인 개요와 팀 소개를 받고 여정을 시작하게 되었습니다. 사진 가장 왼쪽에 햇빛 덕분에 빛나고 있는 사람이 저입니다.이후 첫 번째 과제로 여러 LLM을 이용하여 프로젝트와 친해지는 시간을 가졌고, 이것을 중심으로 어떤 부분에 기여하고 싶은지 고민해보고 이를 게시물에 작성해보는 시간을 가졌습니다. 아무래도 해당 프로젝트에서 사용하는 Rust라는 언어를 처음 접하다 보니 차근차근 구조부터 알아볼 수 있는 부분부터 기여하려 했습니다. 아래는 제가 처음에 생각한 세 가지 기여해보고 싶은 요소입니다.문서화나 번역 및 초보자를 위한 예제 코드 작성기능 구현(CTE)언어 바인딩(Java)그러나 언어 바인딩이라는 것은 난이도가 너무 높고, 기능도 모두 ..
개요최근 알고리듬 문제 풀이 공부를 하면서 C++로 진행하고 있다. 이때 vector라는 가변 길이 배열을 자주 사용하게 되는데 이를 처음 선언하고 다룰 때 어떻게 하는 것이 가장 좋을까라는 고민을 하게 되었다. 여기에는 capacity와 size가 있는데 이것은 무엇이며, resize와 reserve가 있는데 이는 언제 사용하는지, 왜 사용하는지 알아보자. (프로그램은 mac m1 환경에서 실행 되었으며, 예시에서 대부분 main와 헤더 파일 등 공통적인 부분은 생략합니다)vector의 생성자와 capacity, size 변경 방법.기본 생성자vector의 기본 생성자는 다음과 같이 호출할 수 있다. vector arr;vector는 push_back이라는 메서드로 삽입 순서를 기억한 상태로 자료..
오랜만의 포스팅입니다. 이번에 프로그래머스에서 진행하는 세미나에 다녀왔는데요! 여러 경험을 가진 개발 선배님들을 만나뵐 수 있어서 신청했고, 운 좋게 오프라인에 당첨 되어서 강남역에 위치한 프로그래머스 강남점에 방문했습니다. 데브 코스라고 하는 부트 캠프 자체에는 관심이 적었지만, 강대명 강사님을 이전부터 알고 있어서 신청하게 되었습니다. 그리고 좋은 경험을 공유해준다는 소식을 듣고 한 걸음에 찾아갔습니다. 요즘 이직을 준비하면서 고민도 많았고, 다른 분들은 어떤 생각을 갖고 사는지 궁금했거든요! 아래 URL은 강대명 님이 구름에서 진행한 인터뷰입니다. 궁금하신 분들은 참고 부탁해요!https://blog.goorm.io/daemyungkang/ 결론적으로 세미나는 만족했고, 세 개의 발표 모두 양질의 ..
개요socket.io의 공식 문서를 읽으며 알게 된 특징과 장단점을 기술해보려 합니다. 왜 web socket이 아닌 socket.io를 사용해야 하는지, socket.io는 어떤 환경에 적합한지 알아보겠습니다.본문1. Socket.io 와 Web socket은 다르다 - socket.io는 web socket의 구현체가 아니다. 웹 소켓도 이미 구현체이고, 이에 추가적인 기능을 가진 개체가 Socket.io이다. - web socket과 다르게 socket.io는 Acknowledgement, connection recovery, event 단위 처리 등이 가능하다는 장점이 있다. 2. socket.io는 백그라운드 프로그램에 어울리지 않다. - 지속적으로 open TCP 연결을 해야 하기 때문에 모..
개요채팅을 구현하는 것은 이번이 두 번째입니다. 처음 구현할 때는 웹 개발을 처음했을 때라 웹소켓보다 기본적인 API에 집중했습니다. 그러다 보니 소켓 관련 부분은 게임 파트 동료가 만들어둔 것을 사용하는 형식으로 했고, 디테일이 부족했습니다. 하지만 이번에 채팅을 한 번 더 구현할 기회가 생겨 관련하여 공부하고, 기록으로 남겨볼 예정입니다. 본문현재 ec2 docker의 WAS의 아키텍처는 무중단 배포를 위해 인스턴스가 두 개 존재합니다. 때문에 클라이언트와의 통신 요청-응답 사이에 상태를 서버에서 저장하면 안 됩니다. DB 등의 또다른 인스턴스에서 저장해야 한다는 이야기이죠. 때문에 In-memory caching을 할 수 있는 Redis 등을 이용하여 서버 소켓을 저장해야 합니다. 이렇게 redis..
개요Socket.io는 무엇이고, 언제 사용할 수 있는지, 그리고 WebSocket과의 차이점을 알아보겠습니다.본문Socket.io이란?Socket.io는 클라이언트와 서버 간의 짧은 지연 시간, 양방향, 이벤트 기반의 통신입니다. 때문에 실시간 서비스에서 사용하기에 적합한 라이브러리입니다. Socket.io는 HTTP와 다르게 연결만 되어 있다면 서버에서도 원할 때 요청을 먼저 줄 수 있습니다. 또 클라이언트와 연결이 비정상적으로 끊어졌을 때 자동으로 재연결을 시도하며, 패킷을 자동으로 버퍼에 저장하고, 재연결이 되면 이를 전송합니다. 주의 할 점은 Socket.io는 모바일 애플리케이션의 백그라운드 서비스에서 사용하기에 적합하지 않습니다. 서버와 개방형 TCP 연결을 유지하므로 배터리를 많이 소모할 ..