DB

HeeJune KIM·2024년 8월 5일

SQL (Structured Query Language)

주요 SQL 명령어

  1. SELECT

    SELECT * FROM employees WHERE department = 'Sales';
  2. INSERT

    INSERT INTO employees (name, department, salary) VALUES ('John Doe', 'Sales', 50000);
  3. UPDATE

    UPDATE employees SET salary = 60000 WHERE name = 'John Doe';
  4. DELETE

    DELETE FROM employees WHERE name = 'John Doe';
  5. CREATE TABLE

    CREATE TABLE employees (
      id INT PRIMARY KEY,
      name VARCHAR(100),
      department VARCHAR(50),
      salary INT
    );
  6. ALTER TABLE

    • 목적: 테이블 구조를 변경합니다.
      ALTER TABLE employees ADD COLUMN email VARCHAR(100);
  7. DROP TABLE

    DROP TABLE employees;

참고 자료

데이터베이스 (DB)

주요 데이터베이스 개념

  1. 스키마 (Schema)

    • 데이터베이스의 구조와 제약 조건을 정의합니다.
  2. 테이블 (Table)

    • 행(row)과 열(column)로 구성된 데이터의 집합입니다.
  3. 열 (Column)

    • 테이블의 필드를 나타내며, 각 열은 특정 데이터 타입을 가집니다.
  4. 행 (Row)

    • 테이블 내에서 단일 레코드를 나타냅니다.
  5. 키 (Key)

    • 데이터베이스의 특정 레코드를 식별하는 데 사용됩니다. 주요 키로는 기본 키(Primary Key)와 외래 키(Foreign Key)가 있습니다.

참고 자료

CSV (Comma-Separated Values)

주요 개념

  1. 헤더 (Header)

    • 파일의 첫 번째 행으로, 열의 이름을 정의합니다.
  2. 데이터 레코드

    • 쉼표로 구분된 데이터 값들의 행입니다.

예시

name,age,department

John Doe,30,Sales
Jane Smith,25,Marketing

참고 자료

JSON (JavaScript Object Notation)

주요 개념

  1. 객체 (Object)

    • 중괄호 {}로 감싸진 속성-값 쌍의 집합입니다.
      {
        "name": "John Doe",
        "age": 30,
        "department": "Sales"
      }
  2. 배열 (Array)

    • 대괄호 []로 감싸진 값들의 순서 있는 집합입니다.
      [
        {
          "name": "John Doe",
          "age": 30,
          "department": "Sales"
        },
        {
          "name": "Jane Smith",
          "age": 25,
          "department": "Marketing"
        }
      ]
  3. 값 (Value)

    • 문자열, 숫자, 객체, 배열, 불리언 또는 null이 될 수 있습니다.

참고 자료

HTTP Request

HTTP 요청 구성 요소

  1. HTTP 메서드 (HTTP Method): 요청이 어떤 동작을 수행하는지 정의합니다. (예: GET, POST, PUT, DELETE)
  2. URI (Uniform Resource Identifier): 요청의 대상이 되는 자원의 경로를 지정합니다.
  3. HTTP 버전: 사용 중인 HTTP 프로토콜의 버전을 나타냅니다. (예: HTTP/1.1, HTTP/2)
  4. 헤더 (Headers): 요청에 대한 추가 정보를 제공합니다. (예: Content-Type, User-Agent)
  5. 본문 (Body): (옵션) 요청에 대한 데이터를 포함합니다. 주로 POST, PUT 요청에서 사용됩니다.

HTTP 메서드

1. GET

  • 목적: 서버에서 데이터를 요청하여 가져옵니다.
  • 특징:
    • 요청 본문이 없습니다.
    • 요청한 데이터를 URL에 쿼리 파라미터로 포함합니다.
    • 멱등성: 여러 번 요청해도 결과가 동일합니다.

2. POST

  • 목적: 서버에 데이터를 전송하여 새로운 리소스를 생성하거나 작업을 수행합니다.
  • 특징:
    • 요청 본문에 데이터를 포함합니다.
    • 멱등성이 없습니다: 같은 요청을 여러 번 보내면 동일한 결과를 보장하지 않습니다.

3. PUT

  • 목적: 서버의 기존 리소스를 대체합니다.
  • 특징:
    • 요청 본문에 대체할 데이터를 포함합니다.
    • 멱등성: 여러 번 요청해도 결과가 동일합니다.

4. DELETE

  • 목적: 서버에서 리소스를 삭제합니다.
  • 특징:
    • 요청 본문이 없습니다.
    • 멱등성: 여러 번 요청해도 결과가 동일합니다.

5. PATCH

  • 목적: 서버의 기존 리소스를 부분적으로 수정합니다.
  • 특징:
    • 요청 본문에 수정할 부분 데이터를 포함합니다.
    • 멱등성 보장이 없지만, 일반적으로 여러 번 요청해도 동일한 결과를 기대할 수 있습니다.

6. HEAD

  • 목적: GET 요청과 동일하지만, 응답 본문을 포함하지 않습니다.
  • 특징:
    • 주로 리소스의 메타데이터를 확인할 때 사용됩니다.
    • 멱등성: 여러 번 요청해도 결과가 동일합니다.

7. OPTIONS

  • 목적: 서버에서 지원하는 메서드 옵션을 확인합니다.
  • 특징:
    • 요청 본문이 없습니다.
    • 주로 CORS(교차 출처 리소스 공유)와 관련된 프리플라이트 요청에서 사용됩니다.
    • 멱등성: 여러 번 요청해도 결과가 동일합니다.

참고 자료

HTTP Response Status Codes

1xx (정보 응답)

1xx 상태 코드는 서버가 요청을 수신했으며, 처리가 계속되고 있음을 나타냅니다.

  • 100 Continue: 클라이언트는 계속해서 요청 본문을 전송해도 됩니다.
  • 101 Switching Protocols: 서버가 클라이언트의 요청에 따라 프로토콜을 변경하고 있습니다.

2xx (성공)

2xx 상태 코드는 클라이언트의 요청이 성공적으로 수신되어 이해되었고 처리되었음을 나타냅니다.

  • 200 OK: 요청이 성공적으로 처리되었습니다.
  • 201 Created: 요청이 성공적으로 처리되었으며, 리소스가 생성되었습니다.
  • 202 Accepted: 요청이 수락되었지만, 아직 처리되지 않았습니다.
  • 204 No Content: 요청이 성공적으로 처리되었지만, 반환할 콘텐츠가 없습니다.

3xx (리다이렉션)

3xx 상태 코드는 클라이언트가 요청한 리소스를 다른 위치에서 가져와야 함을 나타냅니다.

  • 301 Moved Permanently: 요청한 리소스가 영구적으로 새로운 URI로 이동되었습니다.
  • 302 Found: 요청한 리소스가 임시로 다른 URI에 위치해 있습니다.
  • 304 Not Modified: 리소스가 수정되지 않았으므로 클라이언트는 로컬에 저장된 캐시를 사용해야 합니다.

4xx (클라이언트 오류)

4xx 상태 코드는 클라이언트의 요청에 오류가 있음을 나타냅니다.

  • 400 Bad Request: 서버가 요청의 구문을 이해할 수 없습니다.
  • 401 Unauthorized: 요청에 대해 인증이 필요합니다.
  • 403 Forbidden: 서버가 요청을 이해했지만, 이를 수행할 권한이 없습니다.
  • 404 Not Found: 요청한 리소스를 찾을 수 없습니다.
  • 405 Method Not Allowed: 요청한 메서드가 허용되지 않습니다.

5xx (서버 오류)

5xx 상태 코드는 서버가 요청을 처리하는 도중 오류가 발생했음을 나타냅니다.

  • 500 Internal Server Error: 서버 내부에 오류가 발생하여 요청을 처리할 수 없습니다.
  • 501 Not Implemented: 서버가 요청을 처리하는데 필요한 기능을 지원하지 않습니다.
  • 502 Bad Gateway: 게이트웨이 또는 프록시 서버가 상위 서버로부터 잘못된 응답을 받았습니다.
  • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없습니다.
  • 504 Gateway Timeout: 게이트웨이 또는 프록시 서버가 상위 서버로부터 응답을 받을 수 없습니다.

참고 자료

CSV 라이브러리

1. Apache Commons CSV

특징

  • 단순성: CSV 파일을 읽고 쓰는 작업을 간단하게 처리할 수 있는 기능 제공.
  • 유연성: 다양한 CSV 형식을 지원하며, 구분자와 인용 문자 등을 커스터마이징 가능.
  • 성능: 대용량 CSV 파일을 효율적으로 처리할 수 있음.
  • 안정성: Apache Commons 프로젝트의 일부로서, 높은 품질과 활발한 유지보수.

예시

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;

import java.io.FileWriter;
import java.io.IOException;

public class ApacheCommonsCSVExample {
    public static void main(String[] args) throws IOException {
        FileWriter out = new FileWriter("example.csv");
        try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT)) {
            printer.printRecord("ID", "Name", "Age");
            printer.printRecord("1", "John Doe", "30");
            printer.printRecord("2", "Jane Smith", "25");
        }
    }
}

2. OpenCSV

특징

  • 다양한 기능: CSV 파일의 읽기, 쓰기, 파싱, 유효성 검사 등을 지원.
  • 유연성: 다양한 CSV 파일 형식을 지원하며, 사용자 정의 파서 및 작성기 제공.
  • 편리성: 애노테이션을 이용한 객체-CSV 매핑 기능 제공.

예시

import com.opencsv.CSVWriter;

import java.io.FileWriter;
import java.io.IOException;

public class OpenCSVExample {
    public static void main(String[] args) throws IOException {
        String csv = "example.csv";
        CSVWriter writer = new CSVWriter(new FileWriter(csv));
        String[] header = {"ID", "Name", "Age"};
        writer.writeNext(header);
        String[] record1 = {"1", "John Doe", "30"};
        writer.writeNext(record1);
        String[] record2 = {"2", "Jane Smith", "25"};
        writer.writeNext(record2);
        writer.close();
    }
}

3. Jackson CSV

특징

  • 강력한 데이터 바인딩: Jackson 라이브러리의 일부로서, JSON과 유사한 방식으로 CSV를 처리할 수 있음.
  • 유연성: CSV 파일을 POJO와 쉽게 매핑할 수 있음.
  • 다목적성: JSON, XML 등 다른 데이터 포맷과 함께 사용할 수 있는 통합적인 데이터 처리 기능 제공.

예시

import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

import java.io.File;
import java.io.IOException;

public class JacksonCSVExample {
    public static void main(String[] args) throws IOException {
        CsvMapper mapper = new CsvMapper();
        CsvSchema schema = CsvSchema.builder().addColumn("ID").addColumn("Name").addColumn("Age").build().withHeader();

        Object[] users = new Object[]{
            new User("1", "John Doe", "30"),
            new User("2", "Jane Smith", "25")
        };

        mapper.writerFor(User[].class).with(schema).writeValue(new File("example.csv"), users);
    }
}

class User {
    public String ID;
    public String Name;
    public String Age;

    public User(String ID, String Name, String Age) {
        this.ID = ID;
        this.Name = Name;
        this.Age = Age;
    }
}

비교 요약

특성/라이브러리Apache Commons CSVOpenCSVJackson CSV
단순성높음중간중간
유연성높음높음높음
성능높음중간높음
POJO 매핑지원 안 함애노테이션 사용강력한 데이터 바인딩
통합성단일 기능에 집중단일 기능에 집중다양한 데이터 포맷 지원
사용 예시단순 CSV 파일 읽기/쓰기POJO와 매핑된 CSV 처리Jackson 생태계와의 통합

출처

Apache Commons CSV
OpenCSV
Jackson CSV

0개의 댓글