전체 글 168

CPU와 메모리 관리

컴퓨터에서 일어나는 거의 모든 연산은 중앙처리장치(CPU)가 수행합니다. 중앙처리장치가 연산을 하기 위해서는 데이터가 필요한데, 그 데이터는 중앙처리장치의 레지스터에 저장됩니다. 하지만 레지스터는 크기가 매우 작아서, 연산에 필요한 모두 데이터를 저장할 수는 없는데요. 그래서 메모리에 연산에 필요한 대부분의 데이터를 저장해 놓고, 당장 연산할 데이터만 레지스터 불러와 연산합니다. 위 글에서 설명하지 않은, 그림의 나머지 부분은 아래에서 조금 더 상세히 알아봅시다. 가상 메모리 CPU는 실제 메모리의 물리 주소 대신, 프로세스 내부에서만 사용하는 논리 주소를 사용합니다. 그리고 모든 프로세스는 실제 물리 주소를 찾을 수 있도록 메모리를 할당 받으면서, 프로세스의 시작 물리 주소인 기본 주소(base add..

운영체제 2022.01.19

[WIL] 코드스쿼드 2022 백엔드 2주차 회고(2022.01.10~14)

이번주엔 무슨일이? 01.10 월 : 새로운 사람들👋 이번 주는 Hanse, sally, 반스, 노리, 땃쥐, Jerry, donggi, Sammy, Nathan과 함께 합니다! 반갑게도 노리와 이번주도 같이하게 되었습니다.😁 스크럼 때, Jerry가 제 마스터즈코스 sokoban 코드가 인상깊었다고 칭찬을 해주셔서 쑥스럽고 정말 고마웠네요😊 그렇게 나머지 시간동안은 가볍게 인사를 나누고, 본격적으로 미션을 시작했습니다. 특정 자료구조를 구현하는 미션이었는데, JK가 정리해준 문서를 정독하고 바로 미션 구현에 돌입했는데요. 이번 미션에서는 특정 기능에 Java8의 최신 기능(stream, consumer) 를 사용해보는 연습도 했습니다. 다 작성하고 나서, 사실 스스로는 만족했지만 제가 잘못 하고있는 것..

배열과 연결리스트

배열 배열은 메모리에 지정된 만큼의 연속된 저장 공간을 선점하여 사용하는 저장 방식입니다. int[] grade = new grade {85, 65, 90}; 그림 처럼, 변수는 배열의 시작 주소를 가리키고있고, int배열이기 때문에 4Byte씩 공간을 차지하고 있습니다. 순서대로 저장되어 있기 때문에, 특정 위치의 데이터를 찾는데 1번의 연산이면 됩니다. 1번째의 데이터를 찾고 싶다면 0x10번지에서 4Byte만큼 읽음 2번째의 데이터를 찾고 싶다면 0x10번지 + 1 * 4(int 크기) = 0x14번지로 이동하여, 4Byte만큼 읽음 3번째의 데이터를 찾고 싶다면 0x10번지 + 2 * 4(int 크기) = 0x18번지로 이동하여, 4Byte만큼 읽음 이 처럼 원하는 데이터로 접근 하는데 1번의 연..

알고리즘 2022.01.16

Big-O 표기법과 복잡도

Big-0 표기법 빅오 표기법은 수리과학 분야에서 특정 함수의 증감 추세를 비교하는 표기법으로, 아래와 같은 형식으로 복잡도를 표현합니다. O(n), O(n log n) 이 표기법은 알고르즘의 성능을 평가하는데도 자주 사용됩니다. 알고리즘의 성능은 시간복잡도와 공간복잡도를 기준으로 효율적인지 비효율적인지 평가합니다. 시간복잡도 시간복잡도는 간단히 말해서, 연산 횟수라고 볼 수 있습니다. 위는 여러 알고리즘의 시간복잡도를 빅오 표기법으로 표현하여 복잡도가 증가하는 속도를 비교한 그래프 입니다. 가로축은 확인해야할 경우의 수(Elements), 세로축은 연산 횟수(Operations)인데요. 확인해야할 경우의 수를 n이라고 가정했을때, 각 알고리즘별 복잡도 증가 횟수를 알 수 있습니다. 가장 최악의 복잡도를..

알고리즘 2022.01.16

Java에서의 동시성 제어

동시성 제어가 필요한 이유 서비스에 과도한 트래픽이 몰릴 경우, 서버가 예상한 대로 동작하지 않는 경우가 있습니다. 인프라에서 문제가 발생할 수도 있고, 코드에서 문제가 발생할 수도 있습니다. 인프라의 경우 AWS나 GCP같은 클라우드 서비스를 통하여 유동적으로 대처 가능하지만, 이미 서버에 배포된 코드는 유동적으로 대처하는것이 거의 불가능 하죠. 그래서 개발자는 항상 과도한 트래픽이 몰릴 경우를 미리 대비해야 합니다. 그럼, 아래에서 Java에서 동시성 제어를 위해 추가된 기능들에 대해 알아보겠습니다. 동시성 제어 public class Main { public static void main(String[] args) { CountInteger count = new CountInteger(); for ..

Java 2022.01.11

[WIL] 코드스쿼드 2022 백엔드 1주차 회고(2022.01.03~07)

이번주엔 무슨일이? 01.03 월 : 정신없는 하루🤯 정말 정신없이 지나간 첫날 이었습니다. 이번주는 BC, 케이, Tany, 데이먼, 노리, 테리, 검봉, ikjo, Lee와 함께 하게되었습니다! 동료들과는 가볍에 인사만(채팅으로) 나누고, 바로 미션에 몰두했습니다. 내가 발견한 정보들을 공유하기도 하고, 서로 궁금한 점을 바로 바로 나눌 수 있다는 것이 너무 좋았습니다. 혼자 공부할 때는 물어볼 곳이 없어 몇시간 동안 검색만 하거나, 커뮤니티에 질문을 올리고 기약없이 기다리기도 했었습니다. 이런 경험이 생각나서 동료들이 뭔가 궁금해 할때, 아는 내용을 공유하며 미션을 진행했습니다. 그렇게 의지할 동료가 생겼다는 것이 기뻤고, 조금이라도 내가 도움이 주고 서로 좋은 영향을 주고받고 싶다고 생각했습니다...

리눅스 개발환경 설정 방법들

1. Goorm IDE, Cloud9 같은 클라우드 IDE 서비스 활용 클라우드 IDE 서비스들은, 기본적으로 Linux 컨테이너에를 통해 다양한 언어의 개발환경을 제공합니다. 이런 서비스들을 사용하면 클릭 한번으로 생성할 수 있는 '간편함'과, 웹 브라우저를 실행할 수 있는 환경이라면 어디서든 어떤 기기로든 접속할 수 있다는 장점이 있습니다.2. Docker Dev Environments(PREVIEW) 현재(2021-01-07) Preview인 기능으로, Docker와 VSCode를 미리 설치해야 사용할 수 있습니다. 개발환경을 인식하여 Container 환경을 자동으로 생성해주는 장점이 있습니다. 기본적으로 Linux 기반 개발환경이 제공됩니다.3. AWS EC2, GCP Comput..

인프라/리눅스 2022.01.07

여러가지 쉘의 종류와 쉘 스크립트 활용사례

여러 가지 쉘 종류 쉘 이란? 명령어와 프로그램을 실행할 때 사용하는 인터페이스 입니다. 하드웨어와 프로세스를 제어하는 커널에 사용자가 접근할 수 있는 인터페이스를 제공해 준다. 쉘의 종류 Bourne Shell : sh 최초로 개발된 쉘 C Shell : csh C언어 기반으로된 쉘 Bourne Shell을 기반으로 사용성을 높임 tee-see-Shell : tcsh C Shell에서 명령 행 완성, 편집 기능을 추가한 버전 Bourne-again shell : bash GNU 프로젝트를 위해 작성한 쉘 현재 가장 많이 사용되고 있음 Z Shell : zsh 지금까지 개발된 쉘의 많은 기능이 추가됨 셀 스크립트에 활용한 다양한 사례 - 디스크 상태 및 파일 시스템 점검 디스크의 상태 점검 작업을 통해 ..

인프라 2022.01.07

UNIX와 GNU, 그리고 LINUX

리눅스의 역사와 유닉스와의 차이 들어가기에 앞서, 유닉스와 리눅스의 차이에 대해서 간략하게 정리해봤습니다. 구분 UNIX LINUX 등장 1960년대 후반 1990년대 초 제작자 켄 톰슨 & 데니스 리치 리누스 토발즈 비용 회사별로 다름 대부분 무료 개발주체 다양한 기업 & 비영리 단체 오픈소스 UNIX와 LINUX의 가장 큰 차이는 개방성 였습니다. UNIX ~ GNU ~ LINUX 까지의 역사에서도 역시 가장 핵심적인 키워드는 개방성입니다. 아래에서 조금 더 자세히 알아보겠습니다. UNIX 1960년대 중반 AT&T와 벨 연구소는 함께 멀티 태스킹, 멀티 유저를 지원하는 운영체제 연구 프로젝트를 진행하고 있었습니다. 프로젝트수행하던 연구원들은 효율적인 연구환경을 위해 개발하였고, 그렇게 UNIX가 탄..

인프라 2022.01.07

2021년 회고

올 한해는 내 인생에 큰 변곡점이될 일들이 있었다. '우아콘2020' (feat. 배달의민족 마이크로서비스 여행기) 우연히 유튜브 알고리즘의 추천으로 [우아콘2020] 배달의민족 마이크로서비스 여행기를 보게 되었습니다. 이 영상은 배달의 민족이라는 단순해 보이는 서비스 그 이면에서는 얼마나 거대하고 복잡한 시스템이 있는지, 그리고 대규모 트래픽을 받아내며 어떤 시스템 장애가 생겼고, 우아한형제들이라는 조직이 어떻게 그런 문제들을 해결해오고 있는지를 쉽게 안내한 세미나 영상입니다. 이 영상에서 문제를 해결하는 과정은 단순히 기술조직에서 시스템을 개선하기만 한 것이 아니라, 회사 전체가 견고한 IT 시스템의 중요성을 이해하고 한 마음으로 움직여서 가능했던 것 같습니다. 그래서 이 영상을 보고난..

회고 2021.12.31