후보 키 튜플을 유일하게 식별할 수 있는(유일성과 최소성을 만족하는) 속성들의 부분집합 기본키가 될 수 있는 것들 기본 키 (PK) 후보키 중 뽑은 것 Null이면 안됨. (개체 무결성의 첫번째 조건) 기본키로 정의된 속에는 동일한 값이 중복되어 저장될 수 없음(개체 무결성의 두번째 조건) 무결성? 개...
의존성 주입(Dependency injection)과 세가지 방법
스프링은 빈 컨테이너를 통해 빈 객체를 관리해준다 (IoC). 이 때, 필요한 곳에 적절히 객체를 주입해 사용해야 한다. (DI) 사실 스프링을 사용하지 않더라도, 객체 지향적 관점에서 사용되는 개념 의존성 : 어떠한 객체 A가 다른 객체 혹은 인터페이스 B를 사용할 때 A는 B에 대한 의존성이 발생하며, “A는 B에 의존한다.”...
함수의 메서드 (call, apply, bind)
: 함수에 존재하는 기본 메소드. 첫번째 인자로 this를 대체할 수 있어, 실행 컨텍스트(window)를 다른 것으로 바꿀 때 사용가능. 이미 할당되어있는 “다른 객체의 함수나 메소드”를 “호출하는 해당 객체에 재할당” 따라서 window를 현재의 객체를 참조하도록. MDN예시 반복해서 보기 c...
디미터 법칙(law of demeter)
객체가 자기 자신을 책임지는 자율적인 존재이다. 따라서 객체 내부 구조를 묻지 말고 무언가를 시켜라. 이렇게 하면 객체 내부를 바깥으로 노출시키지 않게 된다. 디미터 법칙을 어긴 코드 object.getChild() .getContent() .getItem() .getTitle(); 기차 충돌(tr...
일급 컬렉션(first class collection)
public class Cards { private List<Card> card; public Cards(List<Cards> cards) { this.cards = cards; } // .. } 특징 컬렉션을 wrapping하면서 그 외 다른 멤버변수가 없는 상태. 비즈니스에 ...
TDD(Test Driven Develop)
: test 주도형 개발. 기능 개발 전 가능한 모든 경우에 대해 테스트를 먼저 작성해보는 것 테스트 코드를 작성하는 방법들과는 다른, 소프트웨어 개발론적인 것 장점 리팩토링에 용이. 크기가 커진 함수를 여러 함수로 나누는 과정에서 테스트 코드를 통해 계속 확인을 해가며 리팩토링을 해 중심을 잡을 수 있다. 새로운 기능을 추가했을 때...
c++과 관련해 겪은 이슈들, 간단한 메모
200317 Vector는 memset 불가 cstring 라이브러리 C++ string string.erase(index부터, length만큼); string.replace(index부터, length만큼, ""얘로 변경); string.find(""얘...
OWT server 토큰 생성 과정 분석
: 토큰 생성과정 이해되지 않을 때 아래의 과정 참조하기 Client API -> createToken(room, user, role, preference) 여기서 preference = {isp: 'isp', region: 'region'}; 받은 to...
Kafka 아키텍처
Topic과 Partition Topic 하나의 관심사. 이 것을 구독하여 사용 Partition topic를 쪼갠 작은 단위 HA를 위해 replication 설정을 할 경우 partition 단위로 각 서버들에 분산되어 복제 장애 발생 ...
JVM의 가비지 컬렉터
: 유효하지 않은(더 이상 불필요한) heap의 객체 메모리를 JVM의 데몬이 정리해주는 것. JVM의 GC 예시. C++이나 C에서는 free()를 통해 직접 할당 해제해줘야 한다. 위의 그림에서 permanent 영역은 heap에서 제외 GC 설계의 바탕 : 대부분의 객체는 금방 unreachable 상태가 된다. e....