목록분류 전체보기 (149)
Taking baby-developer steps
롤링배포 특정 개수의 서버들을 돌아가며 배포하는 방법 블루 그린 배포 똑같은 서버 인스턴스를 띄우고, 로드밸런서 설정을 바꾸어 배포하는 방법. 카나리 배포 전체 서버의 특정 비율만큼 배포해보고 문제 없는 경우 점점 배포를 늘려가는 방법. 백엔드 개발자는 코드의 개발부터 테스트, 배포, 모니터링까지를 여러번 반복한다. 빌드부터 배포까지의 과정을 자동화 하는 것을 보통 CI/CD라고 한다. CI(Continuous Integration) 지속적 통합. 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 저장소에 통합되는 것. CD(Continuous Delivery & Deployment) 지속적 배포. 실제 프로덕션 환경까지 변경된 코드가 반영 되는 것.
라이브러리 재사용 가능한 코드 모음. 개발에 필요한 기능인 클래스, 함수 등을 모은 것. 개발자가 필요한 기능을 직접 호출하여 사용하며, 개발 프로젝트에 대한 제어권을 가지고 있다. 수학 함수, 데이터베이스 연결, 그래픽 처리 등을 위한 라이브러리등이 있다. 프레임워크 어떤 작업을 수행하도록 구조를 제공하는 뼈대나 틀. 서비스 개발에 필요한 구조, 패턴 및 도구를 제공. 개발자가 프레임워크에 따라 정해진 규칙과 구조를 따라야 한다. URL 라우팅, 데이터베이스 연결, 보안, 템플릿 엔진 등을 제공한다. 차이점 : 가장 큰 차이는 제어와 역할 분담 라이브러리는 개발자가 필요한 기능을 직접 호출하고 제어하지만, 프레임워크는 개발자에게 구조와 규칙을 제시하며, 개발자는 이 구조에 따라 코드를 작성해야한다. 사..
HTTP(Hypertext Transfer Protocol)는 웹에서 정보를 주고받는 데 사용되는 프로토콜로, 다양한 메서드를 제공해 클라이언트와 서버간의 상호작용을 정의한다. HTTP 프로토콜에서 지원하는 주요 메서드는 다음과 같다. GET / HEAD POST / PUT / PATCH DELETE OPTIONS CONNECT TRACE GET / HEAD - 리소스 요청, 조회 GET 메서드는 서버로부터 리소스를 요청하는 데 사용된다. 요청된 리소스는 URL에 포함된 쿼리 매개변수에 따라 반환된다. 이 메서드는 요청한 리소스를 읽기만 하고 변경하지 않는다. HEAD 메서드는 GET과 유사하지만, 서버는 응답으로 실제 데이터(메시지의 body부)를 반환하지 않고 헤더 정보만 반환한다. 이는 리소스의 메..
기계로서의 객체 객체 지향의 세계를 창조하는 개발자들은 "객체의 상태를 조회"하고 "객체의 상태를 변경"하는 것이 주 업무이다. 객체의 상태를 조회하는 작업 : 쿼리(query) 객체의 상태를 변경하는 작업 : 명령(command) 라고 일반적으로 부르며, 객체가 외부에 제공하는 행동의 대부분은 쿼리와 명령으로 구성된다. 객체는 일반적으로 기계와 같다. 우리가 기계를 분해해 보기 전까지는 그 내부를 들여다 볼수 없다. 그저 행동 버튼을 통해 결과를 얻는다. 행동 버튼에는 명령과 쿼리가 있다. 명령 버튼을 누른 직후에 그 행동이 기계의 상태를 어떻게 변경시킨지는 알 수 없다. 원하는 상태의 조회 버튼을 눌러야 명령에 의해 변화된 상태를 확인 할 수 있다. 버튼을 눌러 상태를 변경 혹은 조회하는 것을 요청하..
"객체가 식별 가능하다"는 "서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다"라는 말이다. 모든 객체는 식별자를 가지며, 이를 이용해 객체를 구별할 수 있다. 식별자란 특정한 프로퍼티를 말한다. 값과 객체의 가장 큰 차이점 또한 값은 식별자가 없고 객체는 식별자를 가진다는 것이다. -> 이는 시스템을 설계 할 때 값과 객체의 차이를 명시적으로 표현하는데 매우 중요하다. 값이란, 변하지 않는 불변의 상태(immutable state)를 가진다. 값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같은 것으로 판단한다. "상태가 같으면" 값이 같다. 상태가 다르면 두 인스턴스는 다른 것으로 판단한다. 이처럼 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성(equality)라고 한다...
- 상태와 행동 객체는 자율적이다. 그러나 객체의 상태가 저절로 변경되진 않는다. 객체의 상태는 자발적인 행동에 의해 변경된다. ("내"가 현관문을 통과하면 나의 위치(상태)가 '집 안'에서 '집 밖'으로 바뀐다) 객체가 취하는 행동은 자신의 상태를 변경 시키는 등의 부수 효과(side effect)를 발생 시킨다. 이상한 나라의 앨리스에서, 앨리스가 물을 마신 행동이 앨리스 자신의 키를 작게 만들(side effect)고 동시에 물병 안에 있는 물의 양도 감소(side effect)시켰다. 앨리스가 문을 통과하는 행동은 앨리스의 위치를 변화시킨(side effect)다. 그러나 당시의 행동은 이전에 일어난 과거 행동에 영향을 받는 것을 지난 포스팅을 통해 알았다. 따라서 행동은 상태에 영향을 받는다. ..

쓰레드에는 2가지 타입이 있다. •유저 쓰레드(user) : 사용자 모드에서 사용하는 쓰레드(유저 모드에서 쓰레딩 한 쓰레드) •커널 쓰레드(kernel) : 커널 모드에서 사용하는 쓰레드(운영체제가 직접 매니징하는 쓰레드) 쓰레드는 운영체제가 지원. 그런데 자바(버추얼 머신임. 운영체제 아님)도 쓰레딩 기능을 지원한다. 자바는 운영체제가 아니므로 cpu를 넘나들 수는 없다.이와같이 운영체제의 쓰레드와는 무관한 쓰레드(green 쓰레드 라고도 함)를 user 쓰레드 라고 하고, kernel 쓰레드는 코어에서 직접 쓰레딩을 할 수 있는 것을 커널 쓰레드라고 하고, 이는 운영체제가 직접 관리 한다. ? 유저 쓰레드와 커널 쓰레드가 그래서 어떤 관계인데? 기본적으로 우리는, 쓰레드 라이브러리가 있어야 쓰레드를..

현재까지는 흐름(쓰레드가)이 하나뿐인 프로세스를 생각해 왔다. 그러나, 하나의 프로세스는 여러개의 쓰레드들을 컨트롤 할 수 있다. •프로세스가 한번에 여러개 동작 할 수 있었던 이유? cpu가 program counter를 가지고 있고, 이를 context switching 할시에 바꿔주면 , 각각의 실횅할 프로세스의 context를 가지고 와서 실행 할 수 있다. →이 때, 이 pc(program counter)즉, register set 정보만 별도로 유지 한다면, 하나의 프로그램(프로세스 안에서) 굳이 fork할 필요 없이, 실행 쓰레드만 달리 할 수 있다. •쓰레드란? ◦a lightweight process (LWP) ◦멀티 쓰레딩이 제공 될 때, 실제로 “CPU를 점유하는 기본 단위”이다 ◦어..

이번 포스팅 그림 요약— 프로세스의 실행 - 독립적 실행 / 협력적 실행—> 독립적 실행인경우 CPU의 타임 스케쥴링만 잘 해주면 문제 없음.협력적 실행이 필요한 경우가 있음.독립적 실행 → 공유하는 데이터도 없고 메세지 주고받을 사항이 없는 경우. 협력적 실행 → 영향을 주거나 받는 경우 ⇒ 데이터를 공유하거나 메세지를 주고 받는 경우IPC (Inter_process Communication)데이터를 주거나 받거나 하는 경우.→ 공유 메모리를 써서 데이터를 주고 받는 방법→메세지를 주고 받는 방법 중한가지로 통신을 하면 된다.공유 메모리 방법 : 예를 들어, Process A(아빠)와 Process B(아들) 사이에 shared memory(용돈함)이 있어서, 아빠가 용돈을 넣으면 아들이 가져가는 구조..

context switch를 하기 위해 동기화(synchronization)을 잘 해야하는데,(동시성 제어) 이 전에 프로세스는 어떻게 생성해야하는지를 알아야한다! (다음 시간엔 프로세스간 통신 (IPC)에 대해 학습할 예정!) 유닉스 계열 OS에서, 새로운 프로세스의 생성은 반드시 fork() system call을 이용하게 되어있다. ⇒ 자식 프로세스는 보통 “a copy of the address space”해서 만든다. == 현재 나의(부모의) 프로세스의 주소 공간을 복사해서 만든다. —> 부모 프로세스와 자식 프로세스는 fork() 시스템 콜 이후 계속 실행이 되는데, return code에서 차이를 보인다. → fork()의 return code가 0 이면 —> 자식 프로세스 → 0이 아닌 p..