본문 바로가기

전체 글

(28)
SPRING으로 AES CBC, KISA_SEED_CBC 를 활용한 암호화 사용자 CI 나 주민번호 및 핸드폰 번호와 같은 개인정보는 DB에 저장할 때 뿐만아니라 조회되는 데이터도 암호화되어 보여져야 한다. 이를 위해 JAVA의 AES CBC 와 KISA_SEED_CBC를 활용하여 DB에 들어갈 데이터는 AES로 암호화하고 외부로 보여지는 데이터는 KISA_SEED_CBC로 암호화하여 보여지도록 해보자 외부 -> DB BASE64(SEED128 CBC(평문)) 으로 암호화된 데이터를 SEED128 CBC로 복호화하고 복호화된 데이터를 AES로 암호화하여 DB에 저장 DB -> 외부 AES로 암호화된 DB의 데이터를 AES/CBC/PKCS5Padding 로 복호화하고 복호화된 데이터를 SEED128 CBC로 암호화여 외부에 노출 활용 스펙 및 기술 : Spring boot JAV..
[JAVA] 추상클래스 vs 인터페이스 요즘 자바를 다시 공부하면서 정리할 게 많아진 것 같다 오늘은 추상클래스와 인터페이스를 정리해야징 인터페이스 - 보통 ...able 형식의 네이밍 규칙을 따름 - 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용 - implements 키워드를 사용해 정의된 메소드를 각 클래스의 목적에 맞게 구현 - 모든 변수는 public static final - 모든 메서드는 public abstract, default, static, private - 다중 상속 가능 추상 클래스 - 클래스 간의 연관 관계를 구축하는 것에 초점 - extends 키워드를 사용해 자신의 기능을 하위 클래스로 확장시킴 - 부모 클래스가 가진 기능들을 구현해야할 경우 사용 - abstract으로 선언한 메소드는 ..
SSH 터널링을 통한 MySQL dump 파일 생성 shell script 작성 하고자 하는 것 1. ssh로 개발서버 접근 2. mysqldump 를 사용해 개발서버의 특정 테이블 dump sql 파일 생성 후 export 3. 나의 local 디비로 가져와 export된 sql파일 import 이슈사항 ssh 로 접근한 개발서버에 mysql이 깔려있지 않는다 문제해결 ssh 터널링을 통해 포트를 설정하여 로컬에서 원격 mysql 서버에 접근하도록 설정하자 - 폴더 위치 이동 후 스크립트 생성 touch myScript.sh - 스크립트 수정 vi myScript.sh - 스크립트 작성 #!/bin/bash # SSH 터널 설정 # 사용자명, 호스트 및 SSH 키 경로 작성 # & : 명령어를 백그라운드에서 실행하라는 명령어 # ssh로 접속 후 내 pc의 mysql을 사용하여 개..
[JAVA] Static vs Final vs Static Final static과 final의 차이를 명확하게 알고가기 위해 포스팅을 할거임! Static : 객체생성없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 사용하는 키워드 : 객체 참조 없이 바로 사용하여 즉, 인스턴스 성질을 객체 생성 후 사용할 수 있으므로 this 키워드를 사용할 수 없다 public class Test { static int aColumn = 10; static int testMethod(int a, int b){ return a+b; } } 이렇게 선언된 Test 클래스의 aColumn 변수와 testMethod() 메소드를 다음과 같이 "클래스명.필드" 또는 "클래스명.메소드" 로 사용가능하다 public void testMethod(){ int aa = Test.aColumn ..
데이터 파이프라인(Data pipeline)이란 데이터 파이프라인 이란 - 언제든지 필요한 데이터를 가져와 꺼내 쓸 수 있도록 데이터를 계속 쌓아두는 파이프를 만드는 것 - 데이터를 생성해서 저장하기까지의 일련의 과정 - 소규모 서비스에서는 SAAS(GA 등) 형태의 분석툴로 충분하지만 큰 규모에선 데이터 엔지니어가 직접 데이터 환경을 구축하는게 굿 데이터 파이프라인 종류 - 일괄 파이프라인 (batch processing) ex) 스케쥴러 - 스트리밍 파이프라인 - 실시간 파이프라인 - 클라우드 파이프라인 데이터 파이프라인이 구축 데이터 생성 - 서비스 데이터 : 상품정보, 고객정보, 결제정보 등 데이터 파이프라인을 따로 거치지 않음 - 로그 데이터 : 유자가 서비스를 이용하면서 클릭, 스크롤, 머무르기 같은 이벤트 등 서비스를 운영하면서 생기는 ..
PRISMA GraphQL NestJS에서 RawQuery 사용하기 문제 상황: ORM(Object Relational Mapping) 을 사용할 때 복잡한 쿼리를 구현하기에는 ORM의 메소드만으로는 한계를 느낄 때가 자주 있음 Prisma를 사용하면서 orm의 구현 한계를 느꼈고 raw query를 prisma 에 적용할 수 있는 방법을 찾음 프로젝트 스펙: NestJS + Prisma(Code first) + GraphQL + MariaDB + Apollo Server 디비 구조: user table 과 department table 이 n:1로 맵핑되어 있다 prisma orm 사용: 다음은 userId 가 1인 사람의 user 정보와 department 정보를 모두 가져오는 prisma orm 메소드이다. 결과값은 다음과 같다 name이 '일길동'인 사람은 nam..
[SPRING] QueryDSL 복잡한 정렬 custom order by 설정 OrderSpecifier CaseBuilder 문제상황 단순히 하나의 컬럼 값으로 내림차순 오름차순 정렬하는것이 아닌 해당 컬럼의 값에 따라 커스텀 정렬하고자 한다 프로젝트 스펙 Spring boot / JAVA 11 / JPA / MySQL 해결방안 QueryDSL OrderSpecifier CaseBuilder 를 사용하자 예시 Video라는 테이블의 category라는 컬럼이 존재한다 category 데이터를 단순히 문자열의 내림차순 오름차순으로 정렬하는 것이 아닌 '두드러기 -> 백반증 -> 바이러스사마귀' 순 으로 정렬하고 싶을 떈 QueryDSL을 사용해서 custom order by를 설정하자 public List getVideoListOrderByCategory(){ JPAQueryFactory jpaQueryFactory = new ..
[Oracle] LOB(Large Object) 데이터 형식이란 Oracle 데이터베이스에서는 다양한 LOB(Large Object) 데이터 형식을 제공한다. LOB 데이터 형식은 대용량 데이터를 저장하는 데 사용되며 주요 Oracle LOB 데이터 형식과 간단한 예제를 알아보자 1. BLOB (Binary Large Object): 이진 데이터를 저장하기 위한 데이터 형식으로 주로 이미지, 동영상, 오디오 파일 등 이진 데이터를 저장하는 데 사용된다 이미지를 BLOB로 저장하기 CREATE TABLE ImageTable (id NUMBER, image BLOB); INSERT INTO ImageTable (id, image) VALUES (1, utl_raw.cast_to_raw('이진이미지데이터')); 2. CLOB (Character Large Object): ..