목록알쓸신잡 (13)
코딩하는 오징어
컴파일 언어를 이용하는 개발자들은 코드를 작성하고 해당 코드를 컴퓨터에서 실행시키기 위해 빌드라는 작업을 한다. 빌드라는 작업은 소스 코드를 컴파일 할 뿐만아니라 dependency를 추가해주고 실행가능한 bundle(묶음 파일)을 생성한다. java에서는 jar파일 또는 war파일이 될 수 있다. 이러한 결과물을 우리는 Artifact(인공물)라고 부른다. 개발자가 필요한 라이브러리와 소스 코드의 classpath를 직접 명시해주고 Artifact를 생성할 수 있지만, 대개의 경우 Maven이나 Gradle 같은 빌드 툴을 이용하여 해당 작업을 자동화한다. Maven은 pom.xml에 Gradle은 build.gradle 파일에 빌드 작업을 각 빌드 툴에서 제공하는 명세 혹은 DSL로 작성한다. 그러면..
개발자는 어플리케이션을 개발 할 때 많은 것들을 고려한다. 코드를 작성하고 나서는 비즈니스 로직이 정확한 결과를 산출해내는지 검증하기 위해 테스트 코드를 작성하기도 하며, 성능 테스트를 통해 시스템에 병목 지점은 없는지 등을 확인한다. 어플리케이션이 정상적으로 시작되고 실행이 지속되는지는 매우 중요하다. 하지만 어플리케이션이 정상적으로 종료되는지도 굉장히 중요하다. 이번 글을 통해서 JVM 플랫폼 위에서 실행되는 어플리케이션이 정상적으로 종료되기 위한 여러 내용들을 소개하려고한다. 프로세스 종료 먼저, 프로세스를 종료시키기 위해 프로세스로 전달하는 시그널에 대해서 살펴보자. 시그널이 전달되면 시스템은 다음과 같이 동작한다. 시그널에대한 핸들러는 커널에 프로그래밍 되어 있으며 프로세스가 시그널을 받게 되면..
TDD가 유행하면서 테스트에 대한 관심이 많아졌다고 생각한다. 본인도 테스트는 반드시 작성해야한다고 주장하면서 다녔지만 정작 테스트는 어떻게 짜는게 좋고 테스트를 짰을 때 어떤 점이 좋아지는 것에 대한 고민을 깊게 해본것은 최근이었다. 테스트는 왜 짜야 할까? 우리가 만든 함수에 대해 신뢰할 수 있다. (단, 그 함수의 입력 값, 출력 값 명세에 대한 범위에 한해서) 리팩토링이 필요할 때 테스트 코드가 있다면 안심하고 코드를 고칠 수 있다. (리팩토링을 진행하면서 테스트 프레임워크로부터 빠르게 피드백을 받아 볼 수 있기 때문.) 장애(예외)가 발생했을 때 해당 시점의 입력 값을 테스트 코드의 입력으로 주었을 때 어떤 부분이 잘못 됐는지 알 수 있다.(논리 오류로 인한 장애일 경우) 이때 방어 로직이 추가..
오늘은 가벼운 주제를 다뤄보겠습니다. Redirect와 Forward의 개념과 둘의 차이를 정리하려고합니다. 어렵지 않은 개념이지만 확실하게 정리를 해두지 않으면 자주 혼동하거나 다시 검색하게 되는 개념입니다. Redirect Redirect는 Wiki에 다음과 같이 정리되어있습니다. A redirect is a page which automatically sends visitors to another page, usually an article or section of an article. Redirect는 방문자를 다른 페이지로 자동으로 보내주는 페이지이다. 그림으로 Redirect의 동작 방식을 표현한다면 다음과 같을 것 입니다. 사용자는 어떤 페이지를 서버에 요청하게되고 서버는 다른 페이지의 ur..
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 컬럼은 원자성을 유지하지 못한다. 사용..
Connection Timeout클라이언트가 서버측으로 connection을 맺길 원하지만 서버의 장애 상황으로 connection조차 맺어지지 못할 때 발생하는 timeout이다.Read Timeout클라이언트와 서버가 connection은 맺어졌지만 I/O작업이 길어지거나 락이 걸려 요청이 처리되지 못하고 있을 때 클라이언트는 더 이상 기다리지 못하고 커넥션을 끊는다. 즉, 응답을 기다리지 못하는 것이다. 이런 상황을 Read Timeout 이라고 하는데 java에서는 SocketTimeout Exception이 떨어진다.JDBC Driver SocketTimeout은 OS의 SocketTimeout 설정에 영향을 받는다. JDBC Driver SocketTimeout을 설정하지 않아도 네트워크 장애..