썸네일 에어드롭(AirDrop)과 네트워크 어쩌다 보니 맥 - 아이폰 - 아이패드를 사용하고 있는데, 애플 기기가 제공하는 기능들 중에 제대로 작동하면 참 좋은데 안 되면 종잡을 수가 없는 것 중에 하나가 에어드롭(AirDrop)이다. 오늘도 아이패드에서 맥으로 전송이 안 되어서 한숨을 쉬다가, 에어드롭이 어떻게 작동하는 건지 네트워크 관점에서 좀 더 파보면 재미있겠다는 생각을 했다. 어떻게 작동하는 건지 알면 작동 안 할 때 그래도 조금이나마 감을 잡을 수 있지 않을까… 하는 희망을 안고! 에어드롭은 결국 와이파이다 일단 아래 글을 참조해 보자. AirDrop uses Bluetooth to create a peer-to-peer Wi-Fi network between the devices. That means you don't need to ..
썸네일 테스트에 임베디드 DB 쓰지 말라니까 케이랑 함께 집넘기기 프로젝트를 진행하면서, 그동안 제대로 해보지 못했던 것들을 차근차근 시도하면서 또 여러 시행착오를 거치는 중이다. 그 중에서도 역시 꽃은 테스트라고 할 수 있겠다. 이번에도 역시나 밑도끝도 없(는 것처럼 보이는) 문제가 터져서 좀 당황했었는데, 생각보다 꽤 흥미롭고 재미있는 주제라서 정리해 본다. 문제의 시작 더미 데이터를 담은 data.sql를 정의해 주고, 일단 테스트용 DB는 임베디드 인메모리 DB(H2)를 쓰기로 했다. 사실상 이게 문제의 시작이라고 보면 된다. INSERT INTO rent_article (rent_article_id, address ...) VALUES ('1', '서울특별시 성동구', ...), ('2', '서울특별시 성동구', ...), ('3', '서..
썸네일 해시테이블 하나에 담긴 고민들 박재성 님의 Next-Step 스터디를 진행하면서 WAS를 구현하는 미션을 수행했다. 처음에는 HTTP Header를 HashMap 형태로 구현하다가 이런 고민이 생겼다. 결국 이 헤더를 순회해서 문자로 만든 다음에 쏴 줘야 하는데, HashMap은 요소들 간의 순서가 보장이 안 된다. 그렇다면 보낼 때마다 헤더 필드의 순서가 바뀌게 되는데… 물론 헤더 순서가 바뀌어도 작동은 잘 된다. 헤더 값만 결국에 들어있으면 되기 때문. 하지만 여기에도 일종의 컨벤션이 있을 것이다. 자료들을 찾아보면 대부분 Host → Accept → User-Agent 같은 순으로 일관된 공통분모가 있다. 물론 클라이언트와 서버의 명세에 따라 또 다른 헤더를 넣을 수도 있고, 요청마다 헤더에 담기는 정보들도 다르기 때문에 뭐라 ..
썸네일 백만 개 row를 수정하다가 트랜잭션을 롤백한다면? 요새 Hussein Nasser이라는 유쾌한 개발자 아조시의 Fundamentals of Database Engineering이라는 강의를 듣고 있는데, (엄청 재밌다!) 인덱스/트랜잭션 파트에서 꽤 재미있는 질문을 던지는 아티클을 읽었다. 아래는 아티클과 비슷한 내용을 담고 있는 이 아조시의 유튜브 비디오. 아조시 사는 데 어딘지 모르겠지만... 좋아 보이시네요 요약하자면, 엄청 많은 개수의 row를 수정하는 트랜잭션을 돌리다가 에러가 나서 해당 변경사항을 롤백하려면 시간이 많이 걸릴 텐데, 과연 DB는 어떻게 이 작업을 수행할까? 하는 질문이었다. 바로(Eagerly) 롤백하기 Lazy하게 롤백하기 DBMS마다 접근 방식이 다른데, 우선 해당 강의에서 주로 예시로 들고 있는 PostgreSQL에서는 ..
썸네일 외계어 같은 git 메시지들을 이해해 보자 깃을 CLI로 쓰다 보면 명령어를 칠 때마다 뜨는 메시지들이 있다. 사실 원하는 작업이 성공할 때는 이 메시지를 제대로 읽을 생각도 잘 안 하는데, 그러다가 예전에 detached HEAD로 갔다가 삽질했던 적이 있기도 하고, 개인적으로 깃을 쓰면 쓸수록 진짜 신기하고 좋은 기술이라는 생각이 들어서 어떻게 작동하는 건지 궁금하기도 했다. 그래서 아주 대표적인 명령어라고 할 수 있는 commit/push, pull, rebase/merge 메시지를 뜯어보면서 이 메시지들이 어떤 의미를 가지고 있는지, 그게 git의 동작 원리랑은 어떤 관계가 있는지 탐구해 보려고 한다. commit을 해보자 자, test1.txt라는 파일에 “This is test!”라는 내용을 적어 커밋한다고 생각해 보자. git add..
썸네일 JPA 엔티티의 복합 키는 Serializable이어야 하는 이유 김영한 님의 을 읽다 보니, 복합 키를 매핑하는 @IdClass와 @EmbeddedId 식별자 클래스가 모두 Serializable 인터페이스를 구현해야 한다는 조건이 적혀 있었다. 책에서 그 이유는 자세히 설명되어 있지 않았는데, serialize라는 말 그대로 이 인터페이스를 구현해야 객체에서 DB 상의 복합 키로 직렬화가 가능하다는 정도의 의미일 것 같다는 생각은 들었지만, 구체적으로 어떤 역할을 하는 건지 궁금해졌다. 그래서 공부한 내용들을 정리해 본다. Serialization이 뭐야? Serialization은 쉽게 말하면, 자바의 클래스 정보를 이진 스트림으로 바꾸는 것을 말한다. 여기서 말하는 ‘클래스 정보'에는 클래스의 이름, 멤버 변수의 개수, 멤버 변수(자료형과 변수명, 값) 등이 포..