All
27 posts
[Kafka] 2023 KAFKA KRU 스터디 회고 및 Custom Kafka Connector 만들기

Special Thanks To. STEP 2. 스터디 회고 STEP 3. 커스텀 카프카 커넥터 개발하기 STEP 3.1 Kappa 아키텍처의 대두 STEP 3.1.1 람다(Lambda) 아키텍처의 단점 STEP 3.1.2 Kappa 아키텍처 훑어보기 STEP 3.2 Kafka Connect Overview STEP 3.3 커스텀 카프카 커넥터 구현 STEP 3.3.1 Extending Docker Image STEP 3.3.2 Gradle Plugin STEP 4. 실제 커넥트 컴포넌트 구현 STEP 4.1 설정 컴포넌트 STEP 4.2 커넥터 컴포넌트 STEP 4.3 태스크 컴포넌트 STEP 4.4 Running Task STEP 4.5 트러블슈팅 STEP 5. 결론 STEP 6. 추신 STEP 1. 개요 최근에 필자는 Kafka KRU - Kafka 한국 사용자 모임에서 주최했던 스터디에 참여하였다. 해당 스터디는 위의 책을 토대로 약 4주간 스터디가 진행되었으며, 이에 따른…

November 20, 2023
개발
인프라
[Kernel] 커널과 함께 알아보는 소켓과 TCP Deep Dive

STEP 1. 소켓이란? STEP 1.1 소켓의 종류 STEP 1.1.1 스트림 소켓 STEP 1.1.2 데이터그램 소켓 STEP 2. 커널 코드로 알아보는 TCP와 소켓 STEP 2.1 커널 코드로 알아보는 TCP Handshake 과정 STEP 2.1.1 3-Way Handshake STEP 2.1.2 4-Way HandShake STEP 2.2 커널 코드로 알아보는 TCP 메시지 송/수신 과정 STEP 2.2.1 TCP 송신 과정 STEP 2.2.2 TCP 수신 과정 STEP 3. TCP 사용 시 서비스에서 겪을 수 있는 문제들 STEP 3.1 TIME_WAIT 소켓 STEP 3.1.1 클라이언트 측면 STEP 3.1.2 서버 측면 STEP 3.1.3 TIME_WAIT 소켓의 존재 의의 STEP 3.3 TCP Keep-Alive STEP 3.3.1 TCP Keep-Alive 파라미터 STEP 3.3.2 좀비 커넥션 STEP 3.3.3 HTTP 지속커넥션 vs TCP Keep-…

October 12, 2023
개발
인프라
독서요약
[Kernel] 리눅스 메모리 관리 훑어보기

STEP 1. 서론 STEP 1.1 가상 주소 공간 STEP 1.2 task_struct와 mm_struct에 대한 이해 STEP 1.3 가상 메모리 영역(Virtual Memory Area, VMA) STEP 1.4 프로세스가 가상 주소 공간에 매핑되는 방식 STEP 1.4 페이지와 페이지 캐시 STEP 1.4.1 페이지 STEP 1.4.2 페이지 캐시 STEP 1.4.3 페이지 교체 정책 STEP 2. 본론 STEP 2.1 free 명령어 분석 STEP 2.1.1 buff와 cache 영역 STEP 2.1.2 avaliable 지표 STEP 2.2 /proc/meminfo 명령어 분석 STEP 2.3 slab 메모리 영역 STEP 2.3.1 vmalloc()과 kmalloc() STEP 2.3.2 Slab STEP 3. 결론 STEP 4. 추신 개요 이전 포스팅 [Kernel] 리눅스 스케줄링 매커니즘과 Load Average 이전 내용에서는 커널을 이해하기 위한 배경지식과 더…

September 04, 2023
개발
인프라
독서요약
[Kernel] 리눅스 스케줄링 매커니즘과 Load Average

STEP 1. 서론 STEP 1.1 병렬성과 동시성 STEP 1.2 Run Queue와 Wait Queue STEP 1.2.1 Run Queue STEP 1.2.2 Wait Queue STEP 1.3 리눅스 내에서 기본적인 스케줄링 STEP 1.3.1 프로세스 상태 변화 STEP 1.4 가상 주소 공간 STEP 1.5 MMIO(Memory Mapped I/O) STEP 2. 본론 STEP 2.1 VIRT & RES & SHR STEP 2.2 Memory Commit STEP 2.3 프로세스의 상태 2.4 프로세스의 우선순위 STEP 3. Load Averrage와 시스템 부하 STEP 3.1 CPU Bound vs I/O Bound 개요 최근에 커널 책을 같이 읽고 정리하는 스터디를 시작하였다. 이를 다루기 앞서, 난이도가 조금 있다보니 배경지식이 조금 필요한 것으로 보인다. 이에 따라, 중요한 개념 몇가지만 짚고 이와 연관된 내용으로 같이 얘기를 해보고자 한다. STEP 1. 서…

August 23, 2023
개발
인프라
독서요약
리액티브 시스템과 리액티브 스트림즈

STEP 2. 리액티브 시스템과 리액티브 프로그래밍 STEP 2.1 리액티브 시스템이란? STEP 2.2 리액티브 프로그래밍이란? STEP 2.2.1 Blocking I/O에서 Non-Blocking I/O로 STEP 2.2.1.1 블록킹 시나리오 STEP 2.2.1.2 콜백 시나리오 STEP 2.2.1.3 Future 시나리오 STEP 2.2.1.4 CompletableFuture 시나리오 STEP 2.2.2 리액티브 프로그래밍의 특징 STEP 2.2.2.1 명령형 프로그래밍 패러다임 vs 선언형 프로그래밍 패러다임 STEP 2.2.3 리액티브 프로그래밍의 구성 STEP 2.3 리액티브 스트림즈 STEP 2.3.1 리액티브 스트림즈 구성요소 STEP 3. Project Reactor STEP 3.1 Cold Sequence & Hot Sequence STEP 3.1.1 Cold Sequence STEP 3.1.1 Hot Sequence STEP 3.2 Sinks STEP 3.2 …

August 02, 2023
개발
Fundamental of JVM and Memory and GC - Java JVM과 메모리 그리고 GC의 동작 과정 이해

STEP 1. 자바 메모리 관리 STEP 2. 메모리 영역 STEP 2.1 스택 영역 STEP 2.1.1 지역변수 배열 STEP 2.1.2 피연산자 스택 STEP 2.1.3 프레임 데이터 STEP 2.2 힙 영역 STEP 2.3 번외) 레퍼런스 타입 사용 주의사항 STEP 3. 실행 엔진 STEP 3.1 GC STEP 3.1.1 GC Root Set STEP 3.2 식별 알고리즘 STEP 3.2.1 스탑-더-월드 STEP 3.2.2 레퍼런스 카운팅 STEP 3.3 정리 알고리즘 STEP 3.3.1 기본 정리 알고리즘 STEP 3.3.2 압축-정리 알고리즘 STEP 3.3.3 복제-정리 알고리즘 STEP 3.4 GC 알고리즘 중간 정리 STEP 3.5 Generational Algorithm STEP 3.6 힙의 구조와 GC의 기본 동작 STEP 4. 메서드 영역(메타스페이스 영역) STEP 4.1 자바 8 이전과 이후의 메서드 영역 STEP 4.2 메서드 영역에서의 GC 동작 ST…

July 15, 2023
개발
왜 처리량이 중요한 JVM 어플리케이션은 vm.swappiness = 1로 설정하라고 할까?

STEP 1.1 과거의 이야기 STEP 1.2 번외) NVMe를 스왑 영역으로 잡으면 RAM과 속도가 비슷할까? STEP 2.1 운영체제의 캐시 영역과 스와핑 STEP 2.1.1 캐시영역 STEP 2.1.2 스와핑 STEP 2.1.3 운영체제의 메모리 재할당 방식 STEP 2.2 자바, 페이지 캐시 그리고 가비지 컬렉션 STEP 2.2.1 페이지 캐시와 더티 페이지 동기화 STEP 2.2.2 자바 메모리와 가비지 컬렉션 STEP 3.1 추신 STEP 1. 서론 STEP 1.1 과거의 이야기 STEP 1.2 번외) NVMe를 스왑 영역으로 잡으면 RAM과 속도가 비슷할까? STEP 2. 본론 STEP 2.1 운영체제의 캐시 영역과 스와핑 STEP 2.1.1 캐시영역 STEP 2.1.2 스와핑 STEP 2.1.3 운영체제의 메모리 재할당 방식 STEP 2.2 자바, 페이지 캐시 그리고 가비지 컬렉션 STEP 2.2.1 페이지 캐시와 더티 페이지 동기화 STEP 2.2.2 자바 메모리와…

June 19, 2023
개발
인프라
스트리밍 시스템 톺아보기

STEP 1. 분산 시스템(Distribution System)의 대두 STEP 1.1 이벤트 주도 아키텍처(Event-Driven Architecture)란? STEP 1.1.1 메시지(Message)와 이벤트(Event) STEP 1.1.2 이벤트 주도 아키텍처 정리 STEP 2. 스트리밍 시스템 STEP 2.1 Bounded Data vs Unbounded Data STEP 2.2 Stream Proccesing STEP 2.3 스트리밍 시스템 vs 전통적인 아키텍처 STEP 2.3.1 어플리케이션(Application) STEP 2.3.2 백엔드 서비스(Backend Services) STEP 2.3.3 배치 프로세싱(Batch Processing) STEP 2.4 정리 STEP 3. 간단한 스트리밍 시스템 STEP 4. 레퍼런스 개요 벌써, 1년 6개월 정도 진행 중인 스터디가 있다. 각자 읽고 싶은 책을 투표하여 완독을 목표로 하는 스터디로 간단하게 삼색볼펜법을 통해서 …

January 09, 2023
개발
AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시

STEP 1. AWS Lightsail란? STEP 2. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 2.1. Spring Boot Application Dockerize STEP 2.1.1. Docker Buildkit STEP 2.2 Lightsail 배포 전 사전 작업 STEP 3. 정리 추신 STEP 4. REFERENCE 개요 이직을 한 후에 너무 바쁘다보니 블로그 포스팅을 신경을 쓰지 못하였다. 아직도 바쁘긴하지만, 그래도 여유가 조금씩 생기고 있어서 틈틈히 썼던 초안을 다듬어서 올려보려고 노력해보겠다. 이번 포스팅의 내용은 AWS Lightsail와 Github를 통한 CI/CD 구축 예시이다. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 1. AWS Lightsail란? STEP 2. AWS Lightsail과 Github를 이용한 CI/CD 파이프라인 구축 예시 STEP 2.1…

October 23, 2022
개발
인프라
동시성 문제 해결 전략 - 스프링으로 구현한 TCC패턴

STEP 1. 주문 <-> 재고 서비스에서의 동시성 문제 STEP 1.1 동시성 문제 해결 전략 STEP 1.1.1 낙관적 락(Optimistic Lock) STEP 1.1.2 비관적 락(Pessimitic Lock) STEP 1.1.3 단일 쓰레드 메시지 큐 도입 STEP 2. 분산 트랜잭션(Distributed Transaction)이란? STEP 3.1 최종적 일관성(Eventaul Consistency)란? STEP 3.2 스프링 카프카 예외 처리 및 재시도 매커니즘 개요 사실 분산트랜잭션과 아직 MSA에 대해서는 모르는 부분이 너무나 많다. 이 글을 쓰게된 이유는 주문 <-> 재고 서비스 간의 동시성 제어(Concurrency Control)관련해서 궁금한 점이 생겼고 실제로 이 상황에서 어떻게 처리할 수 있을지 궁금해져서 찾게 되었다. 그러다가 어쩌다 보니 분산 트랜잭션을 구현한 아티클을 보게 되었다. REST 기반의 간단한 분산 트랜잭션 구현라는 글이였고, 작성자인 유…

June 11, 2022
개발
인프라
자바 NIO의 동작원리 및 IO 모델

STEP 1. 바이트 코드(ByteBuffer) STEP 2. 채널(Channel) STEP 2.1 ScatteringByteChannel, GatheringByteChannel STEP 2.2 파일채널(FileChannel) STEP 2.2.1 파일채널의 특징 STEP 2.2.2 파일채널의 속성 STEP 2.3 소켓채널(SocketChannel) STEP 3. 셀렉터(Selector) STEP 3.1 기존의 네트워크 프로그래밍 모델의 단점 STEP 3.2 비블록킹 모델과 셀렉터 동작원리 STEP 3.2.1 SelectableChannel STEP 3.2.2 SelectionKey STEP 3.2.3 Selector STEP 4. 간단한 채팅 어플리케이션 예제 및 I/O 모델 STEP 4.1 I/O 모델 STEP 4.2 간단한 채팅 어플리케이션 IO & NIO 예제 개요 이전 포스팅 시스템 콜과 자바에서의 시스템 콜 사용례 에서는 시스템 콜이 어떤 것이고, 자바에서 시스템 콜이 주…

April 05, 2022
개발
MacOS에서 로컬 개발환경에 HTTPS 적용하기

STEP 1. HTTPS란? STEP 1.1 HTTPS Handshake STEP 2. 로컬호스트 환경에 HTTPS 적용하기 STEP 2.1 minica를 이용한 로컬호스트 CA 인증서 발급 STEP 2.2 openssl 및 keytool을 이용한 p12, jks인증서 발급 STEP 2.3 로컬호스트 환경 스프링부트에 HTTPS 적용 확인 STEP 3. REFERENCE 개요 나중에 포스팅해야지 하고 넘어갔던 부분인데 이번에 다른 분께서 질문을 올려주셨어서 포스팅을 해보고자 한다. 제목과 같이 환경에서 HTTPS를 적용하는 것이 주된 목표이고, 확인 절차는 간단하게 스프링 부트를 통해서 작업하였다. MacOS에서 로컬 개발환경에 HTTPS 적용하기 STEP 1. HTTPS란? STEP 1.1 HTTPS Handshake STEP 2. 로컬호스트 환경에 HTTPS 적용하기 STEP 2.1 minica를 이용한 로컬호스트 CA 인증서 발급 STEP 2.2 openssl 및 keyto…

March 25, 2022
개발
인프라
시스템 콜과 자바에서의 시스템 콜 사용례

STEP 1.1 운영체제와 시스템 콜 STEP 2.1 I/O 향상을 위한 운영체제 수준의 기술 STEP 2.1.1 버퍼(Buffer) STEP 2.1.2 Scatter/Gather STEP 2.1.3 가상메모리 STEP 2.1.4 메모리 맵 파일 (Memory-mapped I/O) STEP 2.1.5 파일 락 STEP 4.1 자바의 포인터 버퍼 도입 STEP 4.2 네이티브 I/O 서비스를 제공 채널 도입 STEP 4.3 셀렉터 도입 시스템 콜과 자바에서의 시스템 콜 사용례 목차 개요 STEP 1. 시스템 콜이란? STEP 1.1 운영체제와 시스템 콜 STEP 2. 자바와 시스템 콜 STEP 2.1 I/O 향상을 위한 운영체제 수준의 기술 STEP 2.1.1 버퍼(Buffer) STEP 2.1.2 Scatter/Gather STEP 2.1.3 가상메모리 STEP 2.1.4 메모리 맵 파일(MMIO) STEP 2.1.5 파일 락 STEP 2.2 중간정리 STEP 4. 자바에서의 블록…

March 18, 2022
개발
Spring 공식 예제로 알아보는 SOAP와 WSDL

GDS(Global Distribution Systems) SOAP와 WSDL SOAP(Simple Object Access Protocol)란? WSDL(Web Services Description Language) 란? Spring Boot SOAP 예시 XML 스키마 파일 작성 XML 파일을 자바 클래스 파일로 만들기 Endpoint 클래스 및 Config 클래스 실제 테스트 개요 현재, 간단하게 여행 도메인 관련한 토이 프로젝트를 진행하고 있는 상황이다. 먼저 항공쪽 서비스를 먼저 만들고 있었는데 궁금했던 점은 스카이 스캐너와 같은 서비스에서 어떻게 수 많은 항공사의 정보를 가져오는지 궁금했고, 이 도메인에 대해서 알게된 점과 요청, 응답 스펙에 대해서 알아보고자 한다. GDS(Global Distribution Systems) 수 많은 온라인 여행사(OTA)들이 전 세계의 항공 정보를 가져오고 있다. 위에 개요에 말한 것 처럼 나는 이게 어떻게 가져오는 지 궁금해졌고, 리…

February 17, 2022
개발
Fundamental of JVM and Class Loader in java - Java JVM과 Class Loader의 동작 과정 이해

STEP 2.1 클래스 로더 시스템 영역(Class Loader System Area) STEP 2.1.1 클래스 로더의 특징(Class Loader’s feature) STEP 2.2 메모리 영역(Runtime Data Area) STEP 2.3 실행 엔진(Execution Engine) 인터프리터 JIT 컴파일러 GC(Garbage Collector) STEP 2.4 클래스 로딩 과정(Class Loading Process) STEP 2.4.1 동적로딩 STEP 2.4.2 로드타임 동적 로딩(load-time dynamic loading) STEP 2.4.3 런타임 동적 로딩(load-time dynamic loading) STEP 4.1 Class Loader를 통한 Hot Swap 예제 STEP 4.2 바이트코드 조작을 통한 Hot Swap 예제 목차 개요 STEP 1. Write Once, Run Anywhere(WORA) STEP 2. JVM 구조 STEP 2.1 클래스…

December 29, 2020
개발
To The Moon - 더 나은 로깅시스템을 위한 여정 (Redis 편)

STEP 1. Redis Write Back을 도입하는 여정기 STEP 1. Redis Collection 설계 및 구현 STEP 2.1 추가 요구사항 STEP 3. 문제점 목차 개요 STEP 1. Redis Write Back을 도입하는 여정기 STEP 2. Redis Collection 설계 및 구현 STEP 2.1 추가 요구사항 STEP 3. 문제점 STEP 4. REFERENCE 개요 현재 재직 중인 회사에서 추천 시스템을 도입하기 위해서 기존의 로깅 방식에 대해서 고도화가 필요했었다. 일단, 아주 단순하게 기존 사용자에게 추천됐던 아이템과 읽은 아이템을 토대로 추천 시스템을 만들고자하였다. 이 업무를 진행하기에 앞서 진행되어야하는 부분이 바로 어떤 아이템들이 추천되었고, 어떤 아이템을 읽었는지에 대한 로그를 수집하는 일이었다. 기존에는 사용자가 클릭을 수행하면 바로 DB에 저장이 되는 형식이였으나 사용자가 증가함에 따라 DB 부하 문제도 있고, 개선책을 찾게 되었다. ST…

December 29, 2020
개발
인프라
Book Review - 객체지향의 사실과 오해 1장 리뷰

STEP 1.1 실세계 예시를 통한 객체지향 들여다보기 STEP 1.1.1 요청과 응답으로 구성된 협력 STEP 1.1.2 역할과 책임 STEP 1.2 중간 정리 STEP 2.1 상태와 행동을 함께 지닌 자율적인 객체 STEP 2.2 협력과 메시지 STEP 2.3 메서드와 자율성 객체지향의 사실과 오해 1장 리뷰 STEP 1. 객체지향은 실세계의 모방이다? STEP 1.1 실세계 예시를 통한 객체지향 들여다보기 STEP 1.1.1 요청과 응답으로 구성된 협력 STEP 1.1.2 역할과 책임 STEP 1.2 중간 정리 STEP 2. 협력 속에 사는 객체 STEP 2.1 상태와 행동을 함께 지닌 자율적인 객체 STEP 2.2 협력과 메시지 STEP 2.3 메서드와 자율성 STEP 3. 객체지향의 본질 STEP 4. 객체를 지향하라 개요 이 책을 보고 나서 많은 것들을 깨닫고, 많은 생각을 하게 되었다. 정말 객체지향이란 무엇인지? 에 대해서 가슴에 와닿게 설명해준 책이라 생각한다. 특…

November 15, 2020
개발
독서요약
Review after the homework of a Startup - 어떤 스타트업의 과제 전형 참여 후기

STEP 1.1 콜렉션 리팩토링에 대한 고민 STEP 1.1.1 비즈니스에 종속적인 자료구조 생성 STEP 1.1.2 Collection의 불변성을 보장 STEP 1.1.3 과제에서 활용한 방법 STEP 1.2 인조키와 자연키에 대한 고민 STEP 1.3 JPA 설계에 대한 고민 STEP 2.1 JPA LazyInitializationException 핸들링 STEP 2.1.1 JPA 지연로딩과 즉시로딩 STEP 2.1.2 JPA N+1 문제 STEP 2.1.3 Fetch Join을 통한 트러블 슈팅 STEP 2.2 동일 객체 GroupBy 핸들링 STEP 3.1 정적 팩토리 메소드 리팩토링 관련 STEP 1. 구현 중에 맞딱드린 고민과 해결방법 STEP 1.1 콜렉션 리팩토링에 대한 고민 STEP 1.2 인조키와 자연키에 대한 고민 STEP 1.3 JPA 설계에 대한 고민 STEP 2. 트러블 슈팅 STEP 2.1 JPA LazyInitializationException 핸들링 …

November 10, 2020
개발
Flutter - Widget, State, BuildContext 그리고 InheritedWidget (Part 1)

STEP 2.1 StatelessWidget vs StatefulWiget STEP 2.2 Stateless Widget STEP 2.2 StatefulWidget STEP 2.2.1 State란? STEP 2.3 StatelessWidget과 StatefulWidget 선택 방법 STEP 1. 서론 STEP 2. 본론 STEP 2. StatelessWidget vs StatefulWiget STEP 2.1 StatelessWidget vs StatefulWiget STEP 2.2 Stateless Widget STEP 2.3 Stateful Widget STEP 2.3.1 State란? STEP 2.3 StatelessWidget과 StatefulWidget 선택 방법 STEP 3. 결론 STEP 4. Reference Flutter - Widget, State, BuildContext 그리고 InheritedWidget Part 1 STEP 1. 서론 Flutter 공식팀에서 …

April 28, 2020
개발
자바스크립트 동작원리와 ES6 - Fundamentals of JavaScript & ES6

STEP 1.1 let 키워드 STEP 1.2 호이스팅(Hoisting) STEP 1.3 자바스크립트 실행컨텍스트(JavaScript Execution Context) STEP 1.3.1 생성 단계(Creation Phase) STEP 1.3.2 실행 단계(Execution Phase) STEP 1. ES6 VS ES6 이전 자바스크립트 STEP 1.1 let 키워드 STEP 1.2 호이스팅(Hoisting) STEP 1.3 자바스크립트 실행컨텍스트(JavaScript Execution Context) STEP 1.3.1 생성 단계(Creation Phase) STEP 1.3.2 실행 단계(Execution Phase) STEP 4. Review STEP 5. Reference STEP 1. ES6 vs ES6 이전 자바스크립트 기존의 ES6 이전의 자바스크립트에서는 블록단위의 스코프가 존재하지 않았다. C나 Java등 많은 프로그래밍언어를 했던 사람이라면, for문 안에서 돌아가…

September 09, 2019
개발
Java Servlet Fowarding - 서블릿 포워딩을 어떻게 구현할까?

STEP 1.1 RequestDispatcher 클래스 STEP 1.1.2 HttpServletResponse 클래스 STEP 1.1.1.1 HttpServletResponse 예제 소스 STEP 1.1.2 RequestDispatcher 클래스 STEP 1.1.2.1 RequestDispatcher 예제 소스 STEP 1. 포워딩(Forwading)이란? STEP 1.1 HttpServletRequest 클래스 STEP 1.1.1 HttpServletResponse 클래스 STEP 1.1.1.1 HttpServletResponse 예제 소스 STEP 1.1.2 RequestDispatcher 클래스 STEP 1.1.2.1 RequestDispatcher 예제 소스 개요 이번에는 서블릿 WebApplication에서 사용하는 포워딩 기법을 알아보기 위해서, 정리하려고 글을 남겨본다. 잡설이지만, 원래는 포스팅을 올릴 때 한땀 한땀 쓰려고 노력하고 있는데 요즘에 너무 몰아쓰면서 전반…

July 10, 2019
개발
FrontController & Command Pattern - 프론트 컨트롤러와 커맨드 패턴

STEP 1.1 디렉토리 패턴 STEP 1.2 확장자 패턴 STEP 2.1 FrontController-pattern STEP 2.2 FrontController-pattern 예제 소스 STEP 3.1 Command-pattern STEP 3.2 Command-pattern 예제 소스 STEP 1. URI-pattern STEP 1.1 디렉터리 패턴 STEP 1.2 확장자 패턴 STEP 2. FrontController-pattern STEP 2.1 FrontController-pattern이란? STEP 2.2 FrontController-pattern 예제 소스 STEP 3. Command-pattern STEP 3.1 Command-pattern이란? STEP 3.2 Command-pattern 예제 소스 STEP 4. Review 개요 MVC 패턴을 통한 Servlet WebApplication을 만들 때 사용하는 주된 패턴 중에 하나이다. 앞으로 계속해서 서블릿과 JSP…

July 09, 2019
개발
Java Spring Triangle - 자바 스프링 핵심 3대 요소

STEP 1.1 제어 역전(Inversion of Control)이란? STEP 1.2 Bean 등록 방법 STEP 1.3 의존성 주입(DI)란? STEP 2.1 관점 지향 프로그래밍(AOP)란? STEP 2.2 프록시 패턴이란? STEP 2.3 AOP 적용 예제 STEP 3.1 서비스 추상화(PSA)란? STEP 3.2 스프링 트랙잭션 STEP 1. 제어 역전(IoC, Inversion of Control) STEP 1.1 제어 역전(IoC)이란? STEP 1.2 Bean 등록 방법 STEP 1.3 의존성 주입(DI)란? STEP 2. 관점 지향 프로그래밍(Aspect Oriented Programming) STEP 2.1 관점 지향 프로그래밍(AOP)란? STEP 2.2 프록시 패턴이란? STEP 2.3 AOP 적용 예제 STEP 3. 서비스 추상화(Portable Service Abstraction) STEP 3.1 서비스 추상화(PSA)란? STEP 3.2 스프링 트랙잭션 …

July 09, 2019
개발
안전한 암호화를 위한 AES 알고리즘에 대한 이해와 구현코드(Java, C#)

개요 오랜만에 쓰는 글입니다. 요 근래 정신이 너무 없어서 블로그 글도 못쓰고 있던 찰나에 인턴으로 근무하고 있는 회사에서 맡게 된 업무인 C# 암호화, Java 복호화에 대해서 설명하고자 합니다. 먼저, 저희회사에는 C#과 Java로 만들어지는 프로그램이 있었으며, 저는 그 사이에서 중간 단계 역할을 하는 인터페이스를 만드는 업무를 부여받았습니다. 일단, 인터페이스 이전에 제가 보안에는 문외한이였습니다. 그래서 우선적으로 C# 암호화 후 Java에서 복호화를 처리하는 샘플 소스코드를 작성하게 됐습니다. AES Algorithms combined with Block Chipher mode in C# and Java STEP 1. 안전한 암호화 방식 STEP 1.1 암호의 종류 STEP 1.1.1 해시함수 STEP 1.1.2 대칭키 암호 방식 STEP 1.1.3 비 대칭키 암호 방식 STEP 1.1.4 정리 STEP 2. AES256 알고리즘이란? STEP 2.1 Dive int…

January 16, 2019
개발
리눅스(CentOS7)에서 자바 개발환경 구축하기 - Nginx와 Tomcat연동

STEP 1 - Nginx설치하기 STEP 1.1 - Install Nginx using webtatic repo (비추천) STEP 1.1.1 EPEL설치하기 STEP 1.1.3 Webtatic저장소 설치하기 Troubleshooting SETP 1.2 - Install Nginx using Nginx official repo (추천) STEP 2 - Nginx를 사용하는 이유 STEP 2.1 - Nginx가상호스트설정 (동작안하니까 참고만 하자!!!) STEP 2.2 - Nginx & Apache Tomcat 리버스프록시설정 개요 이전장을 통해서 우리는 리눅스 상에서 jdk와 톰캣을 설치 및 환경설정을 하였다. 이번 장에서는 nginx의 reverse proxy기능을 이용하여 톰캣과 엔진엑스를 연동하는 방법을 알아보도록하겠다. Nginx와 Apache Tomcat 연동하기 STEP 1 - Nginx설치하기 STEP 1.1 - Install Nginx using webtatic …

August 05, 2018
인프라
리눅스(CentOS7)에서 자바 개발환경 구축하기 - 톰캣 설치 및 환경설정

개요 Apache Tomcat STEP 1 - Apache Tomcat 다운로드 및 설치 STEP 2 - Apache Tomcat 환경변수 등록 및 추가 설정 STEP 2.1 - Apache Tomcat 환경변수 등록 및 방화벽 설정 STEP 2.2 - Tomcat 전용 리눅스 계정 생성 후 그 계정으로 Tomcat 실행하기 STEP 2.3 - Apache Tomcat 서비스 등록 및 시작데몬 등록 STEP 3 - Apache Tomcat CentOS7 firewalld 인바운드 룰 적용 및 index.jsp 페이지 확인 STEP 3.1 - CentOS7 firewalld 톰캣 포트 인바운드 룰 적용 STEP 3.2 - Hello Tomcat!! 마치면서 개요 이번 글은 Apache Tomcat 설치하고 Index.jsp 페이지인 고양이가 뛰어다니는 화면을 웹브라우저에 출력하는 것을 목표로 하겠다. Apache Tomcat 이전 글을 따라서 진행하는 사람이라면, Latest Ver…

July 04, 2018
인프라
리눅스(CentOS7)에서 자바 개발환경 구축하기 - JDK10 설치하기

개요 운영체제 환경 리눅스 JDK 설치하기 JDK10 Install Using Downloaded JDK10 Binary file JDK10 Install Using Downloaded JDK10 RPM file 1.1 STEP 1 - JDK10 소스 다운로드하기 1.2 STEP 2 - JDK10 명령어 등록 1.3 STEP 3 - JDK10 설치 확인 2.1 STEP 1 - JDK10 RPM 다운로드하기 2.2 STEP 2 - JDK10 설치 하기 트러블 슈팅 마치면서 개요 오늘은 Centos7에서 Java 개발환경을 구성하는 첫번째 단추인 Java(JDK)를 설치 후에 환경변수까지 설정하는 것을 적어보려고 한다. 운영체제 환경 리눅스 리눅스 배포판 버전 리눅스 커널 버전 커널 버전과 배포판 버전은 위의 코드와 같이 CentOS-7.5버전과 3.10.0 커널을 사용한다. JDK 설치하기 초기에는 원래 JDK9을 설치하려 했으나, 나온지 얼마 안되서 Java10 으로 통합이 되었는…

July 03, 2018
인프라