목록분류 전체보기 (119)
이것저것
AOP (Abstract Oriented Programming) 은 스프링 프레임워크의 핵심 기능 중 하나이면 "흩어진 코드를 한 곳으로 모으는 기법"이다. 즉, 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 가져다씀으로써 유지 보수 측면에서 용이할 뿐더러 재사용에 용이하도록 만들 수 있다. class A { method a() { AAAA a하다. BBBB } method b() { AAAA b하다. BBBB } } class B { method c() { AAAA c하다. BBBB } } 위 코드에서는 동일한 기능의 AAAA, BBBB 가 여기저기서가 사용되다보니, 코드 변경이 필요한 경우 일일이 다 찾아가서 바꿔줘야 한다. AOP 는 AAAA, BBBB 와 같이 공통된 기능을 ..
스프링 핵심 중 하나인 IOC(Inversion Of Control) 와 DI (Dependency Injection) 에 대해 포스팅해보려 한다. IOC (Inversion Of Control)란? IOC 란 Inversion Of Control의 약자로 "제어의 역전"을 뜻하고, 스프링의 핵심 기능 중 하나이다. IOC 에 대해 살펴보기 위해 간단하게 자바에서 객체를 생성하는 두 가지 방법에 대해 알아보자. 1번 그림에서는 A가 직접 B, C를 만들어서 사용한다. 2번 그림에서는 외부에 있는 B, C 객체를 받아와서 사용한다. (이를 제어의 역전이라 한다.) 이를 코드로 표현해보면 다음과 같다. "내가 쓸 놈은 내가 만들어 쓸게" class UserInfoController{ private UserI..
3.1.1 테이블 랜덤 액세스 SQL 튜닝은 랜덤 IO와의 전쟁 인덱스를 스캔하는 이유 : 검색 조건을 만족하는 소량의 데이터를 인덱스에서 빨리 찾고 거기서 테이블 레코드를 찾아가기 위한 주소값 즉, ROWID 를 얻기 위하여 인덱스 ROWID = 물리적 주소보다 테이블 레코드를 찾아가기 위한 논리적 주소 정보를 담고있음 인덱스 = 도서 색인 인덱스 ROWID = 도서 색인에 기록된 페이지 번호 결론 : 인덱스 ROWID = 논리적 주소 (디스크 상에서 테이블 레코드를 찾아가기 위한 위치 정보) 포인터가 아니다! 메인메모리 DB란? 데이터를 메모리에 모두 로드해 놓고 메모리를 통해서만 I/O를 수행하는 DB DBA (=데이터파일번호 + 블록번호)는 디스크 상에서 블록을 찾기 위한 주소 정보 매번 디스크 ..
JAVA 에서 static 이란? JAVA 에서 static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해체된다는 것이다. static 의 메모리 static 키워드를 통해 static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, GC의 관리 영역 밖에 존재하므로 static 을 자주 사용하면 프로그램의 종료시까지 메모리에 할당된 채로 존재한다. (자주 사용하게 되면 시스템 성능에 악영향을 줌) static 변수 특징 - static 변수는 클래스 변수이다. - 객체를 생성하지 않고도 static 자원에 접근이 가능하다. static 변수와 static 메서드는 static 메모리 영역에 존재하므로 객체가 생성되기 이전에 이미 할당 되어 있다. 그렇..
JWT 에 대해 설명하기 이전에 간단하게 "토큰 기반 인증"과 "서버 기반 인증" 에 대해 알아보겠다. "서버 기반 인증 시스템이란?" 이전 포스팅에서 언급한 세션 기반의 인증 시스템이다. 서버 측에서 사용자들의 정보를 기억하기 위해 세션을 유지하는데 이는 메모리, 디스크, 데이터베이스 등을 통해 관리한다. 그러다 보니, 클라이언트로부터 요청을 받으면 클라이언트의 상태를 계속에서 유지해놓고 사용한다. (Stateful) 이는 사용자가 증가함에 따라 성능의 문제를 일으킬 수 있으며 확장성이 어렵다는 단점을 지닌다. "토큰 기반 인증 시스템이란?" 이러한 단점을 극복하기 위해서 "토큰 기반 인증 시스템"이 나타났다. 인증받은 사용자에게 토큰을 발급하고, 로그인이 필요한 작업일 경우 헤더에 토큰을 함께 보내 ..
1. 요청 전 준비 단계, 가정 - www.naver.com URL 을 입력하고 엔터를 눌르면, DNS 서버를 통해 이 도메인의 IP 정보를 가져온다. - URL 내의 포트 번호가 없다면, 기본값으로 HTTP (80), HTTPS (443) 를 사용한다. - 현재 naver는 HTTPS 프로토콜을 사용하고 있다. 그러므로, 실제 데이터를 주고 받기 전에 전송 게층에서 3-way handshake 를 통해 TCP 연결을 수립한 이후, 보안 계층 (SSL/TLS) 에서 정보를 암호화하기 위한 HandShake 과정이 선행되어야 한다. 2. Client PC -> Web Server 로의 데이터 요청 과정 2.1 PC에서의 Capsulation 과정 (1) 응용 계층 - GET /www.naver.com HT..
DNS 란 Domain Name System의 약자로 호스트(도메인) 이름을 IP 주소로 변환해주는 역할을 한다. 사용자가 웹 브라우저에서 입력한 URL 을 DNS 서버를 통해 IP 주소를 가져와서 이를 통해 서버와 통신을 하게 된다 IP 정보를 가져오는 과정 ex) 주소창에 www.daum.net 을 쳤다고 가정해본다. 1. PC는 로컬에 저장된 Hosts.txt에서 해당 도메인이 있는지 확인 2. 없으면 DNS Cache Table에 해당 도메인 정보가 있는지 확인 (Cache : 기존에 응답 받은 DNS 정보를 일정 시간 (TTL) 동안 저장하고 동일한 질의시 응답한다.) 3. 없으면 Local DNS 에게 쿼리 - Local DNS 서버는 재귀적으로 여러 서버에게 쿼리하여 IP 정보를 받아온다. ..
이전 포스팅에서 TCP 는 3-way handshake 과정을 통해 연결을 수립하고, 4-way handshake를 통해 연결을 해제한다고 썼다. 이번 포스팅에서는 각 과정이 어떻게 이루어지는 자세히 확인해보려고 한다. TCP는 여러 개의 필드로 나누어진 20 bytes, 즉 160 bits의 헤더를 사용하며, 각 필드의 비트를 0 또는 1로 변경하여 전송하고자 하는 세그먼트의 정보를 나타낸다. 하지만 이 20 bytes라는 것은 아무 옵션도 없는 기본적인 헤더일 때의 용량이고, TCP의 여러가지 옵션들을 사용하면 헤더 맨 뒤에 옵션 필드들이 추가로 붙기 때문에 최대 40 bytes가 더해진 60 bytes까지도 사용할 수도 있다. 이 중에서 URG, ACK, PSH, PST, SYN, FIN 이 보이는..