전체 글

데이터베이스 정규화
데이터베이스 정규화 데이터베이스 정규화는 데이터를 구조화하는 기술입니다. 테이블을 체계적으로 분해하는 작업이에요. 중복되는 자료를 줄이기 위한 기법의 일종입니다. 무슨 말인지 도통 감이 안 오죠. 그러니 정규화 개념을 생으로 받아들이려 애쓰지 말고 예시를 통해서 정규화의 필요성을 느껴봅시다. 정규화 하지 않는다면? 어째서 데이터베이스 정규화를 할까요? 간단합니다, 하면 좋으니까요! 역으로 말하면 안 하면 뭔가 불편이 있다는 뜻입니다. 구조 없는 DB는 갖가지 애로사항의 원천과도 같습니다. 데이터 수정 시에 데이터 손실이 빈번하게 발생하거든요. 아래 표를 통해서 문제점을 알아봅시다. 학번 이름 주소 수강 과목 1 철수 서울 화학 2 영희 고양 수학 3 흥민 런던 축구 4 철수 서울 물리 위 테이블은 몇 가..
프로그래밍을 배우는 순서
편리한 기능들이 참 많다. 자바를 예로 들어보자. 제네릭을 쓰면 캐스팅하는 번거로움을 줄여준다. 람다식 쓰면 코드를 덜 짠다. 손목이 아프지 않고 라인이 줄어서 보기도 좋다. 자바스크립트는 어떤가? let, Arrow function babel, webpack, typescript vue, angular, react... 유니티는 어떤가? 옛날이라면 밤새 코피 터져 가며 렌더링 했을 것들을 요즘은 초딩도 찍을 수 있다. 변화를 몸소 겪어온 사람들은 해피하다. 일명 경력자들은 편한 것을 안다. 한편 초보자들은 어떨까? "아니, 뭔 놈의 기능이 이렇게 많은 거야!" 초보자에겐 부담이다. 알아야 할 것이 산더미다. 예전 것도 알아야 하고 요즘 것도 알아야 하니까. "응? 원래 이렇게 쓰는 거 아닌가요?" 한편..

블록체인
요즘 블록체인 기반의 비즈니스들이 유행이다. 대표격인 비트코인 그리고 이더리움과 리플 등등 투자할 맘은 전혀 안 들지만 아랫단에 기술은 너무 궁금했다. 한 시간 정도 시간을 들여서 참고 자료들을 모았다. 레딧을 둘러보거나 엔지니어 블로그, pdf 자료를 추렸다. 하루 정도 투자해보니 조금은 감이 오는 거 같다. 일단 감상평. 블록체인은 미래의 기술이다. 현재에도 존재하지만 미래에 더 빛날 알고리즘이다. 오늘날의 전구처럼 어디에나 있는 그런 존재가 되지 않을까. 블록체인의 러프한 그림은 이렇다. 거래 장부를 모든 이가 공유한다. 거래가 발생할 때마다 모든 장부가 업데이트 된다. 그렇다면 장부의 무결성은 어떻게 보존될까? 분실, 실수, 사기 등등 당장 생각나는 이런 경우들이 있는데. 여기에 암호화 기술이 한..
데이터
웹, 딥러닝, 게임 여러 부근을 깔짝 깔짝 해보고 느낀 점 똑같이 프로그래밍 카테고리라도 그것들은 완전히 다르다. 저마다의 전문 영역이 있다. 큼직하게도 차이가 있지만 세부적으로도 다르다. 예컨대 웹은 앞단과 뒷단의 차이가 크다. 뒷단에 차곡차곡 데이터를 쌓고, 앞단에서는 저장된 것을 불러서 유저가 보기 좋도록 배치하는 거니까. 이런 차이점에도 불구하고 그것들은 모두 같다. 결국엔 '데이터'일 뿐이다. 데이터를 쪼개고 한데 모으고 저장하고 그걸 가져오고 조건에 맞게 섞는 등... 여러 작업이 있지만 결국 인풋을 받아서 아웃풋을 뿌리기 위한 여정이다. 수학 공부를 해야겠다는 생각이 월마다 커진다. 내가 앞으로 어떤 커리어를 타든 논리적으로 데이터를 다뤄야 하니까. 꼭 데이터 사이언티스트가 아니더라도 자료를..

유튜브 재생시간 구하기
앞으로 프로그래밍이 보편화될 것 같아요. 뭔가 각잡은 이야기 같지만 전혀 그렇지 않습니다. 인간은 계산기를 사용하기 시작했어요. 계산기는 인간의 인지능력을 넘어서는 연산이 가능합니다. 이러한 효과뿐만 아니라 효율도 뛰어납니다. 계산기를 쓰면 속도가 무척 빨라요. 정확도는 덤입니다. 요즘 사람들은 계산기를 어려움 없이 사용해요. 미래에는 아마 프로그래밍이 그럴 거예요. 코딩을 하지는 않겠지만 프로그래밍 기반의 도구를 쓰겠죠. 서론이 장황한데 정리하자면 이렇습니다. '프로그래밍은 도구일 뿐이다!' 그냥 계산기 같은 거예요. 있으면 편리하니까요. 그런 취지에서 유튜브 재생 시간을 구해봅시다. 사용하는 건 두 가지 크롬 웹브라우저 자바스크립트 유튜브에는 채널마다 플레이 리스트가 있어요. 한편 플레이 리스트의 총..

C언어 포인터
C언어의 꽃이라 하면 포인터입니다. 처음엔 이거 왜 쓰나 싶지만 익히면 포인터를 사랑하게 될 거예요. 문자열, 배열, 함수를 이해하는데 도움이 되고 그것들을 사용하는 폭을 넓혀주거든요. 한편 포인터를 처음 접하면 대부분의 반응은 이렇습니다. "어렵다..." 어렵지 않아요~ 생소할 뿐입니다. (물론, 포인터를 '잘' 쓰는 건 어렵습니다. ㅎㅎ;) 최대한 쉽게 설명해볼게요. 코드를 보시죠~ #include int main() { int numA = 10; int *ptrA; printf("numA주소: [%p]\n", &numA); // numA의 주소값: 0x7fff508979e8 printf("ptrA주소: [%p]\n", ptrA); // ptrA의 주소값: 0x7fff50897a08 ptrA = &n..