mysql 샘플 테이블 + 쿼리 연습 문제

http://java-school.net/jdbc/SQL-SELECT-Statement CREATE TABLE DEPT (     DEPTNO DECIMAL ( 2 ),     DNAME VARCHAR ( 14 ),     LOC VARCHAR ( 13 ),     CONSTRAINT PK_DEPT PRIMARY KEY ( DEPTNO ) ); CREATE TABLE EMP (     EMPNO DECIMAL ( 4 ),     ENAME VARCHAR ( 10 ),     JOB VARCHAR ( 9 ),     MGR DECIMAL ( 4 ),     HIREDATE DATE ,     SAL DECIMAL ( 7 , 2 ),     COMM DECIMAL ( 7 , 2 ),     DEPTNO DECIMAL ( 2 ),     CONSTRAINT PK_EMP PRIMARY KEY ( EMPNO ),     CONSTRAINT FK_DEPTNO FOREIGN KEY ( DEPTNO ) REFERENCES DEPT ( DEPTNO ) ); CREATE TABLE SALGRADE (     GRADE TINYINT ,     LOSAL SMALLINT ,     HISAL SMALLINT ); INSE...

Rest API 공통 Response 만들기 - kotlin

이미지
  Rest API 에서 공통 응답을 만들어보쟈 Method : POST  URL : {도메인}/api/v1/test  호출했을 때 성공시 { "resultCode" : "0000" , "resultMessage" : "OK" } 실패시 { "resultCode" : "1000" , "resultMessage" : "일시적인 오류" } 동일한 포멧으로 Response를 주고 싶다 ApiException open class ApiException ( val errorCode : ErrorCode ) : RuntimeException() APIExceptionHandler @RestControllerAdvice class ApiExceptionHandler { companion object { val log : Logger = LoggerFactory .getLogger( this :: class . java ) } @ExceptionHandler (value = [ ApiException :: class ]) fun handleApiException (ex: ApiException ): ResponseEntity < ErrorResponseDto > { val errorCode : ErrorCode = ex. errorCode val errorDto = ErrorResponseDto( resultCode = errorCode . code , resultMessage = errorCode . message ) log .error(ex. message ) return ResponseEntity( errorDto , errorCode . status ) } @Exce...

[암호화] AES 인코딩, 디코딩 (AES/CBC/PKCS5PADDING/Hex) - Kotlin

  /* 인코딩, 디코딩 */ CryptoConverter.kt import org.springframework.boot.context.properties. ConfigurationProperties import org.springframework.stereotype. Component import java.util.* import javax.crypto. Cipher import javax.crypto.spec. IvParameterSpec import javax.crypto.spec. SecretKeySpec import javax.persistence. AttributeConverter import javax.persistence. Convert @Convert class CryptoConverter ( private val aes256Config : AES256Config ) : AttributeConverter < String , String > { private val key = aes256Config . key private val iv = aes256Config . iv private val secretKeySpec = SecretKeySpec( key !!. toByteArray (), "AES" ) private val ivParameterSpec = IvParameterSpec( iv !!. toByteArray ())     // 인코딩 override fun convertToDatabaseColumn (payload: String ): String ? { val cipher = Cipher .getInstance( "AES/CBC/PKCS5PADDING" ) cipher .init( Cipher . ENCRYPT_MODE , secretKeySpec , ivParameterSpec ) val encrypt...

API gateway란?

API gateway란? 클라이언트와 백엔드 사이에 위치하는 API 관리 툴로 인증/인가, 사용량 제어, 요청/응답 변조 등의 기능 수행. API gateway의 역할 API gateway는 수신되는 모든 요청을 가로채 각 엔드포인트로 클라이언트 대신 요청하고 응답을 받는다. 역할은 구현 환경마다 달라진다. 일반적으로 인증, 라우팅, 속도제한, 모니터링, 분석, 정책, 알림, 보안이 있다. API gateway를 사용하는 이유 API gateway는 주로 사용자인증, 속도제한, 통계등 API 서비스 시스템 전반에서 사용되는 일반적인 태스크를 처리한다.  *API 서비스를 할 때 고려해야할 사항   - API 서비스 보호를 위한 인증   - API 사용에 대한 분석 및 모니터링 툴 추가   - 단일 요청으로 서로 다른 N개의 애플리케이션에 대한 호출을 필요로 하는경우 MSA 채택   - 시간이 지남에 따라 API 서비스를 추가,수정,삭제 할 경우에도 고객은 계속해서 모든 서비스를 동일한 장소에서 찾기를 원함  이러한 복잡성을 해결하기 위해 간단하고 신뢰할 수 있는 환경을 제공하는 것이 APIgateway이다. API gateway는 클라이언트 인터페이스를 백엔드 구현 환경에서 분리할 수 있는 방법이다. 클라이언트가 요청을 하면 API gateway 가 이를 여러개의 요청으로 나누어 적절한 위치로 전달하고, 응답을 생성하며, 모든 상황을 추적한다.

[Oauth2.0] 스프링부트 OAuth2 jwt kotlin (client credentials)

이미지
신입 3개월차에 oauth관련해서 서브로 깔짝 개발할 일이 있어서 그때 한 번 잠깐 공부를 했었는데 (결국 이해 못하고 넘어감) 그 때 OAuth! 어렵다! 모르겠다! 는 심리적 벽이 생겨버려서 이번에도 쉽지않았다 (문서가 안읽힘)  타사와 openAPI 를 통해 서로 데이터를 주고받기로함 연동업체에서 인증관련 가이드가 내려옴 ------------------------------ ------------------------ API  통신을 위한 인증 의 경우 아래 당사 정보보안가이드를 준수해야하므로 ... API  에 대한 인증 방식은  OneTime Token  을 사용하거나 혹은 그에 준하는 가변값으로 인증이 필요 - OneTime Token  방식인증  API  를 제공하여  1  회성 액세스 토큰 발행 - OneTime Token  에 준하는 가변값의 인증 방식 예제  ( 사전 협의 필요 ) ------------------------------ ------------------------ OAuth2 인증 방식 4가지 1) Authorization Code      - ex) 구글, 페이스북 로그인  2) Implicit 3) Resource Oner Password 4) Client Credentials     - 업체끼리 연동 개발환경 spring boot 2.5.6 java 11 kotlin MySQL 인증 구현은 처음이라 일단 샘플을 만들어본다 accessToken 발급 해보기 build.gradle.kts dependencies { //implementation(project(":domain")) implementation ( "org.springframework.boot:spring-boot-starter-data-jpa" ) implementation ( "o...

[MySQL] 테이블 데이터 복사(컬럼값 변경 복사)

테이블A ---------- 수도권 | 1000 지방 | 2000 수도권 | 1000 지방 | 2000 . . . ---------- 조건1 : 테이블A에 '지방' 가격으로 '제주'도 추가하고싶다. 조건2 : 데이터 4000건정도 있음. 1. '지방' 데이터만 빼서 임시테이블 생성 CREATE TEMPORARY TABLE  table_a _temp AS SELECT * FROM table_a WHERE state = '지방'; 2. 임시테이블에 기존값->원하는 값으로 변경 UPDATE  table_a _temp  SET state = '제주', reg_date=NOW(); 3. 원 테이블에 insert (autoincrement한 키값이 중복되므로 컬럼명 명시해서 insert) INSERT INTO  table_a  (product_srl, state, driver_cost, reg_date) SELECT product_srl, state, driver_cost, reg_date FROM  table_a _temp  ;

MyBatis+Oracle 다중 insert 시퀀스 nextval

<update id="addTecOrderAddOptions" parameterType="com.lottemart.api.order.domain.Order">         <!-- Order.addTecOrderAddOptions -->         INSERT INTO TEC_ORDER_ADD_OPTION ( ADD_OPTION_ID, EC_ORDER_ID, EC_ORDER_SEQ, PROCESS_SEQ, ADD_OPTION_DIVN_CD, ADD_OPTION_NM, ADD_OPTION_VALUE ) SELECT LPAD(SQ_EC_ORDER_OPTION_SEQ.NEXTVAL, 15, '0') , A.*   FROM (   <foreach collection="orderAddOptionList" item="orderAddOption"  separator="UNION ALL "  >   SELECT #{orderAddOption.ecOrderId, jdbcType=VARCHAR} AS EC_ORDER_ID, #{orderAddOption.ecOrderSeq} AS EC_ORDER_SEQ, #{orderAddOption.processSeq} AS PROCESS_SEQ, #{orderAddOption.addOptionDivnCd, jdbcType=VARCHAR} AS ADD_OPTION_DIVN_CD, #{orderAddOption.addOptionNm, jdbcType=VARCHAR} AS ADD_OPTION_NM, #{orderAddOption.addOptionValue, jdbcType=VARCHAR} AS ADD_OPTION_VALUE FROM D...

Java 정규식 테스트 사이트

이미지
https://regex-testdrive.com/en/dotest group()으로 쪼개서 보여주니까 편하니 좋다 // json 에서 리턴코드 0000만 뽑아오기 final String expStr = "(.*)(returnCode|rsltCd)([\\s|\\t]*?[\"][\\s|\\t]*?[:][\\s|\\t]*?[\"][\\s|\\t]*?)([0-9|A-Z|a-z]+)(.*)";         Pattern pattern = Pattern.compile(expStr);     Matcher matcher = pattern.matcher(jsonStr);     String returnCodeStr = "";         while(matcher.find()) {     returnCodeStr = matcher.group(4);     }