Spring Boot
-
JPA 애플리케이션 데이터베이스 초기화Spring Boot/JPA 2023. 9. 17. 18:16
애플리케이션의 TestCode를 작성하려고 하면, 테스트를 위한 초기 데이터 (test fixture)가 필요하다. 당연히 H2 같은 in-memory DB로 테스트가 될 것을 기대하고 BeforeAll, AfterAll로 Setting하는 것으로 기대했지만, 현실은 build할때 실제 DB가 붙어서 동작하고 있었다. 어떻게 하면 Test Fixture를 분리 고립시킬 수 있을까? 지금까지 결론은 build 환경에서 DB 환경을 구성하고 @Sql로 관리하는 것이 가장 조작하기 쉬운 방법으로 보인다. SpringBoot에서 제공하는 데이터베이스 초기화 Spring boot에서는 데이터베이스 변경에 대한 관리 방법을 제공한다. default 설정은 package에 entity를 감지하여 각각의 테이블을 자동..
-
[IntelliJ 필수 코드 스타일 설정] 와일드카드 * import disable, imports 자동 정리, Imports Fold 비활성화Spring Boot/인텔리제이 2023. 8. 14. 17:07
컴퓨터 살때마다 설정 새로하는데, 찾아보는데 시간 걸려서 기록해 둔다. 1. 와일드 카드로 import 되는 것 disable하기- cmd + , > java > imports 탭- 어떤 라이브러리, 패키지를 사용하는지 의존성이 더 명확해진다.Settings > Code Style > Java > imports 에 설정을 위에 처럼 바꿔준다. 2. 안쓰는 imports 자동 정리3. Imports Fold 비활성화 4. 파일 미리보기 설정- 더 이상 더블클릭 never...
-
[IntelliJ 디버깅] springboot, message.properties의 값이 읽히지 않는 문제Spring Boot/인텔리제이 2023. 7. 2. 01:17
0. message.properties의 값이 읽히지 않는 문제 해결- 아래와 같이 error 메시지를 선언하고 MessageSource 인터페이스로 메시지를 불러오는 작업을 하던 중- 한글이 ???.???.??? 와 같이 출력되는 버그를 수정한 내용을 정리 Size.writeTodoCommand.title=할 일은 {2}-{1}자 사이로 작성해주세요.Exception.TodoEntityNotFoundException=요청한 할 일을 찾을 수 없어요. (일련번호: {0})Exception.MethodArgumentNotValidException=입력 값이 없거나 올바르지 않아요.- 이는 인코딩 문제로 아래의 설정을 해준다. 1. 인텔리제이 properties file 인코딩 설정Default encodi..
-
Springboot, 주입한 환경변수 사용하기Spring Boot/환경설정 2023. 6. 30. 23:09
외부 환경변수 주입 방법과 우선 순위 : https://yeoon.tistory.com/115 Spring Boot, 환경 변수 주입 우선순위 스프링에서 환경변수는 외부에서 주입할 수 있다. 주입 받은 환경 변수는 @Value 어노테이션을 사용하여 빈에 주입하거나, @ConfigurationProperties를 사용하여 바인딩 할 수 있다. 환경변수를 주입은 yeoon.tistory.com 1. Environment 인터페이스 사용하기 import org.springframework.core.env.Environment; @Controller public class TodoController { private Environment env; public TodoController(Environment en..
-
[DB] UUID를 고유 값이나 Key로 사용하면 안되는 이유Spring Boot/DB 2023. 6. 30. 12:00
1. UUID를 고유 값으로 쓰면 안되는 이유 RDB 기준 사용시 성능 이슈 + 충돌 가능성이 있기 때문이다. (https://velog.io/@injoon2019/UUID-vs-ULID) 인덱스는 기본적으로 B-tree 인덱스를 사용하는데, 무작위 렌덤의 uuid를 사용하면 sort를 사용할 수 없다. int, bigint를 사용하는 것에 비해 uuid를 pk로 사용하면 상대적으로 성능이 낮다. uuid 단독으로 사용하면 생성시 충돌 가능성이 있다. 128비트의 공간을 지속적으로 차지하는 단점 (uuid를 사용하면 DB 마이그레이션이 편한 이점 있음) 2. 해결책 [결제 고유 번호 uuid + 날짜_회원정보] 이런식으로 저장해야한다. (스노플레이크 접근이라고 한다. https://thalals.tist..
-
[DB] ACID란? Transaction이란?Spring Boot/DB 2023. 6. 28. 11:22
ACID는 DB 트랜잭션의 안정성 보장을 위해 필요한 성질을 정리한 것. 원자성, 고립, 일관성, 영구성으로 트랜잭션을 제어하기 위해서 알아야한다. 0. Transaction은 무엇인가 One unit of work에서의 쿼리 집합이다. 즉 서버로 치면 connection을 기준으로 하나의 트랜잭션으로 구분한다. 쿼리 1개로 비즈니스 로직을 수행하지 못한다. 하여 쿼리 집합이 필요하고 집합을 트랜잭션으로 구분한다. ex) 예금 이체 (SELECT, UPDATE, UPDATE 3개가 필요) 트랜젝션의 Life span Transaction BEGIN Transaction COMMIT Transaction ROLLBACK 트랜젝션의 2가지 성격 변경, 수정을 위한 트랜잭션 readonly 트랜잭션 트랜잭션은..
-
[M1 Mac] Mysql 명령어 정리 (+ docker로 설치)Spring Boot/DB 2023. 6. 27. 14:05
00. Workbench 단축키 cmd + t 탭 생성 cmd + w 탭 삭제 cmd + shift + enter : 전체 쿼리 실행 cmd + / : 주석 01. 도커로 mysql 설치 docker mysql 실행 명령어 docker pull mysql docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql docker ps docker exec -it mysql bash # mysql 콘솔 mysql -u root -p SHOW DATABASE; CREATE DATABASE {name}; DROP DATABASE {name}; USE {name}; // 데이터베이스 변경 SELECT database(); // 현재 사용 데이..
-
[IntelliJ] Java Google Code Style 적용하기Spring Boot/환경설정 2023. 6. 10. 16:39
Java에 Google Code Convention을 적용법을 정리한다. [ 다운로드 링크 ]https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml GitHub - google/styleguide: Style guides for Google-originated open-source projectsStyle guides for Google-originated open-source projects - GitHub - google/styleguide: Style guides for Google-originated open-source projectsgithub.com [ 인텔리제이 설정 command + , > Cod..