1. 오픈소스로 github에서 msi 파일 다운로드 

깃허브 링크

https://github.com/microsoftarchive/redis/releases

2.msi 파일 실행하여 설치

기본 포트는 6379로 설정돼있다.

다운로드 받은 파일 경로를 기억해두자.

3. Redis 서버 작동 확인 

cmd 창에서 netstat -an | findstr 6379 명령어로 확인 가능

정상 작동 상태

4. redis-cli.exe 실행

다운로드 받은 파일 경로로 들어간다.

 

서비스가 자동 등록 돼있고 재부팅시 서버 실행이 자동적으로 되므로 따로 시작을 안해줘도 되지만

따로 시작을 해야하는 상황이라면 redis-server.exe를 실행해야한다.

필자는 자동으로 실행되므로 따로 실행안했다.

 

redis-cli.exe 파일을 실행한다.

 

사진과 같이 ping을 쳤을 때 pong이 돌아오면 정상적으로 작동한다는 걸 확인할 수 있다.

 

5. 비밀번호 설정

다음과 같은 명령어 수행

CONFIG SET requirepass "비밀번호"

AUTH "비밀번호"

 

 

참고 사이트

https://velog.io/@dabeen-jung/Redis-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98

 

 

 

캐시란?

데이터를 읽을 때 임의의 공간에 저장하여 다음에 읽을 때는 더 빨리 읽을 수 있도록 도와주는 공간

클라이언트가 웹 서버에 요청을 보내면 DB로 가기 전에 캐시 서버에 데이터가 있는지 확인한다.

이때, 캐시 서버에 데이터가 존재한다면 DB에 데이터 요청하지 않고도 바로 클라이언트에 캐시에 존재하는 데이터를 반환해준다. (cache hit)

존재하지 않는다면(cache miss) DB에 해당 데이터를 요청한다.

 

Redis란?

캐시 시스템

키-값 기반 인메모리 데이터베이스

다양한 자료 구조 지원

싱글스레드로 한 번에 하나의 명령어만 처리 가능

 

Redis가 지원하는 다양한 자료 구조

Strings

redis의 가장 기본적인 타입

Vinary-safe한 key-value 구조

Lists

Strings element의 모음

Linked List와 유사한 구조

Sets 

정렬되지 않은 strinf collection

Sorted sets

Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 매김

Hahses

내부에 key-value 구조를 하나더 가지는 Reids 자료구조

value로 또다른 key-value 매핑

Bit arrays(bitMaps)

bit array를 다루는 자료구조

HyperLogLogs

확률적 자료구조로 unique한 항목들의 카운팅하는데 사용

 

 

 

참고 사이트

https://velog.io/@dabeen-jung/Redis-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98

https://brunch.co.kr/@jehovah/20

https://devlog-wjdrbs96.tistory.com/374

 

재귀 함수

함수 안에서 자기 자신을 다시 호출하는 함수

 

재귀 함수 장점

복잡한 알고리즘을 가독성있게 표현할 수 있다.

재귀 함수 단점

함수 호출 오버헤드가 크다

 

재귀 함수 주의점

무한 루프에 빠지지 않기 위해 종료 조건을 잘 처리해야한다.

 

재귀 vs 반복문

모든 재귀 호출은 반복문으로 표현 가능하고

모든 반복문은 재귀 호출로 표현 가능하다.

 

재귀 코드

long long recursive(int n) {
	if (n < 1) 
		return 1;
	else 
		return n * recursiveFactorial(n - 1);
}

반복문 코드

long long nonRecursive(int n) {
	long long f = 1;
	while (n) 
		f = f * n--;
	return f;
}

 

 

참고 사이트

https://ansohxxn.github.io/algorithm%20lesson%201/chapter1-1/

 

토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

애플리케이션 컨텍스트가 생성하고 관리하는 객체

스프링이 제어권을 가지고 직접 만들과 관계를 부여하는 오브젝트

오브젝트 단위의 애플리케이션 컴포넌트이자 스프링 컨테이너가 생성, 관계설정,사용 등을 제어해주는 제어의 역전 개념이 사용된 오브젝트

 

빈 팩토리

스프링의 IoC를 담당하는 핵심 컨테이너

빈의 생성과 관계설정과 같은 제어를 담당하는 IOC 오브젝트

빈 팩토리보다는 확장된 애플리케이션 컨택스트를 주로 사용하긴 하는데 두 용어를 혼용해서 사용하기도 한다.

 

애플리케이션

애플리케이션의 컨택스트와 그 설정 정보를 따라서 만들어지고 구성된다.

 

애플리케이션 컨텍스트=IoC 컨테이너=스프링 컨테이너{=빈 팩토리}

빈 팩토리를 확장한 IoC 컨테이너

빈을 등록,관리하는 기본적인 기능은 빈 팩토리와 동일하나 스프링이 제공하는 각종 부가 서비스를 추가로 제공해준다.

애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정 담당

별도의 정보를 참고해서 빈의 생성, 관계설정 등의 제어 작업 총괄

직접 정보들을 담고 있지는 않지만 별도로 설정 정보를 담고 있는 무엇인가(ex xml..)를 가져와 이를 활용하는 범용적인 IOC 엔진같은 것

 

@Configuration

빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식하도록하는 애노테이션

 

@Bean

오브젝트를 만들어주는 메소드라고 인식하도록하는 애노테이션

 

@Configuration
public class DaoFactory {
	
	@Bean
	public UserDao userDao() {
		return new UserDao(connectionMaker());
	}
	
	@Bean
	public ConnectionMaker connectionMaker() {
		return new DConnectionMaker();
	}
	
}

 위에서 만든 다오팩토리를 설정정보로 사용하는 애플리케이션 컨텍스트의 코드는 아래와 같다.

public class UserDaoTest {

	public static void main(String[] args) throws ClassNotFoundException, SQLException{
		
		ApplicationContext context =
				new AnnotationConfigApplicationContext(DaoFactory.class);
		
		UserDao dao = context.getBean("userDao", UserDao.class);
		
	}
}

 

getBean() 함수

애플리케이션 컨텍스트에 등록된 빈의 이름을 파라미터로 받는다.

@Bean 애노테이션이 붙은 메소드의 이름이 빈의 이름이 된다.

 

오브젝트 팩토리를 직접 사용 대신 애플리케이션 컨텍스트 사용시 장점

-클라이언트가 구체적인 팩토리 클래스를 알 필요가 없다.

애플리케이션 컨텍스트를 사용하면 오브젝트 팩토리가 아무리 많아져도 이를 알거나 직접 사용할 필요없다.

-종합 IoC 서비스를 제공해준다.

오브젝트에 대한 후처리, 정보의 조합 등 오브젝트를 효과적으로 사용할 수 있는 다양한 기능 제공

-빈을 검색하는 다양한 방법을 제공해준다.

ex.getBean() 함수

 

설정정보/설정 메타정보

애플리케이션 컨텍스트 또는 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보

IoC 컨테이너에 의해 관리되는 애플리케이션 오브젝트를 생성하고 구성할 때 사용

 

컨테이너/IoC 컨테이너

애플리케이션 컨텍스트보다 추상적인 표현

애플리케이션 컨텍스트 오브젝트 여러 개를 통틀어서 스프링 컨테이너라고 부를 수 있다.

 

스프링 프레임워크(=스프링)

스프링이 제공하는 모든 기능(애플리케이션 컨텍스트 등)을 통틀어 말할 때 주로 사용

토비의 스프링 3.1 책을 읽으며 일부분을 정리한 내용입니다. 
개념 이해를 위한 내용들 중 일부분을 정리했으므로 이해를 돕기위한 예시 코드들 및 자세한 전체적인 내용은 책을 통해 확인하시길 바랍니다.
포스팅 내용이 저작권의 문제가 발생할 경우 게시물은 바로 삭제/비공개 처리됩니다.

오브젝트 팩토리

객체의 생성 방법을 정하고 그렇게 정해진 오브젝트를 돌려주는 클래스

오브젝트를 생성하는 역할과 오브젝트를 사용하는 역할을 분리하기 위해 사용

애플리케이션에서 어떤 오브젝트가 어떤 오브젝트를 사용하는지를 정의해놓은 설계도 같은 역할

->애플리케이션의 구조를 결정하는 오브젝트

 

오브젝트 팩토리의 활용 예시

public class DaoFactory {

	public UserDao userDao() {
		return new UserDao(connectionMaker());
	}
	
	public AccountDao accountDao() {
		return new UserDao(connectionMaker());
	}
	
	public MessageDao messageDao() {
		return new UserDao(connectionMaker());
	}
	
	public ConnectionMaker connectionMaker() {
		return new DConnectionMaker();
	}
	
}

오브젝트를 만드는 코드를 별도의 메소드로 뽑아내서 중복을 제거했다.

 

제어의 역전

프로그램의 제어 흐름 구조를 바꾸는 것

일반적으로는 모든 오브젝트가 능동적으로 자신이 사용할 클래스를 결정하고 언제 어떻게 그 오브젝트를 만들지를 스스로 제어하는 구조

그러나 제어의 역전은 오브젝트가 자신이 사용할 오브젝트를 스스로 선택 및 제어하지 않는다.

모든 제어 권한을 다른 대상에게 위임

프레임 워크도 제어의 역전 개념이 적용된 대표적인 기술

개발자가 만든 애플리케이션 코드가 프레임 워크에 의해 사용된다.

<->라이브러리: 코드가 애플리케이션의 흐름을 제어

서블릿도 제어의 역전 개념이 적용된 대표적인 기술

서블릿 컨테이너에 의해 생성/관리된다.

프레임워크 또는 컨테이너와 같이 애플리케이션 컴포넌트의 생성, 관계설정, 사용, 생명주기, 관리 등을 제어하는 존재가 필요하다.

 

 

jdk 설치용 exe 파일을 오라클에서 다운받아 실행하려고 하는데 아무리 클릭을 해도 실행이 안되는 오류가 발생했다.

열심히 구글링을 하다가 아래 사이트를 참고해서 알약을 종료하고 다시 클릭했더니 정상적으로 실행됐다.

실행 중인 백신이 있다면 끄고 시도해보길 바란다.

 

참고 사이트

https://www.java.com/ko/download/help/troubleshoot_java_ko.html

 

+ Recent posts