Computer Science

Computer Science/Design Pattern

[디자인 패턴] 데코레이터 패턴 (feat. Spring)

전 글에도 언급했다시피 프록시를 사용하는 두가지 GOF 디자인 패턴에는 프록시 패턴과 데코레이터 패턴이 있다. 그 중 데코레이터 패턴은 새로운 기능 추가가 목적인 디자인 패턴이다. 예시 코드에서는 operation이라는 명칭의 메소드로 기능 추가 구현을 했다. 데코레이터 패턴 (기능 추가) 를 적용하기 전에 간결한 예시 코드를 먼저 보자. public interface Component { String operation(); } Component라는 인터페이스를 RealComponent라는 구현체로 구현한다. 그러기 위해서는 RealComponent에서 operation이라는 메소드 내부에 코드를 구현해야한다. 코드로 표현하면 다음과 같다. public class RealComponent implemen..

Computer Science/Design Pattern

[디자인 패턴] 프록시 패턴 (feat. Spring)

프록시는 기존 인터페이스나 클래스를 구현화 / 상속한 메소드나 클래스에 필터를 추가하거나 기능을 추가한다. @Override 와 같은 방법으로. 프록시는 기존 인터페이스와 클래스와 겉모양은 똑같지만 (call 할 수 있는 메소드명이 동일) 안에 로직은 다르다. 분명 프록시를 사용한 목적에 따라 무언가가 더 추가된다. 프록시의 주요 기능은 크게 두가지가 있다. 접근 제어 권한에 따른 접근 차단 캐싱 지연 로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다. 예) 요청 값이나, 응답 값을 중간에 변형 예) 실행 시간을 측정해 추가 로그를 남김 접근 제어와 부가 기능 추가이다. 디자인 패턴 중 프록시를 사용하는 방법은 두가지가 있다. 프록시 패턴: 접근 제어가 목적 데코레이터 패턴:..

Computer Science/Design Pattern

[디자인 패턴] 전략 패턴 (feat. Spring)

템플릿 메서드 패턴의 단점을 보완한 전략 패턴이다. 템플릿 메서드 패턴과 추구하는 목표는 동일하다. 변하는 부분과 변하지 않는 부분의 로직을 분리한다. 템플릿 메서드 패턴은 이를 상속으로 구현했다면 전략 패턴은 이를 인터페이스로 구현한다. public interface Strategy { void call(); } 해당 인터페이스를 구현해 변하는 부분을 코드로 구현한다. public class StrategyLogic1 implements Strategy { @Override public void call() { log.info("비즈니스 로직 1 실행"); } } public class ContextV1 { private Strategy strategy; public ContextV1(Strategy ..

Computer Science/Design Pattern

[디자인 패턴] 템플릿 메서드 패턴 (feat. Spring)

템플릿 메서드란? 템플릿 메서드 패턴에 대한 나만의 한줄 요약을 이렇다. 변하는 부분과 변하지 않는 부분을 분리하기 위한 패턴. 변하는 부분을 자유롭게 구현할 수 있도록 추상 클래스 내에 추상 메서드를 만들어 줌으로 써 이를 구현한다. 변하지 않는 부분은 실제 동작할 클래스에 작성한다. 이를 간단히 Spring 내에 구현한 코드로 보면 다음과 같다. public abstract class TemplateMethodPattern() { public void runTemplate() { long startTime = System.currentTimeMillis(); // 변하지 않는 부분 // 비즈니스 로직 실행 (변하는 부분 분리) call(); // 상속받은 메서드 실행 // 비즈니스 로직 종료 long..

Computer Science/Network

[Network] TCP & UDP 차이 / 3-way handshaking & 4-way handshaking

TCP(Transmission Control Protocol) 연결형 서비스 3-way handshaking 으로 연결, 4-way handshaking 으로 해제 데이터 전달 보증 패킷 단위 전송 (데이터를 잘게 조개서 전송한다) 3-way handshaking 중 전달하는 시퀀스 넘버, ACK로 각각 순서보장, 누락방지를 보증한다. 패킷의 총량을 ACK 응답으로 확인하고 누락된 데이터가 있으면 시퀀스 넘버로 순서를 확인, 해당 SEQ부터 재전송한다. 모든 패킷 전송에는 ACK로 응답한다. 패킷을 전송하면 어떤 패킷부터 도착할 지 모르지만 패킷에 시퀀스 넘버로 순서를 재정렬할 수 있다. 패킷이란? 전송하는 포트, 받는 포트, 전송하는 ip, 받는 ip 등 TCP/IP 4계층을 통과하는 동안 만들어진 택..

Computer Science/Network

www.google.com 이 뜨는 과정

1. 주소 입력 + HTTP 요청 주소창에 www.google.com 을 쳐서 서버에 request를 보낸다. 실제로는 https의 생략된 포트 443으로 www.google.com:443 으로 요청이 된다. HTTP 요청 메시지를 생성하고 HTTP 메시지를 전송한다. -> 웹 브라우저가 HTTP 메시지를 생성하고 -> SOCKET 라이브러리를 통해 전달(TCP/IP 연결) -> TCP/IP 패킷 생성(HTTP 메시지 포함) -> LAN 드라이버와 장비를 통해 서버로 전송 그러면 서버가 요청(request)패킷을 받고 응답(response) 패킷을 전송한다. 응답 패킷이 도착하면 다음 과정이 진행된다. 2. HTML 파일 다운로드 HTML, JSON, 이미지 등을 먼저 다운로드 받는다. 가장 먼저 다운받..

Computer Science/Network

네트워크 - GET 과 POST 의 차이점

GET 방식과 POST 방식의 공통점 클라이언트에서 서버로 요청(데이터 조회/저장)할 때 사용하는 HTTP 메소드이다. GET 방식 주로 리소스 조회할 때 사용하는 방식 서버에 전달하고 싶은 데이터는 쿼리(파라미터/스트링)를 통해서 전달한다. 메시지 바디를 사용해 데이터 전달이 가능하나 지원하는 곳이 많지 않아서 권장되지 않는다. URL 주소 끝에 파라미터처럼 붙이는 것을 쿼리 스트링이라고 한다. 지금 글을 작성할 때 호출된 URL도 GET 방식의 쿼리 스트링 예시이다.이다. https://layton0-0.tistory.com/manage/newpost/?type=post&returnURL=어쩌구 위의 예시를 서버에서 받을 때는 String type, String returnURL 의 명칭으로 받을 수..

Computer Science/운영체제

뮤텍스와 세마포어(Mutex Locks & Semaphore)

CSP를 해결하는 소프트웨어 툴 3가지 뮤텍스(Mutex Locks) : 동기화의 기본 툴 mutual exclusion = mutex critical section에 접근하기 위한 열쇠가 필요하다. 접근이 끝나면 열쇠를 반납 Busy Waiting 대기 상태에서 무한 루프를 도는 상태 Spinlock 세마포어(Semaphore) : 동기화를 위한 더 효과적인 툴 신호장치. 신호기. 모니터(monitor) : 뮤텍스와 세마포어의 단점을 극복한 툴 Liveness

레이튼
'Computer Science' 카테고리의 글 목록