프로그래밍 공통

geunyeongii·2022년 3월 8일
0
post-thumbnail

💻기초


OOP-객체지향 프로그래밍

OOP란 실제 사물을 프로그래밍으로 옮겨와 모델링하는 것으로 그 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아 프로그래밍하는 기법이다. 이로써 재사용성과 변형가능성을 높일 수 있다.

사물(Object) = 속성(Variable) + 행위(Method) 로 구성된다.

[ 4가지 특징 ] 추상화,캡슐화,상속,다형성

OOP의 5가지 설계 원칙?

단일 책임 원칙 :

  • 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 함.

개방 폐쇠 원칙 :

  • 클래스는 확장에는 열려있고, 변경에는 닫혀 있어야 한다.

리스코프 치환 원칙 :

  • 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야한다.

인터페이스 분리 원칙 :

  • 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야한다.

의존 역전 법칙 :

  • 클라이언트는 추상화(인터페이스)에 의존해야하며, 구체화된 클래스에 의존하면 안된다.

절차지향 VS 객체지향

  • 절차지향 프로그래밍
    • 위에서 밑으로 순차적인 처리를 하는 프로그래밍 기법이다.
    • 하지만 코드의 순서가 조금만 바뀌더라도 다른 결과를 보인다.
    • 실행속도가 빠르다.
    • 대표적으로 C언어가 있다.
  • 객체지향 프로그래밍
    • 실제 사물들을 객체로 모델링한 프로그래밍 기법이다
    • 캡슐화,상속,다형성과 같은 기법을 사용가능하다.
    • 대표적으로 Java가 있다.

Domain이란 ?

  • 사전적의미는 '영역', '집합'
  • DDD에서 말하는 Domain은 비즈니스 Domain이다.
  • 비즈니스 Domain은 유사한 업무의 집합이다.(MPRS-마케팅,구매,연구,영업)
  • 어플리케이션은 비즈니스 Domain별로 나누어 설계 및 개발 될 수 있다.

RESTful API란?

이것은 HTTP통신에서 어떤 차원에 대한 CRUD요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식이다.

  • Resource(자원) - URL,URI
  • Method(요청방식) - GET or POST 등..
  • Representation of Resource(자원의 형태) - Json or XML 등..

함수형 프로그래밍이란?

함수형 프로그래밍은 복잡한 스파게티 코드를 유지보수 하기 쉽게 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.

메모리 구조

  • 코드 영역
    • 우리가 작성한 코드가 저장되는 영역
  • 데이터 영역
    • 프로그램 전역변수나 정적변수가 저장되는 영역
      (프로그램 시작시 할당/종료시 소멸)
  • 힙 영역
    • 프로그래머가 직접 접근하여 할당할 수 있는 영역. 이것을 동적 할당이라고 하며, Java에서는 가비지 컬렉터가 자동으로 해제해줌.또한 스택 영역과 달라 낮은 주소에서 높은 주소로 메모리가 할당된다.
  • 스택 영역
    • 함수 호출시 할당 되며 지역변수와 매개변수가 저장됨, 스택영역은 함수의 호출이 완료되면 소멸하며 높은 주소에서 낮은 주소로 메모리가 할당된다.

Parameter와 Argument의 차이?

  • Parameter : 함수가 선언 할 때 사용된 변수
  • Argument : 함수가 호출 됐을 때 함수의 파라미터로 전달된 실제 값

Call By Value와 Call By Reference차이

  • Call By Value
    • 값을 그대로 인자값으로 넘겨 받는다.
  • call By Reference
    • 값의 주소를 인자값으로 넘겨 받아 원래 값에 직접적인 영향을 준다.

프레임워크와 라이브러리의 차이?

  • 라이브러리
    • 말 그대로 도서관, 필요한 정보들을 가져다 쓰는 것이다.
  • 프레임워크
    • 개발을 좀 체계적이고 안정적이게 할 수 있는 환경을 제공해준다.

병렬 처리 프레임워크의 종류와 특징

  • Hadoop

    ① HDFS(Hadoop Distributed File System)를 활용해 데이터를 주고받는다.
    ② 데이터가 여러 노드에 분산되어 저장되기 때문에 손실의 우려가 없다
    ③ File I/O를 기반으로 작동하기 때문에 처리 속도가 느리다.

  • Spark

    ① In-Memory 상에서 데이터를 주고받는 연산을 수행한다.
    ② 메모리를 사용하기 때문에 Hadoop보다 속도가 100배 정도 빠르다.
    ③ 장애가 발생한 경우 프로그램을 처음부터 다시 시작해야한다.

동기식/ 비동기식?

  • 동기식 방식 (Synchronous)
    • 오직 한가지 일만 할 수 있다.
    • 순서에 맞게 진행되기 때문에 제어하기 쉽다.
  • 비동기식 방식 (Asynchronous)
    • 지금 동작의 처리 여부와 상관없이 다음 요청이 들어올 수 있다.
    • 여러가지 일을 할 수 있기때문에 자원을 효율적으로 사용할 수 있다.

SQL Injection

공격자가 SQL의 취약점을 이용해 SQL 쿼리문을 실행하도록 하는 웹해킹 공격기법이다.



💻고급


메세지 큐(Message Queue)란?

Queue 자료구조를 이요한 데이터관리 시스템으로, 비동기 통신 프로토콜을 제공하여 메세지를 빠르게 주고 받을 수 있게 해준다.
메세지 큐에는 Kafka, Rabbit MQ, AMPQ등이 있다.

Docker(도커)와 Kubernates(쿠버네티스) 차이?

  • Docker는 프로세스를 격리시킨 컨테이너 기반의 가상화 기술이다.
  • Kubernates는 Docker를 통해 구동되는 컨테이너를 관리하기 위한 기술이다.

TDD(Test-Driven Development)

TDD(Test-Driven Development)는 매우 짧은 개발 사이클의 반복에 의존하는 개발 프로세스로, 개발자는 테스트 케이스에 맞는 코드를 작성하여 테스트를 통과한 후에 상황에 맞게 리팩토링하는 테스트 주도 개발 방식을 의미한다.

개발자는 테스트를 작성하기 위해 해당 기능의 요구사항을 확실히 이해해야 하기 때문에 개발 전에 요구사항에 집중할 수 있도록 도와주지만 테스트를 위한 진입 장벽과 작성해야 하는 코드의 증가는 단점으로 뽑힌다.

DDD(Domain-Driven Design)

DDD는 실세계의 사건이 발생하는 집합인 Domain을 중심으로 설계하는 방법이다. 옷 쇼핑몰을 예로 들어 보자.

손님들이 주문하는 도메인, 점주들이 관리하는 도메인등이 있다.
이러한 도메인들이 서로 상호작용하며 설계하는 것이 도메인 주도 설계이다.
도메인 주도 설계에서 각 도메인들은 분리 되어있다. 이러한 관점에서 MSA(MicroService Architecture)를 적용하면 용이하다. DDD에선 같은 객체들이 존재할 수 있는데, 예를들어 옷 구매자의 입장에서는 (name,price)와 같은 객체 정보를 담지만, 판매자의 입장에서는(madeTie,size,madeCountry)등이 있을 수 있다. 즉, 문맥에 따라 객체의 역할이 바뀔 수 있는 것이 DDD이다.

MSA란?

MSA(Microservice Architecture)는 모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Architecture(모놀리식 아키텍쳐)의 한계점을 극복하고자 등장하게 되었다. MSA는 1개의 시스템을 독립접으로 배포가능한 각각의 서비스로 분할한다. 각각의 서비스는 API를 통해 데이터를 주고받으며 1개의 큰 서비스를 구성한다.

  • 장점
    • 일부 서비스에 장애가 발생하여도 전체 서비스에 장애가 발생하지 않는다.
    • 각각의 서비스들은 서로 다른 언어와 프레임워크로 구성될 수 있다.
    • 서비스의 확장이 용이하다.
  • 단점
    • 서비스가 분리되어 있어, 테스팅이나 트랜잭션 처리 등이 어렵다.
    • 서비스 간에 API로 통신하기 때문에 그에 대한 비용이 발생한다.
    • 서비스 간의 호출이 연속적이기 때문에 디버깅 및 에러 트레이싱이 어렵다.

Reference

https://mangkyu.tistory.com/88
https://cocoon1787.tistory.com/668
https://trello.com/b/ruN1oChY/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A0%95%EB%A6%AC

profile
✏️세상의 모든 기록 ✏️

0개의 댓글