RDS가 private subnet에 구축되어 있을때 외부에서는 RDS에 접속할 수 없습니다. 보안을 위해서 이렇게 구축하고는 하는데 실제 개발하는 도중에 직접 RDS에 접속하는 일이 많습니다. 이런 상황에 매우 간단한 방법으로 EC2를 터널링으로 사용해 private subnet에 있는 RDS에 접속이 가능합니다. 1. EC2 생성 먼저 사용할 EC2를 생성합니다. EC2 이름을 설정하고 Amazon Linux로 생성하겠습니다. 꼭 Amazon Linux가 아니여도 됩니다. 키 페어를 선택하거나 새로 생성합니다. 요 키 페어로 ssh 터널에 접속하니 분실하거나 외부로 유출되서는 안됩니다! 네트워크 설정에서 편집 버튼을 클릭해 외부에서 접속할 수 있는 public subnet을 선택하고 터널링을 위해 보..
분류 전체보기
반응형
Redis는 싱글 스레드 Redis를 사용하다 보면 장애가 발생하거나 성능이 예측한대로 나오지 않는 경우가 종종 발생합니다. 이들은 모두 Redis가 싱글 스레드라는 것을 잊어버리거나 모르고 있기 때문에 발생하는 현상입니다. 싱글 스레드인 Redis는 시간이 오래 걸리는 명령어를 호출하면 그 명령어를 처리하는 동안 다른 클라이언트의 요청을 처리할 수가 없습니다. 이로인한 실무에서 흔히 하는 실수의 사례를 살펴보겠습니다. 1. 서버에서는 Keys 명령어를 사용하지 말자. Redis 명령어 중에, 현재 서버에 저장된 Key 목록을 볼 수 있는 keys 명령어가 있습니다. 모든 Key를 가져올 때는 "*"를 사용하고 특정한 문자가 들어가 있는 Key를 가져올때는 "*문자*"를 사용합니다. 127.0.0.1:6..
1. Redis의 이해 Redis란 무엇인가? Remote Dictionary Server로 key-value 형태로 데이터를 저장하고 관리하는 서버를 의미합니다. Redis의 주요 사용자들은 이미 대규모 서비스를 운영하고 있는 큰 기업들이다. 여러가지 Red devbksheen.tistory.com 1. Redis의 이해글에서 Redis가 무엇인지 특성은 무엇인지 이해해 보았다면 이번글에는 Docker로 Redis를 실행하는 방법에 대해 정리해보겠습니다. 해당 글은 Redis를 실행하는 내용이므로 Docker에 대한 자세한 설명글은 기재하지 않았습니다. 1. Docker Image Pull docker hub에 접속해 redis를 검색해보면 버전을 확인할 수 있습니다. redis Tags | Docke..
Redis란 무엇인가? Remote Dictionary Server로 key-value 형태로 데이터를 저장하고 관리하는 서버를 의미합니다. Redis의 여러가지 주요 특성 때문에 대규모 서비스를 운영하고 있는 큰 기업들이 주로 사용합니다. Redis의 주요 특성 1. Key-Value 스토어 기본적으로 Redis는 Key-Value 형태의 데이터 저장소입니다. 127.0.0.1:6379> set user_1 "{userName:\"bk\", birthday:\"1993-10-20\"}" OK 127.0.0.1:6379> keys * 1) "user_1" 127.0.0.1:6379> get user_1 "{userName:\"bk\", birthday:\"1993-10-20\"}" 2. 컬렉션 지원 Re..
자료 추상화 변수를 비공개(private)로 정의하는 이유는 코드들이 변수에 의존하지 않게 만들고 싶어서다. 그렇다면 어째서 get, set 함수는 당연하게 외부에 공개(public)하는가? 알다시피 변수를 private로 설정한들 조회(get), 설정(set) 함수를 public으로 제공한다면 의미가 없는 샘이다. 변수 사이에 함수를 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다! 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스이다. 만약 휴대폰 배터리가 15% 이하일 때 절전모드를 작동한다고 해보자. public interface Phone { Double getBatteryPercent(); } if (phone...
[20230722 - 송도 카페콤마] 나는 가끔 요즘말하는 MBTI에서 너무나 극명한 T인 것을 깨닫곤 한다. 친구들과 술 한잔을 기울일 때, 회사에서 동료들과 일을 할 때, 힘든 일이 있어 위로를 받고 싶어 할 때 나는 어떠한 공감과 위로보다는 해결책을 제시하는 편이다. 아니, 편이 아니라 그런 사람이다... 물론 그런 명확한 생각이 좋다고 말하는 사람들도 있지만 나는 30년을 살면서 깨달았다. 많은 사람들은 그런 명확한 생각은 좋다고 말하지만 그런 사람은 싫어한다는 것을.. 그래서 나를 바꾸고 싶었다. 정말 화내고 싶은 상황에서도 참아보고, 직장 동료에게 속으로 내키지도 않는 칭찬을 해보고, 힘든 일이 있는 친구에게 해결책이 아닌 공감과 위로를 해보기도 했다. 하지만 내 마음속 안에서는 정말 전쟁이 ..
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 형식을 맞추는 목적 코드 형식은 중요하다! 너무 중요해서 무시하기 어렵다. 너무나도 중요하므로 융통성 없이 맹목적으로 따르면 안 된다. 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 오늘 구현한 기능은 다음 버전에서 바뀔 확률을 매우 높기 때문에 가동성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 그렇다면 원활한 소통을 장려하는 코드 형식은 무엇일까? 적절한 행 길이를 유지하라 JUnit, FitNesses, Time and Money, JDepend, Ant,..
주석 주석은 순수하게 선하지 못하다. 사실상 주석은 기껏해야 필요악이다. 우리는 코드로 의도를 표현하지 못하고 실패를 만회하기 위해 주석을 사용한다. 그러므로 주석이 필요한 상황에 처하면 코드로 의도를 표현할 방법은 없을까 곰곰히 생각해보아야 한다. 코드는 변화하고 진화한다. 하지만 불행하게도 주석은 언제나 코드를 따라가지 않는다. 아니, 따라가지 못한다. 그래서 코드를 읽는 사람에게 더욱 더 혼란을 주고 해악을 미친다. 진실은 코드에만 존재한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 그러므로 우리는 주석을 가능한 줄이도록 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 표현력이 풍부하고 깜끔하며 주석이 거의 없는 코드가..
작게 만들어라 함수를 만드는 첫째 규칙은 "작게!"다. 함수를 만드는 둘째 규칙은 "더 작게!"다. 함수가 작을수록 더 좋다는 증거나 자료를 제시하기는 어렵지만 함수는 작고 명확하게 구현해야 한다. 그러면 바깥을 감싸는 함수가 작아질 뿐 아니라, 블록 안에서 호출하는 함수의 이름을 적절히 짓는다면 코드를 이해하기 쉬워질 것이다. 이 말은 중첩 구조가 생길만큼 함수가 켜져서는 안 된다는 뜻이다. 당연한 말이지만, 그래야 함수는 읽고 이해하기 쉬워진다. 한 가지만 해라! 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 단순히 다른 표현이 아니라 의미있는 이름으로 다름 ..
개요 업무상 Amazon SQS를 적용할 일이 있어 예전에 정리한 SQS 설정 방법대로 설정했지만 Listener이 작동하지 않는 이슈가 있었습니다. 서칭해본 결과 Spring Cloud AWS 2.x 버전은 Spring Boot 3.x에 완전히 호환되지 않는 것처럼 보입니다. AWS @SqsListener not working with spring cloud (using springboot 3) Currently, we have an SQS client configured using an IAM Role that is picked up on the cluster. However, migrating over to Springboot 3 the @SqsListener is no longer consumin..