기타 정보/ETC: 18개의 글
BSD, K&R 코딩 스타일 bsd와 k&r의 가장큰 차이는 중괄호( {} )의 위치입니다. 1. K&R 코딩 스타일 여는 블록을 조건에 한 줄로 같은 행에 배치합니다. 코드 줄 수를 절약하여 한눈에 많은 코드를 작성할 수 있습니다. BSD 스타일로 작성한 코드를 K&R 스타일로 동일하게 작성해 보겠습니다. if(조건){ 처리 로직 } 예시) if(d == 1){ if(b == 1){ 처리로직 }else{ 처리로직 } } 2. BSD 스타일 BSD는 줄간격이 한눈에 들어오지만 단점은 코드가 길어진다는 단점이 있습니다. if(조건) { 처리로직 } 예시) if(d == 1) { if(b == 1) { 처리로직 } else { 처리로직 } } 3. GNU 코딩 스타일 블록을 조건문 아래에 작성합니다. 블록이..
JWT JWT(Json Web Token)란 인증에 필요한 정보들을 암호화 시킨 토큰을 의미한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다. 구조 JWT는 .을 구분자로 나누어지는 세 가지 문자열의 조합으로, 실제 해당 JWT 문자열들을 디코딩 하면 다음과 같은 구조를 가진다. 1. header 암호화 해싱 알고리즘 정보와 토큰의 타입. JWT를 어떻게 검증(Verify)하는가에 대한 내용을 담고 있다. 2. Payload JWT의 내용이다. 페이로드(Payload)에 있는 속성들을 클레임 셋(Claim Set)이라 부른다. 클레임 셋은 JWT에 대한 내용(토큰 생성자(클라이언트)의 정보, 생성 일시 등)이나 ..
동기/비동기 vs 블로킹/논블로킹 Redis를 세션 스토리지로 적용하는 과정에서 Java의 대표적인 Redis client 인 Jedis와 Lettuce 중 Netty 기반의 Redis 클라이언트인 Lettuce를 사용하기로 결정했다. Netty는 비동기 이벤트 기반의 고성능 네트워크 프레임워크인데, 여기서 나온 비동기의 개념을 확실히 짚고 넘어가고자 정리하기로 했다. 동기/비동기 vs 블로킹/논블로킹 동기와 비동기 또는 블로킹과 논블로킹 중 하나를 떠올리면 자연스럽게 나머지 단어들도 떠오르게 된다. 그 이유는 둘의 개념적인 의미가 비슷하기 때문이다. 하지만 실제로 두 개념은 서로 연관관계가 없는 별개의 개념으로 기억해야 한다. 동기/비동기 먼저 동기와 비동기에 대해 알아보자. 동기(synchronous..
상황에 따른 HTTP status 코드 사용하기 Rest API 서버를 개발할 때 400 : Bad Request와 200 : OK 만 사용하는 경우가 있는데, 상황에 따라 조금 더 명확한 정보를 전달할 수 있는 HTTP 상태코드를 알아보자. 1xx(Information) : 요청이 수신되어 처리중이며, 계속해서 프로세스를 진행한다. 최근에는 1xx 상태코드를 거의 사용하지 않는다. 2xx(Successful) : 요청을 성공적으로 수신했으며, 정상적으로 처리되었다. 3xx(Redirection) : 요청을 완료하려면 추가적인 행동(리소스)이 필요하다. 4xx(Client Error) : 클라이언트 오류, 잘못된 문법/요청 등으로 서버가요청을 수행할 수 없다. 5xx(Server Error) : 서버가 ..
우리가 애플리케이션을 개발하면서 50명 정도의 이용 고객을 예상하고 서버를 구축했는데, 생각보다 인기가 많아져서 500명이 사용하는 애플리케이션이 되었다고 가정해보자. 이러한 경우 기존에 사용하던 서버로는 한계가 있다. 따라서 스케일 업과 스케일 아웃중 하나를 선택해서 인프라를 재구성 해야 한다. 스케일 업 vs 스케일 아웃 🔍스케일 업(Scale up) 스케일 업 이란, 우리가 현재 사용하고 있는 서버 자체의 성능을 증강시켜 처리 능력을 향상시키는 것으로, CPU 업그레이드 또는 RAM 추가 등으로 하드웨어 장비의 성능을 높이는 접근 방법이다. 스케일업은 비교적 접근하기도 쉽고, 실천하기도 쉬운 방법이다. 실제로 우리가 사용하는 컴퓨터가 느려졌다면 성능이 더 좋은 새로운 컴퓨터를 구매하는것이 가장 간편..
서버가 두 개 이상일 경우 발생하는 세션 불일치 문제 해결하기 지난번에 포스팅했던 서버를 확장하는 방법에서 scale out 방식으로 서버를 확장했을때 발생하는 문제점 중 하나인 세션 불일치 문제를 해결하기 위한 방법을 알아보자. 세션의 불일치가 무슨뜻일까? 단일 서버 환경에서는 session을 통한 로그인을 구현할때 session 불일치 문제를 신경쓸 필요가 없었다. 하지만 우리가 만든 프로젝트가 유명해져서 한대의 서버로 운영하는것이 불가능해졌다고 가정해보자. scale-out 방식을 사용해서 서버를 여러대로 늘렸을 때 발생하는 문제점중 하나가 바로 세션 불일치 문제다. 아래 그림들을 통해 무슨뜻인지 이해해보자. 먼저 3대의 서버중 서버1에서 로그인을 진행했다. 이 경우, 서버1에서는 해당 클라이언트의..
| 국토교통부 공공데이터 부동산 실거래가 API 정부에서 제공하는 공공데이터포털 사이트에서 부동산 실거래가 데이터를 제공받을 수 있는 API를 제공합니다. 이를 통해 예전에는 엑셀이나 텍스트 파일로 수작업으로 부동산 데이터를 정리하던 것을 손쉽게 가공하고 입맛에 맞게 저장할 수 있게 되었습니다. | 부동산 실거래가 API 신청 방법 공공데이터포털 사이트에 가셔서 회원가입 및 로그인을 하신 뒤에 다음 설명을 따르시면 됩니다. 출처: https://engkimbs.tistory.com/899?category=762944 [새로비]
들어가며 예전에 받았던 면접 질문들을 회고하고 보다 깊이 있게 이해하기 위해 정리합니다. Browser에서 Google.com을 검색하면 무슨 일이 발생하나요? 1. DNS에서 IP주소 가져오기 https://www.google.com을 IP주소로 변환하는 작업이 필요합니다. Browser DNS Cache - Chrome 브라우저는 도메인이 캐시에 들어있는지 확인합니다. chrome://net-internals/#dns OS DNS Cache - Mac 만약 Browser Cache에서 못 찾으면, OS에 저장된 DNS Cache를 찾게 됩니다. 각 OS의 hosts 위치 : Link Mac : /etc/hosts Router DNS Server 만약 OS Cache에서도 못 찾으면, Router DN..
CHAR와 VARCHAR (VARCHAR2) 문자의 경우 CHAR와 VARCHAR의 차이는 저장 영역과 문자열의 비교 방법이다.VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 컬럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합하다. 저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다. 비교 방법에서도 차이가 있다.CHAR 에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. CHAR(8) 이고 'AA'가 저장되어 있다면, 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교하는 것이다. 따라서 'AA' = 'AA ' 은 실제로 'AA ' = 'AA ' 가 되어 같다는 결과가 나온다. 반면에 VAR..
추상메서드와 인터페이스 1. 공통점1) 둘 다 모두 추상 메소드라는 것을 가진다. 구현 클래스에서는 반드시 만들어야만하는 강제성을 가진다. 또한 추상 메소드는 컴파일러를 속인다. 추상 클래스는 변수를 인터페이스나 부모 클래스 타입으로 보았을 때 아무런 호출에 문제를 일으키지 않는다. 따라서 컴파일러는 실제로 메소드가 어떻게 동작할지는 모르고, 아무 문제 없이 실행해준다. 즉 컴파일러를 속여서 내가 원하는 동작을 마음대로 조종하게 한다는 것이다. 2) 둘 다 객체 생성은 불가능하고, 타입으로만 사용된다.추상 클래스와 인터페이스 둘 다 객체의 생성이 목적인 클래스가 아니라. 변수나, 파라미터, 리턴 타입, 자료구조를 유연하게 쓰기 위한 도구이다. 2. 차이점1) 인터페이스는 스펙이나 원하는 기능을 정의하고자..