OOP(Object-Oriented Programming)
- 단일책임원칙
- 개방폐쇠원칙
- 리스코프 치환원칙
- 인터페이스 분리원칙
-의존역전법칙
특징
- 캡슐화
- 상속
- 다형성
-오버로드: 메서드 이름은 같으나 매개변수가 다름
- 오버라이딩: 부모클래스의 메서드 재정의
- 추상화
REST(Representation State Transfer) API
- Resource(자원, URI)
- Method(요청방식, GET, POST 등)
- Represetation of Resource(자원의 형태, JSON, XML 등)
함수형 프로그래밍
- Immutable data
- First class citizen
메모리 구조
- 코드 영역: 실행할 프로그램 코드
- 데이터 영역: 전역 변수, 정적 변수
- 힙 영역: 사용자의 동적 할당 - 런타임에 크기가 결정됨
- 스택 영역: 지역 변수, 매개 변수 - 컴파일 시간에 크기가 결정됨
Parameter: 함수를 선언할 때 사용된 변수
Argument: 함수가 호출되었을 때 파라미터로 전달된 실제 값
Call By Value: 함수 호출 시 인자 값을 복사하여 사용
Call By Reference: 함수 호출 시 인자의 주소 값을 사용
프레임워크: 전체적인 흐름을 자체적으로 제어
라이브러리: 사용자가 흐름에 대한 제어, 필요한 상황에 가져다 씀
동기 방식
- 장점: 순서에 맞춰 진행되어 제어가 쉽다.
- 단점: 효율이 떨어짐
비동기 방식
- 장점: 효율이 좋음
- 단점: 작업이 완료된 결과를 제어하기 어렵다.
메시지 큐: 비동기 프로토콜 제공, 생산자와 소비자로 구분됨
Docker
- 장점: 쉽고 빠른 환경 구축, 하드웨어 자원 절감, Docker Hub 지원
- 단점: 개발초기의 오버헤드, 리눅스 친화적
TDD(Test-Driven Development)
- 매우 짧은 개발 싸이클의 반복
DDD(Domain-Driven Development)
- 도메인(실제 세계에서 사건이 발생하는 집합)들이 서로 상호작용하며 설계
MSA(Microservice Architecture) (<=> Monolithic Architecture)
장점: 일부장애가 전체 서비스의 장애를 야기하지 않는다, 서로 다른 언어 및 프레임워크 사용 가능, 서비스의 확장 용이
단점: 테스팅이나 트랜잭션 처리 어려움, 서비스 간의 통신 비용 증가, 디버깅 어려움