fragile and resilient

전체 글 37

[Network] HTTPS 동작원리

대칭키와 공개키 비교대칭키 암호법암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 같다.발송자와 수신자 모두 통신을 위해 비밀 키를 똑같이 공유한다.공개키 암호법두 개의 비대칭 키를 사용한다.하나는 호스트의 메시지를 암호화하기 위한 것이며, 다른 하나는 그 호스트의 메시지를 복호화 하기 위한 것이다.암호화 키는 모두에게 공개되어 있지만, 개인 복호화 키는 호스트만이 알고 있다.혼성 암호 체계공개키 암호 방식은 공개키를 알면 그 키에 대응되는 공개 서버에 안전하게 메시지를 보낼 수 있게 해준다.그러나 공개키 암호 방식의 알고리즘은 계산이 느린 경향이 있다.따라서 실제로는 대칭과 비대칭 방식을 섞어서 쓴다.노드들 사이의 안전한 의사소통 채널을 수립할 때는 공개키 암호화 방식을 사용하고, 이렇게 만들어진 ..

CS 2022.07.30

OAuth 2.0 인증 과정

OAuth는 인증 / 인가를 위한 개방형 표준 프로토콜로, 사용자가 인터넷 서비스(facebook, 카카오톡 등) 기능을 다른 애플리케이션에서도 사용할 수 있도록 한 것입니다. 위 글만 봐서는 OAuth가 무엇인지 감을 잡기 어려울 것이라 생각합니다. OAuth와 로그인을 일상생활 예시에 빗대어 비교한 글이 있는데요. 해당 글을 읽으면, OAuth의 동작 과정을 직관적으로 이해하는 데 도움이 될 것 같습니다. 간단하게 요약하면 회사 건물에 출입할 때, 회사 사원이 사원증을 가지고 출입하는 것이 로그인이고, 외부인이 방문증을 수령한 후 회사에 출입하는 것이 OAuth입니다. 글의 전문을 읽으시면 더 도움이 되실 것 같습니다. https://d2.naver.com/helloworld/24942 OAuth 인..

정리 2022.07.10

[Spring] Pageable 커스텀 예외 처리(feat. @PageableDefault)

Pageable을 사용해 Pagination을 하는 과정에서, 요구 사항에 맞추어 예외를 처리해야 하는 경험을 했습니다. 저희 팀의 요구 사항은 아래와 같습니다. 요구 사항 page, size에 값이 모두 없을 경우, default로 page = 0, size = 5를 설정한다. size에 0이 들어오거나 page, size에 문자열, 음수가 들어올 경우 400 에러를 응답한다. Pageable을 사용하면서, 위 요구 사항에 맞추어 구현한 경험에 대해 공유하고자 합니다. 1) Pageable page, size Default 값 지정 @RestController public class StudyController { //... @GetMapping("/api/studies") public Response..

Spring 2022.07.05

[Spring] DispatcherServlet 동작 과정과 Special Bean Types

Spring MVC는 front controller pattern으로 설계되어 있는데, 여기서 front controller가 바로 DispatcherServlet입니다. DispatcherServlet은 요청에 필요한 공통된 알고리즘을 제공하고, 실제 동작은 각각의 적절한 컴포넌트에게 위임합니다. 또한 다른 Servlet과 마찬가지로 Java configuration이나 web.xml에 선언하여 매핑되어야 하는데요. DispatcherServlet은 Spring configuration을 통해 request mapping, view resolution, exception handling에 필요한 컴포넌트를 찾습니다. DispatcherServlet은 설정을 위해 WebApplicationContext을..

Spring 2022.07.03

[Network, Spring] CORS Error 왜 발생했을까?

문제 상황프론트엔드와 협업하는 프로젝트를 진행하면서 문제를 겪었습니다.인수 테스트와 Postman으로 테스트했을 때는 문제가 없었는데, 브라우저와 연결하니 에러가 떴습니다.에러 문구 중 해당 부분이 눈에 들어왔습니다.has been blocked by CORS policy그럼 CORS에 대해 알아보기 전에, origin에 대해 먼저 알아보겠습니다.출처(origin)origin은 protocol, domain, port에 의해 정의됩니다.따라서 protocol, domain, port가 모두 일치하는 경우를 같은 출처라고 하고, 이 중 하나라도 다를 경우 교차 출처(cross-origin)라 합니다.http://example.com:80여기서 http://를 protocol, example을 domain,..

CS 2022.06.19

[Test] Test Double

테스트가 외부 요인에 의존하는 경우가 있는데요. 예시로 살펴보면, 테스트에서 DB를 연동하는 경우 테스트에서 HTTP 서버와 통신하는 경우 테스트가 이런 외부 요인에 의존하면 테스트하기가 어려워지게 됩니다. 또한, 테스트에서 사용하는 외부 API 서버가 일시적으로 장애가 나면 테스트를 수행할 수 없게 됩니다. 이렇게 테스트가 의존하는 외부 요인 때문에 테스트가 어려운 경우에는 대역을 써서 테스트를 진행할 수 있는데요. 대역의 종류에 대해 알아봅시다. 대역의 종류 Fake 프로덕션에는 적합하지 않지만, 실제 동작하는 구현을 제공한다. Stub 테스트에 맞게 단순히 원하는 동작을 수행한다. Spy 호출된 내역을 기록한다. 기록한 내용은 테스트 결과를 검증할 때 사용한다. Mock 기대한 대로 상호작용하는 행..

정리 2022.05.26

[Test] 컨트롤러 테스트해야 할까? (feat. 테스트에 대한 혼동)

문제 상황 테스트 코드를 작성하는 과정에서 테스트 종류에 대한 혼동과 인수 테스트, 컨트롤러 테스트에 대한 차이에 대한 의문이 들었습니다. 해당 고민에 대한 개인적인 생각을 정리해보고자 합니다. 우선 테스트 종류에 대해 알아봅시다. 테스트 종류 단위 테스트 구현한 부분의 단위를 검증 (하나의 클래스 또는 하나의 메서드) 통합 테스트 각 단위들이 유기적으로 잘 동작되는지 검증 E2E 테스트 요구사항을 만족하는지 검증 인수 테스트 (Acceptance Test) API 접점을 검증하는 E2E 테스트 사용자 스토리를 검증하는 기능 테스트 타겟은 프론트엔드 개발자 혹은 API 활용하는 사람 API의 Request와 Response 정보 이외의 내부 정보를 최대한 가리는 블랙 박스 형식의 테스트 각각의 테스트는 ..

Spring 2022.05.25

[Network] HTTP 메시지

HTTP 메시지 구조메시지 헤더서버와 클라이언트가 처리해야 하는 request와 response 내용과 속성개행 문자(CR + LF)CR(cattiage return) + LF(line feed)메시지 바디꼭 전송되는 데이터 그 자체ex) HTTP 메시지인코딩 - 전송 효율 상승메시지 바디와 엔티티 바디 차이메시지HTTP 통신의 기본 단위로 Octet sequence로 구성되고 통신을 통해서 전송엔티티리퀘스트랑 리스폰스의 payload로 전송되는 정보로 엔티티 헤더 필드와 엔티티 바디로 구성콘텐츠 코딩엔티티 정보를 유지한채로 압축 → 콘텐츠 코딩된 엔티티는 수신한 클라이언트에서 디코딩한다.주요 콘텐츠 압축 - gzip, compress, deflate, identity청크 전송 코딩사이즈가 큰 데이터를 ..

CS 2022.05.15

[Network] 프로토콜 HTTP

책: 그림으로 배우는 Http & Network Basic - 2장 간단한 프로토콜 HTTPHTTP 프로토콜프로토콜이란? 서로 다른 하드웨어와 운영체제가 통신하기 위한 규칙반드시 한 쪽은 클라이언트, 한 쪽은 서버HTTP는 클라이언트로부터 Request 송신, 그 결과 서버가 Response 반환클라이언트로부터 통신이 시작서버 측에서 Request를 수신하지 않았는데, Response가 발생하는 경우는 없다.HTTP 메시지란?서버와 클라이언트 간에 데이터가 교환되는 방식Request Message 1) start line1.1) HTTP 메소드 (GET, POST 등)서버가 수행해야 할 동작 명시1.2) URL1.3) HTTP 버전 2) Headers2.1) Host: 서버 도메인 명과 TCP 포트2.2..

CS 2022.05.09

Think Day

빌 게이츠는 90년대부터 일 년에 한 번 생각하는 주간(Think Week)을 보내왔다고 한다.온갖 종류의 책을 가지고 방 한 칸 크기의 오두막집에 들어가 일주일 동안 혼자 생각만 하는 주를 보내는 것이다.거대한 기업의 오너가 일주일 동안 혼자 오두막에서 생각만 하는 주가 있다는 것이 흥미로웠었고, 동시에 이는 당연하고 합리적인 결정이라는 생각이 들었다.아빠와 오빠는 엔지니어로 일하고 있는데, 두 회사 모두 정기적으로 공장의 기계들을 멈추고 정비에 들어간다. 아마 대부분의 산업에 이런 기간이 있을 것이라고 생각한다.사람과 기계의 다른 점이 있다면 기계는 인간의 이성적인 판단에 의해 멈출 수 있다는 것이다. 정비 시간이 아까워 미루면 수십억의 기계들이 망가지게 될 것이고, 일주일을 멈추는 것이 부담돼서 지..

생각 2022.04.30