Java 37

[Shop Project] HTTP vs HTTPS, SSL인증서 생성하기 (1)

쇼핑몰 웹사이트를 개발하다 보면, 회원가입, 로그인, 결제 등 민감한 정보를 다루게 된다. 이 때 http://가 아닌 https://를 사용하는 것은 보안에 중요한 영향을 끼친다.HTTP와 HTTPS의 차이를 공부한 다음 쇼핑몰 프로젝트에 HTTPS를 적용해보도록 하겠다. HTTP란 무엇인가?HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버가 대화하는 방식을 정의한 규약이다. 브라우저가 서버에 요청(Request)을 보내고, 서버가 응답(Response)을 보내는 과정에서 사용된다. 처음에는 나도 '규약'이라는 단어가 너무 어색했다. 또한 실체가 없고 너무 추상적인 개념이라 조금 이해하기 어려웠다. 그래서 공부한 이후에 내가 이해한 방향으로 최대한 쉽게 설명해보도록..

[Shop Project] 전략 패턴(Strategy Pattern)을 활용한 결제 방식 구현

문제 정의 및 도입 배경쇼핑몰 프로젝트에서 Customer는 다양한 방식으로 결제할 수 있다.일반 카드 결제포인트 결제쿠폰 할인 결제이러한 다양한 결제 로직을 PaymentService 내부에서 모두 처리하게 되면조건문이 복잡해짐새로운 결제 방식 추가 시 기존 코드를 수정해야 함한 메소드에서 여러가지를 테스트하기 어려움따라서, 전략 패턴(Strategy Pattern)을 통해 결제 방식의 구현을 외부로 위임하여 결제 방식 구현에 확장성을 높이려고 한다.추후에 로그인 방식의 확장도 이 방법을 통해 활용할 수 있을 것 같다. Strategy Pattern을 이용한 다양한 결제 방식 구현public interface Payment { public void pay(int amount, Customer cu..

[Shop Project] 팩토리 메소드 패턴(Factory Method Pattern)을 활용한 주문 방식 분리

현재 상황 및 문제 정의쇼핑몰 프로젝트를 함에 있어 유저가 장바구니에 담아서 결제하는 경우, 상품 상세페이지 칸에서 직접 주문하는 경우 2가지로 방식을 나눌 수 있다. 모든 주문 방식을 하나로 처리하게 되면, 의존성이 커지게 된다. 또한, 결제 페이지까지 가게되면 공통된 부분들이 많으므로 팩토리 메소드 패턴을 이용해서 주문을 구현할 수 있다.장바구니 기본 주문즉시결제에 따른 개별 주문 Factory Method Pattern을 이용한 주문 방식 구현주문 방식에 맞는 Factory 구현public interface OrderFactory { Order createOrder(Customer customer, List products);}public class CartOrderFactory impleme..

[JAVA] 옵저버 패턴(Observer Pattern)이란?

옵저버 패턴이란?옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메소드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 주체(객체)와 옵저버public interface ISubject { public void registerObserver(IObserver observer); public void removeObserver(IObserver observer); public void notifyObservers(); public Object getUpdate(IObserver observer);}public interface IObserver { void update();}public class ConcreteSub..

JAVA 2025.05.23

[JAVA] 전략 패턴(Strategy Pattern)이란?

전략 패턴이란?전략 패턴(Strategy Pattern)은 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화된 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 예를 들면 유저가 결제방식을 결정할 때 '신용카드', '카카오페이', '현금' 등 여러가지 방법으로 결제를 하게된다.public interface Payment { void pay(int amount);}일단 amount만큼의 금액을 지불한다는 pay() 추상 메소드를 Payment 인터페이스에 구현한다. public class KakaoPayment implements Payment { @Override public void pay(int amount) { S..

JAVA 2025.05.23

[JAVA] 팩토리 패턴(Factory Pattern)이란?

팩토리 패턴이란?객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 팩토리 패턴 구현enum PhoneType { APPLE, SAMSUNG}abstract class Phone { String name; public String Phone() { return name; }}class ApplePhone extends Phone { public ApplePhone() { name = "apple"; }}class SamsungPhone extends Phone { public SamsungP..

JAVA 2025.05.22

[JAVA] 싱글톤 패턴(Singleton Pattern)이란?

싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)은 디자인 패턴 중 생성 패턴으로 하나의 클래스에 오직 하나의 인스턴스만 가지도록 하는 패턴이다. 하나의 클래스를 기반으로 여러가지 인스턴스를 만들 수 있지만, 그렇게 하지 않고 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만든다. 싱글톤 패턴 구현public class Singleton { private static Singleton singletonInstance; // 생성자를 외부에서 접근하지 못하도록 private 접근제어 private Singleton() {} public static Singleton getInstance() { if (singletonInstance == nul..

JAVA 2025.05.20

[자료구조] (5) Deque(덱)이란 무엇인가?

Deque(덱) 정의Deque(Double-Ended Queue)는 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조다.스택(한쪽 입출력), 큐(한쪽 입력/한쪽 출력)과 다르게 덱은 양쪽 모두 입출력이 가능하다.덱의 주요 연산addFirst(item)앞쪽에 데이터 삽입addLast(item)뒤쪽에 데이터 삽입removeFirst()앞쪽 데이터 삭제removeLast()뒤쪽 데이터 삭제peekFirst()앞쪽 데이터 조회peekLast()뒤쪽 데이터 조회덱의 구현 방법배열 기반(ArrayDeque)빠른 인덱스 접근 가능공간이 꽉 차면 크기 확장(리사이즈) 필요연결 리스트 기반(LinkedListDeque)삽입/삭제가 O(1)로 빠름메모리 사용량이 많음 (노드 구조)덱의 사용 사례회문(팰린드롬) 검사앞과 뒤를..

자료구조 2025.04.27

[자료구조] (4) Stack 두 개로 Queue 구현하기

2개의 Stack으로 Queue 구현해보기큐는 FIFO(First In, First Out) 방식으로 작동하는 대표적인 자료구조다. 반면 스택은 LIFO(Last In, First Out) 구조다. 얼핏 보면 정반대의 구조처럼 보이지만, 두 개의 스택을 적절히 조합하면 큐와 같은 동작을 흉내 낼 수 있다. Stack이란?스택은 데이터를 "쌓는" 방식으로 관리하는 자료구조다. 가장 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In, First Out) 구조로 작동한다. 마치 책을 한 권씩 쌓아 올리고, 맨 위에 있는 책부터 꺼내는 방식과 같다. → 연산스택에서 지원하는 기본 연산은 다음과 같다.push(item) : 스택의 맨 위에 데이터를 추가한다.pop() : 스택의 맨 위 데이터를 제..

자료구조 2025.04.25

[자료구조] (2) 레드블랙 트리(Red-Black Tree)와 이진 트리(Binary Tree)의 차이점

데이터를 효율적으로 저장하고 검색하기 위해 다양한 트리 자료구조(Tree Structure)가 사용된다. 그중에서도 이진 트리와 레드블랙 트리는 많은 프로그래밍 환경에서 자주 등장한다. Java Collection에서 트리 맵(Tree Map), 트리 셋(Tree Set)의 경우 레드블랙 트리를 사용한다. 그럼 이진트리와 레드블랙 트리는 어떤점이 다를까? 이진 트리(Binary Tree)란?이진 트리는 모든 노드가 최대 두 개의 자식 노드(left, right)를 가지는 트리 구조이다. 10 / \ 5 15노드 : 트리 구조의 기본 단위로, 값(data)을 저장하고 다른 노드와의 연결을 가짐루트(Root) 노드 : 트리의 제일 위에 있는 시작 노드자식 노드 : 어떤 노드의 아래에 연결된..

자료구조 2025.04.24