분류 전체보기
-
kafka란 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 분산형 pub-sub 메시징 플랫폼 -> 실시간 데이터를 처리할 수 있을 만큼 빠른 Message Queue Message Queue 메시지 큐는 프로그램(프로세스) 간의 데이터를 교환할 때 사용하는 기술 Broker, Zookeeper broker는 실행된 Kafka application 서버를 뜻한다 - Topic내의 Partition들을 분산, 유지 및 관리 zookeeper는 이러한 분산 메시지 큐의 정보를 관리해 주는 역할을 한다 - kafka를 띄우기 위해서는 주키퍼가 반드시 실행되어야 한다 - 3대 이상의 broker로 클러스터 구성 필요 Topic, Partion, Segment Topic은 Kafka 안에서 메..
[KAFKA] kafka 개념 및 관련 용어kafka란 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 분산형 pub-sub 메시징 플랫폼 -> 실시간 데이터를 처리할 수 있을 만큼 빠른 Message Queue Message Queue 메시지 큐는 프로그램(프로세스) 간의 데이터를 교환할 때 사용하는 기술 Broker, Zookeeper broker는 실행된 Kafka application 서버를 뜻한다 - Topic내의 Partition들을 분산, 유지 및 관리 zookeeper는 이러한 분산 메시지 큐의 정보를 관리해 주는 역할을 한다 - kafka를 띄우기 위해서는 주키퍼가 반드시 실행되어야 한다 - 3대 이상의 broker로 클러스터 구성 필요 Topic, Partion, Segment Topic은 Kafka 안에서 메..
2023.10.11 -
테스트 수행 시, 각 phase별로 설정이 다른 경우나 특정 phase인 상황을 테스트하고 싶을 수 있다. 그런 경우 어떻게 설정하는지 알아보도록 하자. @Profile 빈이나, 컴포넌트에 프로필을 구분하여 등록할 수 있게 해주는 어노테이션 @TestConfiguration public class TestConfiguration { @Bean @Profile("beta") public DataSource DataSource() { return new Log4jdbcProxyDataSource(hikariDataSource()); } @Bean @Profile("alpha") public DataSource testDataSource() { return new HikariDataSource(hikariDa..
[Spring] @ActiveProfiles, @Profile 활용 in Test테스트 수행 시, 각 phase별로 설정이 다른 경우나 특정 phase인 상황을 테스트하고 싶을 수 있다. 그런 경우 어떻게 설정하는지 알아보도록 하자. @Profile 빈이나, 컴포넌트에 프로필을 구분하여 등록할 수 있게 해주는 어노테이션 @TestConfiguration public class TestConfiguration { @Bean @Profile("beta") public DataSource DataSource() { return new Log4jdbcProxyDataSource(hikariDataSource()); } @Bean @Profile("alpha") public DataSource testDataSource() { return new HikariDataSource(hikariDa..
2023.08.26 -
java의 time 관련 표현 방법 정리 java.time package : https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html 비교 대상 LocalDateTime, OffsetDateTime, ZonedDateTime LocalDateTime ISO-8601 캘린더 시스템의 타임존 개념이 없는, 날짜-시간 시스템. ex : 2023-08-19T09:33:26.590 해당 컴퓨터의 타임존에 맞춘 시간을 의미 서울에서 new LocalDateTime()을 하면 서울의 현재 시각이 나온다 ISO-8601는 날짜와 시간과 관련된 국제표준이다. ISO-8601의 핵심은 - : T W Z 같은 정해진 문자만 써서 작성한다는 것 Zone..
[Java] java8 Time 관련 정리java의 time 관련 표현 방법 정리 java.time package : https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html 비교 대상 LocalDateTime, OffsetDateTime, ZonedDateTime LocalDateTime ISO-8601 캘린더 시스템의 타임존 개념이 없는, 날짜-시간 시스템. ex : 2023-08-19T09:33:26.590 해당 컴퓨터의 타임존에 맞춘 시간을 의미 서울에서 new LocalDateTime()을 하면 서울의 현재 시각이 나온다 ISO-8601는 날짜와 시간과 관련된 국제표준이다. ISO-8601의 핵심은 - : T W Z 같은 정해진 문자만 써서 작성한다는 것 Zone..
2023.08.20 -
대표적인 서비스 제공자 프레임워크 - JDBC 서비스 제공자 프레임워크에서의 제공자는 서비스의 구현체 이 구현체들을 클라이언트에 제공하는 역할을 프레임워크가 통제, 클라이언트를 구현체로부터 분리 서비스 제공자 프레임워크 핵심 컴포넌트 서비스 인터페이스 - 구현체의 동작을 정의 - Connection 제공자 등록 API - 제공자가 구현체를 등록 할 때 사용 - DriverManager.registerDriver 서비스 접근 API - 클라이언트가 서비스의 인스턴스를 얻을 때 사용 - DriverManager.getConnection 서비스 제공자 인터페이스 - 서비스 인터페이스의 인스턴스를 생성하는 팩토리 객체를 설명 - Driver JDBC 예제 Class.forName("oracle.jdbc.driv..
[아이템1] 서비스 제공자 프레임워크대표적인 서비스 제공자 프레임워크 - JDBC 서비스 제공자 프레임워크에서의 제공자는 서비스의 구현체 이 구현체들을 클라이언트에 제공하는 역할을 프레임워크가 통제, 클라이언트를 구현체로부터 분리 서비스 제공자 프레임워크 핵심 컴포넌트 서비스 인터페이스 - 구현체의 동작을 정의 - Connection 제공자 등록 API - 제공자가 구현체를 등록 할 때 사용 - DriverManager.registerDriver 서비스 접근 API - 클라이언트가 서비스의 인스턴스를 얻을 때 사용 - DriverManager.getConnection 서비스 제공자 인터페이스 - 서비스 인터페이스의 인스턴스를 생성하는 팩토리 객체를 설명 - Driver JDBC 예제 Class.forName("oracle.jdbc.driv..
2023.08.16 -
docker compose 파일에 volume을 mount 하는 경우에는 아래와 같이 사용된다. volumes: user_data_volume: 하지만, 이렇게 설정을 하면 실제 docker volume ls를 통해서 생성된 volume 명을 확인해 보면 아래와 같이 생성되어 있다. directory명_{user_defined_volume_name} 실제로 사용자가 명시한 이름을 사용하고 싶은 경우에는 두 가지 방법을 이용해서 목적을 달성할 수 있다. external 설정 추가 volumes: user_data_volume: external: true docker volume create를 통해서 먼저 volume을 생성해 놓고 docker-compose에 그것을 사용하겠다고 명시하는 것이다. name ..
[DOCKER] docker compose volume mountdocker compose 파일에 volume을 mount 하는 경우에는 아래와 같이 사용된다. volumes: user_data_volume: 하지만, 이렇게 설정을 하면 실제 docker volume ls를 통해서 생성된 volume 명을 확인해 보면 아래와 같이 생성되어 있다. directory명_{user_defined_volume_name} 실제로 사용자가 명시한 이름을 사용하고 싶은 경우에는 두 가지 방법을 이용해서 목적을 달성할 수 있다. external 설정 추가 volumes: user_data_volume: external: true docker volume create를 통해서 먼저 volume을 생성해 놓고 docker-compose에 그것을 사용하겠다고 명시하는 것이다. name ..
2023.08.02 -
SQL Injection이란 웹 애플리케이션에서 데이터의 유효성 검증을 하지 않아, 개발자가 의도하지 않은 동적 쿼리(Dynamic Query)를 생성하여 조작된 SQL문으로 DB 정보를 열람하거나 변경할 수 있는 보안 취약점 대표 예시 SELECT * FROM user Where userId = '${userId}' and userPw = '${userPw}' 위의 경우에 ${userPw}에 pw' or 1=1 값을 입력하면 SELECT * FROM user Where userId = 'valideUserId' and userPw = 'pw' or 1=1 실행되어 id만 알아도 로그인이 되는 현상이 발생할 수 있다. 이러한 현상을 방지하기 위해서 DB layer에서 Prepared Statement 기..
[SQLI] SQL Injection ( + Mybatis )SQL Injection이란 웹 애플리케이션에서 데이터의 유효성 검증을 하지 않아, 개발자가 의도하지 않은 동적 쿼리(Dynamic Query)를 생성하여 조작된 SQL문으로 DB 정보를 열람하거나 변경할 수 있는 보안 취약점 대표 예시 SELECT * FROM user Where userId = '${userId}' and userPw = '${userPw}' 위의 경우에 ${userPw}에 pw' or 1=1 값을 입력하면 SELECT * FROM user Where userId = 'valideUserId' and userPw = 'pw' or 1=1 실행되어 id만 알아도 로그인이 되는 현상이 발생할 수 있다. 이러한 현상을 방지하기 위해서 DB layer에서 Prepared Statement 기..
2023.07.29 -
Valve request processing pipeline에 특정 기능을 수행하기 위해 추가될 수 있는 컴포넌트 introduced with Tomcat 4 Valve는 서블릿의 필터 개념을 서버와 가상호스트 레벨로 확장시킨 개념 웹엔진, 가상호스트, 컨텍스트 (Engine, Host, Context) 순서로 Valve 코드를 실행시키게 되며, 필터와 Valve가 모두 설정되어 있는 경우에는 Valve의 설정 모두 적용된 이후에 필터가 적용되게 된다. AccessLog Tomcat Layer에 AccessLog 설정 시 이용 pattern 값은 원하는 형태로 변경하여 사용 관련 attribute 정보 : https://tomcat.apache.org/tomcat-7.0-doc/config/valve.h..
[TOMCAT] Valve에 대해서(RemoteIp, Accesslog)Valve request processing pipeline에 특정 기능을 수행하기 위해 추가될 수 있는 컴포넌트 introduced with Tomcat 4 Valve는 서블릿의 필터 개념을 서버와 가상호스트 레벨로 확장시킨 개념 웹엔진, 가상호스트, 컨텍스트 (Engine, Host, Context) 순서로 Valve 코드를 실행시키게 되며, 필터와 Valve가 모두 설정되어 있는 경우에는 Valve의 설정 모두 적용된 이후에 필터가 적용되게 된다. AccessLog Tomcat Layer에 AccessLog 설정 시 이용 pattern 값은 원하는 형태로 변경하여 사용 관련 attribute 정보 : https://tomcat.apache.org/tomcat-7.0-doc/config/valve.h..
2023.07.17 -
location 하위 블록에 proxy_set_header를 통해서 X-Forwarded-For, X-Real_IP와 같은 header를 세팅한다. 그러면 Tomcat과 같은 WAS Layer에서 해당 설정을 읽어서 IP 정보를 사용하게 된다. user nginx; worker_processes 2; ... http { include mime.types; upstream back-server { server 127.0.0.1:3000; keepalive 32; } ... server { ... location / { proxy_pass http://back-server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP..
[NGINX] client ip설정 (proxy_set_header, remote_addr, http_x_forwarded_for, proxy_add_x_forwarded_for)location 하위 블록에 proxy_set_header를 통해서 X-Forwarded-For, X-Real_IP와 같은 header를 세팅한다. 그러면 Tomcat과 같은 WAS Layer에서 해당 설정을 읽어서 IP 정보를 사용하게 된다. user nginx; worker_processes 2; ... http { include mime.types; upstream back-server { server 127.0.0.1:3000; keepalive 32; } ... server { ... location / { proxy_pass http://back-server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP..
2023.07.11