전체 글

    Welcome To Spring :)

    참고 : asfirstalways.tistory.com/334 드디어 나한테도 봄이 왔다. 한국에서 백엔드 개발자를 한다고 하면 피해갈 수 없는게 바로 이 봄인 것 같다. 이 봄은 내가 이때까지 쓰던 프레임워크랑 반대로 규칙을 강제하는 부분이 많기에, 프레임워크에서 하고자하는 의도와 동작한느 원리를 알지 못하는 상태에서 접근하면 피상적인 이해만 한 후 끝날 가능성이 높다 생각했다. 그래서 하나하나... 정리를 해보자. 글이 혼란스러울 수 있는데 남이 읽으라고 쓴 글이 아닌 내 머릿속에서 정리한걸 남겨둔거라 혼란스러우면 정확히 읽고 있는거 맞다. ## Servlet 자바 개발자라면 다 들어봤을 단어. 그러나 나는 C# 개발자였기에 들어본 적 없다. Servlet 클래스라고 있는데, 이게 뭘까요? docs...

    함수형 언어에서 state를 관리하는 법

    (Elixir 특징상, 이 글에서의 Process는 Erlang Process입니다.) 서론 함수형 언어의 특징으로는 Pure Function이 있다. 하지만 프로그램을 짜면 state 관리는 필요하다. 따라서 pure function에 state를 넘겨주는 방식으로 관련 처리를 한다. (elixir에서는 그랬다.) 그런데 `그럼 함수형 언어에서 state 관리는 어떻게 해?' 라는 질문을 친구한테 들었다. 질문 자체가 포괄적이긴 하다. 그냥 얼랭 프로세스에서 하나 들고있고, 그걸 쓴다 하기에는 친구가 납득하지 못한 느낌이었고, 나도 납득할만한 설명을 못했다고 생각했다. 납득할 만한 설명을 하려고, 인터넷을 좀 찾아봤다. 어느정도 납득할만한 설명을 봐서, 정리하고자 이 글을 쓴다. (https://www..

    신비로운 C++의 세계 (feat. vector와 I64d)

    요약 long long을 size_t에 넣지 말자 long long을 받을때 %I64d안되면 %lld를 써보자 resize를 하던가 생성자에 갯수를 넘기던가 하나만 하자. 오늘은 PS(알고리즘 문제풀이)를 하면서 만난 신비한 현상을 공유한다 현상 https://www.acmicpc.net/problem/1916 다음 문제를 제출했는데, 무려 메모리 초과가 나왔다. 단순한 다익스트라 구현에 메모리 터질 일이 없는데? 그렇게 한시간동안 헤맸다. 이렇게 해맨건, 로컬에서는 발생안하고(VS2019) 오로지 백준에서만 메모리 초과가 발생했기 때문이다. 조사 결과, 문제를 일으킨 건 다익스트라 부분이 아니라 이 부분이였다. vector mat(n); mat.resize(n); for (int i = 0; i < m..

    내가 읽으려고 하는 데이터베이스 정규화 정리

    나는 데이터베이스 수업을 2학년때 일본에서 들었다. 그때의 지식이 나의 머리 뒷편에 남아서 내가 DB 모델링을 할 때 항상 도와주는 느낌적 느낌은 들지만, 시험을 보라고 하면 딱 나오질 않는 느낌의 지식이 되었다. 이러한 방법은 무의식중에 날 도와주지만, 주기적으로 정리하면서 더욱 도움이 되게 할 수 있다. 그러니까 정리한다. (https://ko.wikipedia.org/wiki/데이터베이스_정규화) 여기 참고했음 https://www.studytonight.com/dbms/database-normalization.php 여기도 정규화는 왜 하는가? 데이터 중복을 피하려고 테이블 간 좋은 관계(여기서는 잘 조직된 관계)를 형성하려고 이러한 좋은 관계를 이루어내기 위해서, 각 단계별 진행하는 과정이 있다..

    테이블간의 Cardinality와 객체 내의 Attribute간의 Cardinality?

    Introduction 며칠 전 친구한테 질문을 받았다. 학교의 DB 과제였는데, DB 모델링시 테이블간의 Cardinality는 중요하게 여겨지는데, 한 테이블(Entity가 속하는) 안의 Attribute간의 Cardinality는 중요하게 여기지 않는 이유를 설명하라는 것이었다. 당연하게 걍 신경안써도 되는거 아님? 이라는 말을 하기 싫었다. 따라서 나름대로의 이유를 생각하고 조사해보았다. 이런 질문에 답하기 위해서는 Cardinality의 정의와 그러면 왜 테이블간의 Cardinality를 신경쓰는가?에 먼저 답하는 것이 중요하다. Cardinality의 정의 Cardinality는 집합론에서 사용하는 단어로, 집합의 크기를 뜻한다. the cardinality of a set is a measu..

    Flask + SQLAlchemy를 사용하며 배운것들을 정리

    migrate 변수는 뭘 하는거냐 Migrate 변수는 뭐하는 변수람 flask 에서 migration을 하는 코드를 보면 다음과 같은 코드를 볼 수 있다. migrate = Migrate(app, db) 역시나 이게 왜 필요한지 말 안해주는 사람이 많다. 그래서 찾아봤는데...커맨드를 입력하기 위해 필요한 변수였다. flask 공식문서 의 Command Reference를 보면. The following example initializes the extension with the standard Flask command-line interface: from flask_migrate import Migrate migrate = Migrate(app, db)이것까지 해야, db migrate를 실행시킬 수..

    C++의 Rule of Zero

    한참 전에 업무에서 C++을 사용하던, 평생 C++을 쓸 것 같았던 그 시절 공부했던 기록을 찾아서 남겨본다. Rule of Three, Rule of Five에 대해서 간단히 정리하자면... Rule of Three는 소멸자, 복사 생성자, 복사 할당 연산자 중 하나를 정의했다면 다른 것도 같이 정의해야 한다는 것이다. Rule of Five는 모던으로 넘어오면서 위의 3개에서 이동 생성자, 이동 할당 연산자를 추가 한 것이다. 단순히 무조건 기계적으로 만들어라라기 보다는, 저 중 하나를 만들었으면 다른 것에 대한 생각을 무조건 하고, 적절한 처리를 해야된다는 뜻이다. (포인터를 멤버로 가지고 있고 소멸자에서 그 포인터를 할당 해제 하는 클래스가 있을 때, 복사 생성자를 정의 안하면 복사된 인트선스와 ..

    Elixir의 Ecto에서 virtual 키워드가 의미하는 것

    처음에는 OOP의 virtual 개념이랑 헷갈려서 많이 혼동했던 부분. ecto에서 field를 정의할 때 virtual을 정해줄 수 있다. 여기서 virtual은 DB에 저장하지 않는 field라는 뜻이다. DB에 저장하지도 않은 테이블이 왜 필요하나면, 이것을 이용해서 유용한 처리를 할 수 있기 때문이다. 그 스키마와 연관된 값이지만 저장할 필요는 없는, 그런 값이 필요할 때가 있다. 공식 문서에서 발췌한 설명이다. 이 경우에서는 password 필드를 virtual로 하였다. password 필드는 평문 패스워드가 들어가는데 DB에 직접 들어갈 필요는 없다. 하지만 user와 관련된 값이기에 분리하기도 애매하다 virtual로 저장되기에 DB에 저장되지 않는다. changeset에서 이 값을 변환해..