Spring Boot
-
springboot 애플리케이션 데이터베이스 초기화Spring Boot 2024. 11. 8. 23:58
Spring boot에서는 데이터베이스 변경에 대한 관리 방법을 제공한다.default 설정은 package에 entity를 감지하여 각각의 테이블을 자동 생성한다.데이터베이스를 초기화 하는 방법은 다양한 방법이 있다. 꼭 하나만 선택하여 사용하는 것을 추천한다. 1. JPA를 사용하여 Database를 초기화하는 방법프로젝트를 시작할때 JPA가 DDL generation 기능을 제공한다.Entity를 작성하고 애플리케이션을 실행하면 빈 테이블이 생성된다.spring.jpa.generate-ddl=true # vendor 독립적이고 on/off 할 수 있다2. Hibernate를 사용하여 Database를 초기화하는 방법외부 환경 변수로 조작spring.jpa.hibernate.ddl-auto=creat..
-
2025 - QueryDSL 근황Spring Boot/JPA 2024. 8. 22. 22:24
QueryDSL은 동적 쿼리를 type-safe하게 작성할 수 있도록 도와주는 오픈소스 JPQL 쿼리 빌더이다. 3년 전부터 큰 릴리스가 없어, 해외에서는 JOOQ라는 기술보다 사용 선호도가 낮으나,우리나라에서는 채용 시장과 기업에서 주류로 자리 잡고 있다. 그 이유로는,인프런 김영한 님의 인터넷 강의로 QueryDSL의 입문 문턱이 상대적으로 낮고,대기업에서 수백만 트래픽도 안정적으로 운영할 수 있다는 검증과 노하우가 세미나로 공유되어Java/Spring/JPA를 사용하고 있다면 필수 기술로 여겨지고 있다. 그런데 최근 주변에서 QueryDSL 이외의 쿼리빌더를 도입하며 트러블슈팅 문의가 오픈카톡에 채팅으로 올라오곤 한다.현재 QueryDSL에 어떤 일이 벌어지는지 알아본다. [JOOQ, vs Que..
-
MySQL - 외래키(Foreign Key)를 써야할까?Spring Boot/DB 2024. 8. 14. 01:46
배경첫회사에서는 외래키가 DB의 성능 저하, 확장을 어렵게 만들고, 유연성을 잃게 만든다고 배웠다.이직한 회사에서는 외래키가 제공하는 정합성, 무결성 유지 편익이 외래키가 없는 것 보다 크다고 배웠다.외래키 없이 1년, 외래키 사용하며 1년을 보내며 느낀점을 남겨본다.외래키를 쓰지 않는 이유 관계형 DB에 관계가 단순할때는 문제가 없지만, 복잡한 관계를 맺으면 문제가 생긴다. 기본적으로 FK는 인덱스이다. UPDATE, DELETET시 외래키로 인해 성능 저하가 생긴다.부모테이블, 자식테이블 모두 해당 컬럼 인덱스 생성이 필요하고, 변경 시 부모/자식 테이블 데이터 체크 과정이 필요하여 잠금이 발생한다.데드락의 원인이 된다. (참고 : https://martin-son.github.io/Martin-IT..
-
인텔리제이 통계 기능으로 개발 생산성 올리기Spring Boot/인텔리제이 2024. 6. 19. 22:27
경영의 아버지 피터드러커가 일찍이 말했다. 측정할 수 있어야 개선할 수 있다. 인텔리제이는 생산성 측정 기능을 제공한다. 맥 기준으로 cmd + shift + a 단축키를 누르고 my productivity를 클릭하면 내가 IDE 사용하면서 단축키를 몇번 호출했는지 통계를 확인할 수 있다. 자주 안쓰는 단축키 사용 해서 생산성을 올려보자 [인텔리제이 생산성 관련 추천 사이트] - 공식 사이트 단축키 Keymap -> https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf 인텔리제이 단축키 관련 강의 - https://www.inflearn.com/course/intellij-guide..
-
스프링 개발자가 가장 많이하는 실수Spring Boot 2024. 6. 19. 21:55
이 글은 스프링 공식 팟캐스트를 번역한 내용이다. [Sping Office Hours - 스프링 개발자가 가장 많이하는 5가지 실수]https://www.youtube.com/watch?v=nd5JzDIEI6A[예제코드] https://github.com/danvega/spring-common-mistakes 1. DI 할때 필드 주입(@Autowired) 대신 생성자 주입을 사용한다.필드 주입은 테스트에서 Reflection이나 Mock할때 issue를 만들 수 있다.생성자 주입을 사용하면 이러한 이슈를 방지할 수 있다.생성자 주입을 사용하면 순환 참조같은 상황을 catch 할 수 있다.@Autowired를 사용해야한다면 Test 코드에서만 사용하자2. 패키지 구성시 package by layer 대..
-
QueryDsl projections 자바 Record에 적용하기Spring Boot/JPA 2024. 4. 23. 01:58
QueryDsl을 이용하는 경우 반환 타입이 Entity가 아닌 다른 응답 객체(DTO)일때 Projection 기능을 제공해서 원하는 응답 객체로 변환할 수 있다.Projections.beanProjections.constructorProjections.fields@QueryProjection아니면 projection 기능을 포기하고 변환하는 로직을 작성해야하는데, 데이터 size가 크면 성능 이슈가 있을 수 있다. 위 4개 기능들의 사용법과, 장단점을 비교해보자. 결론부터 말하자면 Record는 Projections.constructor로만 데이터 바인딩이 가능하다. constructor 방식은 버그를 만들수 있어서, QueryDSL 응답객체는 Record 대신 class를 이용하고 fields pr..
-
Port Adapter 패턴이란? (클린아키텍처)Spring Boot 2024. 4. 20. 23:39
배경 사내에 MSA를 도입 해보자는 이야기가 있어서, 이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다. 내가 필요하고 판단한 선수지식은 다음과 같다. 멀티모듈(https://yeoon.tistory.com/145) DDD (https://yeoon.tistory.com/147) port-adapter pattern Spring Cloud event-consistency, 카프카 AWS EKS port-adapter pattern에 관해 작성해본다. Clean Architecture port adapter pattern은 아키텍처적인 문제를 해결하기 위해 등장한 아키텍처 패턴 중 하나다. 아키텍처는 기본적으로 변경이 어렵다 즉 개선이 어렵다. 좋은 아키텍처는 쉬운 확장, 테스트 하기 쉬운 코드, 높..
-
DDD 기본개념 톺아보기Spring Boot 2024. 4. 20. 00:23
배경사내에 MSA를 도입 해보자는 이야기가 있어서,이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다.내가 필요하고 판단한 선수지식은 다음과 같다.멀티모듈(https://yeoon.tistory.com/145)DDDport-adapter pattern (https://yeoon.tistory.com/148)Spring Cloudevent-consistency, 카프카AWS EKSDDD에 관해 작성해본다. Domain Driven Design의 탄생2005년 마틴 파울러, 로드 존슨 등등등 유명한 개발 아저씨들 모여 토론.주제는 1999년 ~ 2005년 EJB 등장으로 객체지향개발 같은 방법론 적용 못하고, 코드 너무 복잡해져서 해결책 논의.에릭 에반스라는 사람 Domain Driven Design이란..