캐시란 시간이 많이 걸리는 연산을 미리 계산해놓고 빨리 가져다 쓰거나, DB 부하를 줄이기 위해 Read 가 많이 발생하는 데이터를 캐싱해놓고 빨리 가져다 쓰는 기법이다.(write 를 위한 캐시 또한 존재) 그리고 캐시를 하는 위치에 따라 로컬캐시, 분산캐시로 나눌수 있는데 로컬캐시의 경우 자바의 ehcache 가 대표적이며 속도는 로컬캐시가 가장 빠르다. 왜냐하면 분산 캐시의 경우 별도의 서버로 외부에서 작동하기 때문에 네트워크 통신같은 오버헤드가 필연적으로 발생한다. 그럼 가장 빠른 로컬 캐시가 좋으니 무조건 로컬 캐시를 사용하면 되지 않을까? 서비스의 규모가 작고 모놀리틱하게 서버 한대로만 운영한다면 초창기엔 로컬캐시만 사용해도 문제가 없을수도 있다. 하지만 서비스가 성장함과 동시에 서버 한대로는..
복습하기
이번 글에선 자바 JPA 에 대해 알아보고자 한다. 자바 JPA 란 ORM (Object–relational mapping) 기법을 자바에 적용하기 위해 만들어진 API 표준 이다. 인터페이스로서의 역할만 하기 때문에 실질적인 구현체들은 자바에서 제공해주는 JPA 를 인터페이스로 사용하여 만들어져 있다. 대표적인 JPA 구현체들은 Hibernate, EclipseLink, DataNucleus, OpenJap, TopLink 등이 있고 하고 개인적으론 Hibernate 만 써보아서 각 구현체들에 대한 장단점은 아직 잘 모르겠다. 그리고 Java JPA 에선 영속성 컨텍스트(Persistence Context) 라는 개념이 나오는데 JPA 에선 이 영속성 컨텍스트에 대해 꼭 알아야한다. 그럼 영속성 컨텍스..
1. OAuth2(open authorization 2.0) 란? 2. OIDC(open id connect) 란? OIDC 에 대하여 알아보니 OAuth2 기반으로 작동하는 인증 프로토콜 이다. OAuth2 기반으로 작동 한다는게 무엇인지 좀 살펴보니 작동 메커니즘은 OAuth2 와 완전 똑같고 사용자 권한을 바탕으로 특정 데이터에 접근 하지 않고 사용자 인증과 사용자 정보 조회에 관해서만 처리한다. 그래서 개인적인 생각으론 OAuth2 프로토콜을 사용자 인증 용도로만 사용하는거 같은데 굳이 이걸 또 인증 프로토콜로서 OIDC 라는 명칭을 만들었어야 했을까 라는 의문이 든다. 왜냐하면 처음 OIDC 라는 단어를 들었을때 완전 새로운 프로토콜인거 같은 느낌이 확 들었기 때문이다. 어쨌든 OIDC 에 대해..
최근 외래키에 대하여 질문을 받은적이 있다. 실무에서 잘 사용하지 않고 성능적인 이슈가 있다는건 어렴풋이 기억나는데 확신이 서지않아 정확하게 대답을 못한 일이 있었다. 오래되서 기억이 잘 안날수도 있겠지만 정확히 이해하지 않고 이때까지 관성적으로 사용한 기분이라 이번 기회에 제대로 알아봐야겠다. 내 기억 속 외래키.. 학부생 시절 관계형 데이터베이스에 대해 배울때 외래키에 대해서 배웠었고 스키마 설정시 외래키도 지정했었던걸로 기억한다. 근데 막상 실무에 투입되어보니 외래키를 다들 쓰고있지 않았다. 보통 외래키를 사용함으로 인해 데이터 정합성 문제를 해결할수 있고 이로 인해 데이터 신뢰도가 높아질수 있을 것이다. 하지만 실무에선 이 외래키를 사용함으로 인해 얻는 장점보다 단점이 더 많아 보였기 때문에 외래..
1. DB 에서 Index 란? 2. Index 의 장점 3. Index 의 단점 4. 효율적인 Index 설정 방법 1. DB 에서 Index 란? 우선 DB 에서 Index 는 DBMS 에서 조회시 탐색 속도를 높이기 위한 기술 이다. 사전에서 단어를 찾을때 찾아보기 쉽도록 일정한 순서로 나열한 목록이라고 생각하면 된다 (색인) Index 없이 데이터를 저장한다면, 데이터는 순차적으로 쌓이고 이러한 구조에서 원하는 데이터를 찾기 위해선 모든 데이터에 대하여 순차탐색(O(n))이 일어난다. 이것을 우린 풀 스캔 (FULL-SCAN) 또는 테이블 스캔(TABLE-SCAN) 이라고 부른다. 그래서 이 쌓인 데이터들을 좀더 효과적으로 조회 하기 위해 DBMS 는 특정 자료구조를 활용하여 특정 데이터를 쌓아 ..
리눅스 서버에 curl을 통해 파일을 다운로드 받고 전역에서 사용하기 위해 /usr/local/bin 으로 옮긴후 사용하였다. 근데 문제가 하나 있었는데 일반계정에선 잘 작동하였지만 루트계정에선 Not Found 가 뜨면서 작동하지 않았다. 그래서 root 계정의 환경변수쪽을 살펴보니 /usr/local/bin이 없었다. 환경변수에 /usr/local/bin을 추가해주면 해결 되는 문제이긴 했는데 bin 디렉토리가 나뉘어진 이유가 궁금해졌다. 참고 https://wookiist.tistory.com/10
포워드 프록시 포워드 프록시는 클라이언트와 서버 사이에 있는 중계 역할이라고 보면된다. 클라이언트의 요청을 받아 그대로 서버에게 포워딩하고 서버에선 그 요청에 대한 답을 해주는데 이 역시 그대로 클라이언트에게 그대로 포워딩 하는 역할을 한다. 예를 들면 이대리가 나에게 김과장에게 가서 회사로고 파일을 받아오라고 한다. 그럼 나는 이대리의 요청대로 김과장에게 가서 회사로고 파일을 받아 이대리에게 전달한다. 이렇게만 보면 난 중간에 껴서 왔다갔다만 하는 별 볼일 없는 역할로만 보인다 하지만 이 포워딩 프록시를 이용해 url 필터링 그리고 in/outbound 트래픽들을 로깅할수 있다. 이외엔 우회용도로 프록시 서버를 사용하곤 한다 그러고보니 초딩 컴퓨터 시간때 이 프록시기능을 이용해 학교에서 차단해놓은 사이..