전체 글 49

Docker 컨테이너에 Rocky Linux9 설치 및 실행

Ubuntu 서버에 Docker Engine을 설치하고, 컨테이너 실행 환경으로 Rocky Linux 이미지를 pull하여 컨테이너를 생성한다. 1. Rocky Linux 이미지 다운로드> docker pull rockylinux:9 2. Rocky Linux 컨테이너 실행> docker run -it --name rockylinux9_container rockylinux:9 /bin/bash 3. docker 계정 권한 변경> sudo usermod -aG docker tomcat> newgrp docker> docker ps> groups 4. docker 컨테이너 안에 java 설치> dnf install -y java-17-openjdk (JRE설치)> dnf install -y java-17-o..

Ubuntu 22.04에 Docker 설치

회사 다니면서 클라우드 환경으로 많이 전환되고 있어 WAS 서버 외 클라우드에 대한 지식이 요구되었다.Ubuntu 22.04에 서버를 만들고 Docker를 설치해볼려한다. 설치를 하고 난 후 Docker 컨테이너 안에 Tomcat까지 설치할려고 한다. 1. 패키지 업데이트> sudo apt-get update 2. 필수 패키지 설치> sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 3. Docker 공식 GPG key 추가> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 4. 패키지 재업데이트> sudo ..

MSA가 무엇인가

■ 모놀리식 아키텍처애플리케이션이 하나의 코드베이스, 하나의 배포 단위로 구성 된다 한 마디로 하나로 묶어서 개발하는 방식> 필요한 모든 기능을 한 번만 호출하기 때문에 복잡한 통신 없이 직접 사용할 수 있다.> 기능이 많아질수록 복잡해지고, 배포/수정이 어렵다. ■ MSA (마이크로서비스 아키텍처)- 소프트웨어를 하나의 큰 덩어리(모놀리식)로 만드는 대신, 여러 개의 작고 독립적인 서비스(회원 서비스, 주문 서비스, 결제 서비스, 상품 서비스) 들로 나누어 구성하는 아키텍처 스타일이다.- 각각의 서비스는 독립적인 코드베이스와 자체 데이터베이스를 가질 수 있다.- 서비스 간 통신은 보통 API (REST, gRPC, 메시지큐) 등을 통해 이루어진다.> 서비스별로 독립 개발/배포가 가능 (장애가 전체로..

CS 2025.08.31

도메인과 엔티티 차이

도메인 (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 주소를 이용..

[Kubernetes] Pod의 개념과 필요성

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

[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