개발자 필수 지식 - CS 지식의 정석

chaean·2025년 11월 13일

CS

목록 보기
5/5

오늘부터 CS공부를 다시 시작한다.
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
해당 인프런 강의를 기반으로 정리할 것이고, 알고있는 내용은 과감히 제외하고 조금이라도 애매한 개념만 정리한다.

1장 개발자 필수 지식

JSON

  • JavaScript 객체 문법으로 구조화된 데이터교환 형식.
  • 여러 언어에서 데이터 교환형식으로 사용
    • 언어/플랫폼에서 독립적으로 쓰임 → Java, Python에서 업데이트가 있어도 그대로 사용한다는 뜻
{
	"name": "홍길동",
	"age": 26
}

위와 같은 형태로, key : value로 사용

중복 key의 경우 가장 마지막에 선언된 중복 key의 value가 전달된다.

"길동이의 메모장"

[1,2,3,4]

→ 이것도 JSON으로 사용가능. 하지만 일반적으로 사용되지않음.

XML

  • XML(Extensible Markup Language) 마크업 형태를 쓰는 데이터교환 형식
  • 마크업(Markup)은 태그 등을 이용하여 문서나 데이터의 구조를 나타내는 방법 (속성부여도 가능)
  • 프롤로그(버전, 인코딩) / 루트요소(단 하나만) / 하위요소 로 구성됨
<?xml version="1.0" encoding="UTF-8"?> // 프롤로그
<OSTList like="1"> // 루트 요소
	<OST> // 하위 요소
		<name>마녀 배달부 키키</name>
		<song>따스함에 둘러쌓인다면</song>
	</OST>
	<OST like="2">
		<name>하울의 움직이는 성</name>
		<song>세계의 약속</song>>
	</OST>
</OSTList>

⭐️ HTML과 XML의 차이는?

  • HTML의 용도는 데이터를 표시하는 용도, XML은 데이터를 전달하는 용도
  • HTML은 미리 정의된 태그가 있지만, XML은 커스텀하게 만들어서 사용가능
  • HTML은 대소문자 구분X ↔ XML은 구분O

⭐️ JSON과 XML의 차이는?

  • XML은 닫힌 태그가 계속 들어가기 때문에 JSON에 비해 무겁다
  • XML은 JavaScript Object로 변환하기 위하는 과정이 더 복잡하다.
    • const parser = require(”xm2json”); 이라는 외부 모듈을 불러와서 파싱해야함.

XML의 활용

  • sitemap.xml로 쓰임
    • 구글 검색 센터에서 노출이 잘 되기위해 사용됨.
  • 여러 언어에서 독립적으로 쓰임

API

둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이자 중계 계층을 의미.

  • 어떠한 데이터를 주고 받을 건지 등에 대한 방법 → HTTP, HTTPS 등, GET, POST 방식 등

클라우드

가상머신

컴퓨터의 하드웨어를 소프트웨어적으로 구현한 것을 의미

전통적인 배포방식

물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식

계정을 나눠 여러 명의 사용자가 이용할 수 있도록 할 수 있지만 어떤 프로그램을 설치했을 때 다른 앱에 영향

가상화 배포방식

가상머신을 기반으로 배포하는 것을 의미

한대의 컴퓨터를 가지고 여러 개의 OS를 구동할 수 있게 되며 CPU, RAM을 물리적으로 갈아끼는 것이 아니라 설정만으로 이를 수행할 수 있게 되었음

Hypervisor는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 중간 계층

오프프레미스(off-premise)

다른 공급자가 호스팅하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어

이를 이용하면 자체 인프라나 하드웨어 설치 없이도 애플리케이션과 리소스에 쉽고 싸게 이용이 가능

온프레미스(on-premise)

기업이나 개인이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터(IDC)를 의미

  • 네트워크 선까는 것부터 시작해서 서버, DB 설치 등을 하는 것

ex) 네이버 데이터센터

Iaas (Infrastructure-as-a-Service)

인프라형 클라우드서비스.

클라우드가 단지 인프라를 제공하는 것.

node.js, MongoDB 등을 개발자가 직접 설치해야하는 대신 특정 서비스에 종속되지 않음.

→ 그냥 빈 방

ex) AWS EC2

Paas (Platform-as-a-Service)

플랫폼형 클라우드 서비스

클라우드가 플랫폼을 제공.

node.js, MongoDB 등이 설치되어있으며 그저 클릭을 통해 해당 서비스를 이용.

모니터링, CI/CD 제공

→ 빌트인 아파트

ex) heroku

Saas (Software-as-a-Service)

서비스형 클라우드 서비스

완전한 서비스를 클라우드 서비스로부터 제공받아 사용

클라우드를 통해 다른 컴퓨터에서도 쉽게 작업 + 다른 사람과 실시간 공유작업이 가능

ex) 구글 Docs

Iaas vs Paas

IaasPaaS
유연성높음낮음
이식성높음낮음
운영비효율낮음높음

컨테이너

애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드, 모든 종속성을 패키징하는 소프트웨어의 표준 단위

컨테이너는 OS를 공유하기 때문에 빠르고, 경량화되어있으며 격리성도 훌륭하다.

그러나 OS 자체에 문제가 생기면 다른 앱에도 영향을 미칠 수 있음.

→ 가상머신의 진화버전

Docker

컨테이너에 필요한 기능을 제공하는 플랫폼

  1. 도커파일 : 패키지, 환경변수 설정 등을 기록한 파일
  2. 도커이미지 : 컨테이너 실행에 필요한 파일과 설정값, 데이터 등을 포함된 상태값이며
    불변. 하나의 이미지에서 여러개의 컨테이너를 생성할 수 있으며 컨테이너의 상태와는
    무관하게 이미지는 그대로 존재합니다.
    → 도커파일 스냅샷
  3. 도커컨테이너 : 컨테이너가 실행시키면 도커이미지에 설정된 프로그램, 데이터 등이 실제 컴퓨팅자원과 연결

CI / CD

코드구축부터 배포까지 일련의 과정들을 CI/CD 파이프라인이라고 부름

빌드 → 테스트 → 머지 → 배포

ex) github actions, jenkins 등

클래스 & 객체 & 인스턴스

클래스 : 객체를 만들어내기 위한 틀. 객체의 속성과 메서드의 집합

객체 : 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라고 함

인스턴스 : 객체가 메모리에 할당이 된 상태. 런타임에 구동되는 객체. 객체 == 인스턴스

Static

클래스의 인스턴스가 아닌 클래스에 속하는 고정 멤버.

static 변수와 static 메서드를 만들 수 있으며 정적필드, 정적 메소드라고도 함. (정적 멤버)

클래스로더가 클래스를 로딩해서 적재할 때 클래스별로 관리됨.

장점 : 클래스 당 메서드나 변수를 선언해서 중복을 없앨 수 있다.

단점 : 선언을 하는 순간 메모리에 올라가기 때문에, 해당 객체를 사용하지않아도 메모리에 올라가있는 상태이다.

  • 메모리 낭비
    • static X 변수는 heap에 올라가 GC에 의해 메모리 관리를 하게되는데
    • static O 변수는 프로그램 종료까지 메모리 회수가 안된다. (전역)

오버로딩 & 오버라이딩

오버로딩 : 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로 여러개의 함수를 정의할 수 있는 것

  • 프로그램의 유연성을 높이고, 결과적으로 코드를 깔끔하게 하는 효과가 있음.
class Calculator{
	void multiply(int a, int b){
		System.out.println("결과는 : "+(a * b) + "입니다.");
	}
	void multiply(int a, int b,int c){
		System.out.println("결과는 : "+(a * b * c) + "입니다.");
	}
	void multiply(double a, double b){
		System.out.println("결과는 : "+(a * b) + "입니다.");
	}
}

class Person{
	void pay(String a, int b){
		System.out.println(a + "가 "+ b + "원만큼 계산합니다.
	}
	void pay(int a, String b){
		System.out.println(b + "가 "+ a + "원만큼 계산합니다.
	}
}

오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하는 것

  • 상속 관계 클래스에서 사용되며 static, final로 선언한 메서드는 오버라이딩 불가
class Animal {
	void eat(){
			System.out.println("먹습니다.");
		}
	}
class Person extends Animal {
	@Override
	void eat() {
		System.out.println("사람처럼 먹습니다.");
	}
}

추상화

복잡한 데이터, 구조, 시스템 등으로부터 핵심만을 가려내 덜 자세하게 만드는 것.

세부사항, 절차 등 (자세한 구현내용)을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법.

  • 데이터, 프로세스 추상화 크게 2가지로 나누어진다.

데이터 추상화

공통점은 모으고, 차이점은 버린다.

abstract class Animal {
	public abstract void animalSound();
	public void sleep() {
		System.out.println("zzz");
	}
}

class Pig extends Animal {
	public void animalSound() {
		System.out.println("꿀꿀꿀~");
	}
}
class Dog extends Animal {
	public void animalSound() {
		System.out.println("왈왈~");
	}
}

프로세스 추상화

어떠한 내부 프로세스를 숨기는 것을 의미.

ex) DB가 어떻게 데이터를 저장하는지 모르지만 insert, upsert 등의 쿼리로 데이터를 저장할 수 있음

profile
백엔드 개발자

0개의 댓글