* Redis - 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리 => 속도 빠름 - 서버 장애등으로 redis 종료 될 시 데이터 유실이 발생할 수 있음 - 한 번에 하나의 명령만 처리할 수 있음 - Redis Cluster를 사용하면 여러개의 redis를 두어 분산처리를 할 수 있음
* String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원함 - String : 가장 일반적인 key & value - Sets : key & 여러 값이 들어간 value - Sorted Sets : 중복된 데이터를 담지 않는 Set 구조 - Lists : Array 형식의 데이터 구조
* Redis Cluster 여러 노드간 데이터를 자동으로 분할하는 기능 . 각기 다른 서버를 하나로 묶어 데이터를 여러대의 장비에서 처리한다. 서버일부분이 장애가 일어나도 다른 서버의 보완을 통해 서비스를 계속 이어 나갈수 있다.
SNS와 SQS 정리 SNS : Publisher가 Subscriber에게 메시지를 전송하는 서비스 SQS : 메세지 대기열 서비스
SNS 역할 특정 서비스에서 SNS로 지정한 주제(topic)에 대한 메시지를 발행한다. 예)회원가입정보 그럼 이 SNS는 이 topic에 대한 메시지를 받아보기로 한 (subscribe한) 서비스들에게 메시지를 전달해준다. subscribe를 하는 주체는 SQS, Lambda, HTTP, SMS, 이메일, 모바일 애플리케이션 엔드포인트가 될 수 있다.
SQS 역할 SQS는 Simple Queue Service로, 메세지 대기열 서비스라고 함. SNS로부터 특정 주제의 메세지를 구독하여 받아볼 수 있다. 그럼 특정 서비스나 시스템에서 SQS로 받은 메시지를 사용하면 되는거임
흐름은 이렇게 됨 서비스 -> SNS -> SQS -> 다른 서비스
즉 SNS와 SQS를 활용하면 엔드포인트에서 엔드포인트로 데이터를 직접 때려박지 않아도 되므로 데이터 안전성과 관리 오버헤드 제거에 있어서 용이하겠다. . .
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:tcp://localhost/~/springtest1
spring.datasource.username=sa
##JPA 실행시 sql문 출력
spring.jpa.show-sql=true
##테이블 생성여부.. create로 해두면 어플리케이션 실행 시 덮어쓰기로 테이블이 새로 생성됨.
##데이터도 모두 지워진다는 거~~
##안 할 경우 none
spring.jpa.hibernate.ddl-auto=create
6. Entity 또는 domain 만들기
테이블과 맵핑할 객체를 만들었다. (Member.java)
- @Entity 어노테이션 추가
- 키 컬럼에 @Id 추가
- 값의 자동생성과 자동증가를 위해 @GeneratedValue 추가
@Entity //객체와 테이블 매핑
public class Member {
@Id //기본 키 매핑
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String address;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress(){
return address;
}
public void setAddress(String address){
this.address = address;
}
}
7. Repository 만들기
DB에 접근하여 쿼리를 수행할 Repository를 인터페이스로 만들었다. (MemberRepository.java)
- @Repository 어노테이션 추가하고
- JpaRepository를 상속
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
8. 테스트 해보기
테스트용 코드 작성~
@SpringBootTest
class Spring2ApplicationTests {
private final MemberRepository memberRepository;
// 의존성 주입
@Autowired
public Spring2ApplicationTests(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Test
void memberTest() {
// 멤버 저장
Member member = new Member();
member.setName("nameTestAAAAAA");
member.setAddress("seoulAAAAAA");
memberRepository.save(member);
// 저장한 멤버 아이디로 검색
Member findMember = memberRepository.findById(member.getId()).get();
System.out.println(findMember.getAddress());
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
}