분류 전체보기
Netflix OSS 이야기
Netflix OSS 이야기
2021.12.10Hystrix Hystrix는 마이크로서비스의 전류차단기(Circuit Breaker) 역할을 하는 오픈소스 문제가 있는 마이크로서비스로의 트래픽을 차단하여 전체서비스가 느려지거나 중단되는것을 미리 방지 Hystrix Command 호출할 때 발생하는 일 Exception 한 경우 Fallback 처리 한다. 메소드 종료가 되지 않으면 504 Timeout Gateway 발생 Hystrix - Circuit Breaker 일정 비율로 에러가 발생하면 Circuit Open 한다. Circuit Open은 메소드 호출함에도 메서지 바디 내용을 누군가 인터셉터해서 Exception으로 처리해버린다. 운영관점에서 여러 서버를 운영하는데 하나의 서버가 장애가 발생하면 나머지 서버도 사용하지 못할 정도로 리소스를..
객체 지향 원리 적용
객체 지향 원리 적용
2021.12.10애자일 소프트웨어에 인상적인 글귀 - "계획에 따르기 보다는 변화에 대응하기를" Mac 기준으로 Method쪽에 CMD+SHIFT+T 를 누르면 Test 코드를 작성할 수 있다. Test 코드 작성 시 꿀팁은 given, when, then given 에 객체를 만들어주고 when 에 테스트 로직을 추가하고 then 에서 마지막으로 검증해준다. Test 코드에서 고려해야할 것은 성공, 실패 코드 두가지 이다. class RateDiscountPolicyTest { RateDiscountPolicy discountPolicy = new RateDiscountPolicy(); @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member..
Spring 예제
Spring 예제
2021.12.10Spring Spring build 할 때 프로퍼티에서 gradle보다 intellij를 쓰는것이 더 빠르다. Client에서 회원서비스를 통해 인터페이스에서 회원 저장소오아 연동될 DB를 구현한다. 예를들어서, MemberService 인터페이스를 구성하고 구현체로 MemberServiceImpl을 구현한다. 개발자가 구체적인 클래스 다이어그램을 구현한다. Spring에서 프로그래밍 처리하다보면 동시성 이슈가 생길 수 있기 때문에 Concurrent 를 고려해야한다. 아래 코드를 확인해보면 MemberRepository는 인터페이스이고 실제 구현은 MemoryMemberRepository에서 수행한다. 여기서 구현체가 존재하지 않는다면 NullPointException이 발생한다. private fin..
객체지향 설계와 스프링
객체지향 설계와 스프링
2021.12.09스프링 생태계 스프링 데이터 JPA, 세션, 시큐리티, 배치 등 웹기술 스프링 MVC, Webflux 데이터 접근 기술 트랜잭션, JDBC, ORM 스프링 부트의 장점 스프링과 3rd party 라이브러리 자동 구성을 지원한다. (외부 라이브러리 버전을 일일이 맞춰주지 않아도 Spring boot 그 역할을 수행한다.) 그래서 스프링이 무엇일까? 자바 언어 기반의 프레임워크이고, 객체 지향 프로그래밍이다. 즉, 객체지향을 기반으로 개발할 수 있도록 도와주는 프레임워크라고 볼 수 있다. 좋은 객체지향 프로그래밍이란? 객체들의 모임을 파악한다. 프로그램을 유연하고 변경 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 활용된다. 마치, 레고 블록 조립하듯이 사용할 수 있다. 객체 지향의 꽃이라 볼 수 있..
HTTP 캐시와 조건부 요청
HTTP 캐시와 조건부 요청
2021.12.09캐시 웹 브라우저에서 서버에 캐시 세팅을 하게 되는데 cache-control로 http 헤더에 넣어준다. 캐시가 존재하지 않으면 네트워크 비용이 계속 발생한다. 당연히, 브라우저 로딩 속도가 느리다. 느린 사용자 경험 브라우저 캐시에 응답 결과를 캐시에 저장한다. 캐시의 유효시간을 검증한다. 만료되면 다시 요청해야 하는데 효율적이지 않다. 그래서 사용하는 방법이 검증 헤더 + 조건부 요청을 사용한다. 어떻게? step1. 서버에서 HTTP 응답 헤더에 Last-Modified(검증 헤더)를 넣어서 보내주면 브라우저 캐시에 Last-Modified를 기록해둔다. step2. 클라이언트는 이제 변경된 사항에 대해 HTTP 요청 헤더에 if-modified-since를 붙여놓고 서버에 보낸다. step3. ..
HTTP 헤더
HTTP 헤더
2021.12.09HTTP 헤더 HTTP 전송에 필요한 모든 부가 정보를 포함한다. 예를들면 Content-Type, Content-Length 기반의 메시지 바디를 해석할 수 있다. (해석할 수 있는 정보 제공을 한다.) / 데이터 유형(html, json), 데이터 길이, 압축 등 Content-Type : text/html ... > html 형식 Content-Type : application/json > json 형식 메시지 본문 = 페이로드, 표현 헤더, 표현 데이터 (RFC7230~7235 등장 시점 변경 내용) 표현 데이터 정보를 헤더에서 확인해볼 수 있는데 위에 언급된 2가지와 (Content-Type/ Content-Length) + Content-Encoding/ Content-Language/ Con..
HTTP 상태 코드
HTTP 상태 코드
2021.12.092XX 200 : OK 201 : Created 클라이언트에서 요청한 것을 기반으로 서버에서 생성한 것을 의미한다. 보통 이런 경우에는 POST로 서버에서 자원을 생성해서 응답해줄 때 Location Header 를 응답한다. 202 : Accepted 요청 접수는 되었지만, 처리가 되지 않았다. 204 : No Content 서버가 성공적으로 수행했지만, 응답 페이로드에서 비어있는 상태(보낼 데이터가 없는 경우) 3XX 요청을 완료하기 위해서 웹 브라우저상에 추가 조치가 필요하다. 좀 더 고급진 표현을 쓰면, 유저 에이전트의 조치가 필요하다. 영구 리다이렉션 301 POST 로 요청했을 때 리다이렉션 GET으로 변경되며 HTTP 바디 내용이 날라가게 된다. 실무에서 굉장히 많이 등장하는 내용인데 페이지..
HTTP 메서드 활용
HTTP 메서드 활용
2021.12.09데이터 전송 방법 쿼리 파라미터를 통한 데이터 전송 GET 방법을 많이 사용한다. (주로 정렬 필터로) 정적 데이터를 조회 하는 경우 이미지, 정적 텍스트 동적 데이터를 조회 하는 경우 검색, 게시판 목록 정렬필터 이용 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 를 기반으로 회원 가입, 상품 주문, 리소스 등록, 변경 등을 포함한다. HTML Form 데이터 전송 method = "GET" 도 충분히 들어쓸 수 있지만, 권장하지 않는다. (왜냐하면 리소스 변경이 발생할 수도 있기에) POST면 메시지 바디(key-value)에 넣고 GET이면 URL 경로에 넣는다. HTTP API를 사용해서 데이터 전송 POST, PUT, PATCH, GET 다 지원한다. Content-Type: ..
HTTP 메서드
HTTP 메서드
2021.12.07HTTP 메서드 URI는 리소스 별로 구분짓는것이 중요한데 특히, 리소스만 식별하게 된다. 회원 관리 API 서버를 만든다고 가정해보면, 리소스는 회원이 될것이고 행위는 조회, 등록, 삭제, 변경이 된다. 이 회원 관리 API에서 행위를 구분짓는것이 GET, POST, PUT, PATCH, DELETE 종류가 있다. GET 리소스를 조회 하는 역할을 수행한다. 검색엔진에 Query Parameter, String을 통해서 전달한다. 메시지 바디는 잘 취급하지 않는다. 서버에서 정한 규약이 존재하기 때문에 잘 맞지 않는다. POST 요청 데이터를 처리하게 된다. 메시지 바디를 통해서 서버로 요청 데이터를 전달한다. (가끔 조회 목적으로 쓰기도 한다.) HTTP 메서드 설계시에 리소스로 URI를 사용하는 경..
HTTP 기본
HTTP 기본
2021.12.07Hyper Text Transfer Protocol HTTP 메시지에 IMAGE, 음성, 영상, 파일등을 포함해서 전송할 수 있다. HTTP 메시지에는 모든 것을 전송할 수 있다. 정말? HTTP/1.1 97년도에 출시되어 지금도 많이 사용되고 있다. HTTP2 2015년도에 출시되어 성능개선에 주 목적이 있다. HTTP3 는 진행중인데 TCP대신 UDP를 사용한 것이 특징적이다. 이것도 마찬가지로 성능 개선을 담당하고 있다. 기반 프로토콜 TCP는 HTTP/1.1, HTTP/2 위에서 동작한다. TCP는 기본적으로 빠른 프로토콜은 아니다. UDP는 HTTP/3 위에서 동작한다. 현재는 HTTP/1.1를 주로 사용한다. HTTP/2, HTTP/3도 점점 사용하는 추세이다. 그래서 찾아봤다. Google ..
URI와 웹 브라우저 요청 흐름
URI와 웹 브라우저 요청 흐름
2021.12.07URI vs URL vs URN URI는 Locator, name 을 분류할 수 있다. 즉, 자원을 식별하는 역할을 수행한다. URL = 리소스 위치 URN = 리소스 이름 예를 들면 URN:ISBN:8960777331 도서 책 ISBN에서 사용하는 유즈케이스이다. 하지만, URN 이름만으로는 실제 리소스를 찾는데 방법이 보편화되어있지는 않다. 그래서 거의 대부분 URL을 사용한다고 생각하면 된다. 일반적으로 URL 분석은 아래 포맷을 따르게 된다. scheme://[userinfo@]host[:port][/path][?query][#fragment] 형태를 가지게 된다. scheme - 어떤 프로토콜을 사용할지 결정한다. userinfo - URL에 사용자정보를 포함해서 인증한다. host - 도메인명..
인터넷 네트워크
인터넷 네트워크
2021.12.07IP프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성 중간에 패킷이 사라질시, 패킷이 순서대로 도착하지 않을 경우 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 ? >> 구분할 수 없음 TCP vs UDP IP프로토콜의 한계가 명확하기 때문에 OSI 7계층에서(최근에는 4계층이 시장 점유율이 높다고 한다.) TCP/IP 모델 기반의 TCP 통신을 하는 경우가 많아졌고 상황에 따라 최적화 or 속도 등의 목적으로 UDP를 사용하기도 한다. TCP/UDP 모두 4계층 Network Layer 에서 사용되는 프로토콜이다. 각각의 PDU 이 다른데 TCP의 경우 세그먼트, UDP의 경우 데이터 그램으로 표현할 수 있다. 1) TCP(..