[개발 일기] 2025.04.09 - 정형 데이터 vs 비정형 데이터
·
개발 일기
💡 개요 오늘은 정형 데이터와 비정형 데이터를 비교하며 정리해 보자.   📕 정형 데이터 정형 데이터란 말 그대로 정형화된, 형태가 존재하는 데이터를 의미한다.  이러한 정형 데이터는 행과 열로 구분된 2차원 배열 형태의 테이블에 저장되며, 구조가 명확하기 때문에 관계형 데이터베이스(RDB)에서 주로 사용된다.  그렇기 때문에 정형 데이터의 특징은 RDB의 특징과 유사하게 스키마(데이터 구조)가 명확하고, SQL 언어를 사용할 수 있으며, 통계적, 수치적 분석이 용이하다는 점이 있다.   🛠️ 정형 데이터 예시엑셀 파일관계형 데이터베이스(RDB)의 테이블 (ex. MySQL, Oracle)회원 정보 (이름, 생년월일, 전화번호 등)  📕 비정형 데이터 비정형 데이터란 말 그대로 형태가 정해지지 않..
[개발 일기] 2025.04.08 - 리퍼러 정책
·
개발 일기
💡 개요 개발자 도구에 나오는 리퍼러 정책이 뭘 뜻할까?  크롬은 무조건 ‘strict-origin-when-cross-origin’ 을 사용하던데..   📕 리퍼러 정책 (Referer-Policy) 리퍼러 정책(Referer-Policy)이란 웹 브라우저가 HTTP 요청을 서버에게 전달할 때 Referer 헤더를 어떻게 할지 결정하는 보안 관련 정책이다.  이 정책을 사용하는 이유는, 요청을 받는 서버가 외부 도메인에 위치한 경우, URL에 포함된 민감한 정보(예: 토큰, 경로 정보 등)가 의도치 않게 노출될 수 있기 때문이다.  따라서 보안과 개인정보 보호를 위해 Referer 헤더의 포함 여부나 범위를 제어할 필요가 있다.  그렇다면 Referer는 뭘까?  Referer는 사용자가 A 페이지..
[개발 일기] 2025.04.07 - Offset
·
개발 일기
💡 개요 오늘은 테이블에서 데이터를 조회할 때 쿼리에서 사용되는 Offset이 뭔지 정리해 보자.   📕 Offset Offset은 데이터베이스의 쿼리에서 특정 위치에서부터 데이터를 반환하도록 하는 기준점을 의미한다.  즉, 테이블에 저장된 데이터를 Offset에 설정된 위치부터 조회하는 것이다.  그런데 Offset의 문제는 Offset에 설정된 위치까지 도달하기 위해 데이터를 건너뛰며 순차적으로 접근해야 한다.  만약 1000번째 Offset이 설정되어 있다면 앞에 있는 999개의 데이터를 먼저 조회해야 하는 것 이다. (쉽게 생각하면 Offset은 테이블에서 건너뛰어야 하는 행의 수와 일치한다)  이러한 문제를 해결하기 위해 많은 개발자들은 보통 PK(Primary Key)와 같은 ID 컬럼을 ..
[개발 일기] 2025.04.06 - 즉시로딩을 피해야 하는 이유
·
개발 일기
💡 개요 오늘은 JPA에서 즉시로딩 사용을 피해야 하는 이유에 대해 정리해 보자.   📕 즉시로딩의 문제점 즉시로딩이란, 연관된 엔티티를 사용하든 안 하든 일단 조회를 하는 것이다.  만약에 해당 엔티티가 필요한 로직이라면 즉시로딩이 유리할 것이다.  하지만 만약 연관된 매핑된 엔티티를 사용하지 않는 로직이라면 즉시로딩으로 조회한 게 헛수고가 된다.  즉, 불필요한 데이터 조회가 발생하는 것이다. 반드시 필요한 데이터를 조회함으로써 발생하는 지연시간도 골치 아픈데, 불필요한 데이터 조회로 인해 지연시간이 더 늘어난다..? 최악이다..  이렇게 성능 측면에서 뿐만 아니라 JPA의 고질병인 N+1 문제도 발생할 가능성이 커진다.  그리고 연관된 엔티티에 또 다른 엔티티가 즉시로딩으로 연관되어 있다면..?..
[개발 일기] 2025.04.05 - N+1 문제 (JPA)
·
개발 일기
💡 개요 오늘은 JPA에서 종종 발생하는 N+1 문제에 대해 정리해 보자.   📕 N+1 문제 N+1 문제는 연관관계가 매핑된 엔티티를 조회할 때, 예상보다 많은 쿼리가 실행되는 비효율적인 상황을 말한다.  이는 주로 ORM 기술을 사용할 때, 연관된 데이터를 지연 로딩(LAZY) 방식으로 가져오면서 발생한다.  한 명의 사용자가 여러 개의 주문을 한 상황을 예로 들자. @Entityclass Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ... @OneToMany(mappedby="member") private List orders = new ArrayL..
[개발 일기] 2025.04.04 - isBlank() vs isEmpty()
·
개발 일기
💡 개요 오늘은 자바에서 String 클래스에 사용되는 isBlank()와 isEmpty()에 대해 정리해 보자.   📕 isBlank() isBlank()는 자바 11부터 사용 가능한 문자열이 비어있는지 여부를 판단하는 메서드이다.  여기서 비어있다는 것은 말 그대로 문자열에 아무것도 없거나, 공백, 탭, 개행문자로만 이루어진 경우도 포함된다. String empty = "";String space = " ";String newline = "\\n\\t";String s = "문자열";System.out.println(empty.isBlank());System.out.println(space.isBlank());System.out.println(newline.isBlank());System.out...