til
[WEB] HTTP Method
HTTP Method GET 서버에게 Resource를 보내도록 요청하는데 사용 (서버의 Resource를 읽음) HEAD GET과 동일하지만 서버에서 Body를 Return 하지 않음 Resource를 받지 않고 오직 찾기만 원할 때 object가 존재할 경우 응답의 상태 코드를 확인할 때 서버의 응답 헤더를 봄으로써 Resource가 수정되었는지 확인 PUT 서버에 문서를 쓸 때 사용 (GET과 반대) PUT 메소드는 서버가 Client 요청의 Body를 확인한다. 요청된 URL에 정의된 새로운 Resource를 생성하기 위함 요청된 URL이 존재할 경우 대체하여 사용 POST Server에 Input Data를 보내기 위함 (HTML, form에 많이 사용) PUT vs POST PUT은 서버의 R..
[DBMS] Redis(레디스)란? - 5
Redis vs Memcached 앞서 우리는 세션을 저장하는 데 있어, In-memory DB를 활용하는 것이 효율적이라는 것을 배웠다. 같은 Relation Database라도 MySQL, MSSQL, Orcale 드으이 종류가 있듯이, In-memory DB에도 다양한 데이터베이스들이 존재한다. 그중에서도 세션 저장소로 가장 많이 사용되는 메모리 디비로는 Redis와 Memcached가 있다. 두 개의 공통점으로는 In Memory 저장소라는 점과 Key-value의 저장 방식을 가지고 있다. 이들의 특징은 다음과 같다. 무료 오픈소스 데이터베이스 이기 때문에 라이선스 비요이 대폭 절약된다. Sub-millisecond 단위의 높은 응답 속도를 보여주기 때문에 대용량 트래픽을 고려하는 우리 프로젝트..
[DBMS] Redis(레디스)란? - 4
Redis 활용하기 - 세션 스토어(Session Store) 서버 분산 처리 환경에서의 세션 불일치 보통 실무에서는 트래픽 부하를 방지하기 위해 로드밸런서에 서버를 여러대 운영한다. 그러나 서버를 여러대를 운영하게 되면 클라이언트의 세션이 서로 서버마다 달라 서비스 이용에 지장을 줄 수 있다는 문제점을 가지게 된다. 세션 불일치 문제와 해결방안 대한 자세한 내용 참고 --링크-- In-memory DB vs Disk based DB 별도의 세션 스토리지를 구성하여 세션의 정합성 문제를 해결하려고 할 때, Session storage를 이용하는 방법이 가장 이상적이다. 그럼 세션 스토리지로서 적합한 데이터베이스는 무엇일까? in-memory DB 메모리(RAM) 속도는 빠르지만 영속성을 보장하지 않고(데..
[DBMS] Redis(레디스)란? - 3
Redis 캐시의 활용 사례 Twitter는 140자 정도의 짧은 글을 올릴 수 있는 소셜 네트워킹 서비스(SNS)이다. Twitter에서의 Timeline은 사용자가 Follow(구독)하는 사용자들의 최근 트윗을 확인할 수 있는 페이지이다. 2012년 당시 Twitter는 15만명이 넘는 실시간 활동 사용자와 초당 30만 건이 넘는 Timeline 요청이 발생했었다. 이러한 규모의 Timeline 요청을 데이터베이스에 직접 접근하는 방식으로 처리하면 Query가 복잡해짐에 따라 속도가 현저히 떨어지는 문제가 발생한다. Twitter는 이 문제를 해결하기 위해 메모리 기반 NoSQL 기술인 Redis를 사용하였따고 한다. Twitter의 데이터 센터에 존재하는 방대한 야의 Redis Cluster는 각 ..
[DBMS] Redis(레디스)란? - 2
Redis 활용하기 - 캐시(Cache) 캐시(Cache) 란? Cache란 한 번 조회된 데이터를 미리 특정 공간에 저장해놓고, 똑같은 요청이 발생하게 되면 서버에게 다시 요청하지 말고 저장해놓은 데이터를 제공해서 빠르게 서비스를 제공해주는 것을 의미한다. 즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 Cache를 접근하여 요청을 처리하는 기법이다. 서비스를 처음 운영할 때는 WEB-WAS-DB 정도로 작게 인프라를 구축하는데, 사용자가 늘어나면 DB에 무리가 가기 시작한다. DB는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생해도 데ㅣ터가 손실되지는 않지만, 매 트랜잭션마다 디스크에 접근해야하므로 부하가 많아지면 성능이 떨어진다. 그래..
[DBMS] Redis(레디스)란?
Redis (Remote Dictionary Server) Redis는 Remote(원격)에 위치하고 프로세스로 존재하는 In-Memory 기반의 Dictionary(key-value) 구조 데이터 관리 Server 시스템이다. 여기서 Key-value 구조 데이터란, mysql 같은 관계 데이터가 아닌 비 관계형 구조로서 데이터를 그저 '키-값' 형태로 단순하게 저장하는 구조를 말한다. 그래서 관계형 데이터베이스와 같이 쿼리 연산을 지원하지 않지만, 대신 데이터의 고속 읽기와 쓰기에 최적화 되어 있다. 그래서 Redis는 일종의 NoSQL로 분류되기도 한다. NoSQL은 Not Only SQL의 약자로써 기존 관계형 데이터베이스(RDBMS)보다 더 융통성 있는 데이터모델을 사용하고 데이터의 저장 및 검..
[Spring] JPA 란?
JPA? JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록 하자. ORM(Object-Relational Mapping) 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화해 주는 것이라고 보면 된다. 장점 SQL문이 아닌 Method를 통해 DB를 조작할 수 있어..
[Tip] 패키지 구조는 어떻게 짜는 게 맞을까?
문제 프로젝트를 진행하던 와중에 IDE의 왼쪽을 쳐다보면 수많은 Service 클래스들을 보고 기겁을 하곤 한다. 프로젝트에서는 Service 클래스에게는 SRP를 엄격하게 적용시켜 Service를 기능별로 작게 나누는 것이 목표 중 하나이다. 그래서 Service 클래스가 굉장히 많은 것을 확인할 수 있다. 요즘은 도메인형 패키지 구조를 사용하라는 것이 추세인듯 하다. 아직 계층형과 도메인형간의 대립이 있지만 거의 도메인형 패키지 구조가 좋다는 추세로 가는 것 같다. 해결 다음은 도메인형 패키지 구조로 변경하기 전의 어떤 프로젝트의 패키지 구조이다. com ㄴ dsm ㄴ kkoribyeol ㄴ configuration ㄴ controller | ㄴ request | ㄴ response | ㄴ filte..
[WEB] WebRTC란?
WebRTC Web Real-Time Communication의 약자 웹, 앱(안드로이드, iOS) 에서 별 다른 소프트웨어 없이 카메라, 마이크 등을 사용해서 실시간 커뮤니케이션을 제공해주는 기술 우리가 잘 알고있는 화상통화, 화상 공유 등을 구현할 수 있는 오픈 소스 비디오, 음성 및 일반 데이터가 P2P방식으로 피어간의 전송되도록 지원 JavaScript API로 제공 알아야할 용어 및 개념 data streams, STUN/TURN servers, Signaling, JSEP, ICE, SIP, SDP, NAT, UDP/TCP, network socket 등 https://www.slideshare.net/BlissonChoi/webrtc-71984826 → 성능측정 WebRTC의 장점과 단점 장..
[Spring] DTO는 왜 써야 하나?
DTO (Data Transfer Object) DTO란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans) DTO는 왜 필요할까? 1. Entity 2. Service 3. Dto 4.Controller 위 예제 코드의 테스트 코드는 Posts라는 엔티티를 생성하는 코드이다. 이를 위해 맨 처음에 PostsSaveRequestDto라는 Dto 객체를 빌더 패턴으로 생성하고 Dto를 컨트롤러에게 던져준다. 컨트롤러는 해당 Dto를 다시 Service에게 넘겨주고, Service 단에서 JPA를 이용하여 생성된 객체를 저장한다. 그런데 DTO와 Entity는 거의 똑같은 것 같은데, 왜 변환을 해서 사용해야 하며, 그렇다면 언제 DTO가 필요할까? Entity클래스와 거의 유사한 형태임에도 DT..