본문 바로가기

Programming

(136)
캐싱을 한다면 고려할 점 (Spring, @Cachable, @CacheEvict) 서버에서 어떤 요청에 대해서 캐싱을 하려면 고려해야 할 것들이.. 1. 정상 반환에 대해서만 캐싱 2. 유효한 캐싱 시간을 설정하고 지나면 삭제 후 다시 로딩/계산 후 캐싱 (왜냐면 그 사이에 내용이 변화할 수 있으니까) 스프링 프레임워크를 놓고 본다면... @Cachable(value = "캐시이름", key = "#캐싱키이름(파라미터)", unless = "#result == null") public Object methodForCache(Object 캐싱키이름(파라미터)) { 무언가 작업을 하고; return 결과물; } 이 때, 스프링 캐시의 구현체로 설정하는 ehcache, redis 등의 cache manager 에서 ttl (time to live) 설정을 하는 것도 가능하겠지만.. 수동으로..
Java collection 교집합 retainsAll() 에 대하여 (List, Set, 시간복잡도, 최적화) List vs Set, Time complexity 보통 2개의 다른 콜렉션 등에서 같은 것들을 찾는 등의 동작은 List 의 경우는 n^2 시간복잡도이다 (빅오) 그래서 중복이 없다면 기준이 되는 콜렉션을 Set 으로 사용하면 n 시간복잡도로 해결 할 수 있다. UUID 교집합을 골라내는 작업 중 최적화가 필요한 부분이 있었는데, List 두개를 retainAll() 을 사용해서 구하고 있었다. n^2 의 경우에 약 50만^2 정도의 연산횟수가 필요했는데 retainAll() 을 사용할 필요없이 기준을 Set 으로 해서 O(n) 으로 마칠 수 있을 것 같다는 의견을 전달했다. 최초 내 생각은 Set 을 사용하되 retainAll 에 해당하는 메서드를 만들면 된다는 말이었지만 Set, List 로 기존 ..
HTTP 메시지에 관하여.. (HTTP/1.1 기준) HTTP 메시지에 관하여.. (HTTP/1.1 기준) 기본적인 HTTP 메시지의 구조는 메시지 헤더, 개행문자, 메시지 바디 로 만들어진다. 크게 Request, Response 메시지로 나눌 수 있다. 요청과 응답 시 헤더의 차이가 나는데, 요청 시: 리퀘스트 라인, 리퀘스트 헤더필드, 일반 헤더필드, 엔티티 헤더필드 응답 시: 상태 라인, 리스폰스 헤더필드, 일반 헤더필드, 엔티티 헤더필드 메시지 바디와 엔티티 바디의 차이점은? 기본적으로 HTTP 메시지 바디의 역할은 리퀘스트와 리스폰스에 관한 엔티티 바디를 운반하는 일이다. 따라서 기본적으로 메시지 바디와 엔티티 바디는 같지만, 전송 코딩이 적용되는 경우에 엔티티 바디의 내용이 변화하기 때문에 메시지 바디와 달라지게 된다. 메시지 바디 안에 엔티티..
MySQL vs Cubrid, 차이에 관하여... MySQL vs Cubrid, 차이에 관하여... 일반 기능 데이터 타입 쿼리 함수 그냥 이러이런게 다르다더라 정도로 보면 될 듯 하다. 전체 차이점도 아니다. 일반 기능 범주 MySQL Cubrid 테이블 내의 속성 수 ~3398 제한 없음 레코드 크기 ~65534 (BLOB, TEXT 별도) 제한 없음 명명 규칙 (테이블, 뷰, 인덱스) 대상_이름 [소유자].대상_이름 데이터베이스 이름 도메인 내 고유 도메인 내 고유 데이터베이스 이름 길이 64바이트 최대 17바이트 테이블 이름 데이터베이스 사용자 계정 안에서 고유 데이터베이스 안에서 고유, 대소문자 구분 없음 데이터 타입 대체적으로 비슷하지만, 다른 부분들이 있음 MySQL 에서 타입이 더 세분화하여 나뉘어져 있다. Cubrid 는 BIT 가 BI..
HTTP 2.0 에 관하여... HTTP 2.0 에 대하여... HTTP 2.0 등장배경 HTTP 2.0 특징 정리 https://github.com/itdar/TIL/commit/533167fb17d0c7d0a25ec6dcc9f905778a5b93fd chore: HTTP 2.0 에 관하여... · itdar/TIL@533167f + HTTP Message github.com 1. HTTP 2.0 등장배경 (2015) 과거의 웹 요청 및 전송속도에 쓰던 전송기술이 현대와 맞지 않음 HTTP 1.1 이 1999년도에 나온 후 웹 전송기술의 표준이 게속 유지되었음 옛날의 웹 요청과 다르게 최근에는 요청의 횟수와 요청 리소스 용량도 많아짐 전송속도도 옛날에 비해 100배 이상 빨라지게 됨 2. HTTP 2.0 특징 바이너리 프로토콜 텍스트..
DispatcherServlet 에 관하여... (스프링 디스패처서블릿) Dispatcher Servlet 에 관하여.. WAS -> Servlet Container (Servlet Context) -> Front Controller (Dispatcher Servlet) -> Servlet 으로 보면 될 것 같다. 그냥 오래전에 보고 막연하게 알고있다가 정리를 할 필요가 있어서 정리했다. 스프링 뿐만 아니라 대부분의 web MVC 프레임워크들은, 요청을 웹어플리케이션의 다른 컨트롤러나 기능제공 부분에 전달(dispatch) 해주는 센터 서블릿을 두고 디자인 되어있다. 스프링의 DispatcherServlet 은 Spring IoC Container 와 완벽히 통합되는 등 스프링이 제공하는 아주 많은 기능들을 사용할 수 있게 해준다. 프론트컨트롤러 패턴으로 부를 수도 있고, 다..
GRASP 책임할당패턴에 대하여... GRASP (General Responsibility Assignment Software Pattern) 에 관하여.. 책임 기반 객체지향 관점에서 객체에 책임을 할당하기 위한 패턴을 정리한 것 책임과 역할 이라는 말을 많이 쓰는데, 이 때 책임의 종류를 나열하고 어떻게 할당할 것인지에 대한 기준 패턴으로 보면 될 것 같다. Information Expert 역할을 수행할 수 있는 정보를 가지고 있는 객체에 역할을 부여한다. Problem: What is a basic principle by which to assign responsibilities to objects? Solution: Assign a responsibility to the class that has the information nee..
HTTPS 에 관하여.. HTTPS 에 관하여.. HTTPS 란? IP(3계층) 위에 TCP(4계층) 위에 SSL/TSL(5계층) 위에 HTTP(6계층) 를 사용하는데 SSL 로 암호화를 해서 보안성을 높였다. 대칭키를 사용하는데, 이 대칭키를 교환하기 위해서 비대칭키를 사용하여 보안을 유지한다. 과정 RSA 등의 비대칭 암호화 방법을 이용해서 서버에서 개인키(private)/공용키(public) 을 만들어둔다. 서버의 개인키를 인증기관을 통해 인증기관의 공용키로 감싸 인증서를 받아둔다. 클라이언트가 접속 시, 인증서를 보내주고 클라이언트는 인증기관의 인증서를 확인하면서 서버의 공용키를 꺼낸다. 곧바로 서버의 비대칭키를 이용하여 데이터를 암복호화 하여 사용할 수도 있을 것 같으나, 성능 이슈로 대칭키를 사용한다. 클라이언트에서 ..