목록전체 글 (67)
코딩하는 오징어
어떤 시스템이 필요한 Resource에 접근할 때, 해당 시스템은 Resource에 대해 최소한의 필요 권한만을 부여하는 것이 좋다. 해당 시스템을 통해 악의적인 Action이 발생할 수도 있고, 버그로 인해 Resource에 피해를 줄 수도 있기 때문이다. 이를 해결하기 위해 가장 좋은 방법은 최소한의 권한만 부여하여 프로세스를 실행 시키는 것이다. Docker를 실행하기 위해서는 root 권한이 필요하지만 container자체에는 그럴 필요가 없다. 하지만 우리가 Dockerfile을 통하여 이미지를 만들 때 별도의 정의를 하지 않으면 container는 root로 실행된다. 예를 보면 이해할 수 있을 것이다. 먼저 다음과 같이 정의된 Dockerfile을 보자. FROM ubuntu:focal RU..

DHCP 기초 DHCP의 기본적인 역할은 IP 주소 할당 이다. 하지만 단순히 `192.168.0.101`과 같은 IP 주소를 PC에 할당해 봐야 네트워크는 통신할 수 없다. 일반적으로 DHCP 서버는 IP주소, 서브넷 마스크, 디폴트 게이트웨이라는 기본 3종 세트와 DNS(Domain Name Service)서버 IP 주소, 도메인 이름 같은 추가 정보를 제공한다. 기본 3종 세트에 대해 간단히 설명하면 다음과 같다. 그림 1-1 1. IP 네트워크는 위의 그림과 같이 복수의 서브넷이 라우터로 서로 연결되는 구조이다. 각 서브넷에는 `네트워크 주소`와 `서브넷 마스크`가 할당되고, 할당된 정보로 그 서브넷에서 이용할 수 있는 IP주소의 범위가 정해진다. ip address / subnet mask ->..
Slick에서 Transaction 적용 (slick version 3.3.1) Slick을 설정함에 있어 여러가지가 있겠지만 개인적으로 Cake Pattern을 이용하여 Config를 구성해 나가는 것을 선호한다. (참조 링크: Slick Cake Pattern Config) slick은 DBIOAction을 통해 쿼리를 실행한다. 보통은 type alias된 DBIO를 통해 사용한다. future를 DBIOAction으로 바꾸고 싶다면 DBIO.from(...)을 통해 간단하게 바꿀 수 있다. // Import the Scala API from the profile import profile.api._ ... (for { _ } // ExtenralClient는 외부 시스템과의 통신을 위한 클래스이다..
Actor Error Handling Application의 최상위 액터는 /user 경로에 만들어지며 사용자 가디언(user guardian)에 의해 감독된다. 사용자 가디언의 기본 감독 전략은 Exception이 발생하면 자식을 재시작하는 것이다. 다만, 어떤 액터가 (내부 이유로) 종료됐거나 초기화 도중 실패했음을 알리는 내부 예외가 발생하면 해당 액터를 종료시킨다. 다음은 Actor defaultStrategy & defaultDecider 코드 이다. final val defaultDecider: Decider = { case _: ActorInitializationException => Stop case _: ActorKilledException => Stop case _: DeathPactE..
트레이트 (Trait) Scala의 Trait는 Java의 Interpace와 비슷하면서도 다르게 동작한다. 먼저 기본적이 내용, Syntax 부터 정리해보자. 트레이트 정의 및 사용 trait Manager { def lookup(): Unit } trait라는 키워드를 이용하여 정의하며 별도의 클래스나 트레이트를 상속하고 있지 않으므로 Manager 트레이트는 AnyRef가 부모 클래스이다. trait는 주 생성자를 가질 수 없다. 다음과 같은 코드는 컴파일 에러를 일으킨다. trait Manager(val name: String) { // 컴파일 에러 ... } trait는 메서드를 선언 뿐만 아니라 구현할 수도 있다. 또한, 트레이트를 상속하여 구현하려면 다음과 같이 코드를 작성하면 된다. tra..
OLTP(On-Line Transaction Processing, 거래 처리 영역) 비즈니스 활동 자체를 지원 -> 비즈니스 트랜잭션의 원활한 처리를 최우선으로 함 빈번한 거래 데이터의 입력, 수정, 삭제 과정에서의 효율성, 즉 효과적인 갱신이 주요 목표 RDB에서 테이블들을 정규화하는 이유는 데이터 갱신을 효율적으로 처리하기 위함. (정규화를 하게되면 데이터가 함수적 종속성에 기반하여 집약되므로 중복은 최소화되며 무결성은 극대화 됨) 고객의 연락처 정보가 제대로 정규화 되지 않았다면 거래 트랜잭션마다 이 정보가 중복 포함될 수 있다. 이 상태에서 특정 고객의 연락처가 바뀌면, 해당 고객의 모든 거래 정보를 찾아 연락처 정보를 일일이 갱신해야한다. 거래 트랜잭션이 대용량이라면 견디기 힘들 것이다. 또한 ..

2020/01/05 - [알쓸신잡] - 데이터 모델링의 정규화 위의 글에서 정규화에 대해서 소개하였다. 이번 글에서는 정규화를 하는 행위가 어떤 의미를 갖는지 알아보자. 정규화 모델은 다음과 같은 중요한 특징을 가진다. 이를 보면 데이터 모델링의 핵심 이론이 왜 정규화 이론이어야 하는지 자연스럽게 이해될 것이다. 1. 속성간의 종속성을 기준으로 성격이 유사한 속성들은 모이고 관계없는 속성들은 분리된다. 즉, 속성들이 자연스럽게 자기 자리를 찾게 되면서 데이터 집합의 범주화가 이루어진다. 2. 하나의 주제로 집약된 데이터 구조, 제대로 된 엔터티가 도출된다. 정규화는 함수 종속을 없애고 밀접한 속성을 하나의 표에 집약시키는 체계적인 방법이다. 따라서 데이터는 응집도는 높고 결합도는 낮게 분리된다. 3. 데..
정규화란? 데이터 모델 설계시 중복을 최소화하도록 데이터를 구조화하는 작업 하나의 종속성이 하나의 표(관계형 이론에서의 Relation)로 관리되도록 분해해가는 과정 종속성을 기준으로 데이터를 어떻게 담는 것이 최적인가에 대한 방법론 기본적으로 높은 차수의 정규형은 낮은 차수의 정규형을 모두 만족하여야 한다. 즉, 제3정규형은 제1,2 정규형의 조건을 모두 만족하여야 하며, BCNF는 1,2,3 정규형을 기본적으로 모두 만족하고 있어야 한다. 제1 정규형 컬럼은 원자성을 유지해야한다. ( 모든 속성이 값을 반드시 하나만 가져야한다. ) ID Name Phone Number 1 코딩하는 오징어 010-1111-1111 위와 같이 모델링 할 경우 Phone Number 컬럼은 원자성을 유지하지 못한다. 사용..