분류 전체보기 85

Command 패턴

1️⃣ Command 패턴이란? Command 패턴은 요청(명령)을 객체로 캡슐화하여 실행, 취소, 저장 등을 관리할 수 있도록 하는 디자인 패턴즉, "어떤 작업을 실행하는 코드"를 하나의 객체로 만들고, 이를 실행/취소/보관할 수 있도록 하는 패턴 📍 Command 패턴의 핵심 개념명령을 객체(Command)로 만들어 독립적으로 다룸명령을 실행하는 대상(Receiver)과 실행을 요청하는 객체(Invoker)를 분리 명령을 저장하고 나중에 실행 가능Undo(실행 취소) 기능을 쉽게 구현2️⃣ Command 패턴의 구조Command 패턴은 다음과 같은 5가지 주요 컴포넌트로 구성🔹 1. Command (명령 인터페이스)실행할 작업을 정의하는 인터페이스모든 명령은 execute() 메서드를 구현실행 취..

Java/Spring 2025.03.17

Spring에서 @Transactional

Spring에서 @Transactional은 AOP(Aspect-Oriented Programming)를 사용하여 트랜잭션을 처리 @Transactional의 동작 방식AOP Proxy 생성:Spring은 @Transactional이 선언된 메서드나 클래스에 대해 AOP 프록시를 생성이 프록시는 원래의 메서드를 감싸는 대리 객체로, 실제 메서드 호출 전에 트랜잭션을 시작하고 메서드 실행 후에 트랜잭션을 커밋하거나 롤백트랜잭션 시작:트랜잭션을 관리하는 AOP 프록시는 메서드 호출 전에 트랜잭션을 시작이때 트랜잭션 관리자는 데이터베이스 연결을 확보하고, 트랜잭션 상태를 관리메서드 실행:AOP 프록시가 실제 메서드를 호출이 메서드는 비즈니스 로직을 처리트랜잭션 커밋 또는 롤백:메서드 실행이 성공적으로 완료되면..

Java/Spring 2025.03.12

Proxy 패턴

Proxy Pattern은 객체에 대한 접근을 제어하기 위해, 해당 객체를 감싸는(즉, 대리 객체) 역할을 하는 디자인 패턴 - 실제 객체에 직접 접근하는 대신 프록시 객체를 통해 간접적으로 접근- 프록시 객체는 실제 객체를 대신해 특정 작업을 수행하거나, 실제 객체에 대한 접근을 제어 가능 - 초기화 지연, 접근제어, 로깅, 캐싱 등 다양하게 사용 가능프록시 패턴의 구조Subject: 실제 객체가 구현해야 하는 인터페이스- 프록시 객체와 실제 객체가 공유하는 공통의 인터페이스로, 프록시 객체는 이 인터페이스를 구현RealSubject: 실제로 기능을 수행하는 객체- Subject 인터페이스를 구현하여, 실제 비즈니스 로직을 처리Proxy: Subject 인터페이스를 구현- 실제 객체에 대한 접근을 제어..

Java/Spring 2025.03.12

Mock 관련 Annotations

@MockMockito의 Mock 객체 생성단순한 Mock 객체를 생성하지만, 의존성 주입은 자동으로 하지 않음메서드 호출 시 기본적으로 null 또는 기본값을 반환@Mockprivate lateinit var emailService: EmailService // Mock 객체 생성@Testfun testEmailSending() { `when`(emailService.sendEmail("test@example.com")).thenReturn("Success") val result = emailService.sendEmail("test@example.com") assertEquals("Success", result) // 반환값 검증} Mock 객체만 생성되고, UserService 등..

이것저것 2025.03.03

단위 테스트 Test Double

Test Double테스트에서 실제 객체를 대체하는 모든 종류의 객체를 의미하는 포괄적인 개념Test Double의 종류 Dummy - 아무것도 하지 않는 깡통 객체 (예: null 리턴, 빈 객체) Fake - 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체 (ex, FakeRepository) Stub - 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체그 외에는 응답하지 않는다. Spy - Stub이면서호출된 내용을 기록하여 보여줄 수 있는 객체일부는 실제 객체처럼 동작시키고 일부만 stubbing 할 수 있다.-간단한 로직을 포함하여 동작하는 객체 Mock - 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체   Stub 과 Mock 은 다르다..

이것저것 2025.03.03

상속과 인터페이스

1. 기본 개념인터페이스 (Interface)객체가 어떤 동작을 할 수 있는지를 정의하는 계약(Contract)메서드의 시그니처(이름, 매개변수, 반환 타입)만 선언하며 구현은 제공하지 않음(Kotlin에서는 디폴트 메서드 구현도 가능함.)클래스는 여러 개의 인터페이스를 구현(implement) 가능interface Flyable { fun fly()}class Bird : Flyable { override fun fly() { println("Bird is flying") }} 상속 (Inheritance)객체 간의 is-a 관계를 정의상속받은 클래스는 부모 클래스의 속성과 메서드를 사용할 수 있으며, 필요하면 재정의(override) 가능단일 상속만 허용 (Kotlin은 ..

객체지향 2025.01.05

객체지향

왜 객체지향을 써야하는가? - 좋은 코드를 짜기 위한 방법 좋은 코드란 ? - 이해하기 쉬운가?- 변경 하기 쉬운가? 변경하기 쉬우려면? - 구조화를 잘하자.  - 일정한 기준으로 나누고 묶어서 정리 객체 지향이란 코드를 구조화하고 정리하는 방법중에서 가장 널리 쓰이는 효과적인 방법이다. 객체 지향의 프로그래밍의 본질 객체 지향의 본질은 캡슐화, 메시징, 동적바인딩 이다.  앨런케이가 객체지향 개념을 만들었다. 앨런케이가 말하는 객체지향이란 객체나 클래스가 핵심이 아니라, 핵심은 메시지다. 소프트웨어를 어떻게 정리할까?프로시저 추상화 - 작업의 절차로 추상화 하는 방법 소프트웨어를 생명체의 세포로 생각하면은 어떨까? 세포들은 작고 독립적인 객체 서로 간의 메시지를 통해서 소통함 (ex 유미의 세포)데이터..

객체지향 2025.01.05

Web Cache

웹 캐쉬 웹 캐쉬란 client가 요청하는 html, image, js, css등에 대해 첫 요청 시에 파일을 내려받아 특정 위치에 복사본을 저장(USING SPACE)하고, 이후 동일한 URL의 Resource요청은 다시 내려 받지 않고 내부에 저장한 파일을 사용하여 더 빠르게 서비스(SAVE TIME)하기 위한 것. 서버를 통해 내려 받는 양이 적어지니 응답 시간이 감소하고 네트워크 트레픽이 감소되니 server와 client 모두가 win-win  웹 캐쉬의 종류1. Browser Caches- 브라우저의 Back버튼 또는 이미 방문한 페이지를 재 방문하는 경우 극대화- 클라이언트(브라우저)의 내부 디스크에 저장- 개인에 한정된 캐시 2. Proxy Caches- Browser Cache와 동일한 ..

이것저것 2024.06.28

HTTPS, SSL

HTTP (HyperText Transfer Protocol) HTTP 란 인터넷 상에서 정보를 주고 받을 수 있는 프로토콜이며, 주로 HTML 문서를 주고받는 데 많이 쓰인다. 통신 구조는 클라이언트와 서버 사이에서 요청과 응답으로 이루어져 있다. 통신은 암호화가 되지 않은 방법으로 데이터를 전송하므로 누군가가 네트워크에서 악의적인 감청을 한다면 내용이 유출된다.  이러한 평문 전송을 통한 HTTP 통신을 보완한 것이 HTTPS 이다. HTTPS 의 S 는 Over Secure Socket Layer 의 약자로, HTTP 와 디지털 암호화 기술을 결합하여 보안이 강화된 버전이다. HTTPS 는 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. HTTPS 는 HTTP의 하부에 보안..

이것저것 2024.06.27