티스토리 뷰

Ubuntu Redis 설치
1. apt 업데이트
sudo apt update
2. redis 설치
sudo apt install redis-server
3. redis 서버를 시스템 부팅 시 자동으로 시작하도록 설정
sudo systemctl enable redis-server.service
4. redis 서버 시작
sudo systemctl start redis-server.service
5. redis 서버 실행확인
redis-cli ping
- PONG으로 응답이 온다면 정상실행되는거다.
6. 설치된 redis 서버 버전 확인
redis-server --version
Spring Boot 연동
1. 빈 프로젝트 생성

2. pom.xml 의존성 추가
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3. yml 파일 수정
application.yml
spring:
data:
redis:
host: localhost
port: 6379
- host 부분은 redis를 설치하여 사용중인 서버의 ip주소를 입력하면된다.
- redis기본포트가 6379이므로 기본포트로 redis 설정을 추가해준다.
4. Redis Configuration 클래스 작성

package com.redis.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
Rest API 생성
할일목록을 CRUD 하는 Rest API를 만들어보겠습니다.
1. VO 생성
TodoVO.java
package com.redis.vo;
import java.io.Serializable;
public class TodoVO implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String title;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
2. Redis Repository 생성
RedisRepository
package com.redis.repository;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import com.redis.vo.TodoVO;
@Repository
public class RedisRepository {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private static final String KEY = "TODO";
// Todo 저장
public void save_todo(TodoVO todo) {
redisTemplate.opsForHash().put(KEY, todo.getId(), todo);
;
}
// Todo 한건 가져오기
public TodoVO get_todo(int id) {
return (TodoVO) redisTemplate.opsForHash().get(KEY, id);
}
// Todo 여러건 가져오기
public List<Object> get_todos() {
return redisTemplate.opsForHash().values(KEY);
}
// Todo 삭제
public Long delete_todo(int id) {
return redisTemplate.opsForHash().delete(KEY, id);
}
}
3. Controller 생성
RedisController.java
package com.redis.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import com.redis.repository.RedisRepository;
import com.redis.vo.TodoVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@RestController
public class RedisController {
@Autowired
private RedisRepository redisRepository;
@PostMapping("/save_todo")
public boolean save_todo(@RequestBody TodoVO todo) {
try {
redisRepository.save_todo(todo);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@GetMapping("/get_todo/{id}")
public TodoVO get_todo(@PathVariable int id) {
return redisRepository.get_todo(id);
}
@GetMapping("/get_todos")
public List<Object> get_todos() {
return redisRepository.get_todos();
}
@DeleteMapping("/delete_todo/{id}")
public boolean delete_todo(@PathVariable int id) {
try {
redisRepository.delete_todo(id);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
그럼 그렇지 한번에 될리가 없지 ^^;
1. ConnectExeption
java.net.ConnectException: Connection refused: no further information
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:946) ~[na:na]
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:336) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:339) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.111.Final.jar:4.1.111.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.111.Final.jar:4.1.111.Final]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Connect 오류가 발생했다.
1. 방화벽에서 Redis포트를 허용하지 않아 발생한 문제였다.
sudo ufw allow 6379
sudo ufw reload
2. Redis 설정문제
- 제 경우 Redis서버가 별도의 서버에 설치되어있었기 때문에 외부에서 접근을 해야하는 경우였습니다. 그러나 Redis기본설정이 기본적으로 로컬에서만 접근을 허용했기때문에 오류가 발생했었음.
sudo nano /etc/redis/redis.conf
- 설정파일을 열고

bind 127.0.0.1
...
protected-mode yes
...
이 부분을
bind 0.0.0.0
...
protected-mode no
...
이렇게 변경함
- 이건 실서버로 사용한다면 보안상 문제가 발생할 수 있으니 신중하게 사용하시는게 좋을듯 합니다.
테스트
테스트에는 Post Man을 사용함.
1. 저장

2. 한건 가져오기

3. 여러건 가져오기

4. 삭제하기

Thank You!
'개발노트' 카테고리의 다른 글
효율적인 서버 부하 테스트로 트래픽 폭증 대비하기 (0) | 2024.12.02 |
---|---|
파일 업로드가 계속 실패한다면? 서버에서의 파일 크기 제한 해결법! (0) | 2024.10.02 |
Linux(Ubuntu) Nginx 서버에 무료 SSL 인증서 설치방법 (1) | 2024.07.02 |
PostgreSQL 리눅스(Ubuntu) 설치 및 pgvector 확장 설정 (0) | 2024.05.24 |
- session과 cookie의 차이
- 동영상 배너
- 인증서 자동 갱신
- 서울 자율주행 택시
- session과 cookie의 다른점
- redis spring boot 연동
- 서버 설정
- 음악제작 ai
- 클라우드 서비스 지원포털
- 구독버튼 꾸미기
- OpenAI 이미지 생성기
- 홈페이지 만들기
- OpenAI 최근 소식
- Spring Boot
- 티스토리 배너 만들기
- 2024 클라우드 지원사업
- 블로그 꾸미기
- 쉬운 홈페이지 만들기
- 세션과 쿠기의 차이점
- 나만의 홈페이지 만들기
- suno v3
- 홈페이지
- 파일 크기 제한
- OpenAI 최근 뉴스
- OpenAI DALLE
- pgvector 확장 설정
- session과 cookie의 차이점
- postgresql 리눅스 설치
- 강남 자율주행 택시
- suno v2
- Total
- Today
- Yesterday