javax.validation.constraints.
@NotBlank : null, "", " " 모두 불가
@NotEmpty : ""(빈칸)과 null 을 막음, " "화이트스페이스 허용
@NotNull : null만 아니면 됨. ""(빈거), " "(화이트스페이스) 문자는 허용
@Null : null만 허용함
@Size : 민맥스를 지정해줄수 있음
borrow : 내가 빌리는 경우, 댓가를 지불하지 않고 빌려쓸때 사용하는 경우
> can i borrow a book, Can I borrow your umbrella?
rent : 임차료, 돈내고 대여하는 경우
> rent car
lend : 내가 빌려주는 경우. 증여하거나, 타인에게 나중에 나에게 돌려줘야 하는 것을 사용하도록 허락하다
> lent the car to a friend, She very kindly lent me her bicycle
- ###_ID : 프라이머리키이거나, 검색조건, 항상 유니크함, 인덱스는 없을수있음
- IS_### : 불리언저장
- ###_TIMESTAMP : UNIX 타임스테프
- ###_DATETIME : 로컬데이트타임 저장
- ###_COUNT : 횟수세는거임
로그인방법(사용자)
로그인방법(관리자)
#DB 실행
docker-compose -f demo-docker-compose.yml up -d
#DB 상태확인
docker-compose ps
#ES
docker-compose -f single-es-docker-compose.yml up -d
#test 프로파일로 spring boot 실행
./gradlew bootRun --args='--spring.profiles.active=test'
프로퍼티 체크
spring.datasource.url=jdbc:mysql://{IP 혹은 FQDN}:{PORT}/{DB 이름}?useSSL=false
spring.datasource.username=root
spring.datasource.password={패스워드}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
프로파일을 IntelliJ 에서 설정
spring:
profiles:
active: test
spring:
config:
activate:
on-profile: test
--spring.profiles.active=prod
SHOW VARIABLES LIKE 'innodb_ft_min_token_size'; -- return:2
SHOW VARIABLES LIKE 'ft_min_word_len'; -- return:2
innodb_ft_min_token_size : InnoDB 스토리지 엔진에 특정한 설정 : 전체 텍스트 검색을 위해 인덱싱될 단어의 최소 크기를 제어하는 파라미터, 이 값보다 짧은 단어는 인덱싱되지 않음
ft_min_word_len : MySQL의 전체 텍스트 인덱싱을 위한 일반 설정 : 전체 텍스트 검색을 위해 인덱싱될 단어의 최소 길이를 제어하는 파라미터, 이 값보다 짧은 단어는 인덱싱되지 않음
결론 : InnoDB Only vs MySQL specific 의 차이 : 두개의 파라미터가 서로 다르면 어떻게 동작하는지, 우선순위가 있는건지는 공식문서에서도 찾을수 없었습니다 : 그래서 결론은 안전하게 둘다 2 로 맞추자! 라고 결론내렸습니다
: (검색키워드가 "반도체" 일때)
SELECT * from BOOK_MASTER where TITLE LIKE '%반도체%';
-- 검증
EXPLAIN SELECT * from BOOK_MASTER where TITLE LIKE '%반도체%';
SELECT * FROM BOOK_MASTER where match(TITLE) AGAINST('*반도체*' IN BOOLEAN MODE);
EXPLAIN SELECT * FROM BOOK_MASTER where match(TITLE) AGAINST('*반도체*' IN BOOLEAN MODE);
증상(에러로그)
2023-01-29 10:36:51.192 WARN 43832 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: S1009
2023-01-29 10:36:51.192 ERROR 43832 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Connection is read-only. Queries leading to data modification are not allowed
2023-01-29 10:36:51.212 ERROR 43832 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement] with root cause
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.31.jar:8.0.31]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-j-8.0.31.jar:8.0.31]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-j-8.0.31.jar:8.0.31]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-j-8.0.31.jar:8.0.31]
....
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.24.jar:5.3.24]
at com.sun.proxy.$Proxy124.persist(Unknown Source) ~[na:na]
@Transactional(isolation = Isolation.READ_UNCOMMITTED, readOnly = true) // readOnly를 false 로 수정한다
public List<BookMaster> searchByTitleV0Like(String keyword) {
return bookMasterRepository.findAllByTitleLike("%"+ keyword+ "%");
}
중앙, 국립, 시립, 광역시
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
remote: warning: See http://git.io/iEPt8g for more information.
remote: warning: File src/main/resources/dataset/안산시 중앙도서관 장서 대출목록 (2022년 12월).csv is 50.32 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: warning: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
-rw-r--r--@ 1 dong staff 89M 1 29 20:21 NationalSejong-202212.csv
-rw-r--r--@ 1 dong staff 50M 1 29 20:20 Ansan-202212.csv
-rw-r--r--@ 1 dong staff 69M 1 29 20:19 Gyeonggi-202212.csv
-rw-r--r--@ 1 dong staff 54M 1 29 20:19 Wonju-202212.csv
Ansan-202212.csv
은 trim으로, Gyeonggi, NationalSejong 두군대는 2개의 파일로 쪼개서 50메가 제한을 회피하였습니다.split
이라는 명령어가 있었습니다.. (유닉스 만세..)
split -b 30m data.csv data-split_ #30MB 단위로 파일을 분할하는 명령어
ls -l | awk '{ print $9 }' #맥에서 현 위치에서 파일명만 출력하는 명령어
��ȣ,������,����,���ǻ�,����,ISBN,��Ʈ ISBN,�ΰ���ȣ,��,�����з���ȣ,�����Ǽ�,����Ǽ�,�������,
"1","We need to talk how to have conversations that matter","Headlee, Celeste","Harperwave","2017","9780062669018","","","","802.56","1","0","2022-12-30",
"6","��Ƽ �ȼ�, ���� ��� ��� ��ʴϱ�? [��Ȱ�ں�]","������","�Ѱܷ���","2022","9791160408577","","","","813.6","1","0","2022-12-30",
"7","��� ������ ���� [��Ȱ�ں�] : ���ʿ� �Ҽ���","���ʿ�","�Ѱܷ���","2022","9791160406962","","","","813.6","1","0","2022-12-30",
VM/EC2 > t2.micro / Memory=1GiB / vCPUs=1.0
RDBMS/RDS > T3Micro(db.t3.micro) / Memory=1GiB / vCPUs=2.0