DB JOIN과 서브 쿼리 성능 차이
내용 추가하기
2025.04.06
no image
JAR vs WAR 배포 차이
JAR와 WAR 모두 Java 애플리케이션을 패키징하는 방식JAR (Java ARchive)독립적인 java 애플리케이션 패키징 -> 실행 가능한 jar 파일로 만들어져서 쉽게 실행 가능 클래스, 리소스, 라이브러리를 포함해서 배포와 전달 용이main 메서드를 포함해서 jvm에서 직접 실행 -> 별도의 웹 컨테이너나 서버 필요 X스프링 부트는 내장 서버를 포함해서 jar 파일로 패키징  동적인 웹 컨텐츠 생성 및 관리 제한적WAR (Web ARchive)java 웹 애플리케이션 패키징에 최적화웹 구성 요소 (jsp, html)와 웹 애플리케이션 실행을 위한 서블릿 컨테이너에 필요한 설정 파일, 라이브러리 포함 -> 한번에 배포 및 실행 가능 웹 컨테이너(서블릿 컨테이너)를 통해 애플리케이션 실행 -> 다..
2025.03.19
no image
Java 보안적으로 Random보다 SecureRandom을 사용하자
프로젝트 리팩토링하면서 문자 인증을 위해 난수를 생성하려고 찾아보다가, SecureRandom을 알게 되었다.Random만 사용해봤는데, 차이점이 무엇인지 정리해보려고 한다.Random무작위로 생성되는 것이 아니라 의사 난수가 생성된다.의사 난수 : 난수처럼 보이게 하기 위해 알고리즘을 사용해서 규칙적인 난수를 생성 초기 시드(seed) 를 기반으로 정해진 알고리즘을 통해 난수를 생성하기 때문에 예측 가능초기 시드 : 난수 생성기의 시작값 -> 초기값(Seed)을 설정하면 같은 시드 값에서 동일한 난수들이 나오게 됩니다. 공식 문서에 적혀있다.Instances of java.util.Random are not cryptographically secure. Consider instead using Secu..
2025.03.12
no image
ResponseEntity 사용하는 이유와 @ResponseBody
개념Spring에서 HTTP 응답을 표현하는 클래스응답의 상태 코드 (status code), 헤더 (headers), 바디 (body) 모두 사용 가능해서, 이를 통해 클라이언트에게 세밀한 http 응답 제어 가능사용 이유http 상태 코드 제어 : 단순히 데이터를 반환하는 것이 아니라, 200 OK, 400 Bad Request, 404 Not Found 같은 상태 코드를 명확하게 설정 가능HTTP 헤더를 설정 가능예시생성자 사용  @GetMapping("/hello") public ResponseEntity getHelloMessage() { return new ResponseEntity("Hello, World!", HttpStatus.OK); } 정적 팩토리 메서드 ..
2025.03.06
no image
Git Cherry-Pick 개념과 Merge, Rebase와 비교하기
깃 명령어 중에서 cherry-pick에 대해 알게 되어서 이번 기회에 공부하고,내가 사용했던 명령어 merge, rebase와 비교해보려고 한다,Cherry-Pick다른 브랜치의 원하는 commit을 선택적으로 가져오는 명령어커밋이 이동되는 게 아니라 history에 새로운 커밋이 추가되는 것git cherry-pick {커밋 ID} ... {커밋 ID}각 커밋은 고유 id를 가지고 있어서 그 값을 활용한다. 예시* A - B - C - D (main) \ E - F - G (feature)git cherry-pick abc123(f 커밋)* A - B - C - D - F' (main) \ E - F - G (feature)  커밋 순서가 ..
2025.02.24
no image
DDL, DML, DCL, TCL 개념
DDL (Data Definition Language, 데이터 정의어)정의: 데이터베이스의 구조를 정의하고 변경하는 데 사용되는 명령어 집합으로, 테이블이나 칼럼을 생성, 수정, 삭제명령어:CREATE: 테이블 생성ALTER: 수정DROP: 삭제TRUNCATE: 초기화RENAME: 테이블 이름 변경DML (Data Manipulation Language, 데이터 조작어)정의: 데이터를 조작하는 명령어 집합으로, 데이터를 조회, 저장, 수정, 삭제명령어:SELECT: 데이터 조회INSERT: 저장UPDATE: 수정DELETE: 삭제DCL (Data Control Language, 데이터 제어어)정의: DB 사용자에 대한 접근 권한 제어하는 명령어 집합명령어:GRANT: 권한 부여REVOKE: 권한 회수TC..
2025.02.22
no image
JS에서 OOP 개념 (객체 지향 프로그래밍)
javascript에서 oop에 대해 질문을 받았는데, 제대로 대답하지 못했다.그래서 이번에 블로그에 정리하면서 공부해보려고 한다.OOP (Object Oriented Programming - 객체 지향 프로그래밍)프로그램을 객체(object) 단위로 나누고 이를 상호작용하도록 구성하는 방법 객체 (object) : 속성을 가지고 동작 정의 const car = { brand: "Tesla", model: "Model S", drive: function () { console.log("부릉부릉~ 자동차가 출발합니다!"); }};console.log(car.brand); // Teslacar.drive(); // 부릉부릉~ 자동차가 출발합니다!Javascript프로토타입 기반 언어 (proto..
2025.02.13
no image
데이터베이스 정규화 (Normalization) - 1차 2차 3차 BCNF
정규화관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스 데이터 중복 최소화자료가 분산되어서, 자료 처리가 일관적이지 않음 → 비효율적인 데이터 5차까지 존재하며, 1, 2, 3차가 기본 정규형반정규화성능 저하가 예상될 때 사용읽기 성능을 최적화하도록 설계 -> 데이터를 중복시키거나, 그룹핑1차 정규화 (First Normal Form, 1NF) 테이블의 칼럼이 원자값 (하나의 값)만 갖도록 테이블 구성2차 정규화 (Second Normal Form, 2NF)제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해기본키의 일부에만 종속되는 컬럼이 없어야 한다.학생이름은 학생ID에만 의존하고,과목명은 과목ID에만 의존이는 기본키 전체에 의존하지 않으므로 부분 ..
2025.02.10
no image
Null Empty Blank 차이
값이 없거나 비어있는 상태를 나타낼 때 많이 사용하는 null, empty, blank의 차이에 대해 깊게 생각하지 않고 작성했던 것 같다.그래서 확실하게 정리하기null아직 값이 할당되지 않았음명시적으로 null 설정 가능 empty값이 있지만, 그 값이 비어 있음String emptyStr = ""; // 빈 문자열System.out.println(emptyStr.isEmpty()); // true (문자열이 비어 있음)blank공백(Space, Tab, Enter 등으로만 이루어진 값)String blankStr = " "; // 공백만 있는 문자열System.out.println(blankStr.isEmpty()); // false (공백이 있지만 길이는 있음)System.out.println..
2025.02.09