728x90

비트 연산자 (Bitwise Operator)

비트 연산자는 2진수 문자열 피연산자에 대해 비트단위의 연산 작업을 수행한다.

 

Operator Description
& AND 연산
| OR 연산
~ 보수 연산
^ XOR 연산
<< 비트 왼쪽 시프트 연산
>> 비트 오른쪽 시프트 연산

 

& 연산자

  • & 연산자는 논리 연산자의 and와 같다.
  • 둘 다 모두 True일때 결과값이 참.
  • 같은 자리에 있는 수들만 비교하면 된다.
0b1100 & 0b1001 = 0b1000

 

| 연산자

  • | 연산자는 논리 연산자의 or과 같다.
  • | 연산자는 두 수중 적어도 하나만 1이면 1을 반환한다.
0b1100 | 0b1001 = 0b1101

 

~ 연산자

  • ~ 연산자는 논리 연산자의 not과 같다.
  • ~ 연산자는 모든 비트를 반전시킨다.
  • 앞 자리의 0은 생략 할 수 있다.
~0b1100 = 0b0011 = 0b11

 

^ 연산자

  • ^ 연산자는 논리 연산자의 xor과 같다.
  • 두 수가 서로 다른 값을 가질 때 1을 반환한다.
0b1100 ^ 0b1001 = 0b0101

 

 

shift 연산자

  • 시프트 연산자는 비트단위 계산에서 오른쪽, 왼쪽으로 수를 옮길 수 있다.
  • 시프트 연산자는 왼쪽으로 한 칸 이동할 때 마다 2배가 된다.
  • n << m : n * 2의 m승
  • n >> m : n / 2의 m승

 

 

 

 

a = 0b0010

bin(a<<1) = 0b100
bin(a>>1) = 0b1

 

728x90

'Python' 카테고리의 다른 글

[Python] 문자열 공백 제거 replace, lstrip, rstrip, strip  (0) 2022.04.11
[Python] for, range  (0) 2022.04.10
[Python] map 함수  (0) 2022.04.09
[Python] 문자열 포맷팅(%, format, f-string)  (0) 2022.04.07
[Python] Python 파이썬이란  (0) 2022.04.06
728x90

% 포맷팅

  • % 문자를 사용해 원하는 형식으로 포맷팅하는 방법
  • ' % 자료형 종류 ' % 값 형식으로 사용
  • 명시한 자료형마다 입력값으로 사용 할 수 있는 자료형이 정해져있다
a = 10
b = 20

print('a는 %d , b는 %d' % (a,b))
# a는 10 , b는 20

자료형별 사용 문자

자료형 문자
정수 %d
실수 %f
문자열 %s
8진수 %o
16진수 %x
% %%

 

format 함수

  • 파이썬 내장함수인 format()을 사용하여 포맷팅하는 방법
  • %포맷팅처럼 여러개의 값을 포맷팅 할 수 있고, 자릿수를 지정할 수 있다.
t = 'Hello {}'.format('Ik')

print(t)
# Hello Ik

 

f-string

  • 파이썬 3.6 이상 버전부터 f-string 문법을 사용할 수 있다.
  • 문자열 앞에 접두사 f를 붙이고, 중괄호({}) 안에 변수를 넣는 방식
  • 자료형의 변환 없이 문자열과 정수를 함께 넣을 수 있다
name = 'Ik'
t = f'Hello {name}'
print(t)
# Hello Ik

a = 2
b = 3
s = f'sum: {a+b}'
print(s)

# sum: 5
728x90

'Python' 카테고리의 다른 글

[Python] 문자열 공백 제거 replace, lstrip, rstrip, strip  (0) 2022.04.11
[Python] for, range  (0) 2022.04.10
[Python] map 함수  (0) 2022.04.09
[Python] 비트 연산자(Bitwise Operators)  (0) 2022.04.08
[Python] Python 파이썬이란  (0) 2022.04.06
728x90

Python

  • 파이썬(python)은 1991년 프로그래머 귀도 반 로섬(Guido Van Rossum)이 개발한 인터프리터 언어
  • 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어

 

Python 특징

  • 간결한 코드
  • 쉬운 문법
  • 인터프리터 언어
    • 코드를 한번에 한줄씩 실행한다
  • 무료로 사용 가능
    • 오픈소스
  • C, C++, JAVA 등 다른 프로그래밍 언어와 쉽게 통합할 수 있다.
  • 라이브러리가 풍부
    • 많은 기능들을 그대로 가져다가 사용할 수 있어 쉽게 개발할 수 있다
  • 객체 지향 언어
  • 교차 플랫폼 언어
    • 윈도우, 리눅스 등 다양한 플랫폼에서 사용할 수 있다.

 

Python 장점과 다른 언어와 차이점

  • 쉽고 재미있다.
  • 개발 속도가 빠르다.
  • 들여쓰기를 이용하여 코드 블럭을 구분
  • 가독성을 중요시한다.

 

728x90
728x90

DBMS

  • DataBase Management System
  • 사용자의 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성하고 데이터베이스를 관리해 주는 소프트웨어

 

SQL

  • Strucured Query Language
  • 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어.
  • 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다.

 

RDBMS

  • RDBMS는 DBMS앞에 R이 붙는다. Relational의 약자로 관계형 데이터베이스 관리 시스템을 의미한다.
  • RDBMS는 RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터 베이스.
  • RDBMS는 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있다.
  • 관계를 나타내기 위해 외래키(foreign key)를 사용한 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징.

 

NoSQL

  • Not Only SQL
  • RDB 현태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술.
  • RDBMS와 달리 테이블 간 관계를 정의하지 않는다.
  • 데이터 테이블은 그냥 하나의 테이블이며 따라서 일반적으로 테이블 간 Join도 불가능.
  • 빅데이터 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS의 단점인 성능 향상시키기 위해 등장
  • 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장.
  • NoSQL 하면 가장 유명한 Document 기반의 MongoDB를 떠올리지만 MongoDB는 NoSQL의 한 종류로 NoSQL은 하기와 같이 다양한 형태의 저장기술을 지원하고 있다.
  • 저장기술은 RDBMS 스키마에 맞추어 데이터를 관리해야 된다는 한계를 극복하고 수평적 확장성(Scale-out)을 쉽게 할 수 있다는 장점

 

Key-Value Database

  • Key-Value Database는 데이터가 Key와 Value의 쌍으로 저장된다. Key는 Value에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있다. 심지어는 이미지나 비디오도 가능하다. 또한 간단한 API를 제공하는 만큼 질의의 속도가 굉장히 빠른 편이다.
  • 대표적인 NoSQL Key-Value Model로는 Redis, Riak, Amazon Dynamo DB 등이 있다.

 

 

Document Database

  • Documnet Database 데이터는 Key와Document의 형태로 저장된다. Key-Value 모델과 다른 점이라면 Value가 계층적인 형태인 도큐먼트로 저장된다는 것이다. 객체지향에서의 객체와 유사하며, 이들은 하나의 단위로 취급되어 저장된다. 다시 말해 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어진다는 뜻이다. 
  • 주요한 특징으로는 객체-관계 매핑이 필요하지 않다. 객체를 Document의 형태로 바로 저장 가능하기 때문이다. 또한 검색에 최적화되어 있는데, 이는 Ket-Value 모델의 특징과 동일하다. 단점이라면 사용이 번거롭고 쿼리가 SQL과는 다르다는 점이다. 도큐먼트 모델에서는 질의의 결과가 JSON이나 xml 형태로 출력되기 때문에 그 사용 방법이 RDBMS에서의 질의 결과를 사용하는 방법과 다르다. 
  • 대표적인 NoSQL Document Model로는 MongoDB, CouthDB 등이 있다.

 

Wide Column Database

  • Column-family Model 기반의 Database이며 이전의 모델들이 Key-Value 값을 이용해 필드를 결정했다면, 특이하게도 이 모델은 키에서 필드를 결정한다. 키는 Row(키 값)와 Column-family, Column-name을 가진다. 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다. 관계형 모델로 설명하자면 어트리뷰트가 계층적인 구조를 가지고 있는 셈이다. 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며, 질의는 Row, Column-family, Column-name을 통해 수행된다.
  • 대표적인 NoSQL Column-family Model로는 HBase, Hypertable 등이 있다.

 

Graph Database 

  • Graph Model Model에서는 데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 Database입니다. 개체와 관계를 그래프 형태로 표현한 것이므로 관계형 모델이라고 할 수 있으며, 데이터 간의 관계가 탐색의 키일 경우에 적합하다. 페이스북이나 트위터 같은 소셜 네트워크에서(내 친구의 친구를 찾는 질의 등) 적합하고, 연관된 데이터를 추천해주는 추천 엔진이나 패턴 인식 등의 데이터베이스로도 적합하다.
  • 대표적인 NoSQL Graph Model로는 Neo4J가 있다.

 

RDBMS 장단점

장점

  • RDBMS는 위에서 설명을 하였듯이 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장하고 있다. 
  • 또한 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.

단점

  • 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
  • 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원합니다. 이로 인해 비용이 기하급수적으로 늘어날 수 있다.
  • 스키마로 인해 데이터가 유연하지 못합니다. 나중에 스키마가 변경 될 경우 번거롭고 어렵다.

 

NoSQL 장단점

장점

  • NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
  • 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능하다.

단점

  • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 한다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정가 어려울 수 있다.

 

728x90

'DataBase' 카테고리의 다른 글

[MySQL] Transaction 트랜잭션 정리  (0) 2022.04.04
[MySql] INDEX 정리  (0) 2022.03.26
[MySQL] NOT LIKE  (0) 2022.02.14
[MySQL] 한글 깨짐 현상 해결 방법  (0) 2022.02.13
[MySQL] EXISTS, NOT EXISTS 사용법  (0) 2022.02.04
728x90

Transaction

  • 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위.
  • 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
  • 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위.
  • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위.
  • 하나의 트랜잭션은 Commit되거나 Rollback된다.

 

Transaction 성질

Atomicity(원자성)

  • 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

Consistency(일관성)

  • 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
  • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

Isolation(독립성, 격리성)

  • 둘 이상 트랜잭션이 동시에 병행 실행 될 때 어느 하나의 트랜잭션 실행중 다른 트랜잭션의 연산이 끼어들 수 없다.
  • 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

Durability(지속성, 영구성)

  • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

 

Transaction 연산

Commit연산

  • Commit 연산은 한개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

Rollback연산

  • Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 수현하기 위해 이 트랜잭션이 행한 모든 연산을 취호하는 연산이다.
  • Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.

 

MySQL의 Transaction

  • MySQL의 InnoDB 엔진은 기본 설정이 트랜잭션이 미지원 상태이다.
  • autocommit모드(줄단위 Commit)가 켜져있는 상태이기 때문에 트랜잭션이 미지원 상태이다.
  • 트랜잭션이 지원되게 하려면 기본 설정을 autocommit모드를 False로 변경 해야한다.
728x90

'DataBase' 카테고리의 다른 글

[DataBase] RDBMS, NoSQL 차이점  (0) 2022.04.05
[MySql] INDEX 정리  (0) 2022.03.26
[MySQL] NOT LIKE  (0) 2022.02.14
[MySQL] 한글 깨짐 현상 해결 방법  (0) 2022.02.13
[MySQL] EXISTS, NOT EXISTS 사용법  (0) 2022.02.04
728x90

Session

  • 특정 웹사이트에서 사용자가 머무르는 기간 또는 한명의 사용자의 한번의 방문을 의미한다.
  • Session에 관련된 데이터는 Server에 저장된다.
  • 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
  • Cookie에 비해 보안성이 좋다.

 

Cookie

  • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
  • 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
  • Cookie는 사용자가 웹 서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시파일.
  • Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용한다.
  • Cookie는 Client PC에 저장되는 정보이기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능)

 

Session과 Cookie 사용 이유

  • 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다.
  • HTTP프로토콜을 이용하게 되는 웹사이트에서 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 세션과 쿠키를 사용한다.

보안성 낮은 Cookie대신 Session만 사용하면 안되는 이유

  • 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하여 Server에 무리가 가기 때문이다.

 

Session vs Cookie

  세션(Session) 쿠키(Cookie)
저장 위치 웹 서버 클라이언트(접속자PC)
저장 형식 Object text
만료 시점 브라우저 종료시 삭제
(기간 지정 가능)
쿠키 저장시 설정
(브라우저가 종료되도, 만료시점이 지나지 않으면 자동으로 삭제되지 않는다.)
사용하는 자원(리소스) 웹 서버 리소스 클라이언트 리소스
용량 제한 서버가 허용하는 한 제한 없음. 총300개
하나의 도메인 당 20개
하나의 쿠키 당 4KB
속도 쿠키보다 느리다. 세션보다 빠르다.
보안 쿠키보다 좋다. 세션보다 안좋다.
728x90
728x90

Get 방식

  • 클라이언트에서 서버로 데이터를 전달할 때 주소 뒤에 이름과 값이 결합된 스트링 형태로 전달
  • 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
  • 길이에 제한이 있다.(전송 데이터의 한계가 있다)
  • Post방식보다 상대적으로 전송 속도가 빠르다.

 

Post 방식

  • 일정 크기 이상의 데이터를 보내야 할 때 사용한다.
  • 서버로 보내기 전에 인코딩하고 전송 후 서버에서는 다시 디코딩 작업을 한다.
  • 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.
  • 속도가 Get방식보다 느리다.
  • 쿼리스트링 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송이 가능하다.

 

Get vs Post

  • Get방식은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용한다.
  • Post방식은 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용한다.
  • Get방식을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
  • Post방식은 전달되는 데이터가 보이지 않는다.
  • Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
  • 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.
728x90
728x90

Heap

  • 자바의 힙 공간은 객체와 JRE 클래스들에게 메모리를 할당할 때 사용 된다.
  • 객체가 생성되면 힙 공간에 할당되며, 이 객체에 대한 참조가 스택 메모리에 저장된다.
  • 가비지컬렉션은 힙 메모리에 더이상 참조하지 않는 객체들을 정리 한다.
  • 힙에 만들어진 객체는 어디서든 접근할 수 있고, 어플리케이션 어디에서나 참조될 수 있다.

 

Heap 특징

  • 힙 영역이 가득차면 OutOfMemoryError가 발생
  • 스택 영역에 비해 엑세스 속도가 조금 느리다.
  • 스택 영역과 달리 메모리 해제가 자동으로 되지 않는다.
  • 메모리 사용의 효율성을 위해 GC가 필요하다.(Garbage Collection)
  • Thread-safe하지 않기 때문에 적절히 synchronizing을 해야한다.

 

Stack

  • 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역
  • 메소드에 고유한 기본 값과 메소드에서 참조하는 힘 개체에 대한 참조값을 포함하고 있다.
  • LIFO(Last-In-First-Out) 순서로 동작된다.
  • 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새블록이 생성된다.
  • 메소드 실행이 완료되면 해당 스택에서 pop되고, 호출한 메소드로 흐름이 돌아가게 된다.

 

Stack 특징

  • 스택 내부의 변수는 변수를 생성한 메소드가 실행되는 동안만 존대한다.
  • 메소드 실행에 따라 자동으로 할당되고 해제된다.
  • 해당 메모리 영역이 가득차면 StackOverFlowError가 발생.
  • 힙 메모리에 비해 엑세스 속도가 빠르다.
  • 쓰레드마다 고유의 스택 영역을 가지고 있으므로, Threa-safe하다.

 

Heap과 Stack 차이점

  • 힙 메모리는 어플리케이션의 모든 부분에서 사용된다.
    스택 메모리는 하나의 쓰레드가 실행 될 때 사용된다.
  • 객체가 생성되면 항상 힙 공간에 저장된다.
    스택 메모리는 힙 공간에 있는 객체를 참조만 한다.
    스택 메모리는 primitive 타입의 지역변수와 힙 공간에 있는 객체 참조 변수만 갖고 있다.
  • 힙 공간에 저장된 객체는 어디서든 접근이 가능하다.
    스택 메모리는 다른 쓰레드가 접간할 수 없다.
  • 스택 메모리의 생명주기는 매우 짧다.
    힙 메모리는 어플리케이션의 시작부터 끝까지 남아있다.
  • 스택 메모리가 가득차면 java.lang.StackOverFlowError 발생
    힙 메모리가 가득차면 java.lang.OutOfMemoryError 발생
  • 스택 메모리의 사이즈는 힙 메모리와 비교시 매우 적다.
728x90

+ Recent posts