User의 속성값으로있는 위시리스트에 새로 들어오는 hotel_id값을 추가하기위해서
3번 과정할땐 WishListDTO 에 List wishList에 넣어주고 DTO와 DAO가 통신하도록 한다.
가 아니라 Entity와 DAO가 통신하도록 데이터 처리해줘야할건 DTO까지 전부해주고 Entity로 변환해준다.
2번 과정에서 문제 발생
java.lang.UnsupportedOperationException: null
at java.util.AbstractList.add(AbstractList.java:148) ~[na:1.8.0_275]
at java.util.AbstractList.add(AbstractList.java:108) ~[na:1.8.0_275]
at com.team03.airbnb.service.UserService.addNewWishToList(UserService.java:29) ~[main/:na]
참고: https://stackoverflow.com/questions/5755477/java-list-add-unsupportedoperationexception
해결: List wishList로 받은 것을 wishList = new ArrayList<>(wishList); ArrayList로 다시 만들어줌
아래는 3번 과정에서 다시 String으로 변환해주는 로직인데,
public static String listToString(List<?> list) {
String result = "";
for (int i = 0; i < list.size(); i++) {
if (i == 0) {
result += list.get(i);
} else {
result += ", " + list.get(i);
}
}
return result;
}
괜찮은걸까?
추가 API 구현과 똑같이 해줬다.
테이블보다 작은단위 로우,컬럼,페이지,특정메모리영역 등등에 락을 걸수있다.
자바로치면 오브젝트 필드하나에 락을 하는거다.
왜 이렇게 락을 세분화하나?
최적화하려면 작은단위까지 지원해야해서.
A: 원자성: 완벽하게 실행하거나 혹은 전혀 실행하지 않는 트랜잭션을 필요로 한다
C: 일관성: 트랜잭션이 커밋되면 데이터가 데이터베이스 스키마를 준수하도록 요구한다.
NoSQL의 Consistency랑 다르다. NoSQL은 Eventual Consistency..명령어를 실행했을때 해당하는 오퍼레이션이 수행하고나서 다른사람이 그결과를 요청했을때 모두에게 늘똒같은 결과를 보장해주는게 consistency
예를들어서 업로드함과 동시에 주소가 생기는데 모두가 읽을수있으면 consistency가 -> 있다
그리고 파이로가 업로드하고 새리는 다운로드되는데 JAne은 안된다 -> 없다
Eventual Consistency는 파이로가 업로드햇는데 어느순간에 모든사람이 읽을수있느데 그 순간을 모를때.
I: Isolation: 트랜잭션은 방해받지않고 나혼자 실행하는되는것을 보장해야한다
D: Durability: 내구성: 한번 레코드된 건 영구적으로 저장되어야한다는 것을 보장.
자바로는 이걸못하는거니까 관계형데이터베이스를 쓴다.
분산시스템이 갖춰야하는 조건
Consistency, Availability, Partition Tolerence 셋모두 만족시키는 시스템은 구현할 수 없다.
많은 NoSQL은 일관성을 포기함.
AWS S3 가용성이 99.9999%, 그리고 서버하나가 죽어도 다른서버가 다 백업해주는걸 생각해보면된다.
NoSQL의 특성
BASE!! <-> ACID
Serial Schedule
Serializable
락