티스토리

Kim Jinung
검색하기

블로그 홈

Kim Jinung

kimjinung.tistory.com/m

Kim Jinung 님의 블로그입니다.

구독자
0
방명록 방문하기

주요 글 목록

  • DB 이론 https://dataonair.or.kr/db-tech-reference/d-guide/sql/?pageid=5&mod=list SQL – DATA ON-AIR dataonair.or.kr 공감수 0 댓글수 0 2023. 7. 27.
  • Proxy pattern, Decorator pattern Proxy 프록시 객체는 클라이언트-서버 아키텍처 중간에 껴서 대리자 역할을 한다. 굳이 왜 프록시를 추가하는 걸까? 서버는 언제나 바쁘다. 그런데 요청을 검증하고 캐싱까지 하려면 서버의 리소스가 많이 빡빡해진다. 그렇기에 서버와 클라이언트 사이에 대리자를 두고 일을 분담시킨다. 예를 들어서 클라이언트 요청에 대한 검증만을 전담하는 프록시를 만들면 그것이 API 게이트웨이다. 더 나아가서 만약 서비스 규모가 커져서 서버 인스턴스를 클러스터로 구축하면 프록시가 앞에서 로드 밸런싱을 해줄 수도 있다. 프록시를 추가함으로써 접근 제어와 부가 기능 등을 추가할 수 있는 것이다. Proxy pattern & Decorator pattern 둘다 프록시를 사용해서 구현한다. GOF 디자인 패턴 책에서는 의도에 따라.. 공감수 0 댓글수 0 2023. 6. 5.
  • Callback pattern & Template callback pattern Callback pattern Callback은 실행 가능한 코드 조각을 의미한다. 메서드에 콜백을 인자로 넘기면 콜백을 인자로 받는 메서드는 콜백을 원하는 시점에 실행할 수 있다. (주로 비동기 처리를 위한 목적으로 사용하는 개념이라고 한다.) Example public interface Callback { void call(); } public abstract class Task { final void executeWith(Callback callback) { execute(); Optional.ofNullable(callback).ifPresent(Callback::call); } public abstract void execute(); } @Slf4j public final class Simple.. 공감수 0 댓글수 0 2023. 6. 5.
  • Strategy pattern(Policy pattern) Strategy pattern(Policy pattern) 전략 패턴은 인터페이스와 구현체를 사용해서 로직을 유연하게 변경하는 패턴이다. 구현 코드만 보면 DI랑 뭐가 다른거지 싶은데 목적이 다르다. 전략 패턴은 클라이언트가 전략을 사전에 숙지해서 주도권을 쥐고 런타임 시 전략(알고리즘)을 동적으로 변경한다면, DI는 의존성을 외부에서 주입해주는 방식을 통해서 객체간의 결합을 느슨하게 만드는 것이 목적이다. 템플릿 메서드 패턴이 상속을 이용한다면, 전략 패턴은 컴포지션을 이용하는 방식이다. 공감수 0 댓글수 0 2023. 6. 5.
  • Template method pattern Template method pattern 위 이미지에서 추상 클래스와 이를 상속하는 서브 클래스가 존재한다. AbstarctClass의 templateMethod 메서드 로직은 primitive1, 2 메서드를 실행하는 것이고, 두 메서드는 모두 추상 메서드다. 그리고 이를 상속하는 서브 클래스에서는 primitive1, 2메서드를 구현했다. 서브 클래스에서 templateMethod 메서드를 실행하면 서브 클래스에서 정의한 primitive1, 2 메서드가 templateMethod 메서드의 로직으로 동작한다. 즉 템플릿 메서드 패턴은 추상 클래스에서 공통 로직을 정의하고 서브 클래스에서 세부사항을 구현하는 패턴이다. 공감수 0 댓글수 0 2023. 6. 5.
  • Aspect-oriented programming(AOP) AOP(Aspect-oriented programming) 직역하면 관점 지향 프로그래밍이다. 객체 지향은 객체에게 책임과 역할을 부여하고 객체 간의 협력을 통해 시스템을 구성하는 방법이다. 그렇다면 관점 지향의 관점은 무엇을 의미하는가. 관점 지향 프로그래밍은 Cross-cutting concern을 분리해서 모듈성을 증가시키는 패러다임이다. 여기서 Cross-cutting concern은 직역하면 횡단 관심사인데, 각 컴포넌트의 공통 관심사 라는 표현이 의도에 더 적합한 것 같다. 그렇다면 컴포넌트의 공통 관심사란 무엇인가. 프레젠테이션 레이어, 비지니스 레이어, 데이터 액세스 레이어는 각각 목적에 따른 핵심 기능이 존재한다. 그리고 트랜잭션, 보안, 로깅과 같은 부수적인 기능을 필요로 한다. 여기서.. 공감수 0 댓글수 0 2023. 6. 5.
  • [JPA] Entity Mapping JPA Cache 1st Cache: 트랜잭션 단위 2nd Cache: 앱 내에서 공유하는 캐시 Why need default constructor? JPA는 동적으로 객체를 생성하기 위해서 자바 리플렉션 기능 등을 사용한다. 이를 위해서 기본으로 제공해주어야 한다. Undirectional Mapping vs Bidirectional Mapping 양방향 매핑은 2개의 단방향 매핑이다. 디비 테이블은 외래키 조인을 통해 양방향 관계가 성립된다. 반면 객체는 단뱡향 2개로 양방향 참조를 구현해주어야 한다. 일반적으로 FK를 가지고 있는 객체가 연관 관계의 주인이 되고, 반대편 객체는 읽기 전용으로만 사용한다. mappedBy 파라미터의 역할이 여기에 해당한다. 즉 JPA는 mappedBy로 지정된 필드는.. 공감수 0 댓글수 0 2023. 5. 23.
  • DBMS Architecture Overview DBMS는 통상 다음과 같은 레이어로 구성된다. (DBMS마다 구조가 천차만별이지만, 일반적으로는 다음과 같다.) Transport subsystem: 클라이언트의 요청을 받는다. DB 클러스터 노드 간 통신에도 사용한다. Query Processor: 쿼리를 해석, 분석 검증, 최적화하고 실행 계획을 선택한다. Execution Engine: 선택한 실행 계획을 실행한다. 스토리지 엔진의 인터페이스에 해당한다. Storage Engine: 실질적인 데이터 쓰기, 읽기 작업을 담당하는 컴포넌트다. Transport DBMS는 클라이언트/서버 모델에 기반한다. DB를 사용할 때 특정 주소로 연결을 요청하고, 커넥션 풀에서 커넥션을 받아오고, 해당 커넥션을 이용해서 쿼리를 날리는 과정이 익숙.. 공감수 0 댓글수 0 2023. 5. 15.
  • Inheritance, Composition Inheritance, Composition 상속(Inheritacne)는 상위 타입과 하위 타입에 강한 결합도를 만든다. 하위 타입이 상위 타입 코드를 모두 알고 있어야하기 때문이다. 반면에 합성(Composition)은 객체 내부 필드에서 객체를 참조하게 만들고, 클래스의 인터페이스에 의존하게 만드는 방식으로 결합도를 낮춘다. 상속은 타입 계층을 반드시 만들어야 하는 경우에 사용한다. 해당 경우가 아니라면 대부분의 케이스에서 합성을 이용하는 것이 더 좋은 선택이다. 공감수 0 댓글수 0 2023. 5. 15.
  • JPA Architecture 1. JPA(Java Persistence API) JPA는 자바 진영의 표준 ORM 기술이다. 자바 진영이 늘 그렇듯이 그 자체로 구현체를 제공하지 않고 인터페이스를 제공하고 다양한 구현체가 존재한다. 대표적으로 Hibernate가 있다. 2. JPA architecture JPA는 생각보다 아키텍처에 대한 자료를 찾아보기가 힘들다. 클래스 레벨 아키텍처에서 중요한 클래스들은 Persistence, EntityManagerFactory, EntityManager, EntityTransaction, Query가 존재한다. 내부 코드를 뜯어보면 Persistence 클래스가 EntityManagerFactory 객체를 생성하고, EntityManagerFactory 클래스가 EntityManager를 팩토.. 공감수 0 댓글수 0 2023. 4. 19.
  • JDBC 그리고 ORM 1. JDBC(Java Database Connectivity) JDBC는 자바 애플리케이션에서 데이터베이스에 액세스 하는 방법을 명세하는 인터페이스다. 데이터베이스 제품군은 연결 방법이 제각각이다. 따라서 각 데이터베이스에 연결하기 위해서 개발자는 각각의 데이터베이스에 모두 대응해야 한다. 자바 진영에서는 해당 문제를 의존성을 역전 시키는 방법으로 해결했다. 애플리케이션의 비지니스 로직이 데이터베이스 제품군에 의존하는 게 아니라 인터페이스에 의존하도록 했다. 해당 인터페이스가 바로 JDBC다. 자바는 Java Standard Edition에 JDBC 인터페이스를 제공하고, 각 데이터베이스 개발사는 해당 인터페이스를 구현한 DB Driver를 배포한다. 따라서 개발자는 DB 제품군이 변경되더라도 코드를 .. 공감수 0 댓글수 0 2023. 4. 18.
  • Front controller 그리고 Adapter pattern https://en.wikipedia.org/wiki/Front_controller Front controller - Wikipedia From Wikipedia, the free encyclopedia The front controller software design pattern is listed in several pattern catalogs and is related to the design of web applications. It is "a controller that handles all requests for a website,"[1] which is a useful st en.wikipedia.org Front controller 비지니스 요구사항에 따라서 다양한 컨트롤러를 필요로하게 .. 공감수 0 댓글수 0 2023. 3. 20.
  • 네트워크 네트워크 구조 LAN(Local Area Network): 근거리 통신망으로 거점 내 네트워크에 해당한다. 보통 레이어2, 3 스위치 영역 내에 해당한다. WAN(Wide Area Network): LAN 간 통신하기 위한 네트워크에 해당한다. 일반적으로 WAN하면 사설 네트워크에 해당하고, 인터넷은 공용 광역 네트워크를 의미하는 경우에 해당한다. 통신구조 OSI 7Layer 학부때 배운 네트워크 레이어다. 실제로 일을 하면서는 TCP/IP 프로토콜 스택만 사용해왔다. Application Presentation Session Transport Network Data link Physical TCP/IP 프로토콜 스택 최근에는 대부분 TCP/IP 프로토콜 스택을 사용한다. Application: HTTP.. 공감수 0 댓글수 0 2023. 2. 3.
  • 10. 파일 시스템 평소에 사용하고 있는 파일과 디렉터리라는 개념을 어떻게 정의하고 있는가? 운영체제가 디스크에 파일을 저장하는 방법 그리고 저장한 파일에 접근하는 방법에 관하여 Basic Concept File: 연관된 정보의 집합으로 운영체제에 의해 구현되는 추상적인 자료형이다. 운영체제는 파일에 대한 system call을 제공하게 된다. File System: 운영체제 내에서 유저가 사용하는 파일을 관리하는 시스템. 운영체제가 이를 제공한다. Directory: 파일들을 그룹핑하고 이러한 그룹들을 계층화 해주는 개념 Device Driver: 운영체제와 I/O 장치 사이에는 드라이버가 존재한다. (운영체제가 모든 하드웨어에 대한 정보를 가지고 있을 수 없으니까, 각 제조사에서 이를 소프트웨어 형태로 제공하는 것임) .. 공감수 0 댓글수 0 2023. 1. 13.
  • 9. I/O 시스템 운영체제와 I/O 장치들이 커뮤니케이션 하는 방법의 종류 그리고 운영체제가 I/O 장치를 위해 제공하는 서비스는 무엇이 있는가? I/O Mechanism Processor Access: 입출력 장치와 CPU가 직접 통신, 주기적으로 CPU가 입출력 장치의 상태를 확인하는 pooling 기법과 DMA를 거치지 않는 기본 인터럽트가 그 예시 Direct Memory Access(DMA): DMA 제어기를 중간에 끼고 통신 ex) CPU - DMA 제어기 - I/O 장치 운영체제의 I/O Service Buffering 두 장치간의 속도 차이를 조절하기 위한 기법이다. Buffer(메모리 영역)라는 임시 저장소를 만들어서 더 느린 장치에 속도를 맞춘다. ex) 초당 네트웍 속도가 10MB이고 데이터 저장 속도.. 공감수 0 댓글수 0 2023. 1. 13.
  • 8. 대용량 저장장치 구조 저장장치를 어떠한 관점으로 접근할 것인가? 유저가 작성한 프로그램은 저장장치에 저장된다. 그리고 이를 실행하기 위해서는 메모리에 적재 해야 한다. 이 상태를 프로세스라고 부른다. 앞서 운영체제가 CPU 사용을 극대화하기 위한 기법들로 프로세스 스케줄링, CPU 스케줄링 그리고 메모리 페이징 기법 등에 관해 정리했다. 그렇다면 실질적으로 프로그램의 저장을 담당하는 저장장치는 어떠한 구조로 구성되어 있을까? 실제로 사용하는 저장장치의 개략적인 구조 그리고 이를 이용한 운영체제 부팅 과정은 어떻게 연결될까? 더 나아가서 저장 장치이므로 다음과 같은 생각을 해볼 수 있다. 어떻게 하면 저장해둔 데이터를 빠르게 탐색할 것인가? 데이터를 어떻게 하면 안정적으로 저장할 것인가? HDD(Hard Disk Drive) .. 공감수 0 댓글수 0 2023. 1. 11.
  • 7. 메모리 관리 메모리 관리에 관하여 현대 컴퓨터 시스템에서 프로그램을 실행 하려면 메인 메모리에 적재해야 한다. 운영체제는 CPU 자원의 사용을 극대화 하고 프로세스를 다중으로 실행하기 위해 CPU 스케줄링 기법 등이 발전해왔다. 프로세스 스케줄링, CPU 스케줄링 그리고 멀티 스레드와 같은 기법들이 그 예이다. 그렇다면 실질적으로 CPU가 실행할 명령어나 데이터를 가져오는 메모리는 프로세스를 어떻게 처리하도록 발전했을지 고민해보면 좋을 것 같다. 논리 주소와 물리 주소 프로그램 컴파일 타임과 로드 타임 시에는 논리 주소와 물리 주소가 같다. 그런데 런타임 바인딩 기법에서는 논리 주소와 물리 주소가 다르다. 따라서 프로그램 실행 중 논리 주소를 물리 주소로 변경해주는 하드웨어가 존재한다. 이것이 MMU(Memory M.. 공감수 0 댓글수 0 2023. 1. 9.
  • 6. 프로세스 동기화 그리고 데드락 프로세스 동기화? 운영체제는 프로세스를 병행, 병렬로 실행하는 방향으로 발전했다. CPU 사용률을 최대화하기 위함이다. 하지만 이로 인해서 프로세스 간에 공유하고 있는 데이터의 조작 결과가 실행 순서에 의존하게 되는 문제가 발생한다. 이것이 경쟁 조건(Race condtion)이다. 다음으로 임계 구역(Critical section)은 공유 데이터가 조작될 수 있는, 즉 경쟁 조건이 발생할 수 있는 코드 영역이다. 그리고 이러한 임계 구역에서 발생하는 경쟁 조건 문제를 임계구역 문제(Critical section problem)으로 부른다. 프로세스 동기화를 위한 하드웨어 지원 Memory Barries: 프로세서가 메모리 변경 결과를 다른 프로세서에 알린다. 하드웨어 명령어 *하드웨어 레벨에서의 제어는.. 공감수 0 댓글수 0 2023. 1. 6.
  • 5. CPU 스케줄링 CPU 스케줄링이 무엇인가? 운영체제는 프로세스 간 CPU 교환을 통해 그 사용률을 극대화한다. 앞서 다룬 병행성을 갖게 해준 멀티 프로그래밍을 떠올리면 된다. 다시 말해 운영체제의 CPU 스케줄링은 준비 큐에서 대기 프로세스를 선택하고 CPU를 할당하는 작업이다. 스케줄링 방법에 따라 프로세스를 처리하는 성능이 좌지우지 되므로 CPU 스케줄링은 운영체제 설계의 핵심이다. 선점 및 비선점 스케줄링 선점 스케줄링: CPU를 프로세스로부터 가져올 수 있는 케이스 비선점 스케줄링: 프로세스가 자발적으로 CPU를 반납하는 케이스 대부분 현대 운영체제에서는 선점 스케줄링을 사용한다. 비선점 스케줄링은 실시간 스케줄링에 적합하지 않다. CPU 제어 권한을 프로세스가 포기하기 전까지 소유하므로 균형있게 CPU소유 시.. 공감수 0 댓글수 0 2023. 1. 5.
  • 4. 스레드와 병행성 스레드란 무엇인가? 프로세스와 스레드? 운영체제가 제공하는 프로세스 모델에서 프로세스는 스레드라는 단위로 작업을 수행한다. (이것은 CPU의 작업 단위이기도 하다.) 초기 컴퓨터 시스템은 싱글 스레드 프로세스만 존재했다. (스레드가 멀티로 구성된다고 해도 결국 병행 실행이라 의미가 없었다.) 폰 노이만 아키텍처에서 프로그램은 메모리에 적재되고 이를 CPU가 연산한다. 그러므로 싱글 코어 CPU 칩에서는 한 번에 하나의 스레드밖에 실행할 수 없다.(하나의 프로세스가 모든 CPU 리소스를 점유하게 되므로) 운영체제에서는 이를 극복하기 위해서 여러 프로세스를 번갈아가며 작업하는 멀티 프로그래밍 기법이 등장했다. 이것이 병행성이다(Parallel). 시간이 흘러 멀티 코어 CPU가 등장했다. 이는 CPU 연산이.. 공감수 0 댓글수 0 2023. 1. 4.
  • 3. 프로세스 프로세스란 무엇인가? 프로세스는 스토리지에 저장한 프로그램을 메인 메모리에 적재하여 실행 중인 상태다. 현대 컴퓨팅 시스템에서 작업의 단위다. 초기 컴퓨터 시스템은 하나의 프로그램이 시스템을 완전히 제어하므로, 시스템의 모든 자원에 접근할 수 있었다. 운영체제가 등장한 이후 현대 컴퓨팅 시스템은 메모리에 다수의 프로그램을 적재해서 병행 실행할 수 있게 되었다. 이러한 과정을 거치며 운영체제는 여러개의 프로세스를 효율적으로 실행하기 위한 기능을 제공하게 된다. 따라서 포인트는 1. 프로세스는 메모리 상에서 어떻게 구성되어 있는가? 2. 여러개의 프로세스를 어떻게 컨트롤하고 우선순위를 부여하는가? 우선 프로세스는 메모리 상에서 다음과 같이 구성된다. 프로세스의 메모리 배치 텍스트 섹션 - 소스 코드 데이터 .. 공감수 0 댓글수 0 2022. 12. 30.
  • 2. 운영체제 구조 운영체제는 프로그램이 실행되는 환경을 제공한다. 그리고 이를 위해 인터페이스를 제공한다. 그렇다면 인터페이스는 무엇을 위해 존재할까? 운영체제는 프로그램에 하드웨어 리소스를 할당하는 역할을 담당할 뿐만 아니라 파일 조작, 오류 탐지, 입출력 연산 등의 서비스도 제공한다. 대부분의 프로그램에서 공통적으로 필요한 기능을 운영체제가 제공하는 것이다. 그리고 이러한 서비스를 제공하기 위해서 인터페이스를 제공한다. 기계를 조작하는 리모콘, 운영체제의 그래픽 인터페이스와 커맨드라인 인터페이스 등을 떠올릴 수 있다. 유저는 명령어만 알고있다면 하드웨어를 다루어야 하는 저수준 작업의 내부 코드 및 동작원리를 몰라도 기능을 사용할 수 있다. 이것이 시스템 콜이다. 즉 리모콘이 내부에서 어떠한 일을 하는지는 몰라도 유저가.. 공감수 0 댓글수 0 2022. 12. 29.
  • 1. 운영체제 서론 운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어다. 그렇다면 OS가 필요한 이유가 무엇일까? 하드웨어 리소스를 효율적으로 분배해줄 무언가가 필요하다. 특정 프로그램이 하드웨어까지 컨트롤 한다면 운영체제가 필요하지 않다. 하지만 해당 프로그램 하나만 하드웨어를 점유하게 된다. 다시 또 다른 프로그램도 하드웨어를 컨트롤하는 작업까지 담당해야한다. 그렇다면 하드웨어 리소스를 분배해주는 소프트웨어가 존재한다면 애플리케이션 단에서는 복잡성과 반복 작업을 제거할 수 있지 않을까? 초기 컴퓨터는 하나의 프로그램이 하드웨어를 점유해서 다른 프로그램이 동작할 수 없었다. 이후 시분할 시스템이 등장하는 등, 어떻게 하면 하드웨어를 더 효율적으로 사용할 수 있을까 고민하고 발전해온 흔적들을 살펴볼 수 있다. 그리고 이 과정.. 공감수 0 댓글수 0 2022. 12. 29.
  • Trie Trie - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search K-ary search tree data structure This article is about a tree data structure. For the French commune, see Trie-sur-Baïse. TrieTypetreeInvented1960Invented byEdward Fredkin, Axel Thue, en.wikipedia.org 탐색 트리의 일종으로 노드의 자체의 정보를 저장하는 것이 아니라 포지션과 관련된 정보를 저장한다. 일반적으로 문자열 색인을 구축하는 형태로, 각 인덱스에 해당하는 character를 Key로 저.. 공감수 0 댓글수 0 2022. 12. 12.
  • Self-Balancing Binaray Search Tree - (AVL tree, Red-Balck Tree) Self-balancing binary search tree - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Any node-based binary search tree that automatically keeps its height the same An example of an unbalanced tree; following the path from the root to a node takes an average of 3.27 nod en.wikipedia.org Self-balancing BST는 트리의 높이를 가능한 작게 유지하여 트리의 성능을 보장한다. BST의 문제점 BST는 최악의 경우에서 O.. 공감수 0 댓글수 0 2022. 12. 12.
  • Abstract data type(ADT) Abstract data type - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Mathematical model for data types In computer science, an abstract data type (ADT) is a mathematical model for data types. An abstract data type is defined by its behavior (semantics) en.wikipedia.org What is the difference between an Abstract Data Type(ADT) and a Data Structure? I have found b.. 공감수 0 댓글수 0 2022. 12. 8.
  • Heap Heap (data structure) - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Computer science data structure For the memory heap (in low-level computer programming), which bears no relation to the data structure, see C dynamic memory allocation. Example of a bi en.wikipedia.org Heap은 tree 기반의 자료구조로, max heap과 min heap이 있다. max heap은 root node가 항상 최댓값이며 반대로 min heap은 .. 공감수 0 댓글수 0 2022. 12. 8.
  • Flyway: database migration Reference - Flyway docs Goal 1. flyway가 무엇인지 파악한다. 2. "가 왜 등장했는지 파악한다. 3. "를 어떻게 사용하는지 파악한다. 선행 조건 - Docker Flyway 공식 문서에서 flyway를 데이터베이스 마이그레이션 툴로 소개하고 있다. 그렇다면 데이터베이스 마이그레이션은 왜 필요할까? 오늘날 소프트웨어 개발에서 우리는 위와 같은 개발 프로세스를 흔하게 접할 수 있다. Axel과 Christian이 별도로 기능을 개발하고 하나로 합친다. 그리고 지속적으로 통합(Continuous Integration)한다. 해당 버전은 다시 Test를 거치면서 수정되고 최종적으로 Production 스테이지에서 서비스 한다. 그리고 어떠한 기능에 대한 니즈가 생기는 경우가 발생.. 공감수 1 댓글수 0 2022. 11. 16.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.