전체 글 46

도메인과 엔티티 차이

도메인 (Domain)- 소프트웨어가 해결하려는 문제 영역, 즉 비즈니스적인 개념이다.- 현실 세계의 개념을 소프트에어적으로 표현한 것이다.- 학교 시스템에서 '학생 관리', '수업 운영', '성적 처리' 가 도메인이다. 엔티티 (Entitiy)- 도메인 안에서 고유하게 식별 가능하며, 속성을 가지고 변화되는 데이터를 포함한 객체이다.- 데이터베이스에서는 '테이블'로 구현될 수 있고, 객체지향프로그램에서는 '클래스'로 표현한다.- 고유 식별자(ID)가 존재하고, 시간이 지나면 속성 값이 변할 수 있다. 도메인 vs 앤티티 관계- 도메인은 소프트웨어가 해결하려는 업무 영역이고, 엔티티는 그 도메인 안에 식별할 수 있는 객체 예시 코드학생 관리 시스템을 만든다고 할 때 학생 도메인 안에서 주요 객체 정의● ..

CS 2025.06.29

[Java] 테스트에서 사용하는 AssertJ의 AssertThat이란?

[테스트 토크 작성 방법]1. given : 어떤 상황이 주어졌을 때2. when : ~를 실행했을 때3. then : 검증한 결과가 ~가 나와야함 given, when는 실행 단계, then는 검증 단계라고 할 수 있다.- 실행 단계 : 사용자 입력을 모방해 테스트할 로직을 실행시킴- 검증 단계 : 실행 단계가 예상된 대로 동작하는지 검증 ■ assertThat()은 테스트에서만 쓰일까?- 결과가 예상과 같은지를 검증할 때 사용- 주로 src/test/java 디렉토리에 있는 단위 테스트, 통합 테스트 등에서 사용 ■ AssertJ란?assertion을 제공하는 자바 라이브러리이다. 에러 메세지와 테스트 코드의 가독성을 매우 높여준다. ■ AssertJ 메소드 임포트 ■ assertThat 메서드 정리..

JAVA 2025.06.15

[Kubernetes] Pod 와 Container

Pod는 한 개 이상의 리눅스 컨테이너로 구성된다. 애플리케이션 종류에 따라서 한 애플리케이션이 여러 개의 컨테이너로 구성되게 개발하는 경우도 많다. 이 때 이 컨테이너들을 하나의 Pod에 묶어서 쿠버네티스에 실행을 명령할 수도 있고, 각각 다른 Pod로 만들어 여러 개의 Pod들을 쿠버네티스에 실행시켜달라고 명령할 수도 있다. 두 가지 방법 모두 사용되고 있는 개발 방식으로 각 장단점이 존재하기에 자신의 애플리케이션에 어울리는 방식으로 개발해야한다. Pod 내 컨테이너는 크게 3가지이다. 네트워크 네임스페이스, IPC 네임스페이스, 스토리지를 공유한다. 그림과 같이 하나의 Pod에는 기본적으로 하나의 private IP 주소가 부여된다. Pod 내 컨테이너들은 컨테이너가 속한 Pod의 IP 주소를 이용..

Cloud, Kubernetes 2025.05.05

[Kubernetes] Pod의 개념과 필요성

PodPod(파드, 포드)는 쿠버네티스가 생성하고 관리하는 가장 작은 컴퓨터 단위이다. 파드는 한 개 이상의 리눅스 컨테이너로 구성되며, 애플리케이션(인스턴스)이 실행되는 논리적 호스트(컴퓨터)이다. Pod는 물리 컴퓨터인 쿠버네티스 워커노드에 배치되어 실행되는데, 쿠버네티스의 목적이 바로 Pod들을 안정적이고 효율적으로 클러스터 내에서 실행시키는 것이다. 리눅스 컨테이너, 쿠버네티스가 대중화 되기 전에 이러한 애플리케이션은 작은 프로세스(DB, 웹서버, 로거 ) 단위로 개발 및 운영되었다. 도커가 대중화되면서 개발자들은 리눅스 컨테이너 단위로 애플리케이션을 쪼개서 개발 및 운영하게 되었다. 쿠버네티스는 이들과 마찬가지로 Pod 단위로 애플리케이션을 운영한다. 개발자는 애플리케이션을 이루는 Pod (웹로..

Cloud, Kubernetes 2025.05.03

[JAVA] DIP (의존 관계 역전 원칙)

■ DIP구체화의 의존하지 말고 추상화(인터페이스, 추상 클래스)에 의존해야 한다. 예제)● Car는 Engine을 사용해서 움직인다.● 엔진 종류는 GasEngine, ElectricEngine이 있다.■ DIP 위반 (엔진에 직접 의존)class GasEngine { public void start() { System.out.println("휘발유 엔진 시동"); }}class Car { private GasEngine engine = new GasEngine(); // 직접 생성 (구체 클래스에 의존) public void drive() { engine.start(); System.out.println("차가 출발합니다!"); }}1)..

JAVA 2025.04.12

[JAVA] ISP (인터페이스 분리 원칙)

■ ISP- 인터페이스를 각각 사용에 맞게 분리해야한다는 원칙- SRP 원칙은 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조- 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써 클라이언트의 목적과 용도에 적합한 인터페이스 만 제공  ■ ISP 적용 전// 너무 많은 책임을 지는 인터페이스public interface Worker { void work(); void eat(); void sleep();}// 로봇도 이 인터페이스를 구현해야 함public class Robot implements Worker { @Override public void work() { System.out.println("로봇이 작업 중..."); } ..

JAVA 2025.04.08

[JAVA] LSP (리스코프 치환 원칙)

■ LSP- 부모 객체와 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙- 자식 클래스는 부모 클래스가 정의한 계약을 위반하지 않고 부모 클래스의 기능을 확장하거나 수정할 수 있어야 한다   ■ LSP 위반한 예제// 부모 클래스class Bird { public void fly() { System.out.println("새는 날 수 있다."); }}// 자식 클래스class chicken extends Bird { @Override public void fly() { throw new ChickenException("닭은 날지 못한다."); }}// 테스트 클래스public class LSPV..

JAVA 2025.04.07

[JAVA] SRP (단일 책임 원칙)

■ SRP클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙이다. 이 원칙에 따라 클래스는 하나의 이유로 변경되어야 한다. ■ SRP 따르지 않은 예시class User { private String name; private String email; public User(String name, String email) { this.name = name; this.email = email; } public String getName() { return name; } public String getEmail() { return email; }}class UserManager { public void saveU..

JAVA 2025.04.06

[JAVA] OCP (개방 폐쇄 원칙)

● OCP - Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때 , 기존 코드는 확장할 수 있어야 한다.- Closed for modification : 기존의 코드는 수정되지 않아야 한다. ■ 새로운 차량의 추가- Driver의 코드는 변경하지 않고, 다른 차들이 늘어나도 Car를 사용하는 Driver 코드 전혀 변경하지 않는다.  ■ 확장에 열려있다는 의미- Car 인터페이스를 사용해 새로운 차량을 추가할 수 있고 Car 인터페이스를 구현해서 기능을 추가할 수 있다는 의미 그러면 Driver도 Car 인터페이스를 통해 새롭게 추가된 차량을 자유롭게 호출할 수 있다.  ■ 코드 수정은 닫혀 있다는 의미- 새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정..

JAVA 2025.04.06

[JAVA] 다형성(2) - abstract, 인터페이스

추상 클래스- 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다. 대신에 상속을 목적으로 사용되고 부모클래스 역할을 담당한다.abstract class A { ...}- 추상 클래스는 클래스를 선언할 때 abstract 키워드를 붙인다.- new A()처럼 직접 인스턴스를 생성하지 못하는 제약이 추가된 것 추상 메서드- 부모 클래스를 상속 받는 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의할 수 있다. 이름 그대로 추상적인 개념을 제공하는 메서드 따라서 실체가 존재하지 않고 메서드 바디가 없다.public abstarct void sound();- 추상 메서드는 메서드 앞에 abstarct 키워드를 붙인다.- 추상 메서드가 하나라도 있는 ..

JAVA 2025.03.30