분류 전체보기
Intellij 에서 Junit 기본 VM Options 설정하기 (기본 active profile 설정하기)
Intellij 에서 Junit 기본 VM Options (Active Profile 설정) 필요성 Intellij 에서 junit 테스트를 실행할 때, profile 설정이 기본으로 들어가있지 않다. 기본 VM Options 의 active profile 에 local 과 같은 특정 profile 이 들어가길 원한다. 방법 Run 버튼 옆의 Edit Configurations... 를 클릭해준다. 왼쪽 탭 하단의 Edit configuration templates 를 클릭한다. Modify options 에서 Add VM Options 이 체크되어 있지 않다면 체크한다. Junit 을 선택하고 Build and run 하단에 있는 창에 VM Options 를 입력해준다. 결과 Run 버튼을 눌러 테스트..
퍼사드 패턴 (Facade Pattern) 이란?
퍼사드 패턴 (facade pattern) 라이브러리 혹은 프레임워크에 간소화된 인터페이스를 제공하는 패턴이다. 클래스의 복잡한 시스템에 간소화된 인터페이스를 제공한다. 클래스를 직접 사용하지 않는 것이 포인트이다. 퍼사드란 건물의 대문같은 입구를 말한다. 또 여기엔 내부 구조를 숨긴다는 의미도 내포되어 있다. 복잡한 서브 시스템을 최대한 숨겨 의존성을 최소화하는 방법이다. 자바 이메일 코드로 보는 퍼사드 패턴 예제 기존의 코드 아래의 코드도 잘 돌아가며 잘못된 부분은 없다. 그러나 몇가지 단점이 있다. 테스트하기에 약간 힘든 코드이다. 코드의 의도를 이해하기 위해 기술적인 부분까지 봐야 한다. public class Client { public static void main(String[] args) ..
스프링 초기 세팅 시 뜬 에러 메세지 관련 회고 (Invalid bean definition with name 'xxx' defined in null)
스프링 초기 세팅 관련 에러 갑자기 프로젝트가 이상해져서 초기부터 세팅하는데 아래와 같은 에러 로그 메세지가 떴다. Invalid bean definition with name 'rootURL' defined in null 잘 보니 globals.properties 에 있는 값을 가져오지 못해서 그랬다. ${Globals.web.xxx} 값을 가져오지 못하고 있었다. 원인 -Dspring.profiles.active=local 을 VM Options 에 주지 않아서였다. 그래서 profiles.active 를 찾지 못하니 올바른 디렉토리 경로의 globals.properties 를 찾지 못했다. 보통 .properties 파일들이 local/globals.properties, prod/gl..
RedirectAttributes 란? (feat. addFlashAttribute 에 대한 설명 포함)
RedirectAttributes 란? 리디렉션을 수행할 때 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 Attributes 를 전달하는데 이용되는 스프링 프레임워크의 인터페이스이다. 일반적인 시나리오에서 Attributes 를 저장할 땐 Model 의 addAttribute() 메서드를 많이 이용한다. RedirectAttributes 가 필요할 때 이를테면, 주문이 완료된 후 주문 결과 상세페이지로 리다이렉팅하고 그 결과를 보여주고 싶을 때 이용할 수 있다. 주문 처리가 끝났을 때 생성된 주문번호를 리다이렉트 페이지쪽으로 넘겨줄 수 있다. RedirectAttributes 적용하고 데이터 저장하기 간단히 RedirectAttributes 타입의 파라미터를 컨트롤러 메서드에 작성하면 된다. 데이터 저..
HTTP 헤더란? (Http headers)
HTTP 헤더란? HTTP 통신의 핵심이 되는 중요한 컴포넌트 중 하나이다. 요청 혹은 응답의 필수 구성요소이다. 클라이언트와 서버 간의 메세지 전송 및 해석을 돕기 위해 메타데이터와 추가 정보를 제공한다. HTTP 헤더 포맷의 특징 키-밸류 (key-value) 쌍으로 이루어져 있다. 순수한 텍스트 (plain text) 로 이루어져 있고, 특정한 문법을 따른다. 콜론(:) 과 스페이스() 로 구분된다. 각 헤더는 하나의 줄로 표현되고, 각 줄은 하나의 헤더 필드를 나타낸다. 보통 아래처럼 생겼다. 네이버의 요청 헤더 (Request Header) 예시 :authority: www.naver.com :method: GET :path: / :scheme: https accept: text/html,app..
HTTP/1 에서 HTTP/2 로 가면서 얻는 개선점들 (HTTP1 에서 HTTP2로)
HTTP/1.x 에서 HTTP/2 로 HTTP/2 로 버전이 업되면서 HTTP/1.x 버전의 퍼포먼스 문제를 개선했다. HTTP/1.x 에서의 몇가지 대표적 문제점들 HTTP 바디와 달리 HTTP 헤더는 압축이 되지 않았다. 사실 연속된 HTTP 메세지를 보낼 때 마다 같은 HTTP 헤더가 반복되는 경우가 매우 많았기 때문에 이는 비효율적이었다. 다중 전송 (multiplexing) 이 불가능해서 서버 하나에 커넥션을 여러개 열어야 했다. 사실 Warm TCP 커넥션이 Cold TCP 커넥션보다 효율적이라는 점에서 생각해볼 필요가 있다. 이진 프로토콜 (Binary Protocol) HTTP/1.x 에서는 텍스트 프로토콜을 사용했는데, HTTP/2 에서는 이진 프로토콜을 사용한다. 이로 인해 데이터 구문..
Cold TCP Connection 과 Warm TCP Connection 이란?
Cold TCP Connection 이란? 아직 설정되지 않은 커넥션 혹은 오랫동안 유휴 상태인 커넥션을 말한다. 장기간 유휴 상태가 되면 타임아웃 혹은 기타 문제가 발생할 수 있기 때문에 연결을 다시 설정해야 할 수 있다. 연결을 다시 설정하면 TCP three-way handshake (SYN, SYN-ACK and ACK) 의 오버헤드가 발생한다. Warm TCP Connection 이란? 클라이언트와 서버간 여러 요청에 재사용 할 수 있는 이미 설정된 커넥션을 말한다. 영구 연결 (persistent) 혹은 연결 유지 (keep-alive) 커넥션이라고도 알려져 있다. three-way handshake 와 연관된 오버헤드를 최소화 할 수 있다. 연결을 재사용함으로써 데이터 전송을 즉시 시작할 수..
HTTP 응답 메세지의 구조
HTTP 응답 메세지의 구조 시작 줄 (Start line), 헤더 (Header), 바디 (Body)로 HTTP 요청 메세지의 구조와 기본 틀이 동일하다. 시작 줄 (Start line, Status line) 아래의 예를 보며 구조를 뜯어보자. HTTP/1.1 404 Not Found 프로토콜 버전: 주로 HTTP/1.1 버전을 사용한다. 상태 코드: 요청의 성공 실패 여부를 가리킨다. 예시에서는 404 가 반환됐다. 200: 성공, 404: 찾을 수 없음, 302: 임시적으로 이동 상태 텍스트: 상태 코드에 대해 사람이 이해하기 쉽도록 설명해주는 텍스트이다. 예시에서는 Not Found 가 404 의 의미를 설명하고 있다. 헤더 (Headers) 요청 메세지의 헤더와 동일하게 대소문자를 구분하지 않..
HTTP 요청 메세지의 구조
HTTP 요청 구조 (HTTP Request Structure) 크게 시작 줄 (Start line), 헤더 (Headers), 바디 (Body) 라는 3가지 파트로 분류된다. 시작 줄 (Start line) 시작 줄 (Start line) 에는 보통 3가지 정보를 포함한다. HTTP Method GET, PUT, POST, HEAD, OPTIONS 등의 메서드가 존재한다. 대략적으로 어떠한 액션이 수행될지에 대해 말해준다. URL 혹은 프로토콜, 포트, 도메인 절대 경로 절대 경로 (absolute path): 많은 HTTP 메서드에 가장 많이 쓰이는 형식이다. ? 를 포함한 쿼리 스트링이 뒤에 붙을 수 있다. POST / HTTP 1.1 GET /background.png HTTP/1.0 HEAD /..
HTTP Content-Type 헤더란?
HTTP Content-Type 헤더란? HTTP 통신에 이용되는 헤더 중 하나이다. HTTP 요청 혹은 응답으로 보내지는 데이터의 미디어 타입 (MIME type) 을 명시하는데 사용된다. HTTP 통신을 통해 받은 데이터를 어떻게 해석하고 처리할지에 대한 정보를 제공한다. 수신자는 이 정보를 기반으로 콘텐츠를 해석하므로 오류나 오해를 방지할 수 있다. Content-Type 에 들어가는 MIME type HTTP Content-Type 헤더의 값에는 MIME type (media type) 이 들어간다. 인코딩: Content-Type 에 추가적으로 들어갈 수 있는 것 인코딩은 MIME type 뒤에 붙어 해당 데이터를 어떤 인코딩 방식으로 읽어야 할지 알려준다. 예시로 Content-Type: te..
HTTP MIME type 이란?
MIME type 이란? MIME (Multipurpose Internet Mail Extensions) 표준에서 따오게 된 용어이다. 이는 1990년 초기에 개발되어 이메일에서 텍스트가 아닌 이미지, 오디오, 비디오 혹은 ASCII 가 아닌 문자열을 보내는데 사용되었다. MIME type 의 핵심 역할 파일 혹은 메세지의 콘텐츠 유형을 기술하는 표준화된 방법이다. 초기엔 이메일을 받은 클라이언트에게 올바른 해석을 통해 첨부파일을 보여주기 위함이 목적이었으나, 현재는 HTTP 에서 더 유명하다. MIME type 이 도입된 곳 HTTP 를 포함한 여러 인터넷 프로토콜에 도입됐다. 웹에서 전송되는 파일의 Content-Type 을 기술하는데 이용된다. HTTP 통신에서 Content-Type 헤더의 값으로..
JS 에서 selector 를 이용할 때 NPE 를 늦게 캐치하는 문제에 대한 회고
JS 에서의 NPE (Null Pointer Exception) 가 문제가 되었던 이유 타입스크립트 없는 바닐라 JS로 코딩을 하다보니 런타임이 아니면 NPE 를 눈치챌 수 없었다. IDE 에서 도움을 줄 수 없다. JS 에서 주로 DOM 엘리먼트에 대한 작업을 하는데 대부분 브라우저 내장 API 를 통해 작업이 진행된다. 브라우저 내장 API 를 이용하다보니 메서드를 통해 불러오게 된다. DOM 을 불러올 때 보통 document.querySelector() 를 이용해 불러왔다. 그런데 DOM 은 조건부로 생성되는 경우가 많은데 DOM 이 없는 경우 document.querySelector() 메서드의 결과가 null 을 가리키게 된다. 처음엔 null 을 가리킨지 모르고 . 을 통해 메서드를 불러오니..