술(述) 18

natural key vs surrogate key

이 포스팅에서는 Primary Key가 무엇인지, 그리고 Primary Key를 지정하는 방법과 각 방법의 장단점에 대해서 살펴보겠다. Primary Key(기본 키) 데이터베이스는 엔티티(entity)를 구분하기 위해서 Primary Key를 지정한다. 이 Primary Key는 엔티티를 구분하기 때문에 몇 가지 특징을 갖는다. 특징은 아래와 같다. 유일해야 한다. NULL이 허용되지 않는다. 자동으로 색인이 된다. 이러한 Primary Key를 지정하는 방식은 두 가지가 있다. Natural Key(자연 키) Natural Key는 말 그대로 자연스러운 키이며, 유의미한 키이다. 키 자체가 가치가 있다. 누군가를 부를 때, 보통 이름을 부르게 되어있다. 만약, 이름이 겹치지만 않는다면 이름 자체가 훌..

술(述)/비교 2021.11.11

사용자 스토리(User story)

유저 스토리나 사용자 이야기라고 안 부르고 보통 사용자 스토리라고 부른다. 왤까... 사용자 스토리는 사용자 스토리 맵, 스크럼 등 생각보다 많은 곳에서 사용된다. 그런데 참 많은 사람이 사용자 스토리를 잘 알지 못하는 것 같다. 이 포스팅에서는 사용자 스토리가 무엇인지, 어떻게 사용하는 것이 좋은지에 대한 내용을 서술하겠다. 사용자 스토리 사용자 스토리는 협업을 위한 수단이다. 사용자 스토리는 철저히 사용자 측면에서 작성되며, 사용자가 원하는 기능에 대한 간략한 설명이다. 사용자 스토리는 기능에 대한 설명일 뿐, 공식적으로 어떠한 형식을 쓰라는 것은 지정되어 있지 않다. 하지만 보통 아래와 같은 형식을 취한다. As a [페르소나] I want [목표] so that [이유] "[페로소나]로서, 나는 ..

술(述)/풀이 2021.11.10

버전(Version)

소프트웨어는 생물체와 같아서 발전하기도 하고, 퇴보하기도 하고 병에 걸리기도 한다. 애지중지 키우다 보면, 회사에서 이 소프트웨어를 다른 회사 혹은 개인에게 분양시켜버린다. 이때부터, 나는 불안장애에 걸리게 된다. 솔직히 잘살고 있는지는 궁금하지 않고, 나에게 아무 연락도 없길 바라게 된다. 분양한 건데, 분양받은 사람이 잘 키워야지... 그런데 대부분은 연락이 온다. 애가 아파요. 애가 이걸 못해요. 등등 아 글 쓰면서 상상만 해도 가슴 아프다. 이때부터 분양 당시 아이의 나이가 중요해진다. 우리는 이 나이를 "버전"이라고 한다. 소프트웨어 버전이 중요한 이유 더보기 버그는 개발자 모르게 발생했다가도 소프트웨어가 성장하면서 개발자 모르게 사라지기도 한다. (어떤 개발자가 자신이 실수한 거라 아무도 모르..

술(述)/풀이 2021.10.20

포인트 릴리즈 vs 롤링 릴리즈

운영체제(OS, Operating System)를 릴리즈(release)할 때, 아래와 같은 이름을 붙여서 릴리즈한다. Windows 8, 10, 11 Ubuntu 20.04.3, 20.10 Android 4.4 Kitkat, 5.0 Lollipop, 9 Pie 왜 굳이 8, 10과 같은 버전을 써서 릴리즈할까? 항상 최신 버전으로 릴리즈하면 안될까? 이 포스팅에서는 왜 그러는지, 다른 릴리즈 방법은 무엇인지 관한 내용을 다루겠다. 릴리즈 릴리즈는 "풀어주다", "놓아주다", "공개하다", "발표하다"라는 뜻이 있다. 사실 릴리즈라고 읽고 쓰기는 하지만, 릴리스라고 발음하는 게 맞다. 하지만, 많이 쓰는 게 깡패라고, 릴리즈도 통용된다. OS를 릴리즈하는 방식은 당연하게도, 해당 OS를 판매하는 곳에서 ..

술(述)/비교 2021.10.17

결합도와 응집도

"응집도는 높이고, 결합도는 낮춰라."라는 말을 어디선가 한 번쯤 들어봤을 것이다. 심지어는 각각에 대해서 공부도 해봤을 수도 있다. 단지, 잘 기억나지 않는다. 내가 그렇다. 그런 의미로 결합도와 응집도에 관한 내용을 포스팅하겠다. 모듈 결합도와 응집도에 관한 내용을 설명하기에 앞서 모듈이란 것에 대해 설명을 해야 한다. 모듈은 네이버에서 다음과 같이 정의하고 있다. "프로그램을 기능별로 나눈 논리적인 일부분" 그렇다. 어디까지나 논리적으로 분리된 부분을 말한다. 내가 만든 프로그램을 무지성으로 2개로 쪼갠다고 하면 내 프로그램은 두 개의 모듈로 이루어진 프로그램이 된다. 내가 논리적이라고 우기면 2개의 모듈이 맞다. 하지만 이런 식으로 쪼갠 모듈이 모듈로서 적합하다고 묻느냐면 당당히 아니라고 이야기 ..

술(述)/풀이 2021.10.12

status vs state

"status"와 "state"는 직역하면 "상태"이다. 그렇지만, 이 둘은 엄연히 구분되어 사용된다. Status status는 어떤 연산 결과이다. 연산 결괏값을 말하는 게 아니다. 어디까지나 status도 상태이다. 대표적인 예로 HTTP Status Code가 있다. 200 OK 404 Not Found 위와 같이 어떠한 연산의 결과 상태가 status이다. State state는 어떤 연산의 수행 과정이다. "어떤 일을 하는 중"이라고 하면 모두 state이다. "~하는 중"이라고 표현되지 않더라도, 수행 과정이라면 state이다. 예시 - 수학 문제 어떤 수학 문제가 있다. 수학 문제를 푸는 중이면? state! 수학 문제를 다 풀었다면? state! 위는 언뜻 보기에 수학 문제를 다 풀었다는..

술(述)/비교 2021.08.05

명시적 API vs 묵시적 API

Vulkan에 관해 공부를 시작했다. 여기에서 처음 보는 용어(Explicit API)가 등장해 이에 대해 정리한다. 명시적(explicit) API 내가 시킨 일 이외에는 하지 않는 것을 명시적 API라고 한다. 예를 들어, 술을 사 와라! 라는 명령을 내렸을 때, 정말 술만 사 오면 명시적인 API이다. 묵시적(implicit) API API를 호출할 때마다 혹은 주기적으로, API를 지원하는 드라이버 혹은 플랫폼에서 내가 시킨 일 이외의 것들을 알아서 수행하는 것을 묵시적 API라고 한다. 예를 들어, 술을 사 와라! 라는 명령을 내렸을 때, 술뿐 아니라 간식도 알아서 사 온다면 묵시적인 API이다. 개인적인 감상 마치 Java 언어와 C 언어 같다는 생각이 든다. 메모리 관리 측면에서 C언어는 사..

술(述)/비교 2021.06.19

정적(Statically) vs 동적(Dynamically) 타입 언어

용어 설명 정적 변하지 않는다. 동적 변한다. 타입 변수의 데이터 타입을 통틀어 이른다. 정적 데이터 타입 변수의 한번 정해진 데이터 타입은 변하지 않음을 말한다. 대표적으로 C언어가 정적 데이터 타입 언어이다. 아래와 같이 코드를 작성하면 에러가 발생한다. { int some = 157; some = "string" } 동적 데이터 타입 변수의 데이터 타입은 변할 수 있음을 말한다. 대표적으로 Python언어가 동적 데이터 타입 언어이다. 아래와 같이 코드를 작성해도 에러가 발생하지 않는다. value :int = 123 value = "string"

술(述)/비교 2021.06.13