Spring Boot
-
Spring Boot, 환경 변수 주입 우선순위Spring Boot/환경설정 2023. 6. 3. 23:44
스프링에서 환경변수는 외부에서 주입할 수 있다. 주입 받은 환경 변수는 @Value 어노테이션을 사용하여 빈에 주입하거나, @ConfigurationProperties를 사용하여 바인딩 할 수 있다. 환경변수를 주입은 우선순위가 있어 주의를 요한다. Spring Boot uses a very particular PropertySource order that is designed to allow sensible overriding of values. Later property sources can override the values defined in earlier ones. Sources are considered in the following order: 우선순위가 높은 것 부터 나열했다. 1. Dev..
-
[사내 shedlock 적용기] Spring Scheduler로 Hard delete 구현하기Spring Boot/스케쥴러 2023. 1. 9. 21:41
사내 프로젝트 마이그레이션을 진행하면서 이전에 Spring Quartz 로 되어있던 배치성 작업을 없애기로 결정했다. 결정한 이유는 다음과 같다. 이전 사수분이 알림과 데이터 물리삭제 용도로 Quartz 테이블, 설정만 구성중에 퇴사하여 실제로는 동작하지 않던 상태. 동작하도록 만들기 위해서는 Quartz에 대한 학습, 기존 구현 로직 분석 등의 학습 곡선 현재는 정기적인 배치성 물리 삭제 기능만 요구사항으로 있는 상태 즉, 미완성인 배치성 기능을 수정하여 고치기엔 학습이 필요한 무거운 작업인데, 필요한 요구사항은 단순해서 현재의 최선은 Spring에서 제공하는 Scheduler 어노테이션을 활용해 해결하기로 했다. 1. Spring-annotations for scheduler 사용하기 스프링에서 제공..
-
[사내 TestContainer 적용] Spring boot 통합테스트 도입기Spring Boot/테스트 2023. 1. 6. 00:38
개발자가 되고 가장 고된 작업으로 기억에 남을 통합테스트 작성 과정을 기록에 남긴다. 작년 3월 입사하고 백엔드 시니어님의 갑작스러운 퇴사로, 익숙하지 않은 지식들을 내것으로 만들기 위해 또는 살아남기 위해 씨름하던 중, 작년 하반기 무렵 드디어 회사에 새로운 시니어님이 입사하셨다. 직장 상사 보다는 동료로, 그리고 굉장히 능력있는 분이 오셔서 내게는 작년중 가장 큰 행운이었다고 할 수 있다. 그리고 작년 9월부터 새로온 분과 기존 Mybatis와 Postgres로 되어있던 프로젝트를 다른 기술 spec으로 처음부터 다시 구축하기로 결정했다. (처음에는 Logging 작업을 진행한 후에, 점진적으로 프로젝트를 개선하려고 했지만, 일주일 정도를 작업해보시고는 처음부터 다시 만드는 쪽이 속도가 더 나올 것 ..
-
[TEST 시리즈 1]단위테스트란? Unit 테스트 정의Spring Boot/테스트 2022. 11. 18. 02:07
회사에서 단위테스트를 추가하는 업무를 맡았다. 그 동안 내가 알고 있던 Unit Test와 시니어님이 요청하신 Unit Test의 정의가 달라서 일주일이 날아갔다. 이것은 고통과 함께한 단위테스트 기록이다. 단위테스트의 정의 마틴 파울러씨는 다음과 같이 말했다. (출처 : https://martinfowler.com/bliki/UnitTest.html) Unit testing is often talked about in software development, and is a term that I've been familiar with during my whole time writing programs. Like most software development terminology, however, it's..
-
[SQL] Or 와 In 조건 뭐가 더 좋을까? SELECT OR vs IN, which is better performance.Spring Boot/DB 2022. 7. 15. 00:29
의제 SQL에서 아래 2개의 차이는 무엇이고 Performance는 어떤 것이 좋을까. WHERE foo IN ('a', 'b', 'c') WHERE foo = 'a' OR foo = 'b' OR foo = 'c' 새로 입사한 신입 개발자 분의 질문으로 짧은 토론(?)이 있었다. 10년차 시니어님 : 아.. 이거 real my sql에서 본건데... 책 어디갔어요..! (내가 집에 모셔두었다...) 5년차 개발자 친구 : in() 이 더 빠르지 않니? 검색해이쉬. 3년차 개발자 동료 : or 가 더 빠르지 않을까요? in 은 전부 스캔하는 느낌이고, or는 하나라도 맞으면 결과 낼꺼 같은데. 즉.. 명확하게 어떤 것이 좋다 나오지 않아서 검색해 보았다. 결론 12년 전에는… from stackOverfl..
-
Flyway로 데이터베이스 마이그레이션 해보자 (이론편)Spring Boot/DB 2022. 7. 14. 19:43
Flyway란 무엇인가? Open Source Database Migration Tool - DB 형상 관리 (소프트웨어 변경사항 체계적으로 추적 통제하는 것) Git 처럼 데이터베이스의 History를 관리 해주는 도구이다. 데이터베이스에 직접 DDL을 입력하는게 아니라 SQL File로 데이터베이스를 변경/생성/삭제하며 관리할 수 있다. 즉, DB에 직접 접근하는게 아니라 코드에서 관리할 수 있음. 더나아가 누가, 언제, 어떤 테이블에 어떤 작업을 했는지 기록이 남는다. (퇴사자가 무엇을 했는지 확인 가능) 상상해보자.. 개발하다가 테이블 변경할 일이 생겼다. 그리고 DBA가 없는 회사다. 데이터베이스에 들어가서 ALTER TABLE..... 어쩌고 작성하는데 몇만건의 데이터가 있는 DB라면..? 너..
-
[Mybatis 시리즈 2] DataSouce와 DBCP (DataBase Connection Pool)Spring Boot/DB 2022. 4. 14. 23:03
Mybatis는 O/R Mapper다. 즉 Object와 Relational(관계형 데이터베이스)의 교두보 역할이다. 근데 다 떠나서, Web App이랑 DB랑 연결이 되어 있어야 쓰던가 말던 한다. 연결할때 사용하는 주요 키워드를 정리한다. JDBC - WAS에서 DB에 접근하려면? Application과 DB를 연결하는 것은 JDBC이다. JDBC Driver : 디비 벤더(오라클, mysql)에서 제공하는 DB와 연결하게 해주는 컴포넌트 DB 연결 과정 JDBC 드라이버 로드 **.jdbc.Driver Connection(Thread 생성) → DB 작업 처리 → Close : 이 과정에서 DB Connection 객체 생성 비용, 시간, 네트워크 연결 비용 등등 지속적인 부하 String driv..
-
[Mybatis 시리즈 1] 동작 원리와 스프링에서 어떻게 사용될까?Spring Boot/DB 2022. 4. 14. 22:06
본 시리즈는 빠르게 Mybatis를 사용해보는 목적으로 작성했습니다. 개요 MyBatis는 자바 오브젝트와 SQL문 사이의 자동 Mapping 기능을 지원하는 오픈소스 ORM 프레임워크 (Object Relational Mapping) 장점 Hibernate나 JPA 처럼 새로운 DB 패러다임을 익혀야하는 부담이 적다. JDBC 코드 작성의 불편함 제거 도메인 객체나 VO 객체 중심으로 개발이 가능하다. XML에 SQL 문을 분리하여 관리 → 개발자가 아닌 사람도 작성할 수 있다. Mybatis-spring, Mybatis3의 아키텍처 (스프링) JDBC : 디비 연결 → DataSource JDBC Driver : DB 벤더에서 제공하는 드라이버 Mybatis → JDBC는 저수준의 API, Mybat..