
Java는 Write Once Use Anywhere 이라는 목적을 가지고 있습니다!
번역하자면, "소스파일을 하나만 작성하면 어디에서든지 사용이 가능하다!" 입니다.
자바의 호환성과 관련된 내용
과거 AWS 호스팅 과정에서 윈도우 환경에서 제작한 프로젝트 코드를 깃허브를 통해 리눅스 환경에서 호스팅을 시도한 적이 있다. 그때 대여받은 PC의 성능이 매우 낮아 빌드를 진행하지 못해 윈도우에서 빌드한 .jar파일을 옮겨서 실행한 적이 있다. - 자바의 호환성이라고도 할 수 있을것같다 하지만 몇가지 주의사항이 있으니 기록해두겠다.
Java 버전 호환성: 먼저, Windows에서 사용한 Java 버전과 Linux에서 실행할 때 사용할 Java 버전이 호환되어야 합니다. Java 버전이 다를 경우 호환성 문제가 발생할 수 있습니다.
→ 같은 자바 17로 설정하였다
라이브러리 및 의존성: 사용한 라이브러리나 외부 의존성이 있을 경우, 해당 라이브러리와 의존성도 함께 전달해야 합니다. JAR 파일 안에 모든 필요한 라이브러리가 포함되어 있다면 이 문제는 해결될 수 있습니다.
→ JAR 파일 안에 모든 라이브러리를 포함시켰다
포팅된 네이티브 코드: 만약 네이티브 코드나 특정 플랫폼에 종속된 기능이 사용된 경우, 해당 코드는 새로운 플랫폼에 맞게 재컴파일해야 할 수 있습니다.
네이티브 코드란 ?
네이티브 코드는 특정 컴퓨터 아키텍처 또는 운영체제에 직접 실행될 수 있는 기계어나 어셈블리어와 같은 저수준의 코드를 말합니다. 이 코드는 해당 플랫폼의 하드웨어와 소프트웨어 환경에 직접적으로 의존하며, 고급 수준의 프로그래밍 언어로 작성된 코드를 실행 가능한 형태로 변환된 것입니다.
자바의 경우, 일반적으로 자바 소스 코드는 바이트 코드(Bytecode)로 컴파일되며, 이는 Java 가상 머신 (JVM)에서 실행됩니다. JVM은 특정 플랫폼에 종속되지 않는 중간 단계의 실행 환경을 제공합니다. 그러나 때로는 자바 프로그램에서 특정 운영체제 또는 하드웨어 기능을 사용해야 하는 경우가 있습니다. 이런 경우에는 자바 네이티브 인터페이스(Java Native Interface, JNI)를 사용하여 네이티브 코드를 자바 코드에 통합할 수 있습니다.
네이티브 코드는 효율성과 성능 면에서 이점을 가지지만, 특정 플랫폼에 종속되기 때문에 플랫폼 독립성의 장점을 상실할 수 있습니다.
→ 이런 어려운 내용까지는 프로젝트에 포함되지 않았다.
자바 프로그램에서 특정 운영체제 또는 하드웨어 기능을 사용해야 하는 경우
파일 경로 구분자: 파일 경로 구분자가 Windows에서는 역슬래시(\), Linux에서는 슬래시(/)로 다르므로, 프로그램에서 파일 경로를 하드코딩한 경우 주의가 필요합니다.
→ 경로 사용하지 않음!!
IN() :
IN()은 SQL에서 사용되는 조건 연산자 중 하나로, 특정 값이 리스트나 서브쿼리에 속하는지를 검사하는 데 사용됩니다.
예를 들어, 다음은 IN() 연산자를 사용하여 특정 도시에 속하는 고객을 선택하는 쿼리입니다:
SELECT * FROM 고객
WHERE 도시 IN ('서울', '부산', '대구');
이 쿼리는 "고객" 테이블에서 도시가 '서울', '부산', '대구' 중 하나에 속하는 모든 고객을 선택합니다.
또한, IN()을 사용하여 서브쿼리를 활용할 수도 있습니다. 예를 들어, 다음은 주문 중에서 특정 제품에 해당하는 주문을 선택하는 쿼리입니다:
SELECT * FROM 주문
WHERE 제품ID IN (SELECT 제품ID FROM 제품 WHERE 카테고리 = '전자제품');
이 쿼리는 "주문" 테이블에서 제품이 '전자제품' 카테고리에 속하는 주문을 선택합니다. 여기서 IN() 연산자를 사용하여 서브쿼리의 결과에 해당하는 값을 검사하고 있습니다.
CURDATE() : 현재 날짜를 가져오는 함수
CURDATE()는 MySQL에서 사용되는 날짜 함수 중 하나입니다. 이 함수는 현재 날짜를 반환합니다.
간단한 예를 들어보겠습니다:
SELECT CURDATE();
이 쿼리는 현재 날짜를 조회하게 됩니다. 반환되는 형식은 'YYYY-MM-DD'입니다. 결과 예시:
2023-12-28
CURDATE() 함수는 현재 날짜를 사용하여 데이터베이스에서 날짜를 필터링하거나 날짜 연산을 수행하는 데 유용하게 사용됩니다.
DATEDIFF() : 날짜 차이를 나타내는 함수
DATEDIFF()는 MySQL에서 사용되는 날짜 함수 중 하나로, 두 날짜 간의 차이를 일(day) 단위로 계산합니다.
DATEDIFF() 함수는 다음과 같은 구조를 가지고 있습니다:
DATEDIFF(end_date, start_date)
여기서 end_date와 start_date는 비교하려는 두 날짜이며, end_date에서 start_date를 뺀 결과를 반환합니다.
예를 들어, 현재 날짜와 특정 날짜 간의 차이를 계산하려면 다음과 같이 사용할 수 있습니다:
SELECT DATEDIFF('2023-12-31', CURDATE()) AS 날짜_차이;
이 쿼리는 현재 날짜에서 '2023-12-31' 날짜까지의 차이를 일(day) 단위로 계산하여 반환합니다.
참고로, 음수 값은 현재 날짜보다 이전의 날짜를 나타냅니다.
RANK() OVER (ORDER BY rating DESC)
RANK() OVER (ORDER BY rating DESC)는 SQL에서 사용되는 창 함수(window function) 중 하나입니다. 이 쿼리는 특정 컬럼(여기서는 rating)을 기준으로 내림차순으로 정렬한 후, 그 순서에 따른 레코드의 순위를 부여합니다. 즉, rating이 높은 순서대로 레코드에 순위를 부여하는 것입니다.
예를 들어, 다음과 같은 테이블이 있다고 가정해봅시다:
CREATE TABLE 영화 (
id INT,
title VARCHAR(255),
rating DECIMAL(3, 1)
);
INSERT INTO 영화 (id, title, rating) VALUES
(1, '영화1', 8.5),
(2, '영화2', 9.2),
(3, '영화3', 7.8),
(4, '영화4', 8.9);
그리고 다음과 같은 쿼리를 실행하면:
SELECT id, title, rating, RANK() OVER (ORDER BY rating DESC) AS rank
FROM 영화;
결과는 다음과 같을 것입니다:
| id | title | rating | rank |
|----|-------|--------|------|
| 2 | 영화2 | 9.2 | 1 |
| 4 | 영화4 | 8.9 | 2 |
| 1 | 영화1 | 8.5 | 3 |
| 3 | 영화3 | 7.8 | 4 |
이 결과에서 RANK() 열은 rating이 높은 순으로 순위를 부여한 것을 나타내고 있습니다.
LIMIT 1 : 개수만큼만 나타내는 방법
LIMIT 1은 SQL 쿼리에서 사용되는 절 중 하나로, 결과 집합에서 반환되는 행(row)의 수를 제한하는 데 사용됩니다. 특히, LIMIT 절은 처음 몇 개의 행만을 선택하거나, 조회된 행 중에서 특정 범위의 행을 선택하는 데에 유용합니다.
간단한 예를 들어보겠습니다. 다음은 특정 테이블에서 첫 번째 행만을 선택하는 쿼리입니다:
SELECT * FROM 테이블이름
LIMIT 1;
이렇게 하면 결과 집합에서 첫 번째 행만을 반환합니다.
LIMIT는 주로 정렬된 결과 집합에서 특정 순서의 행을 선택하거나, 특정 조건에 맞는 행 중에서 일부만을 선택할 때 사용됩니다.
DATE_SUB + INTERVAL : 내가 원하는 날짜로 이동할 수 있음
DATE_SUB과 INTERVAL은 각각 MySQL에서 사용되는 날짜 함수 중의 하나입니다. 이 두 함수를 함께 사용하여 날짜를 계산하고 조작할 수 있습니다.
DATE_SUB 함수는 특정 날짜에서 일정 기간을 뺄 때 사용됩니다. 구문은 다음과 같습니다:
DATE_SUB(date, INTERVAL expr type)
여기서:
date: 기준이 되는 날짜 또는 날짜/시간 값입니다.expr: 뺄 값을 나타내는 수치 표현식입니다.type: expr의 단위를 지정하는 부분으로, 예를 들어 'DAY', 'MONTH', 'YEAR' 등이 올 수 있습니다.INTERVAL은 날짜나 시간에 일정한 간격을 더하거나 뺄 때 사용되는 키워드로, 특정 값에 일정한 간격을 더하거나 빼는 데에 유용합니다.
예를 들어, 현재 날짜에서 5일을 빼고 그 결과에 3개월을 더하는 쿼리는 다음과 같습니다:
SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY) + INTERVAL 3 MONTH;
이러한 조작을 통해 특정 날짜를 계산하고 필요에 따라 조작할 수 있습니다.