본문 바로가기

CS

(39)
[DATABASE] 인덱스란? Real MySQL 8.0 책과 유튜브 [쉬운 코드]님의 데이터베이스 강의를 참고하여 작성하였습니다. 1. 인덱스란 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다. 데이터베이스에서 검색, 정렬 및 필터링 작업을 빠르게 수행하는데 도움을 주며, 특정 열에 대한 검색을 최적화하는 역할을 한다. 인덱스는 책의 찾아보기(index, 색인)와 같이 내용을 바로 찾을 수 있도록 지원한다. 사전순으로 키워드별로 나열이 되어 있고, 키워드 옆에는 해당 키워드가 담겨있는 책의 페이지를 가리키는 것처럼 데이터베이스의 인덱스 테이블에서도 데이터 칼럼과 실제 메모리 상의 주소 위치를 담고 있다. SELECT * FROM user WHERE id = "mysterlee"; 테이블에서 위의 조건을 만족하는 데..
JAVA의 리플렉션 API 스프링을 공부한다면 의존성 주입(Dependency Injection)에 대해 들어봤을 것이다. @Autowired 애노테이션을 사용해서 생성자 없이 인스턴스를 생성하고, @Controller, @Service , @Repository 등의 애노테이션을 통해 해당 클래스의 인스턴스를 새로 생성하지 않아도 자동으로 스프링 컨테이너에 빈을 생성하여 관리한다. 여기서 사용되는 기술이 Reflection API이다. 스프링(스프링에만 국한된 기술은 아님)은 개발자가 만든 구체적인 클래스에 대한 정보를 알 수 없을텐데 어떻게 의존 주입이 가능한 것일까? 백기선님의 "더 자바, 코드를 조작하는 다양한 방법", 메타코딩의 리플렉션 강의, 우아한 Tech의 [10분 테코톡] 파랑, 아키의 리플렉션 등을 참조 하였습니다..
HTTP와 HTTPS HTTP는 서버와 클라이언트 간에 통신을 주고받는 프로토콜을 말한다. 이 프로토콜 방식은 주고받는 데이터가 암호화되지 않기 때문에 보안 문제가 발생할 수 있다. 따라서 HTTPS 프로토콜을 사용하는데 이는 HTTP 프로토콜에 보안 기능을 추가한 것이다. 2014년부터 구글은 웹 전반의 보안을 개선하기 위해 모든 사이트에 HTTPS 방식을 사용할 것을 요구했으며 HTTPS를 사용한 사이트에는 가산점을 주어 사용자들에게 잘 노출되도록 했고, HTTPS를 사용하지 않을 경우 '안전하지 않음'의 경고 문구를 보내며 사용자들이 접속하지 않게끔 하였다. 그렇다고 HTTPS가 모든 보안 문제를 해결하는 것은 아니다. 최소한의 요건만 갖춘 것이다. HTTP Server와 Client 간에 데이터를 주고받는 통신 프로토..
CDN이란 무엇일까? 이전 포스팅에서 사용자가 특정 사이트로 요청했을 때 전반적인 처리 과정에 대해서 살펴보았다. 클라이언트가 서버에 요청을 보냈을 때 일차적으로 자체 DNS 캐시를 검색하고, 없을 경우 DNS Server에 해당 DNS에 대한 IP를 질의하여 자신이 원하는 사이트의 IP를 알아낸다. 하지만 이 IP 주소가 본 서버의 IP 주소가 아닐 수 있다. 큰 서버일수록 대용량의 트래픽을 관리하기 위해 서버를 분산하여 본 서버로의 접속을 줄인다. 분산된 서버들을 CDN이라 볼 수 있다. AWS, Cloudfare, Akamai의 CDN 관련 문서 자료를 참고하였습니다. CDN(Content Delivery Network) CDN은 콘텐츠 전송 네트워크로 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이..
클라이언트의 서비스 요청에 따른 서버의 처리과정 클라이언트가 웹 브라우저를 사용하여 특정 웹 사이트에 접근할 때 웹 브라우저는 해당 사이트의 IP 주소를 찾아 서버와의 통신을 진행한다. 그러면 서버는 클라이언트의 요청을 처리하고 그에 따른 응답을 웹 브라우저에 보내면 웹 브라우저는 클라이언트가 보기 좋게 렌더링 하여 보여준다. 이번 포스팅에서는 URL 입력과 IP 조회 및 반환에 대해서 작성해 보았다. TCP 연결 및 연결해제에 관련해서는 이전 포스팅 OSI 7 Layers 와 TCP와 UDP를 참고하길 바란다. 기본 과정 1. 사용자는 웹 브라우저를 통해 url 주소 입력 2-1. Hosts파일의 IP 정보들은 DNS 캐시 파일에 저장이 되어진다. 2-2. 브라우저에서 사용자 요청 도메인의 IP 주소를 찾기 위해 DNS Cache 접근 2-3. DN..
[JAVA] String 그리고 StringBuffer와 StringBuilder Java로 코드를 작성하며 String 클래스를 많이 활용해 봤을 것이다. String 클래스 이외에도 StringBuffer, StringBuilder등 다양한 String 타입의 클래스들이 존재한다. 이러한 클래스들은 사용 의도가 모두 각각 다르다. 이들의 특성에 대해 알아보도록 하자. 계층 구조 Interface 기능 소개 CharSequence : String 타입의 문자열을 판독하는 기능을 가진 인터페이스. 문자열의 길이를 반환하거나, 특정 인덱스의 값을 반환하는 기능을 갖추고 있다. Appendable : Appendable 인터페이스는 StringBuffer와 StrigBuilder가 구현하고 있는 대표적 인터페이스로, 문자열 뒤에 추가적인 문자열을 덧붙일 때 사용하는 기능을 가지고 있다. ..
TCP와 UDP 지난 포스팅에서 OSI의 7 계층에 대해 간략히 적어 보았다. 그중 4 계층에 해당하는 Transport Layer에서는 TCP 프로토콜과 UDP프로토콜을 통해 데이터를 전송하는 역할을 한다. 그중 TCP 프로토콜은 흐름 제어, 순서 제어, 연결 제어, 중복검사를 하여 데이터를 순차적으로 안전하게 전달할 수 있도록 보장한다. TCP와 UDP가 서버와 동작하는 과정을 살펴보고 차이점을 알아보도록 하자. 데이터 송·수신의 전반적인 과정 호스트 간(peer to peer / client to server)에 데이터를 송·수신하기 위해 각 Layer를 거치며 만들어지는 데이터가 감싸지는 모습이다. L4에서 송신자는 소켓을 통해 스트림 형식으로 데이터를 기록한다. L3에서 MSS(Minimum Segment Si..
Abstract Class와 Interface Abstract Class와 Interface를 상속 또는 구현하려는 클래스는 이들이 명시한 추상 메서드들을 모두 구현해야 사용할 수 있다. 추상 메서드를 가진 추상 클래스와 인터페이스. 이들이 가지고 있는 공통점이지만 과연 차이점은 무엇일까? 무엇 때문에 이 둘을 나눠 놓았을까? Abstract Class와 Interface의 특성과 차이점 그리고 언제 사용해야 하는지에 대해 알아보도록 하자. ※추상화 : 기능의 내부 구현을 숨기고 사용자에게 기능만을 명시하는 것을 의미함 Abstract Class public abstract class Animal { //field public String name; public String kind; //method public abstract sound(); } ..