전체 글

Do Love! Write Code!
Programming/Algorithm

[Hackerrank] counting valleys - java

Hackkerank의 Interview prepare ket 중 Warm-up Challenges의 CountingValleys 문제 풀이 Java 코드 [정의] - 스텝은 해수면을 기준으로 시작 - 모든 걸음은 U, D로 기록됨 (U은 언덕을 올라갈 때, D는 내려갈 때) - 산의 정의: 해수면을 기준으로 위로 올라가고 다시 아래로 내려왔을 경우, 한 개의 산으로 판단. - 계곡의 정의: 해수면을 기준으로 아래로 내려가고 다시 위로 올라왔을 경우, 한 개의 계곡으로 판단. [문제] - 주어진 걸음 배열을 바탕으로, 지나간 계곡의 수를 구하여라. [전략] - 해수면을 기준으로 아래로 내려갔다가 올라온 경우만 카운팅 - Y 좌표계로 생각해서, 해수면(=기준점)을 좌표 0으로 정의 - U 일 땐 현재 좌표에..

Programming/Algorithm

[Hackerrank] JumpingOnClouds - java

Hackkerank의 Interview prepare ket 중 Warm-up Challenges의 JumpingOnClouds 문제 풀이 Java 코드 [제약] - 점프는 현재 현재 인덱스에서 1 또는 2 증가한 인덱스까지만 가능. - 점프 가능한 구름의 값은 0, 피해야 하는 구름의 값은 1. - 구름을 통과할 수 있는 최소 점프 수를 구하라. [전략] - 최소 점프 수 이므로, 뛸 수 있는 최대 거리(2)를 우선적으로 탐색 - 최소 점프가 2므로, 피해야 하는 구름은 연속으로 있을 수 없다. (ex: 0 1 1 ) public class JumpingOnTheCloud { // Complete the jumpingOnClouds function below. static int jumpingOnClo..

Programming/Spring

[Spring Boot] Filter (2) -Response Body Modify

2020/07/15 - [Programming/Java] - [Spring Boot] Filter (1) - Request Body Modify [Spring Boot] Filter (1) - Request Body Modify 스프링 기반으로 서버를 개발하다가, 특정 API를 통해 송 수신되는 모든 데이터를 암호화해야 하는 니즈가 생기게 되었다. 다음은 스프링을 조금 공부해봤다고 하는 사람들은 대다수 알만한 스�� johnmarc.tistory.com 이전 글에서 말했듯이 특정 API를 통해 송수신되는 모든 데이터를 암호화해야 하는 니즈로 인해, 들어오는 요청 데이터를 복호화하는 필터 클래스를 작성하였고, 이번에는 요청을 처리한 결과의 응답 데이터를 암호화하는 필터 클래스를 작성해보겠다. 먼저 @Res..

Programming/Server

[Docker] Docker Container Deploy for Private Network

현재 회사에서는 모든 프로그램을 모두 도커 컨테이너로 배포하고 관리를 하고 있다. B2B 쪽으로 솔루션 수요가 많아서 직접 서버를 설치를 하러 다녔었는데, 대부분 외부 인터넷이 막혀있는 폐쇄망 환경이였다. 폐쇄망이기 때문에, 도커 이미지를 어디서 받아오거나 다운로드할 수 없었기에 파일로 다운로드해서 가져가고 이를 설치 서버에 옮기고 이미지를 설치한 다음에 컨테이너를 돌릴 수밖에 없다. Docker에서는 다음과 같은 명령어로 Docker 이미지를 파일로 내려받고, 도커 이미지 파일을 설치할 수 있다. 1. 현재 저장된 도커 이미지를 tar 파일로 다운로드하는 명령어 (tar 파일만 가능) docker save ${도커 이미지 이름} -o ${파일명}.tar 2. 도커 이미지 파일을 도커 이미지로 설치하는 ..

Programming/Java

[Java8] 윤년, 다음달 말일 계산

요즘 회사에서 결제 시스템과 연동되는 라이선스 서버를 개발하면서 라이선스 만료일을 계산하는 로직을 구현하게 되었다. 서비스 특성상 정기결제가 이루어지기 때문에 라이선스 기간을 산정하는데 다음과 같은 문제점이 있었다. 1. 라이선스 기간은 결제일로부터 한 달만 활성화된다. 2. 사용자가 말일에 결제한 경우 다음 달 말일은 30, 31, 28, 29일 등 윤년 여부와 월에 따라 기간이 다를 수도 있다. 처음에는 해당 로직을 직접 코드로 구현하고 있었다. LocalDateTime으로 저장된 최근 라이선스 만료일자를 바탕으로, Month 값만 가져와서, 다음 달 값을 구하고, 해당 달의 말일을 가져온 다음 결제일을 비교하면서 다음 달 말일에 기간이 포함되는지 여부 등 열심히 지지고 볶고 구현을 하고 있었다. 그..

Programming/Server

[Shell Script] ECR 도커 컨테이너 이미지 명 및 태그 정보 추출

AWS ECR에 도커 이미지를 등록하면 {ID}. dkr.ecr.us-east-2.amazonaws.com/{리파지토리명} 형태로 도커 이미지가 등록된다. {ID}. dkr.ecr.us-east-2.amazonaws.com/{리파지토리명}:{tag} 형태로 ECR에서는 도커 이미지를 관리하는데, EC2에서 이미지를 받아서 컨테이너를 돌렸을 때, 도커 컨테이너 리스트를 확인하면 다음 사진과 같이 뜨게 된다. docker ps 돌아가는 컨테이너가 한 두개면 몰라도 20~30개가 넘어가는 경우 어떤 컨테이너가 어떤 이미지의 어느 태그 기반으로 돌아가고 있는지 확인하기가 어렵다. 그래서 다음과 같이 간단하게 쉘 스크립트를 짰다. #!/bin/bash docker ps | awk '{split($2,image,"..

Programming/Spring

[Spring Boot] Filter (1) - Request Body Modify

스프링 기반으로 서버를 개발하다가, 특정 API를 통해 송 수신되는 모든 데이터를 암호화해야 하는 니즈가 생기게 되었다. 다음은 스프링을 조금 공부해봤다고 하는 사람들은 대다수 알만한 스프링 MVC에서의 요청 처리 구조 사진이다. 보는 것과 같이 요청을 가장 먼저 처리하는 부분은 바로 filter 이다. filter layer에서 요청 데이터를 복호화하고, 이를 그대로 뒷단으로 넘겨서 로직을 처리할 수 있도록 구조를 생각해보았다. 스프링 부트의 기본 웹 서버인 Tomcat은 서블릿 기반으로 웹 요청을 처리하기에, 스프링 부트에서 Http 요청은 javax.servlet.http 패키지 하위에 있는 HttpServletRequest 클래스 객체로 넘어오게 되며, javax.servlet.http 패키지에서..

Programming/Java

[Java] AES 256 암복호화 유틸클래스

일을 하다 보니 AES 256 알고리즘으로 암복호화할 일이 생겨서 간단하게 유틸 클래스를 만들어보았다. 256 암호화라서 32자의 암호화 키를 사용해야하며, iv 파라미터를 이용한다. iv 파라미터 값은 암호화 키 16자를 활용한다. import lombok.extern.slf4j.Slf4j; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidK..

JohnMark
Love And Code