본문 바로가기

전체 글132

@ConfigurationProperties으로 프로퍼티값 바인딩하기 SpringBoot 3.2.1 버전으로 진행한 내용입니다. 아래와 같은 properties 파일로 외부 URL을 관리하고 있다. @Value@Value 어노테이션을 사용하면 프로퍼티 파일의 값을 변수에 바인딩 할 수 있다. 하지만 @Value 어노테이션을 사용하면 final 키워드를 붙이지 못한다.@Value 어노테이션은 스프링에서 프로퍼티 파일의 값을 스프링 빈으로 등록하는데 스프링 컨텍스트가 시작될 때, 즉 런타임 시점에 프로퍼티 파일에 정의된 값들이 해당 변수에 바인딩 되기 때문에 컴파일 시점에서 final 키워드를 사용할 수 없다.따라서, @Value 어노테이션을 통해 바인딩 된 변수는 불변하게 관리할 수 없다는 치명적인 단점이 있다. @PropertySource@PropertySource 어노테.. 2024. 2. 7.
개념적인 튜닝용어 기초 용어오브젝트 스캔 유형테이블 스캔과 인덱스 스캔으로 구분테이블 스캔 : 인덱스를 거치지 않고 바로 디스크에 위치한 테이블 데이터에 접근테이블 풀 스캔인덱스 스캔 : 인덱스로 테이블 데이터에 접근인덱스 범위 스캔인덱스 풀 스캔인덱스 고유 스캔인덱스 루스 스캔인덱스 병합 스캔📈 테이블 풀 스캔인덱스를 거치지 않고 테이블에서 바로 처음부터 끝까지 훑는 방식WHERE 절의 조건문을 기준으로 활용할 인덱스가 없거나, 전체 데이터 대비 대량의 데이터가 필요할 때 수행된다.성능 측면에서는 부정적이다.인덱스 없이 사용하는 유일한 방식이다.📈 인덱스 범위 스캔인덱스 범위 기준으로 스캔한 뒤 테이블의 데이터를 찾아가는 방식SQL문에서 BETWEEN ~ AND 구문이나, , LIKE 구문 등 비교 연산 및 구문에 .. 2024. 1. 30.
논리적인 SQL 개념 용어 서브쿼리 위치에 따른 SQL 용어서브쿼리란 쿼리 안의 보조쿼리를 가르키는 용어다. 메인쿼리를 기준으로 내부에 서브쿼리가 어디에 위치하는지에 따라 부르는 용어가 달라진다.SELECT (SELECT ... FROM ...) -> SELECT 절 : 스칼라 서브쿼리FROM (SELECT ... FROM ...) -> FROM 절 : 인라인 뷰WHERE 컬럼명 IN (SELECT ... FROM ...) -> WHERE절 : 중첩 서브쿼리스칼라 서브쿼리서브쿼리가 반환하는 결과가 단일 값을 가지는 경우이다. 즉, 결과 값이 항상 1행 1열의 구조로 출력되어야 한다.메인쿼리 SELECT 절 목록이나 WHERE에 주로 사용된다.출력되는 데이터 건수가 1건이어야 하므로 집계함수가 자주 쓰인.. 2024. 1. 30.
물리 엔진과 오브젝트 용어 DB 엔진 용어1. 스토리지 엔진역할 : 스토리지엔진(InnoDB, MyISAM, Memory 등)은 사용자가 요청한 SQL로 DB에 저장된 디스크나 메모리에 필요한 데이터를 가져온다.선택 기준 : 데이터를 저장하는 방식에 따라 각각의 스토리지 엔진을 선택해서 사용한다.InnoDB : 데이터 일관성과 안정성이 중요한 OLTP(online transaction processing) 환경에서 사용. 일반적으로 온라인상의 트랜잭션 발생으로 데이터를 처리하는 OLTP 환경이 대다수이기 때문에 InnoDB를 자주 사용한다.MyISAM : 대량의 쓰기 트랜잭션이 발생할 때 사용Memory : 메모리 데이터를 로드해서 빠르게 데이터를 읽어야할 경우 사용2. MySQL 엔진역할 : 사용자가 요청한 SQL에 대한 문법검.. 2024. 1. 30.
DB 정적 데이터, Enum 타입을 활용하여 SQL 질의 간소화하기 사이드 프로젝트를 진행하면서 Enum 타입을 통해 데이터베이스 질의를 줄여 성능을 최적화한 이야기를 해보자 합니다. 현재 원티드 채용 플랫폼에서 최신 Job Description(JD) 정보를 스크래핑하고, 각 JD에서 개발자에게 요구하는 기술 스택 목록을 추출 및 인기있는 기술을 분석하여 해당 기술스택에 대한 맞춤형 강의영상을 제공하는 주제의 사이드 프로젝트를 진행 중입니다. 일관된 데이터를 저장하기 위한 데이터베이스 설계데이터베이스에 각 원티드 JD의 정보, 기술 스택, 그리고 JD와 기술 스택을 연결하는 매핑 정보를 저장하기 위해 다음과 같은 ERD 설계를 수행했습니다.(기술스택 테이블에 서비스에서 사용될 기술스택을 사전에 저장했습니다.)추출한 JD의 상세정보는 원티드JD 테이블에 저장추출한 JD와.. 2024. 1. 22.
[Kernel360] E2E 프로젝트 회고 E2E 프로젝트란?E2E 프로젝트란 엔드 투 엔드(End-to-End)의 약어로, 전체적인 프로세스나 시스템을 포괄하는 프로젝트를 말합니다.Kernel360에서의 E2E 프로젝트는 약 1달의 기간 동안 기획, 설계, 구현 배포까지의 웹 어플리케이션의 한 사이클을 경험하며 개발 스택에 대한 숙련도를 높이는 과정이었습니다. 부트업과 해커톤 프로젝트에서는 빠르게 아이디어를 도출하고 프로토타입을 만드는 경험을 했는데, 이제는 그 경험들을 기반으로 본격적인 서비스를 개발하고자 했기에 더욱 철저한 설계를 통해 빈틈없는 서비스를 완성하는 데 집중했고 서로의 아이디어와 역량을 최대한 발휘하고자 각자의 의견을 존중하며, 우리만의 독특한 서비스를 만들어보자로 E2E 프로젝트를 시작하게 되었습니다. 그렇게 E2E프로젝트 .. 2024. 1. 19.