멋쟁이사자처럼부트캠프 클라우드 엔지니어링 5기 [3주차]

jihyeon·2026년 2월 8일

3주차에서는 Java DTO 객체 및 API 활용과 DB SQL 문법에 대해 배웠다.


열거형(Enum; Enumeration)

상수 데이터 집합 (하나의 객체이다)

  • name() : 객체 문자열 반환
  • ordinal() : 객체 순서 반환
  • valueOf(String name) : 문자열과 일치하는 객체 반환 (일치하는 문자열이 없으면 에러 발생)
  • values() : 모든 객체 배열로 반환

Enum 생성

package step01;

public enum Color {
	// 상수형 객체
	RED,
	BLUE,
	GREEN
}

BigInteger, BigDecimal

정수형 또는 실수형의 범위를 지정하고 기능 수행

(long or int가 아닌 정확한 수치에 대한 계산)


Lombok

다양한 인스턴스를 만들기 위한 생성 도구

  • 코드 간결성, 가독성 향상, 유지보수 비용 절감
  • 외부 라이브러리이기 때문에 별도 설치 필요
  • 설치 옵션 : java -jar lombok.jar

주요 어노테이션 및 기능

어노테이션기능 설명
@Getter / @Setter필드의 접근자(Getter)와 설정자(Setter) 메소드 자동 생성
@ToString객체의 정보를 출력하는 toString() 메소드 자동 생성
@EqualsAndHashCode객체 비교를 위한 equals(), hashCode() 메소드 자동 생성
@Data위 항목들(@Getter, @Setter, @ToString 등)을 모두 포함하는 종합 세트
@Builder복잡한 객체 생성을 유연하게 돕는 빌더 패턴 적용

@EqualsAndHashCode : 모든 필드를 다 비교
@EqualsAndHashCode(of = “비교하고 싶은 하나의 필드") : 하나의 필드만 비교 (of 사용)


생성자 관련 어노테이션

@NoArgsConstructor: 파라미터가 없는 기본 생성자 생성

@AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자 생성

@RequiredArgsConstructor : final 필드나 @NonNull 필드만 파라미터로 받는 생성자 생성 (final 필드 : 필수 + 불변)


생성자 패턴

  • 정적 팩토리 메서드 패턴 (Static Factory Method) : static 메서드로 객체의 생성을 단순화 하는 패턴

    메서드를 이용한 객체 생성 (호출)

    User user1 = User.*of*("java", "ADMIN");
    User user2 = User.*createAdmin*("db");
    • 메서드의 이름만 봐도 의도 파악 가능
    • new 같은 메모리 사용X -> 성능을 높일 수 있음
  • 빌더 패턴 : 복잡한 객체를 단계별로 생성할 수 있게 도와주는 패턴

public class Hamburger {
    private final String bun; // 필수
    private final int patty;  // 필수
    private final boolean cheese; // 선택
    private final boolean lettuce; // 선택

}

// 사용 예시
Hamburger myBurger = new Hamburger.Builder("플레인번", 2)
					                        .cheese(true)
					                        .lettuce(false)
					                        .build();

Maven

자바 프로젝트 빌드 자동화 및 의존성 관리 도구

핵심 기능

  • 의존성 관리
  • 빌드 자동화
  • 구조 표준화

Jsoup

HTML을 자바 객체처럼 파싱 해주는 라이브러리

  • 크롤링 : 웹 페이지의 소스를 그대로 가져와서 그 안에서 특정 데이터를 추출해 내는 행위
    • 정적 데이터(Jsoup), 동적 데이터 수집 가능

JSON(JavaScript Object Notation)

데이터를 저장하거나 전송할 때 사용하는 경량의 텍스트 기반 데이터 형식

  • 키-값 형태로 저장
  • 어떤 언어와도 통신 가능

어노테이션

어노테이션역할
@JsonPropertyJSON의 키 이름과 자바 필드 이름을 매핑 (이름이 다를 때 필수)
@JsonIgnore특정 필드를 JSON 결과에서 제외 (예: 비밀번호 등)
@JsonFormat날짜(Date, LocalDateTime)의 출력 형식을 지정
@JsonInclude값이 null인 필드는 JSON에 포함하지 않도록 설정
@JsonNaming클래스 전체에 적용 (예: 모든 필드를 Snake Case로 일괄 변환)

관계형 데이터베이스(RDB, Relational Database System)

데이터를 테이블 형식으로 표현

  • 열, 필드 : 항목의 속성
  • 행, 레코드 : 각 데이터 항목 저장
  • 스키마 : 데이터의 구조, 구성 및 관계를 정의하는 논리적인 형식

관계형 데이터 베이스를 관리하는 시스템을 사용 → DB 활용


모델링

개념적 모델링 : 요구사항을 토대로 필요한 데이터는 무엇인지 등을 추려내는 것

논리적 모델링 : 데이터베이스의 논리적인 구조를 설계하는 것

물리적 모델링 : 논리적 모델을 물리적인 데이터베이스 구조로 변환하는 것


관계형 데이터베이스 특징

  • 데이터 값 → 정확, 완전, 일관 유지
  • 정형화된 데이터 구조

NoSQL 데이터베이스 (비관계형 데이터베이스)

테이블을 사용하지 않고 다양한 데이터 모델을 사용해서 데이터들을 저장하고 관리

→ 주로 대량의 분산 데이터 또는 유연한 데이터 모델이 필요한 환경에서 사용


DQL (Data Query Language)

  • 데이터 검색(Read) 기능에 사용하는 SQL
  • SELECT 키워드 사용

구조

SELECT fields(속성명), ...
FROM table(테이블명)
WHERE field condition other table field
GROUP BY field
HAVING field condition 
ORDER BY field
  • 비구조적인 데이터 모델
  • 분산 처리 환경
  • 높은 가용성, 확장성

조인(JOIN)

  • 두 개 이상의 테이블에서 필요 데이터 검색 기능에 사용하는 명령 구문
  • JOIN 키워드 사용

구조

SELECT column명(s)
FROM table1
INNER JOIN table2
ON table1.column명 = table2.column명;

// LEFT, RIGHT
SELECT column명(s)
FROM table1
LEFT JOIN table2
ON table1.column명 = table2.column;

서브쿼리(SubQuery)

  • 다른 쿼리 내부에 포함되어 있는 쿼리
  • 서브 쿼리가 먼저 실행 → 메인 쿼리 실행
  • 쿼리의 구조를 명확히 제시, 가독성 향상

구조

// 기본
메인 쿼리
		(
			서브쿼리
		)
		
// 종류
SELECT field, (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query)
FROM (SELECT ...)         -- 인라인 뷰(Inline View)
WHERE field = (SELECT ...)  -- 일반 서브쿼리
		

정리

상황추천 방식이유
여러 테이블의 컬럼을 동시에 출력할 때JOIN서브쿼리는 SELECT 절에 컬럼당 하나씩 써야 해서 비효율적
단순히 존재 여부만 체크할 때 (EXISTS)Subquery메인 테이블의 중복 방지 및 Early-exit(발견 즉시 종료) 가능
그룹화(GROUP BY) 후 그 결과와 비교할 때Subquery (Inline View)집계 데이터를 먼저 확정한 뒤 매칭하는 것이 논리적으로 명확함
데이터 양이 아주 많을 때JOIN옵티마이저가 인덱스를 활용한 조인 경로를 더 잘 찾음

DML (Data Manipulation Language)

  • 데이터 변형(삽입, 수정, 삭제) 기능에 사용하는 SQL
  • INSERT, UPDATE, DELETE 키워드 사용

문법

// INSERT
INSERT INTO table명 [(column1, column2, column3, ...)]
VALUES (value1, value2, value3, ...);

// UPDATE
UPDATE table명
SET column1 = value1, column2 = value2, ...
WHERE condition;

// DELETE
DELETE FROM table명 WHERE condition;

DDL(Data Definition Language)

  • 데이터 구조를 정의하는 기능에 사용하는 명령어
  • 생성, 변경, 삭제 등의 기능 제공
  • CREATE, ALTER, DROP, … 키워드 사용

문법

// Database
CREATE DATABASE database명;
DROP DATABASE database명;

// CREATE
CREATE TABLE table명 (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

// DROP
DROP TABLE table명;

// ALTER
ALTER TABLE table명
ADD column명 datatype;

ALTER TABLE table명
DROP COLUMN column명;

ALTER TABLE table명
MODIFY COLUMN column명 datatype;

제약 조건(Constraints)

  • 테이블의 데이터에 지정하는 규칙
  • 데이터의 정확한 사용을 위함
// 기본 제약조건
NOT NULL - null 불가
UNIQUE - 고유한값 유지(중복 불가)
PRIMARY KEY - PK, 기본키, NOT NULL + UNIQUE, 행(레코드)를 구분
FOREIGN KEY - FK, 참조키, 다른 테이블의 컬럼(필드)를 참조
CHECK - 지정한 규칙의 데이터만 사용 가능
DEFAULT - 기본값 지정

DCL(Data Control Language)

  • DB 접근 및 객체의 사용 권한을 정의하는 명령어
  • GRANT(권한 부여), REVOKE(권한 제거)키워드 사용

문법

// 권한 옵션
ALL PRIVILEGES : 모든 권한
CREATE, DROP, ALTER : 테이블 DDL 권한
SELECT, INSERT, UPDATE, DELETE : 테이블 DQL, DML 권한
USAGE : 권한 없음(계정 생성시에만 사용)

// IP 주소
% : 모든 IP
127.0.0.1 : 자신
localhost : 자신

// USER
CREATE USER '계정명'@'IP주소' IDENTIFIED BY '비밀번호';
DROP USER '계정명'@'IP주소';

// GRANT
GRANT 권한 옵션 ON 데이터베이스명.테이블 TO '계정명'@'IP주소'; 

// REVOKE
REVOKE 권한 옵션 ON 데이터베이스명.테이블 FROM '계정명'@'IP주소'; 

// 적용
FLUSH PRIVILEGES;

TCL(Transaction Control Language)

Transaction : 수행하는 작업을 논리적으로 묶은 단위

// 예시
필요한 작업: MySQL -> DB 10만원 송금
① MySQL 계좌에서 10만원 차감 (UPDATE)
② DB 계좌에 10만원 추가 (UPDATE)

ACID

특성영문설명
원자성Atomicity트랜잭션 내 모든 작업이 전부 성공하거나 전부 실패함. 중간 상태는 없음
일관성Consistency트랜잭션 실행 전후로 데이터베이스가 일관된 상태를 유지함
격리성Isolation동시에 실행되는 트랜잭션들이 서로 영향을 주지 않음
지속성DurabilityCOMMIT된 트랜잭션은 시스템 장애가 발생해도 영구적으로 반영됨

락(Lock) - 데이터 잠금
여러 사용자가 동시에 같은 데이터에 접근할 때 데이터의 일관성을 보장하기 위해 접근을 제한하는 메커니즘


리버스 엔지니어링(Reverse Engineer)

기존 MySQL 데이터베이스의 스키마, 테이블, 뷰, 관계(Foreign Key) 정보를 분석하여 시각적인 ERD(Entity Relationship Diagram) 모델로 자동 변환하는 기능


정규화 (Normalization)

  • 테이블을 올바르게 설계하는 규칙
  • 데이터 중복 최소화

제1정규형 (1NF) - 원자값 (Atomic Value)

  • 한 컬럼에는 하나의 값만 저장

제2정규형 (2NF) - 부분 종속 제거

  • 모든 일반 컬럼은 기본키 전체에 종속

제3정규형 (3NF) - 이행 종속 제거

  • 일반 컬럼은 기본키에만 종속되어야 하고, 다른 일반 컬럼에 종속되면 안됨

0개의 댓글