개발 배경지식정리feat.IT 개발자와 일할 때 필요한 모든 개발지식

Jiyul Lee·2021년 4월 21일
1
post-thumbnail

글 목적

Velog의 유명한 IT 개발자와 일할 때 필요한 모든 개발지식 글을 통해 필요한 지식들을 정리하기 위한 저만의 노트입니다.


운영체제


운영체제(os)는 프로그램들을 실행하는 메인 프로그램이다.
프로그램을 실행시키기 위해서는 하드웨어 자원이 필요하다. 그래서 운영체제는 하드웨어 자원들을 이용해 응용 프로그램을 관리한다. 그 이외에 네트워크 통신, 입출력 장치 관리 등 컴퓨터를 사용 할 때 필요한 모든 것을 관리한다.
커널 : 프로그램을 중재하는 역활. 하드웨어 자원을 이용해 프로그램을 관리함. 보통 운영체제는 커널을 기본으로 그 위에 다른 것들을 만든다.

하드웨어

CPU 컴퓨터 시스템 통제와 프로그램의 모든 계산을 수행함.

메모리

전기적인 신호를 내부에서 임시 저장. CPU의 계산 결과를 임시 저장하고 이것을 CPU가 다시 사용한다.
프로그램이 실행 된다면 프로세스 형태로 메모리에 저장되고 종료되면 사라짐.

디스크

영구적으로 정보를 저장하는 장치

프로그램에 대해


개발자들이 만든 코드가 프로그램이 되는데 코드를 컴파일한 것을 프로그램이라고 한다.
프로그램이 실행되면 이것을 프로세스라고 한다.

프로세스

실행되고 있는 프로그램을 뜻함.
실제로 프로그램은 프로세스 자체를 코드(명령어)로 구성되어 있음.
프로세스는 실행 정보, 코드, 실행되면서 쓰이는 데이터로 구성되어 있음.

인터럽트: 예외상황에 CPU자원을 가져와 먼저 처리하는 것.

CPU는 0과1만 읽을 수 있음. 그래서 우리가 만든 코드는 컴파일을 거쳐 컴퓨터가 실행가능한 코드로 변환됨.
이를 위해서는 컴파일러가 필요함.
자바의 경우 컴파일 결과물이 CPU에 의해 해석되는 것이 아니라, 소프트웨어에 의해 해석된다.

빌드:소스코드를 실행할 수 있는 소프트웨어 산출물로 만드는 행위. 컴파일로 빌드라는 과정 중 하나이다.
IDE:코딩과 디버깅, 컴파일 등 전반적인 작업을 제공해주는 프로그램 Intellij등(Intergrated Developement Environment)

네트워크


네트워크는 컴퓨터와 컴퓨터간의 연결을 의미한다.
네트워크가 연결 되기 위해서는 크게 프로토콜, IP주소, PORT 이 세가지가 필요로한다.
어떤 방식으로(어떤 프로톨콜로) 어디 컴퓨터(IP주소)에 어떤 프로그램을(PORT)을 연결 할 것인지가 중요

TMI

네트워크 정보를 송수신하기 위해 수단. 랜선, 와이파이, 랜선의 경우 광케이블로 0,1이라는 컴퓨터용 전기 신호를 빛이라는 물리적 신호로 변환한다. 와이파이는 전자기파를 이용함.
랜카드를 통해 컴퓨터는 네트워크를 사용가능

클라이언트, 서버

네트워크에서 정보는 요구해서 받는 쪽이 클라이언트
정보 제공을 하는 것이 서버
서버가 정보를 제공해준다는 건 보통 컴퓨터 안에 정보를 제공해주는 프로그램이 실행되고 있다는 것을 의미함.
서버 컴퓨터에는 목적에 맞는 정보는 제공해주는 프로그램등이 항상 실행 되고 있음.
웹을 제공해주는 웹서버, 클라이언트에게 데이터를 제공해주는 API서버, 이미지 서버,비디오 서버 등

프로토콜

네트워크 통신이 기본적으로 전세계에적으로 가능한 이유는 규격이 존재하기 때문 이 규격을 통신 프로토콜이라고 한다.
프로토콜 종류 HTTP, SSH(원격접속 시 사용), SMTP(이메일)
HTTP의 보안성을 강화한 것이 HTTPS이다. 대부분 웹사이트는 HTTPS프로토콜을 사용중
즉 네트워크 통신을 위해서는 IP와 프로토콜 방식을 정해 통신을 함.

HTTP(Hypertext Transfer Protocol) 상호 간의 정의한 규칙을 의미하여 특정 기기 간에 데이터를 주고 받기 위해 정의 되었다. 상태가 없는 stateless프로토콜이다. 상태가 없는 것은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리된다는 것이다. 이전 데이터와 다음 데이터 요청이 서로 관련이 없다. 이 덕에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄 수 있는 성능 상의 이점이 생긴다.
HTTP프로토콜은 일반적으로 TCP/IP 통신 위에서 작동하며 기본 포트는 80번이다.

HTTP요청 메서드

요청하는 데이터에 특정 동작을 수행하고 싶을 때 Http Request Methods를 이용

  • GET: 존재하는 자원에 대한 요청
  • POST: 새로운 자원에 대한 요청
  • PUT: 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원에 대한 삭제
    기타 요청 메서드
  • HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음.
  • OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용
    (CORS란 교차 출처 리소스 공유Cross-Origin Resource Sharing 추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 어플리케이션이 다른 출저의 선택한 자원에 접근할 수 있는 권환을 부여하도록 브라우저에 알려주는 체제입니다. 웹 어플리케이션은 리소스가 자신의 출저(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP요청을 실행함.
    교차 출처 리소스 공유
    추가 보충자료
    XMLHttpRequest

HTTP상태코드

URL과 요청메서드가 클라이언트에서 설정해야하는 정보라면 HTTP 상태 코드(HTTP Status Code)는 서버에서 설정해주는 응답(Reponse)정보이다. 이 상태 코드로 에러처리를 할 수 있다.
200 성공코드 404 실패코드 상태 코드로 추가적은 로직 구현이 가능 (200 ~ 500까지 다양함)
2xx - 성공
200번대 상태 코드는 대부분 성공을 의미함

  • 200 : GET 요청에 대한 성공
  • 204 : No Content 성공했으나 응답 본문에 데이터가 없음
  • 205 : Reset Content 성공했으나 클라이언트 화면을 새로 고침하도록 권고
  • 206 : partial Content 성공했으나 일부 범위의 데이터만 반환

3xx - 리다이렉션
300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우이다.

  • 301 : Moved Permanently 요청한 자원이 새 URL에 존재
  • 303 : See other 요청한 자원이 임시 주소에 존재
  • 304 : Not Modified 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고 ETag와 같은 정보를 활용하여 변경 여부를 확인

4xx - 클라이언트 에러
400번대 상태 코드는 대부분 클라이언트의 코드가 잘 못된 경우. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못 된 경우 발생한다. 가장 익숙한 상태코드는 404코드이다 요청한 자원이 서버에 없다는 의미.

  • 400 : Bad Request 잘못된 요청
  • 401 : Unauthorized 권환 없이 요청 Authorization헤더가 잘 못된 경우
  • 403 : Forbidden 서버에서 해당 자원에 대해 접근 금지
  • 405 : Method Not Allowed 허용되지 않는 요청 메서드
  • 409 : Conflict 최신 자원이 아닌데 업데이트하는 경우 예) 파일 업로드 시 버전 충돌

5xx - 서버 에러
500번대 상태 코드는 서버쪽에서 오류가 난 경우

OSI 7계층

추후 추가
OSI7계층
컴퓨터의 OS가 네트워크 신호를 특정 프로그램에게 전달해주려면 크게 7개의 단계로 나뉨.
각 단계마다 역활들이 있음으로 (나중에 추가)

IP

203.234.120.5
IP(Internet Protocol Address)는 네트워크 통신을 위한 주소. 컴퓨터의 고유 주소가 아님 네트워크(와이파이 랜선)을 기준으로 IP주소를 부여 받음
보통 IT회사에서는 네트워크 공유기로 미리 IP주소들을 할당 받은 후 회사 컴퓨터에게 IP를 할당 해줌 이렇게 해서 회사 네트워크 보안을 유지 관리함.
Ipv4 255의 4승
IP주소에 대해 더 쉽게 알아보기

PORT

203.234.120.5:3000(기본포트: 80)
포트는 컴퓨터 내에 프로세스에 도달하기 위한 주소. IP주소가 컴퓨터끼리 연결을 위한 네트워크 주소라면, 포트는 컴퓨터 내에 기동 중인 프로세서가 가지고 있는 주소이다.
[팁] 보통 네트워크 주소에 IP주소만 있으면 프로토콜의 기본 포트가 적용됨.
http 기본 보트 80 / https 기본 포트 443

!IP&포트

브라우저에서 웹사이트 정보를 수신하기위해서 IP&포트번호를 입력해야함.

네트워크 통신 보안을 위해 컴퓨터 네트워크 연결을 제한하는 방화벽을 설정함 이때 방화벽이란 IP주소, 포트번호 등 네트워크 연결에 쓰이는 정보들을 바탕으로 연결을 제한 하는 것을 의미함.

도메인

도메인 네임(Domain Name) 사람이 쉽게 인식할 수 있는 네트워크 영문주소.
보통 브라우저에서 입력하는 영문주소는 네임 서버에 등록된 주소이기 때문에 도메인 네임을 이용한다면, 네임 서버를 거쳐서 IP를 반환하는 작업이 필요함.

웹 접속 뿐만 아니라 클라이언트 서버 등과 통신할 때도 도메인 네임URL를 이용해 정보를 주고 받음.
보통 서버의 도메인 네임을 붙이기 위해서는 호스팅 서비스에서 도메인 네임을 구매해야함. 그리고 도메인 네임 서버에 이를 적용 해야함.

라이브러리 & 프레임워크


개발자 : "관리용 페이지를 새로 만들기 전에 프레임워크를 결정해야하고, 그 안에 영상 재생 라이브러리 등을 정해야 할것

라이브러리

라이브러리는 프로그램의 특정 기능을 수행하도록 미리 짜여진 코드 뭉치이다.
다른 사람이 미리 만들어 놓은 기능 혹은 코드 를 라이브러리라고함. 라이브러리를 이용해서 개발 난이도가 높은 것도 라이브러리를 사용해서 쉽게 개발 능함.
IT 서비스를 개발하려면 실제로 많은 라이브러리를 사용해야함. 그래야 더 빠르고 쉽게 개발이 가능함.

프레임워크

프레임워크는 프레임(뼈대)를 제공 받아 그 틀대로 개발 할 수 있도록 도와주는것.
라이브러리와 마찬가지로 다른 개발자가 만들어 놓은 것을 사용함.

보통 개발을 할 때는 건축과 비슷하게 큰 틀(아키텍쳐)를 고려한 후 내부를 채워넣는다. 그 때 프레임워크는 틀틀 제공해줌.

라이브러리와 프레임워크의 경계가 살짝 모호하기 때문에 그럴 때는 라이브러리라고 폭 넓게 말해도됨.

라이브러리? 프레임워크? 차이점 아직도 모름? 5분 순삭.

API

API는 프로그램과 프로그램을 연결시켜주는 매개체 실제로 프로그램끼리 통신하는 경우가 굉장히 많음.
그렇기 때문에 프로그램을 만드는 개발자가 해당 프로그램이 잘 통신할 수 있도록 규칙들을 잘 설계하는 게 중요하다.

접근할 프로그램이 복잡할 때, 보안상 외부에 제한된 기능을 간접 제공하고 싶을 때 사용하는 것이.
API(Application Programming Interface) : 규칙들의 집합
API가 대신하는 프로그램 기능을 미리 정리해서 규칙을 만들어 놓으면, 클라이언트는 접근할 프로그램을 몰라도 API를 통해 쉽게 통신 가능
API개발은 중계자이기 때문에 해당 프로그램에 대해 잘 이해해야하고, 잘 규격화 해야함.
API서버란 API를 제공하는 서버. 대표적으로 데이터베이스를 대신해서 규칙들이 정의되어 있으며 클라이언트는 DB가 아닌 API서버와 통신한다.
API 사용 사례

  • 날씨 데이터 같은 공공데이트를 손쉽게 접근 할 수 있는 기상청 API
  • 회사 DB보안을 위해 API서버를 통해 통신한다.
API 문서

API 문서를 보면 어디(URL)에 무엇을(Parameter)을 보내면 무슨 응답(Response)을 줄지 약속된 것을 확인가능


GIT & GITHUB


git은 소스 코드의 버전을 관리하는 툴

하나의 절대적은 프로젝트를 기준으로 개발자들이 프로젝트 코드를 다운 받아 작업을 함. 그리고 작업이 끝나면 다시 프로젝트에 본인의 소스코드를 업로드함.
commit을 git에 푸시 하면 최종적으로 기존의 커밋들에 쌓이면서 자연스럽게 버전이 형성됨. 문제가 생기면 이전 커밋에서 작업이 가능. 다른 개발자는 Fetch로 최신 커밋을 기준으로 본인의 코드를 작성 가능
같은 코드 라인에서 동시에 작업을 하면 충돌Conflict가 일어남.

github

최근에는 소스코드를 올리면 자동으로 스크립트(특정 소스코드)를 실행시켜주는 github actions 기능이 추가됨.

profile
일본에서 성장 중인 자바 엔지니어

0개의 댓글