본문 바로가기

개인 학습 메모장

(103)
Thread & Process 우리는 스레드와 프로세스에 대해서 한번쯤은 들어봤을것이다. 하지만 막상 스레드가 무엇이고 프로세스가 무엇인지 누군가 물어본다면 정확한 개념을 이해하고 있지 않기 때문에 설명하기 막막할 것이다. 본문을 통해 스레드와 프로세스에 대해서 이해해보도록 하자. Process? 우리는 작업관리자를 키면 실행중인 프로세스가 어떠한 것들이 있는지 알 수 있다. 이를 통해 알 수 있듯이, 프로세스란 운영체제로 부터 자원을 할당받는 작업의 단위이다. 그렇다면 운영체제로 부터 어떤 자원을 할당 받는지 다음의 그림을 통해 보도록 하자. 그림을 보면 알 수 있듯이 하나의 프로세스는 코드, 데이터, 스택, 힙 이라는 자원을 운영체제로 부터 할당받는다. 각각 무슨 역할을 하는지 이름만 보고도 추론할 수 있는데 이를 간단하게 살펴보..
객체지향 프로그래밍 객체? 객체란 우리 주변을 이루고 있는 모든것을 말할 수 있다. 객체는 보통 상태와 행위로 이루어져 있는데, 사람이라는 객체를 예를 들어보자. 사람의 키, 몸무게, 머리색 등과 같은것으로 사람의 상태를 묘사할 수 있을것이고, 밥을 먹거나 걷거나 앉거나하는것으로 행위를 묘사할 수 있다. 객체지향 프로그래밍? 위에서 객체에 대해서 말했다. 그렇다면 객체지향 프로그래밍은 무엇일까? 이를 말하기에 앞서 우리가 흔히 객체지향의 반대라고 생각하는 절차적 프로그래밍에 대해서 짚고 넘어가 보겠다. 절차적 프로그래밍? 먼저 절차적 프로그래밍은 절대 객체지향 프로그래밍의 반대가 아니다. 프로그래밍 접근 방법이 상이할 뿐이다. 절차적 프로그래밍(Procedure Programming)이란 Procedure을 이용하여 작성하..
TCP & UDP TCP UDP란? TCP와 UDP 모두 네트워크 계층중 전송 계층에서 사용하는 프로토콜이다. 이들은 모두 데이터 전송을 할때 필요한 프로토콜이다. 프로토콜? 프로토콜이란 일종의 규약이다. 사람과 사람사이에서도 서로가 이해할 수 있는 언어를 사용해야 하는데, 컴퓨터와 컴퓨터 사이에서도 마찬가지로 서로 통신을 하기 위해서 규칙이 필요하다. 이를 프로토콜이라고 한다. TCP TCP(Transmission Control Protocol)를 말하자면 전송을 제어하는 프로토콜이라는 뜻인데, 인터넷 상에서 데이터를 메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다. 이는 TCP의 특징을 보면 더욱 이해하기 쉽다. TCP의 특징은..
Spring vs Spring boot 등장 배경 기존 Spring framework는 다양한 프레임워크와 기술을 지원함과 동시에 개발자가 처리해야 하는 설정도 많아지고 복잡해졌다. 따라서 Spring을 처음 접하는 개발자 입장에서는 이러한 복잡한 설정에 부담을 느낄 수 밖에 없어 개발자가 보다 더 개발에 집중할 수 있도록 Spring boot가 새롭게 나왔다. 장점 1) 라이브러리 관리 자동화 - Maven의 기능과 ‘starter’ 컴포넌트들을 이용해 라이브러리 의존성을 간단히 처리 2) 설정 자동화 - 프로젝트에 추가된 라이브러리를 기반으로, 실행에 필요한 환경을 자동 설정 3) 라이브러리 버전 자동 관리 - Spring 라이브러리 뿐만 아니라 Third-party 라이브러리까지 호환되는 버전으로 자동 다운로드 4) 테스트 환경 - JU..
Maven & Gradle 빌드란? 서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실서버에 반영해야 한다. 서버에 반영을 하는 것을 "배포"라고 하고 배포(Deploy) 하기 위한 과정을 "빌드"라고 한다. 빌드 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말한다. 예를 들어 Java프로젝트를 진행한다면 개발자가 작성한 A.java와 여러가지 정적 파일등에 해당하는 resource가 존재한다. 빌드를 한다면 소스코드를 컴파일해서 .class로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF 들을 하나로 압축하는 과정을 의..
BeanFactory & ApplicationContext 스프링 컨테이너? 스프링 컨테이너란 스프링에서 자바 객체들을 관리하는 공간을 말한다. 자바 객체를 스프링에서는 Bean이라고 하는데, 스프링 컨테이너는 이 Bean의 생성부터 소멸까지를 관리해주는 곳이라고 할 수 있다. 이때 스프링 컨테이너는 ApplicationContext, BeanFactory의 두가지의 종류가 있다. 흔히 ApplicationContext로 알려져 있는데, 이 인터페이스는 BeanFactory를 상속받고 있다. BeanFactory 스프링 컨테이너의 최상위 인터페이스다 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext Applicatio..
Spring Bean life cycle 빈 생명주기 스프링 빈은 다음과 같은 생명주기를 갖는다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 컨테이너 종료 여기서는 콜백에 대해서 알아보도록 하자. 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 이후에 호출 소멸 전 콜백: 빈이 소멸되기 직전에 호출 콜백이란? 1. 다른 함수의 인자로써 이용되는 함수 2. 어떤 이벤트에 의해 호출되어지는 함수 예를들어 케이블이 연결될 때 "케이블이 연결되었습니다"라는 메시지가 출력되는 프로그램이 있다고 하자. function onCableConnected(){ print("케이블이 연결되었습니다"); }; //케이블이 연결될 때 마다 전달된 onCableConnected가..