시작하며 항상 크론탭(Crontab) 문법을 작성할 일이 있으면 햇갈려서 그때 그때 다시 찾아봤어야 했었다. 최근 공부 중에 쉽게 크론탭 문법을 작성해주는 사이트를 알게되어 기록해둔다. Crontab 이란 유닉스 및 리눅스 시스템에서 일정한 간격으로 반복적으로 작업을 실행하기 위해 사용되는 명령어이다. 백업, 리포트 생성과 같이 정기적인 잡업을 수행하기 위해 주로 사용한다. Cron expression 문법 Unix 기반 시스템 Cron expression ┌───────────── 분 (0 - 59) │ ┌───────────── 시 (0 - 23) │ │ ┌───────────── 일 (1 - 31) │ │ │ ┌───────────── 월 (1 - 12) │ │ │ │ ┌───────────── 요..
미리 알림: 이 글은 필자의 이해를 위해 개인적으로 정리한 글이니 틀린 내용이 있을 수 있음. 다른 더 좋은 블로그 글이나 관련 사이트 글을 보는 것을 추천합니다. 참고 출처 바로보기 시작하며 부끄러운 이야기지만... 뭔가 알긴 아는데 개념을 정확히 모르는 게 많다. (사실 모르는 건 부끄러운 게 아니다. 아는 척하는 게 부끄러운 거지.) 자격증 공부하다가 SSL, TLS 가 보기에 나오는 경우가 많아서 이번에 정리해보기로 한다. 1. SSL 이란 Secure Sockets Layer, 보안 소켓 계층 SSL이란 암호화 기반 인터넷 보안 프로토콜 인터넷 통신 간의 전송되는 개인정보 보호, 인증, 데이터 무결성을 보장한다. SSL은 현재 사용 중인 TLS 암호화의 전신 요즘은 주로 TLS 인증서를 사용하지..
1. 포트 Port 란 TCP나 UDP 에서 어플리케이션이 상호구분을 위해서 사용하는 번호이다. IP 내에서 특정 프로세스 구분을 하기 위해서 사용한다. 즉 각 프로토콜의 데이터가 통하는 논리적 통로이다. netstat -an 명령어를 통해 확인 가능하다. netstat: network statistics, 전송 제어 프로토콜, 라우팅 테이블, 네트워크 인터페이스, 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 도구 -a: 수신 중인 모든 TCP 및 UDP 포트를 표시 -n: 주소나 포트 형식을 숫자로 표시 2. 주요 네트워크 포트 목록 주요 기본 Port Port Number Usage 20 FTP (File Transfer Protocol) Data Transfer 21 FTP (Fil..
1. IP 주소란 IP 주소란 컴퓨터 네트워크에서 장치들이 서로 통신을 하기 위해서 사용하는 특수한 번호이다. IPv4, IPv6 두 가지 종류가 있다. ex) IPv4: 93.184.216.34 ex) IPv6: 2001:0db8:85a3:08d3:1319:8a2e:0370:7334 IPv4 는 오늘 날 일반적으로 주로 사용한다. IPv4: [0-255].[0-255].[0-255].[0-255] IPv6 는 IPv4의 32 bit 로는 주소를 부여하기에 부족하기 때문에 생겨났다. 128 bit 체계이다. 2. Public IP 란 외부에 공개 되어 있기 때문에 다른 컴퓨터에서 인터넷(WWW)으로 접속 가능하다. 전체 인터넷 상에서 유일한 값이다. 지리적 위치를 찾을 수 있다. 예를 들면 핸드폰 번호와..
1. 시작하며 JUnit5는 가장 인기 있는 단위 테스트 프레임 워크이다. JUnit5 의 기본 기능에 대해 알아보자 2. JUnit5 란? JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : 테스트를 실행해주는 런처 제공, TestEngine API 정의 JUnit Jupiter : TestEngine API 구현체로 JUnit5 제공 JUnit Vintage : JUnit4와 JUnit43을 지원하는 TestEngine 구현체 2.1 JUnit Platform JVM에서 테스트 프레임워크를 시작하기 위한 런처를 제공한다. Junit과 클라이언트 간의 인터페이스를 제공한다. JUnit 플랫폼에서 실행되는 테스트 프레임워크를..
1. 시작하며 의존성을 주입하기 위해 필드에 @Autowired 를 사용하면 편리하지만 intellij나 sonarLint 에서 Constructor Injection 을 사용하라는 warning을 발생시킨다. 왜 경고가 발생하는지 스프링에서 의존성을 주입하는 방법을 알아보자. 2. Inversion of Control, DI(Dependency Injection) 이란 Inversion of Control (제어의 역전 - IoC) 일명 할리우드 원칙이라고도 불린다. don’t call me, I’ll call you. 나를 부르지 마라, 내가 너를 부를 것이다. 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다. 이 방식은 대부분의 프레임워크에서 사용하는 방식..
1. 시작하며 JPA Auditing 을 통해 등록/수정 날짜/시간 설정을 자동화 해보자. 2. 왜 JPA Auditing 쓰나? 매번 엔티티의 날짜/시간 데이터가 변경돨 때마다 이를 코드로 수정한다면 여기저기 입력/수정 코드를 구현해야한다. 그러나 JPA Auditing를 사용하면 공통으로 처리할 수 있다. 3. JPA Auditing 구현 1) BaseEntity 추상 클래스를 생성한다 도메인에 BaseEntity 클래스를 생성한다. BaseEntity는 모든 Entity의 상위 클래스이다. 따라서 이를 상속받는 Entity들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 한다. @Getter @MappedSuperclass @EntityListeners(AuditingE..
1. 시작하며 롬복 어노테이션 사용시에 자꾸 헷갈려서 개인적인 기억 정리 용도로 기록해 두고자 한다. 2. 왜 Lombock을 쓰나? Getter, Setter, Constructor 등을 자동으로 생성해줘서 귀찮은 일을 줄여 준다. 단, 무한루프에 빠지거나 무분별하게 setter를 남발할 수 있으니 조심해서 쓰자 3. Lombok 설치 maven org.projectlombok lombok true gradle compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' gradle 5버전 이상은 annotationProcessor 'org.projectlombok:lombok' 을 추가해주어야 한다. 그렇지않..
JDBC connector 생성 시 No suitable driver found 에러 발생 1. 시작하며 Kafka Connect JDBC Connector 를 사용하여 sink connector를 생성하려고 하였으나 java.sql.SQLException: No suitable driver found 에러가 발생하였다. kafka docker image는 wurstmeister를 사용하였다. 2. 이슈 kafka JDBC connector 생성 불가: No suitable driver found Caused by: org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc..
Kafka 에서 Mysql 로 Sink Connector 구축하기 이미지출처 : confluent 1. 시작하며 Kafka connect로 Kafka Topic 저장된 레코드를 Mysql로 데이터 마이그레이션 하고자한다. 이 과정은 Confluent 사의 JDBC Sink Connector 통해 구축한다. Source Connector: MySQL -> kafka Connect(Source Connector, Debezium) -> Kafka Sink Connector : Kafka -> kafka Connect(JDBC Sink Connector) -> Mysql 2. docker-compose.yml 작성 Source Connector 를 만들었던 예제에서 sink용 Mysql 하나 더 추가하였다. ..
MySQL 에서 Kafka 로 Source Connector 구축하기 이미지출처 : confluent 1. 시작하며 Kafka connect는 카프카용 데이터 통합 프레임워크이다. 이 때 Kafka connect는 Kafka connector가 동작하도록 실행해주는 프로세스이다. Kafka connector에는 Source connector와 Sink connector가 있다. 간단히 말하면 Source Connector는 Producer의 역할, Sink connector는 Consumer 역할을 한다. Source Connector : 외부시스템 -> 커넥트 -> 카프카 Sink Connector : 카프카 -> 커넥트 -> 외부 시스템 Debezium은 카프카 커넥트(Kafka Connect) 기반..
@PostConstruct와 @PreDestroy Annotation 사용하기 1. 언제 쓰는가 최근에 개발하다가 딱 한번만 받아오면 되는 값을 사용 시 마다 요청을 새로 호출하는 실수를 했다. 아니 누가 이따위로 개발했는가 하고 git history를 뒤져보았더니 범인은 다름아닌 과거의 나였다. 따라서 잊지 않기 위해 @PostConstruct 에 대해 기록해두고자 한다. @PostConstruct 를 사용하면 WAS 가 뜰 때 한번만 기본값을 세팅해두고 두고두고 쓸 수 있다. @PostConstruct 는 WAS 가 뜰 때 bean이 생성된 다음 딱 한번만 실행된다. @PreDestroy 는 컨테이너에서 객체를 제거하기 전에 실행된다. 2. @PostConstruct Spring은 bean을 초기화 ..