전체 글(313)
-
Blocking and Non-blocking I/O
Blocking and Non-blocking I/O NIO는 데이터들을 보관할 클래스들을 정의하고, 데이터를 블록들 내에서 처리하는 방식으로써 low-level 최적화의 이점을 가집니다. I/O란 컴퓨터와 세상을, 하나의 프로그램과 컴퓨터를 연결해주는 인터페이스 입니다. 대부분의 I/O가 실제로 운영체제에 내장되어 있는 것은 컴퓨터 시스템에 매우 중요한 요소입니다. 모든 I/O는 1 byte들을 하나씩 Stream으로 읽어야했습니다. 이는 객체를 byte로 변환하거나, 반대로 byte를 객체로 변환해주는 기능을 했습니다. NIO는 I/O와 동일한 역할과 목적을 가지지만, Stream과 달리 block I/O라는 메타포를 사용합니다. 나중에도 나오겠지만, block I/O는 stream I/O보다 효율적..
2022.06.04 -
[JPA] 생성키 전략
생성키 전략 IDENTITY는 auto increment를 뜻하는데, mysql 외 DB 벤더들은 이를 지원하지 않기 때문에 SEQUENCE를 사용합니다. Identity sequencing DB에 있는 IDENTITY 컬럼을 이용해 객체에 자동으로 id를 부여하는 방법입니다. MySQL, Postgres에서 지원하며, Oracle은 지원하지 않습니다. 장점만 있는 것은 아니며, DB에 insert 되기 전에 id가 부여되지 않기 때문에 flush가 돼야만 id를 획득할 수 있습니다. Sequence objects DB 객체들을 사용해 id를 생성합니다. Oracle, Postgres에서 지원합니다. INCREMENT를 DB의 시퀀스 객체에 설정해놓기 때문에 id 선할당(preallocation)이 가능..
2022.06.01 -
[HTTP강의] HTTP 캐시
본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다. 캐시란 캐시는 서버에 요청하지 않고 캐시 저장소에서 데이터를 꺼내 쓸 수 있기 때문에 네트워크 통신 비용을 아끼고 빠른 속도로 사용자에게 서비스를 제공할 수 있습니다. 캐시가 만료되었을 때 어떤 대안이 있는지도 알아두면 좋을 것 같습니다. 캐시적용 cache-control을 헤더에 넣어 캐시를 설정할 수 있습니다. 주요 옵션은 max-age(초 단위로 만료기간 설정)이 있습니다. 검증헤더와 조건부 요청 만약 캐시의 유효기간이 만료되었다면 어떻게 해야 할까요? 서버에 요청을 해서 다시 그 데이터를 받아와야 할 것입니다. 하지만 변경이 적은 이미지 데이터의 경우 그럴때마다 다시 데이터를 다운로드 받기엔 ..
2022.05.26 -
[SOLID] 인터페이스 분리 원칙(Interface segregation principle)
인터페이스 분리 원칙(Interface segregation principle) 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. 예를 들어, ArticleWriteService, ArticleListService, ArticleDeleteService가 각각 상위클래스를 가진다면 ArticleService 하나가 아닌 각각의 상위클래스를 가져서 ISP에 부합하는 패턴입니다. 출처: 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 - 최범균 저
2022.05.25 -
[SOLID] 리스코프 치환 원칙(Liskov substitution principle)
리스코프 치환 원칙(Liskov substitution principle) OCP를 받쳐 주는 다형성에 관한 원칙을 제공합니다. LSP는 다음과 같습니다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다. public void someMethod(SuperClass sc) { sc.someMethod(); } SuperClass의 someMethod()에 하위 타입의 객체를 전달해도 정상적으로 동작해야 한다는 것이 LSP 입니다. someMethod( new SubClass() ); 코드로 예를 들어보면, Coupon 클래스에서 Item을 파라미터로 받아 할인 금액(할인율 * 가격)을 반환하는 메서드가 있습니다. 이 때 구현클래스 할인이 안되는 아..
2022.05.25 -
[SOLID] 개방 폐쇄 원칙(Open-closed principle)
개방 폐쇄 원칙(Open-closed principle) 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 합니다. 풀어 보면 다음과 같습니다. 기능을 변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다. FlowController(사용하는 코드)에서 ByteSource(interface)를 사용한다면, 메모리에서 byte를 읽어 오는 기능을 추가해야 할 때 MemoryByteSource클래스를 구현해서 FlowController의 코드를 수정하지 않고 기능을 추가할 수 있습니다. 즉, 확장되는 부분을 ByteSource로 추상화했기 때문에 확장에는 열려있고 (기능을 사용하는 코드의) 변경에는 닫혀 있다고 표현한 것입니다. 개방 폐쇄 원칙이 깨질 대의 주요 증상 추상화와 다형성이 O..
2022.05.25