![](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
전체 글
인덱스 개념 간단 정리
인덱스란 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 단순히 생각하면 어떤 데이터를 찾을 때 전체를 확인하는 방식(Full Scan)을 해서 오래 걸리지 않도록 인덱스를 이용한다고 생각하면 된다. 하지만 DB 인덱싱은 새로운 테이블을 생성하기 때문에 별도의 저장공간이 발생하고, 인덱스 테이블은 기본적으로 sorting이 된 상태기 때문에 새로운 데이터를 삽입하거나 수정할때 오히려 더 성능이 안좋아진다. 인덱스는..
HTTP 동작 순서
1.사용자가 웹 브라우저에 URL 주소 입력 2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청(DNS Lookup) 1) Host을 우선 참조하고, Host 파일에 없으면, 시스템에 설정된 DNS 서버인 로컬 DNS 서버에 질의 2) 로컬 DNS 서버에 해당 정보가 없으면, Root DNS 서버에 질의를 보냄. 3) Root DNS 서버에, www.naver.com 에 대한 정보가 없으면, com 을 관리하는 DNS서버에 대한 정보를 보내줌 4) 로컬 DNS 서버는 com DNS서버에 다시 물어봄 5) com DNS 서버는 해당 정보가 없을 경우, naver.com에 질의하도록 로컬 DNS 서버로 보냄. 6) 로컬 DNS 서버는 마지막으로, www.naver.com 의 DNS 서버에 ..
프로그래머스 - 괄호 회전하기 문제
programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 스택을 통해서 풀이를 진행하였습니다. 간단하게 설명하자면 문자가 (, {, [ 이면 stack에 추가 하고 아니면 앞서 stack 에 넣은 값이 반대방향의 괄호가 아니라면 return false; 맞으면 넣은 값을 pop함 마지막에 stack이 비어야 return true 이유는 (, {, [ 가 더 많이 존재하면 stack에 값이 남아 있게 되기 때문에 쌍이 딱 맞다면 스택의 길이는 0이 된다. import java.util.*; class Solution { public int solution(String s) { int answer = 0; Str..
9. redis를 이용한 간단한 캐싱 적용 해보기
이글에서는 자기소개프로젝트에 간단하게 redis를 적용해서 캐싱하는 것을 적용할려고 합니다. 2021-05-14 프론트 엔드 서버에서 레디스를 도커로 실행한 부분을 백엔드로 이동하면서 도커를 통한 레디스 설치 내용을 추가하였습니다. 도커가 설치되어있다는 가정아래에 redis 이미지를 풀받고 docker pull redis 백그라운드로 6379 포트를 터널링하여 레디스를 컨테이너로 실행시킵니다. docker run --name introredis -d -p 6379:6379 redis 해당 컨테이너에 redis-cli로 컨테이너에 접근하면 redis 문법을 통해서 데이터를 확인할 수 있씁니다. docker exec -it redis_demoweb redis-cli 자기소개 프로젝트를 보면 실질적으로 프론트..
prototype pattern
prototype pattern 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다. object 생성이 높은 비용으로 수 많은 요청을 하는 경우, 또는 비슷한 object를 지속적으로 생성해야 할 때 유용하게 사용할 수 있다. prototype pattern은 본래의 object로 부터 새로운 object를 만들어내며(서로 다른 인스턴스), 각 객체에 따라 데이터 수정이 가능한 메커니즘을 제공 java의 clone()을 이용하기 때문에 생성하고자 하는 객체에 clone에 대한 Override를 요구합니다. 1. Shape 인터페이스 구현 - Cloneable을 상속받아서 clone을 오버라이딩 try catch을 통해서 익셉션을 바로 처..
Builder Pattern
Builder Pattern 빌더 패턴은 객체 생성을 깔끔하고 유연하게 하기 위한 기법 각 인자가 어떤 의미인지 알기 쉽다. setter 메소드가 없으므로 변경 불가능 객체를 만들 수 있다. 한 번에 객체를 생성하므로 객체 일관성이 깨지지 않는다. build() 함수가 잘못된 값이 입력되었는지 검증하게 할 수도 있다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public static class B..
Spring Interceptor
Spring Interceptor 인터셉터는 중간에서 가로챈다는 의미를 가진다. 스프링에서도 말 그대로 중간에 요청을 가로채서 어떠한 일을 하는 것을 말한다. 인터셉터의 정식 명칭은 핸들러 인터셉터(Handler Interceptor)이다. 클라이언트의 요청이 컨트롤러에 가기 전에 가로채고, 응답이 클라이언트에게 가기전에 가로챈다. 즉, 인터셉터는 DispatcherServlet이 컨트롤러를 요청하기 전,후에 요청과 응답을 가로채서 가공할 수 있도록 해준다. 1. HandlerInterceptor 인터페이스를 상속받아 interceptor 구현 HandlerInterceptor 인터페이스를 상속받으면, 아래 3개의 메소드를 오버라이드한다. - preHandle : 클라이언트의 요청을 컨트롤러에 전달하기 ..
Singleton Pattern
Singleton Pattern 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴 이점 객체를 재사용하기 때문에 메모리 낭비를 방지 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이 단점 싱글톤으로 만든 객체의 역할이 간단한 것이 아닌 역할이 복잡한 경우라면 해당 싱글톤 객체를 사용하는 다른 객체간의 결함도가 높아져서 객체 지향 설계 원칙에 어긋나게 된다. (개방-폐쇄) 해당 싱글톤 객체를 수정할 경우 싱글톤 객체를 사용하는 곳에서 사이드 이팩트 발생 확률이 생기게 되며, 멀티 쓰래드환경에서 동기화 처리 문제등이 생길수 있다. public class SingleObject { private static S..