반응형

젠킨스 공식 페이지 : https://www.jenkins.io/doc/book/installing/linux/

 

Linux

You can install Jenkins through yum on Red Hat Enterprise Linux, Alma Linux, Rocky Linux, Oracle Linux, and other Red Hat based distributions. How To Install Jenkins on Rocky Linux 9 You need to choose either the Jenkins Long Term Support release or the Je

www.jenkins.io

 

Debian/Ubuntu

On Debian and Debian-based distributions like Ubuntu you can install Jenkins through apt.

Long Term Support release

A LTS (Long-Term Support) release is chosen every 12 weeks from the stream of regular releases as the stable release for that time period. It can be installed from the debian-stable apt repository.

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
반응형
반응형

Java에서 `for` 문 안에 있는 `switch` 문에서 `continue`를 사용하면, `continue`는 `switch` 문이 아닌 `for` 문에 적용됩니다. 즉, `continue`가 실행되면 `switch` 문을 빠져나가고, `for` 문의 다음 반복으로 넘어갑니다. 아래는 이를 보여주는 예제 코드입니다:

public class ContinueInSwitchExample {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            switch (i) {
                case 0:
                    System.out.println("i is 0");
                    continue;
                case 1:
                    System.out.println("i is 1");
                    break;
                case 2:
                    System.out.println("i is 2");
                    continue;
                default:
                    System.out.println("i is greater than 2");
            }
            System.out.println("End of loop iteration");
        }
    }
}



위의 코드에서, `continue`가 실행되는 경우는 `i`가 0 또는 2일 때입니다. 이 경우들에서는 "End of loop iteration" 문자열이 출력되지 않고, 바로 다음 반복으로 넘어갑니다. 그 외의 경우에는 `switch` 문에서 `break`를 만나거나, 다른 경우에 해당하므로 "End of loop iteration"이 출력됩니다.

반응형
반응형

`java.util.zip.ZipEntry` 클래스의 `getSize()` 메소드는 해당 엔트리의 원본 파일 크기를 바이트(byte) 단위로 반환합니다. 따라서 `getSize()` 메소드를 호출하여 반환된 값은 해당 파일의 크기를 바이트로 나타내는 것입니다.

예를 들어, `getSize()`가 1024를 반환한다면, 이는 해당 파일의 크기가 1024바이트, 즉 1킬로바이트임을 의미합니다.

반응형
반응형

논리 ERD(Entity Relationship Diagram)와 물리 ERD는 데이터 모델링 과정에서 사용되며, 각각 서로 다른 목적과 관점에서 데이터베이스의 구조를 표현합니다. 이들을 구분하는 이유는 다음과 같습니다.

1. **추상화 수준**: 논리 ERD는 데이터의 논리적 구조와 관계를 높은 수준의 추상화로 표현합니다. 물리 ERD는 데이터베이스의 실제 구현에 초점을 맞춰 데이터의 물리적 구조를 보여줍니다.

2. **목적과 관점**: 논리 ERD는 비즈니스 요구 사항과 데이터 요구 사항을 이해하는 데 도움이 됩니다. 물리 ERD는 실제 데이터베이스를 설계하고 구축하는 데 필요한 세부 사항을 제공합니다.

3. **세부 정보**: 논리 ERD에서는 데이터의 종류와 그 사이의 관계를 표현하지만, 물리 ERD에서는 테이블, 컬럼, 데이터 타입, 인덱스, 제약 조건 등과 같은 구현 관련 세부 정보를 제공합니다.

4. **독립성**: 논리 ERD는 데이터베이스 관리 시스템(DBMS)에 독립적입니다. 즉, 어떤 DBMS를 사용하는지와 상관없이 논리적인 구조를 표현합니다. 반면에 물리 ERD는 특정 DBMS에 종속적일 수 있으며, 해당 DBMS의 기능과 제약 사항을 반영합니다.

5. **개발 단계**: 논리 ERD는 일반적으로 요구 사항 분석과 설계 초기 단계에서 사용됩니다. 물리 ERD는 데이터베이스의 실제 구현을 시작하기 전에 사용되며, 구현 단계에서 더 구체적인 계획을 세우는 데 도움이 됩니다.

이러한 구분은 시스템을 효과적으로 설계하고 구축하는 데 도움이 되며, 논리적인 요소와 물리적인 요소 사이의 괴리를 최소화하는데 중요합니다.

반응형
반응형

Java에서 `ZipEntry`의 `getName` 메소드를 사용하여 항목의 이름을 가져올 때, 디렉토리 구분 기호(directory separator)는 항상 슬래시(`/`)로 표시됩니다. 이는 `ZipEntry`가 ZIP 파일 형식을 나타내기 때문이며, ZIP 파일 형식은 플랫폼에 상관없이 항상 슬래시를 사용하여 경로를 표현합니다.

따라서, ZIP 파일 내부의 디렉토리 구조를 확인할 때는 슬래시(`/`)를 사용하여 디렉토리와 하위 항목을 구분해야 합니다.

예를 들어, ZIP 파일에 `mydirectory/myfile.txt`라는 파일이 있을 경우, `ZipEntry`의 `getName` 메소드는 `"mydirectory/myfile.txt"`라는 문자열을 반환합니다.

반응형
반응형

MySQL 8.0 이전의 버전에서는 제시한 구문이 일반적으로 문제가 없습니다. 하지만, MySQL 8.0 이후의 버전에서는 `IDENTIFIED BY` 절은 `CREATE USER` 문에서만 사용할 수 있으며 `GRANT` 문에서는 사용할 수 없습니다. MySQL 8.0 이상에서는 사용자를 먼저 생성하고, 별도로 권한을 부여하는 접근 방식을 사용해야 합니다.

**MySQL 8.0 이전 버전**:

GRANT ALL PRIVILEGES ON 디비명.* TO '계정'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;



**MySQL 8.0 이상 버전**:

먼저 사용자를 생성:

CREATE USER '디비명'@'%' IDENTIFIED BY '비밀번호';



그 다음 권한을 부여:

GRANT ALL PRIVILEGES ON 디비명.* TO '계정'@'%' WITH GRANT OPTION;



또한, 권한 변경 후에는 `FLUSH PRIVILEGES;`를 실행하여 변경 사항을 즉시 적용하는 것이 좋습니다.

FLUSH PRIVILEGES;



이렇게 분리하여 사용자를 생성하고 권한을 부여하는 방식을 사용하는 것이 좋습니다.

반응형
반응형

Java JDK 1.8에서 ZIP 압축 파일을 해제하는데는 `java.util.zip` 패키지를 사용할 수 있습니다. 다음은 Java 코드 예제로, ZIP 파일을 해제하는 간단한 방법을 보여줍니다.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipFile {

    public static void main(String[] args) {
        String zipFilePath = "path_to_your_zip_file.zip";
        String destDirectory = "path_to_destination_directory";

        try {
            unzip(zipFilePath, destDirectory);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void unzip(String zipFilePath, String destDirectory) throws IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }

        try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) {
            ZipEntry entry = zipIn.getNextEntry();

            while (entry != null) {
                String filePath = destDirectory + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dir = new File(filePath);
                    dir.mkdir();
                }
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
        }
    }

    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) {
            byte[] bytesIn = new byte[4096];
            int read = 0;
            while ((read = zipIn.read(bytesIn)) != -1) {
                bos.write(bytesIn, 0, read);
            }
        }
    }
}



위 코드에서 `zipFilePath` 변수에 압축 해제하려는 ZIP 파일의 경로를 설정하고, `destDirectory` 변수에 압축을 해제하여 파일을 저장할 디렉토리의 경로를 설정합니다.

이 코드는 ZIP 파일을 읽고, 각 항목(파일 또는 디렉토리)을 압축 해제하여 지정된 디렉토리에 저장합니다.

반응형
반응형

우분투에서 Nginx를 설치하려면 다음 단계를 따르세요:

1. 우선 터미널을 열고 업데이트를 수행해야 합니다. 이렇게 하려면 아래 명령어를 입력하세요:

```bash
sudo apt update
```

2. 업데이트가 완료되면, Nginx를 설치하세요:

```bash
sudo apt install nginx
```

3. 설치가 완료되면, Nginx 서비스를 시작합니다:

```bash
sudo systemctl start nginx
```

4. 또한 Nginx가 시스템 부팅시 자동으로 시작하도록 설정할 수 있습니다:

```bash
sudo systemctl enable nginx
```

5. Nginx가 정상적으로 설치되었는지 확인하려면, 웹 브라우저를 열고 http://localhost 또는 http://your_server_ip 를 입력하면 Nginx의 기본 환영 페이지가 표시됩니다.

6. 또는 아래의 명령어로 Nginx 서비스의 상태를 확인할 수 있습니다:

```bash
sudo systemctl status nginx
```

이제 Nginx가 우분투 시스템에 성공적으로 설치되었습니다.

반응형
반응형

`netstat` 명령어를 사용하려면 `net-tools` 패키지를 설치해야 합니다. `netstat`은 이전에 기본적으로 포함되었지만, 최근의 우분투 배포판에서는 제외되었습니다.

다음은 `net-tools` 패키지를 설치하는 방법입니다:

1. 터미널을 열고 다음 명령어를 입력합니다:
```
sudo apt update
```

2. 업데이트가 완료되면, `net-tools` 패키지를 설치합니다:
```
sudo apt install net-tools
```

이제 `netstat` 명령어를 사용할 수 있게 됩니다.

반응형
반응형

`netstat -an | grep LIST` 명령어를 `ss`를 이용해서 바꾸면 다음과 같이 됩니다.

```bash
ss -lntu
```

이 명령어는 시스템에서 실행중인 모든 TCP와 UDP 네트워크 서비스를 보여줍니다.

- `-l` 옵션은 LISTEN 상태인 소켓만 보여줍니다.
- `-n` 옵션은 서비스 이름 대신 숫자를 표시합니다.
- `-t` 옵션은 TCP 소켓만 보여줍니다.
- `-u` 옵션은 UDP 소켓만 보여줍니다.

그러나, `grep LIST`와 같이 특정 상태의 소켓만 보고 싶다면, 아래와 같이 `awk` 명령어를 사용할 수 있습니다.

```bash
ss -lntu | awk '/LISTEN/'
```

이 명령어는 `LISTEN` 상태인 소켓만 보여줍니다.

반응형

+ Recent posts