[CS 스터디] 5주차 OSI 1 ~ 3 계층
·
공부/CS 스터디
OSI 1 ~ 3 계층OSI는 Open System Interconnection Reference Model 의 약자로, 국제 표준화 기구인 ISO에서 개발한 네트워크 모델이다.7계층으로 이루어져 있으며, 아래와 같이 각 계층은 분리되어 있다.7계층: 응용 계층6계층: 표현 계층5계층: 세션 계층4계층: 전송 계층3계층: 네트워크 계층2계층: 데이터 링크 계층1계층: 물리 계층이 중 오늘은 1계층부터 3계층을 알아보려고 한다.1계층: 물리 계층 (Physical Layer)1계층은 OSI 7계층 중 가장 아래에 있는 계층으로, 물리적 매체를 통해 데이터를 전기적, 광학적으로 전송하는 것을 담당한다.허브허브는 근거리의 장비들을 연결하는 물리계층에 속하는 중계 장비이다.전기 신호를 증폭하는 기능을 가지고 있..
[CS 스터디] 4주차 동기화, 메모리
·
공부/CS 스터디
동기화동기화란, 여러 프로세스 혹은 스레드에서 하나의 공유 자원에 접근 할 때, 접근 순서를 보장해주는 방식이 동기화이다.동기화가 필요한 이유여러 프로세스 혹은 스레드가 하나의 자원에 접근할 때, Race condition이 발생하게 되는데, 이를 해결하기 위해서는 동기화가 필요하다.Race condition (경쟁 상태)Race condition은 여러 프로세스 혹은 스레드가 하나의 자원에 동시에 접근할 때, 서로 자원을 선점하려 경쟁하는 것을 뜻한다.이 과정에서 실행마다 순서가 달라지게 되고, 이는 일관되지 못한 결과를 만들어낸다import kotlin.concurrent.threadvar counter = 0fun main() { val threads = List(1000) { t..
[CS 스터디] 3주차 CPU 스케줄링과 IPC
·
공부/CS 스터디
CPU 스케줄링선점형 VS 비선점형CPU 스케줄러는 선점형(Preemptive)과 비선점형(Non-Preemptive)으로 구분할 수 있다.두 스케줄링은 자원을 빼앗길 수 있느냐 빼앗기지 않느냐에 따라 구분할 수 있다.먼저, 선점형 스케줄링은 자원을 다른 프로세스에 빼앗길 수 있다.실행중이던 프로세스가 자원을 빼앗기면 어떻게 될까?자원이 없으면, 프로세스를 실행할 수 없기 때문에 현재 작업을 저장하게 되고, 이 과정에서 잦은 Context Switching이 발생한다.또한, 선점형 스케줄링은 응답성이 높다는 장점이 있다.만약 더 높은 우선순위를 가진 프로세스가 생성된다면, 선점형 스케줄링은 기존 프로세스의 자원을 회수하고, 새로운 프로세스에게 할당할 수 있다.이렇게 되면, 우선순위가 높은 프로세스는 기다..
[CS 스터디] 2주차 커널 동작과 인터럽트
·
공부/CS 스터디
CS 스터디 2주차 - 커널 동작과 인터럽트커널 모드커널 모드는 말 그대로 커널에서 실행하는 모드로, 다음과 같은 특징을 가진다.모든 하드웨어에 직접 접근 가능모든 CPU 명령어 실행 가능운영체제가 커널 모드로 실행됨유저 모드유저 모드는 userspace에서 동작하는 모드로, 다음과 같은 특징을 가진다.하드웨어에 직접 접근 불가제한된 CPU 명령어 실행 가능일반 애플리케이션이 기본적으로 유저 모드로 실행됨그렇다면, 유저 모드에서 실행중이던 애플리케이션이 네트워크 처리, 파일 입출력 등 하드웨어에 직접 접근하는 등, 유저 모드 권한 밖의 작업을 하려면 어떻게 동작할까?이때 애플리케이션은 시스템 콜 (System Call)을 사용한다.시스템 콜시스템 콜을 애플리케이션이 커널 기능을 요청할 때 사용하는 인터페..
[CS 스터디] 1주차 프로세스와 스레드
·
공부/CS 스터디
CS 스터디 1주차 - 프로세스와 스레드프로세스란프로세스를 간단하게 설명하면, 컴퓨터에서 실행 중인 프로그램 이라고 설명할 수 있다.프로그램을 실행하면 먼저 메모리에 프로그램이 적재되고, CPU가 실행 가능한 상태가 된다.이때 메모리에 올라간 이 프로그램 (혹은 커널에 등록된 프로그램)을 프로세스라고 할 수 있다.프로세스의 구조프로세스는 다음곽 같이 총 4개의 영역으로 구성되어있다.StackHeapDataText아래 표와 같은 순서로 나타낼 수 있으며, 아래로 갈 수록 메모리 주소가 낮아진다.StackHeapDataText그렇다면, 각 구조별 특징에 대해 알아보자Stack임시 데이터 (지역 변수, 함수 호출 등)가 저장되는 영역으로, 가장 높은 메모리 주소를 가진다.함수 호출 시에 생성되며, 함수가 끝나..
Kotlin DSL을 활용한 에러 핸들링 설계
·
개발/안드로이드
과거 코인에서는 ErrorHandler를 이용해 에러를 처리하였다.다만 현재 팀원 중에는 그 구조를 직접 사용해 본 사람이 없고, 따라 Result 기반으로 에러를 명시적으로 다루는 방향으로 정리되었다.Result.failure 분기처리처음에는 아래와 같이 코드를 작성하였다.return runCatching { remoteCall()}.onFailure { exception -> return Result.failure( when (exception) { is HttpException -> { when (exception.code()) { 401 -> UnauthorizedException() ..
25년도 하반기 회고
·
회고
BCSD이번 학기부터 BCSD에 많은 변화가 생겼다. 기존의 팀 체제가 사라지고, PL님이 멘토님에서 회장님으로 바뀌면서, 동아리 전체적으로 방향성을 잡지 못한 학기였다. 거기에 배달 기획으로 인한 동아리 전체의 피로도 누적과 나를 비롯한 수많은 개발자들의 번아웃으로 인해, 저번학기와 같은 활발한 활동을 하지 못한 학기였다. 그럼에도 불구하고, 안드로이드 개발자로서 성장하기 위해 부단히 노력한 학기였다.안드로이드 트랙장가장 큰 변화로, 처음 트랙장을 맡게 되었을 때 부터 주장했던 Compose 리팩토링을 중단하게 되었다. 리소스의 부족도 큰 영향이 있었지만 가장 큰 이유는 레거시에 대한 관점 변화였다.'과연 레거시가 나쁜 것인가?'라는 고민을 정말 많이 했고, 또 레거시를 유지하는 것도 능력이라고 생각이..
Compose contentDescription null과 ""의 차이
·
개발/안드로이드
Compose에서 Image나 Icon과 같이, 이미지를 보여주는 컴포넌트를 사용할 때는 contentDescription을 사용해야 한다.이 contentDescription이 무엇인지 정확하게 알아보기 위해, Image Composable의 주석을 읽어보았다.@param contentDescription text used by accessibility services to describe what this image represents. This should always be provided unless this image is used for decorative purposes, and does not represent a meaningful action that a user can take. Th..
25년도 상반기 회고
·
회고
2년간의 공백, 그리고 2학년으로 복학 후 첫 6개월에 대한 회고BCSD Lab22년도에 들어갔던 BCSD Lab에서 복학 후 본격적으로 활동을 했다.돌아와보니 22년도에 개발하던 쩝쩝박사 프로젝트는 없어졌고, 그렇게 남아있던 코인 프로젝트에 투입되었다.24년도 12월에 잠시 땜빵으로 들어가 작업했던 캠퍼스 팀과 유저 팀 이렇게 두 개의 팀에서 활동하게 되었다.캠퍼스 팀배너 기능캠퍼스 팀의 첫 스프린트로는 배너 광고 기능을 개발하는 것이었다.앱 실행 시 사용자에게 배너 광고를 보여주는 기능으로, 많은 앱들에서 광고 등의 목적으로 활용되고 있다.첫 스프린트로 가져가기 좋은 가벼운 주제였다고 생각했고, 실제로 큰 공수가 들지는 않았다.앞으로 잘 활용되면 좋을 기능 중 하나이다.동아리먼 옛날 코인 프로젝트에 ..