본문 바로가기

기타/개발일지

IT 관련 용어 정리노트

반응형


1. 네트워크 관련 용어

1-1. 네트워크 통신의 종류

1) TCP/UDP를 사용하는 소켓 방식의 연결성 통신
2) HTTP, HTTPS, SMTP 등의 프로토콜을 이용한 비연결성 통신

1-2. 연결성 통신

보통 저수준(Low-Level) 통신을 통하여 구현
앱과 서버가 연결되면 한 쪽에서 명시적으로 끊기 전까지는 연결을 유지하는 방식

특징
- 연결이 지속되고 있기 때문에 빠르게 메시지를 주고받을 수 있는 장점
- 네트워크 대역을 많이 소모하고, 서버 부하도 크다는 단점(비용이 많이 든다.)
- 메신저나 화상 통화, RPG 게임 등에서만 제한적으로 사용

TCP(전송 제어 프로토콜)연결: 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 느린 연결 방식
UDP(사용자 데이터그램 프로토콜)연결: 데이터의 완전한 전송을 보장하지 않지만 상대적으로 더 빠른 연결 방식

1-3. 비연결 지향 통신

HTTP 등의 프로토콜을 사용하여 메시지를 주고 받는 방식
대표적으로 HTTP/HTTPS 프로토콜, 웹 서비스에 주로 사용

특징
- 매번 요청할 때 연결해야 하므로 소켓 방식에 비해 상대적으로 데이터를 주고 받는 속도에 제약이 있다.
- 필요할 때만 요청을 처리한 후 요청을 종료하기 때문에 네트워크 대역 소모를 줄일 수 있고, 서버 부하도 낮출 수 있다.
- 모바일 서비스에 많이 사용

1-4. Web Service

웹 서비스는 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템
일반 HTML을 제공하는 웹 페이지(Web Page)와 달리 데이터만을 주고 받을 수 있도록 설계된 모듈

아키텍처 구조에 따라 SOAP, RESTful 방식으로 나눌 수 있다.
데이터 타입에 따라 XML, JSON 방식으로 나눌 수 있다.

1-5. SOAP 방식

SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등의 프로토콜을 통해 양족에서 XML 형태의 메시지를 주고받도록 구현된 프로토콜

원격 프로시저 호출(Remote Procedure Call : RPC)이라고 불리는 클라이언트-서버 구조의 메시지 패턴을 많이 사용
통신 구조는 Envelope/Header/Body의 세가지 영역으로 구분

장점
- SOAP를 사용한 HTTP는 기존 원격 기술들과 달리 프락시나 방화벽과 관련없이 쉽게 통신
- SOAP가 사용하는 표준 전송 프로토콜을 HTTP이지만 이외에도 사용할 수 있는 프로토콜이 다양
- 플랫폼 독립적인 통신이므로 시스템이 바뀌거나 이기종 플랫폼 간의 데이터 통신이 편리
- 프로그래밍 언어에 종속되지 않는다.
- 매우 간단하고 확장이 용이

단점
- SOAP는 XML 포맷을 사용하므로 CORBA 같은 미들웨어 기술과 비교해볼 때 상대적으로 느리다.

1-6. RESTful 방식

REST(Representational State Transfer)는 월드 와이드 웹(World Wide Web, www)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식

웹 형식을 빌어 데이터를 전송하되, SOAP나 쿠키 등 별도의 전송 프로토콜 없이 전송하기 위해 만들어진 간단한 형식의 인터페이스
REST의 데이터 구조는 매우 간단, 데이터를 요청하는 URI를 네트워크를 통해 서버에 전달하면 서버에서는 그에 맞는 응답 데이터가 전송

위와 같은 특징, 원리에 따라 구현된 시스템을 RESTful이라는 용어로 지칭

RESTful 시스템은 네트워크 서버를 통해서뿐만 아니라 일반 웹 서버를 통해서도 약간의 설정만으로 간단하게 구현할 수 있다는 장점

1-7. XML 방식

XML 방식이란 요청에 대한 응답 데이터를 XML 포맷으로 제공하는 것

XML은 서로 다른 시스템에서 인터넷을 통해 데이터를 쉽게 주고 받을 수 있도록 해 HTML의 한계를 극복할 목적으로 만들어졌다. 특히 임의의 자료 구조를 표현하는 데에 장점이 있다.

XML은 일반적으로 태그(Tag)라고 불리는 마크업과 내용으로 구성, 마크업 형식을 기본 규격으로 사용하므로 플랫폼에 의존적이지 않은 표준 데이터를 제공할 수 있다. 하지만 데이터의 의미를 전달하기 위해 마크업 태그를 사용하므로 주고받아야 할 전체 데이터의 용량이 지나치게 커진다는 단점이 있다.

1-8. JSON  방식

경량의 데이터 교환 형식. JavaScript Object Notation의 약자

JSON에서 사용되는 데이터 구조는 크게 두 가지 종류
1) JSON 객체: 집합 구조, 여러 속성을 정의하는 순서 없는 집합, {Key : Value} 

{
    "title" : "다크나이트",
    "description" : "영웅물에 철학에 음악까지 더해져 예술이 되다",
    "opendate": "2008-09-04",
    "rating": 8.95
}

2) JSON 배열: 리스트 구조, 비슷한 객체가 반복 나열되는 순서화된 리스트 [Value]

** JSON 배열 - 문자열
["a", "b", "c", "d", "e"]

** JSON 배열 - JSON 객체 포함
[
    {"title" : "다크나이트"},
    {"title" : "호우시절"},
    {"title" : "말할 수 없는 비밀"}
]

1-9. Parsing

XML 혹은 JSON 형태로 전달된 데이터는 전달 받은 형태 그대로 사용할 수 없다. 이 데이터를 형식에 맞게 분석하는 과정이 필요한데, 이 과정을 파싱(Parsing)이라고 한다.

1-10. Parser

전달받은 데이터 파싱을 처리하는 모듈을 파서(Parser)라고 한다.

1-11. 페이징(Paging) 처리

최초 데이터를 읽어올 때 데이터의 총 개수와 함께 당장 화면에 출력해야 할 데이터 정도만 전송해 주고, 만약 추가 데이터가 필요하다는면 앱에서 "<더 보기>" 버튼을 통해 다시 요청하는 방식으로 처리하는 것


2. 프로그래밍 기법 관련 용어

2-1. 디자인 패턴

객체 간의 관계가 중요한 객체지향 프로그래밍에서 설계에 관한 문제를 해결하기 위한 해법으로 객체들의 관계를 구조화한 사례가 일반화된 것이 디자인 패턴

2-2. 동기 방식(Synchronize)

주어진 명령을 차례대로 처리하되 하나의 업무가 완료될 때까지는 다음 업무로 넘어가지 않는 방식

일관된 업무 흐름 보장
동시다발적으로 업무가 발생하지 않기 때문에 이를 제어하기 위한 대응이 불필요해 업무 구성이 단순
대기 시간이 길어 비효율적

2-3. 비동기 방식(Asynchronize)

시간이 걸리는 업무는 진행해둔 채로 기다리는 동안 다른 업무를 처리하는 방식. 중간에 업무가 완료되면 그에 이어서 처리해야 할 다음 업무를 처리하고, 그사이에 다시 기다리는 시간이 생기면 다른 업무를 계속 처리

업무의 구성이 복잡
대기 시간을 줄여 효율적

프로그램에서 비동기 방식의 처리는 긴 시간이 걸릴 것으로 예상하는 기능을 새로운 실행 흐름을 만들어서 실행하는 방식으로 메인 실행 흐름이 아무 영향을 받지 않도록 하여 응답을 대기하는 상황이 발생하지 않게 처리

*스위프트에서는 비동기 구현 기능은 두 가지 1) 델리게이트 패턴을 이용하는 방식, 2) iOS에서 제공하는 범용 비동기 함수 이용하는 방식

1) 델리게이트 패턴: 네트워크 통신 자체에만 국한된 비동기 처리, NSURLConectionDelegate 객체를 이용. 델리게이트 객체에 이미지 내려받기에 대한 처리를 위임한 다음, 내려받기가 완료되면 델리게이트 객체가 특정 메소드를 호출하게 하여 이 메소드 내부에 처리할 작업을 정의하는 방식으로 구현

2) iOS에서 제공하는 범용 비동기 함수 이용 방식: 스위프트에서는 DispatchQueue.main.async()를 제공해 개발자가 내부적으로 프로세스나 스레드에 직접 접근하지 않고도 비동기 방식으로 처리를 할 수 있도록 지원

2-4. 메모이제이션(memoization) 기법

프로그램이 동일한 계산을 반복해야 할 때 이전에 계산한 값을 메모리에 저장함으로써 반복 수행을 제거하고 프로그램의 실행 속도를 빠르게 하는 기술

2-5. SPA(Single Page Application)

동기 방식으로 페이지가 한번 로딩되면 이후에는 AJAX 등을 사용해 부분적으로만 UI를 교체하면서 콘텐츠를 제공하는 방식

2-6. 원자성(atomically)

프로그래밍에서 원자성이란 더 이상 쪼갤 수 없는 명령 실행 단위를 이야기한다. 일단 실행되면 끝까지 진행되거나, 혹은 아예 처음부터 실행되지 않는 식으로 동작한다는 뜻이다. 원자성을 가지는 작업은 진행 중 멈추는 일은 있을 수 없다. 하지만 원자성을 가지는 작업들이 모인 프로세스는 다르다. 프로세스는 중간에 멈추거나 일부 실패하는 경우가 있을 수 있다.

하지만 때로는 프로세스가 원자성을 가져야 할 때가 있는데, 은행의 계좌이체 등과 같은 경우의 처리다. 계좌 이체 프로세스 같은 경우 중간에 멈추게 되면 문제가 되기 때문에 원자성을 가질 수 있도록 특별한 알고리즘을 적용한다. 이를 원자적 행동이라고 한다.

롤백(Rollback): 오류가 발생했을 때 아무 일도 진행되지 않았던 것처럼 처음으로 되돌려 놓는 것
커밋(Commit): 실행이 성공했을 때 그대로 쭉 진행하는 것

2-7. 트랜잭션(Transaction)

DBMS가 제공하는 트랜잭션은 연관된 여러 개의 CRUD 작업을 묶어 단일 작업처럼 수행할 수 있도록 해 주는 기능이다. 이를 논리적 작업 단위(LUW, Logical Units of Work)라고 부르기도 한다. 트랜잭션은 하나 이상의 CRUD 작업이 모여서 이루어진 논리적 완결성을 가지는 작업 단위.

2-7-1. ACID - 트랜잭션의 4대 원칙

다양한 DBMS에서 각자의 기술로 구현된 트랜잭션이 신뢰성있게 동작하기 위해서는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 4가지 공통 원칙을 준수해야 한다.

  1. 원자성  하나의 트랜잭션 내에 정의된 작업들은 모두 수행되든지, 아니면 아무것도 수행되지 않아야 한다는 가장 기본적인 원칙
  2. 일관성  성공적으로 수행된 트랜잭션은 정당한 데이터만을 데이터베이스에 반영해서 무결성을 유지해야 한다는 원칙
  3. 격리성(=고립성 원칙)  각각의 트랜잭션은 독립성을 지녀야 하며, 하나의 트랜잭션이 실행되는 동안 트랜잭션 내부에 다른 트랜잭션이 접근할 수 없어야 한다는 원칙
  4. 지속성  트랜잭션이 일단 성공적으로 완료되어 데이터베이스에 커밋되고 나면, 하드웨어나 소프트웨어에 오류가 발생했더라도 트랜잭션의 결과가 데이터베이스에 계속 보존되어야 한다는 원칙

2-8. 리팩토링(Refactoring)

소프트웨어 공학에서 사용되는 단어로, '결과의 변경 없이 코드의 구조를 재조정하는 것'을 의미한다. 유지보수를 편하게 하기 위한 목적으로 사용된다. 버그를 없애거나 새로운 기능을 추가하는 작업은 리팩토링에 해당되지 않는다.

2-9. 해시 함수

일반적으로 DBMS에서는 실행 계획의 빠른 검색을 위해 해싱(Hashing) 알고리즘을 사용한다. 이 알고리즘은 주어진 키(Key)에 특정 규칙을 적용해 얻은 값으로 데이터 저장 주소를 결정하는 방식으로, 순차 검색에 비해 검색 속도가 빠르다. 주어진 키를 통해 데이터의 위치를 바로 산출한 다음, 한 번에 접근하기 때문이다.

이때 데이터가 저장된 위치나 주소를 결정하는 데 사용되는 것이 바로 해시 함수(Hash Function)이다. 이 함수의 본래 용도는 임의의 데이터를 원래의 것을 상징하는 고정 길이의 데이터로 변환하는 것으로, 이렇게 얻어진 결과값을 해시 값 또는 체크섬(Checksum)이라고 부른다.

해시 함수는 결정론적 알고리즘에 기초한다. 그 성질은 아래와 같다.
    *결정론적 알고리즘: 입력값이 동일하면 그 결과값도 동일한 것이 보장되는 알고리즘을 의미
    *확률론적 알고리즘: 입력값이 동일하더라도 상황에 따라 다른 값이 출력되는 알고리즘을 의미

  • 원래의 데이터가 동일하다면 해시값은 동일하다.
  • 해시값이 다르다면 원래의 데이터도 다르다.
  • 해시값이 같으면 원래의 데이터도 같은 경우가 대부분이지만, 수학적으로 보장되지 않는다.
    (서로 다른 데이터로부터 동일한 해시값이 연산될 수 있다는 뜻)

2-10. DAO 클래스

Data Access Object의 약자인 DAO는 데이터베이스에서 SQL 문을 전송하여 질의하거나 업데이트하는 로직만 분리하여 별도의 독립적인 클래스로 구현한 것을 가리킵니다. 객체 지향 프로그래밍에서 자주 사용되는 패턴 중 하나.

장점
    1) 뷰 및 비즈니스 로직 계층과 데이터베이스 처리 계층을 구분하여 명확하게 역할 분담
    2) 전체 코드를 단순화

DAO 패턴에 따라 독립적으로 구현된 클래스를 DAO 클래스라고 한다.


3. iOS 관련 용어

3-1. 델리게이트 패턴

디자인 패턴 중 하나로 객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에 넘기는 것

기능을 위임할 수 있는 객체가 있다는 것은 그만큼 직접 구현해야 하는 부분이 적다는 뜻이기 때문에 큰 규모의 프로그램을 빠르게 작성할 수 있다. 효율성 관점에서 아주 중요한 역할

GUI 기반 프로그래밍에서 델리게이트 패턴이 사용되는 가장 대표적인 예는 이벤트 리스너(Event Listener)

3-2. 재사용 메커니즘(Reuse Mechanism)

iOS 특유의 부드러운 화면을 위해 사용되는 메커니즘 중 하나. 화면에 나타나야 할 데이터가 아무리 많아도 테이블 뷰는 화면에 당장 표시할 만큼의 셀만 만들고, 나머지는 필요할 때마다 그때그때 생성

부드러운 화면을 구성하기 위한 iOS 개발 원칙

  1. 반복적으로 호출되는 메소드의 내부에는 네트워크 통신 등 처리 시간이 긴 로직을 포함하지 않아야 한다.
  2. 네트워크 통신을 통해 읽어온 데이터는 재사용할 수 있도록 캐싱(Caching) 처리해 될 수 있으면 네트워크 통신 횟수를 줄여야 한다.
  3. 네트워크 통신이나 시간이 오래 걸리는 코드를 사용할 때는 비동기로 처리하는 것이 바람직하다.

테이블 뷰에서 비동기 기법과 메모이제이션 기법이 사용되는 이유
- 비동기 기법: 이미지를 내려받을 때를 위한 처리
- 메모이제이션 기법: 테이블 뷰에서 제거된 셀이 재사용 큐에 의해 다시 구성될 때를 위한 처리

3-3. 데이터 저장

3-3-1. 프로퍼티 리스트(Property List)

애플의 주요 소프트웨어 프레임워크에 이용되는 *객체 직렬화를 위한 XML 형식의 파일
(*객체 직렬화란, 객체의 내용을 바이트 단위로 변환하여 파일에 기록하거나 네트워크를 통해 전달이 가능하도록 하는 것을 의미한다.)

대부분 .plist 라는 확장자를 갖는다. 애플에서는 프로퍼티 리스트를 간단한 데이터 계층을 표현하기 위한 추상화라고 정의
비교적 단순한 데이터를 XML 포맷에 맞추어 키(Key)-값(Value) 형식으로 저장하는 것

앱의 공통 데이터나 주요 설정 정보를 저장하는데 쓰인다. 예를 들어, 마지막으로 열었던 문서나 파일에 대한 정보, 또는 가장 많이 실행한 메뉴 정보 등을 기록, 환경 설정 데이터를 저장하는 용도로 사용

iOS 기반 프로젝트에서는 항상 Info.plist 파일을 찾아볼 수 있는데, 이는 앱의 빌드와 실행에 필요한 환경 설정값을 저장하는 대표적인 시스템 프로퍼티 리스트 파일

3-3-2. UserDefaults

iOS에 앱을 설치하면 데이터를 저장할 수 있는 영역인 기본 저장소가 생성된다. 이 저장소는 프로퍼티 리스트를 기반으로 해 <앱 아이디>.plist 파일을 생성하여 XML 형식으로 데이터를 저장한다. 앱 실행 과정에서 저장해야 할 데이터가 비교적 단순한 구조라면 기본 저장소에 저장하는 것이 적절하다. 이런 기본 저장소를 손쉽게 다룰 수 있도록 iOS에서는 UserDefaults 객체를 제공한다.

UserDefaults 객체는 싱글톤 패턴으로 설계, 앱 전체에서 하나의 인스턴스만 생성되고, 이 인스턴스를 앱 전체가 공유한다.

*동시성 문제
UserDefaults 객체를 앱 전체에서 하나의 인스턴스를 공유해서 사용하기 때문에 생기는 문제이다. 하나의 공유되는 자원에 여러 객체가 동시에 접근해서 사용할 때 문제가 된다. 

하나의 객체만 생각했을 때 전혀 문제가 되지 않는 로직이더라도 여러 객체가 동시에 하나의 자원에 접근해 읽고 쓸 수 있을 때에는 예상치 못한 문제들이 발생할 수 있고, 이들이 모두 동시성 문제의 이슈가 된다.

UserDefaults는 이 같은 동시성 문제로부터 안전하게 설계되어 있다. UserDefaults는 먼저 들어온 요청에 우선권을 부여하고, 스스로 잠금을 걸고 다른 요청의 접근을 차단한다. 이는 블로킹(Blocking)이라고 하는 알고리즘에 의해 보호된다.

이것을 개발용어로 스레드로부터 안전하도록(Thread-safe) 설계되어 있다고 표현

UserDefaults 객체는 인메모리 캐싱(In-Memory Caching) 메커니즘을 사용한다. 인메모리 캐싱이란 실제 저장된 위치에서 데이터를 매번 새로 읽는 것이 아니라 한번 읽어들인 데이터는 메모리에 저장해 두고 재사용하는 것을 의미한다. 인메모리 캐싱으로 인해 성능은 향상되지만 기본 저장소의 데이터와 메모리 데이터가 일치하지 않는 상황이 발생되기도 한다.(*싱크가 맞지 않는다, 데이터가 서로 동기화되지 않았다라고도 한다.)

이를 방지하기 위해 동기화 처리, 싱크 처리를 해줘야 한다. "synchronize()" 메소드가 이 역할을 수행한다. 데이터를 저장한 후에는 항상 synchronize() 메소드를 호출해 동기화 처리해 주는 것이 좋다.

3-4. 샌드박스(SandBox)

iOS는 보안을 이유로 애플리케이션이 파일을 읽고 쓸 수 있는 범위를 제한한다. 우리는 지정된 공간에만 파일을 저장할 수 있는데, 이 공간을 샌드박스라고 한다. 보통 샌드박스는 애플리케이션 영역 내부에 지정된다.

3-5. 앱 씨닝(App Thinning)

iOS 9부터 적용된 앱 씨닝 기술은 전체적으로 앱의 용량을 줄이기 위한 목적으로 만들어졌다. 이 기능을 적용하면 사용자의 디바이스에 최적화된 앱을 제공할 수 있기 때문에, 설치 및 업데이트 속도가 빠르고 훨씬 적은 용량을 차지하는 결과를 가져온다. 기술의 종류는 비트 코드(Bit code), 온 디맨드 리소스(On Demand Resource), 슬라이싱(Slicing) 등이 있다.

3-6. 슬라이싱(Slicing)

하나의 앱을 각각의 iOS 기기에 최적화된 형태로 설치할 수 있도록 여러 버전으로 쪼개서 제공하는 것을 의미. 슬라이싱 처리를 위해서는 프로젝트에 직접 이미지를 추가하는 것이 아닌 이미지 에셋 카탈로그에 등록해 놓고 사용하는 방식으로 변경해야 한다.


4. 데이터베이스 관련 용어

4-1. 스키마(Schema)

테이블을 구성하는 레코드의 크기와 키의 정의, 레코드와 레코드의 관계 등을 정의한 것. 일반적으로 테이블 구조, 데이터베이스 구조라고 부르는 것들은 모두 스키마다.


5. 기타 용어

5-1. 래퍼 라이브러리(Wrapper Library)

다른 라이브러리를 한 층의 코드로 에워싸서 재구성한 라이브러리, 예시로 iOS에서 libsqlite3 라이브러리를 보다 고수준에서 데이터베이스 작업을 처리해주는 FMDB 라이브러리가 있다.

반응형

'기타 > 개발일지' 카테고리의 다른 글

[2023-04-01] 개발일지  (0) 2023.04.01
[맥OS] Mac OS 단축키 및 Xcode 단축키  (0) 2022.11.01
[2022-06-29] 개발일지  (0) 2022.06.29
[2022-06-28] 개발일지  (0) 2022.06.28
[2022-06-23] 개발일지  (0) 2022.06.27