자바 프로그램 실행 과정을 복습하면서, JVM 구조와 역할에 대해 정리해보고자 한다.- 더 나아가, 다음 글에는 Garbage Collector의 알고리즘을 정리해보려고 한다. JVM을 통해 자바뿐만 아니라 Kotlin, JRuby 등 다른 언어로 작성된 프로그램 실행에 도움을 준다.그래서 Java와 Kotlin을 각각 모듈화 해서 함께 사용할 수 있다.📌 JVMJVM을 통해 자바 바이트코드는 타겟 플랫폼에 상관없이 동작할 수 있다.(여기서 타겟 플랫폼이란, Linux, Window, Android, iOS …)Java Source Code가 Javac라는 컴파일을 거친다.Java ByteCode가 생성된다.JVM을 통해 Java ByteCode를 Higer - low level 단계에 인터페이스가 되..
문제 : Multi Module yml 파일 분리 안됨문제 상황멀티 모듈 프로젝트 환경에서 yml 파일을 각 모듈의 역할에 맞게 관리하고자 했다.기존에는 yml 파일 내용이 중복으로 저장되고 있어, 이를 수정하거나 삭제할 때 번거로움이 있었다. 이를 A 모듈은 A와 관련된 설정 파일만 관리하고 B 모듈은 B와 관련된 설정 파일만 관리하도록 변경했다. 기대 효과중복되는 yml 설정 코드를 제거할 수 있다.수정, 삭제 시 한 곳에서만 처리 가능하다.각 모듈의 역할에 따라 설정 코드를 관리할 수 있다.기존에는 실행 모듈의 yml에 모든 정보를 가지고 있어, 어느 모듈에 대한 설정 코드인지 알기 어려움 Multi Module 분리하기A, B, C 모듈이 있다고 했을 때 각 모듈이 담당하는 설정들을 모듈 내 ym..
AWS CloudFront와 Lambda@Edge를 통해 이미지 전송 최적화를 공부하면서, AWS 서비스 개념에 대해 제대로 알고자 정리하였습니다. 이번 포스팅은 "이미지 캐싱 & 리사이징"을 하기 전에 알아두어야 하는 개념들을 정리하였습니다.CloudFront란CloudFront란 AWS Cloud의 CDN 서비스로 이미지, 동영상, 애플리케이션 및 API 등 다양한 컨텐츠를 빠른 속도로 전송해 주는 서비스입니다.CloudFront 없이 S3에 있는 URL로 이미지를 조회할 수 있다. 하지만, 먼 곳에 서버가 있는 경우 데이터 조회 속도가 오래 걸린다. CDN이란Content Delivery Network or Content Distribution Network컨텐츠를 효율적으로 전달하기 위해 여러 노..
1. HTTP 프로토콜이란Hyper Text Transfer Protocol 약자로웹에서 데이터를 주고받기 위한 프로토콜이다. 클라이언트의 요청에 응답을 보낸 후 연결을 끊는 특징(Stateless)이 있다. 일반적인 REST 통신 방법이 HTTP 기반 통신 방법이다. 특징상태 정보를 저장하지 않는 Stateless 특징을 가지고 있어, 사용자 인증을 위해 쿠키, 세션, JWT 토큰 방식을 사용한다. 2. HTTPS란HTTPS는 내가 사이트에 보내는 정보들을 제 3자가 못 보게 하고, 접속한 사이트가 믿을 만한 곳인지 알려주며, HTTP 보다 보안이 강화된 프로토콜이다. 💬 어떻게?클라이언트와 서버가 생성한 난수를 통해 Secret Key를 만들어 대칭키 암복호화를 진행한다.Secret Key를 생성하..
코틀린을 공부하면서 자바와 의존성 주입 차이가 약간 다른 거 같아서, 이번 글을 통해 제대로 정리하고자 합니다.코틀린이 자바보다 간결하게 처리가 가능하다고 말로만 들었는데, 의존성 주입부터 간결해지는 거 같다..의존성 주입 방법은 제일 많이 사용하는 생성자 주입을 기준으로만 작성하겠습니다. (가장 흔히 쓰고, 안전한 방식)Java 생성자 주입@RestController@RequiredArgsConstructorpublic class HelloController { private final HelloService helloService;}자바에서는 @RequiredArgsConstructor와 private final 빈 클래스 선언을 통해 간단하게 생성자 주입을 처리합니다. @RestControll..
문제 위 문제는 탈출할 수 있는 최단 거리를 구하는 문제인데, 2차원 배열이 아닌 3차원 배열을 통해 BFS 탐색을 진행해야 한다.여러 개의 테스트 케이스를 받아 최단 거리를 출력해야 하므로, 무한 루프와 break 조건을 적절하게 설정해줘야 한다.코드from collections import dequeimport sysinput = sys.stdin.readline# 남북서동 상하dx = [-1, 1, 0, 0, 0, 0]dy = [0, 0, -1, 1, 0, 0]dz = [0, 0, 0, 0, -1, 1]while True: L, R, C = map(int, input().split()) if L == 0 and R == 0 and C == 0: break start = None b..
복합 인덱스 알아보기복합 인덱스는 단어 그대로 여러 개의 컬럼 조합으로 생성된 인덱스이다.(idx_col1, idx_col2) 에 대해 인덱스를 설정하면, 명시한 컬럼 순서대로 인덱스가 정렬됩니다.B+ Tree 구조를 만들 때 idx_col1 컬럼에 대해 먼저 정렬을 하고, 동일한 값이 있다면 idx_col2를 기준으로 정렬하여 인덱스를 관리합니다.복합 인덱스 구조를 보면 첫 번째 컬럼을 먼저 조회하고 그다음에 두 번째 컬럼을 조회하는 것을 알 수 있습니다. 그래서 해당 인덱스를 제대로 사용하기 위해서는 순서에 맞게 Query를 구성해야 합니다.만약, idx_col2를 먼저 탐색하고 idx_col1을 탐색하게 where 조건문을 설정했다면, 올바르게 인덱스 탐색이 이루어지지 않을 수 있습니다. CREAT..
머리말,실무를 진행하면서 개발했던 서비스에 추가 요구사항이 생겨 테이블 변경이 필요한 상황이었습니다.1:1 관계였던 테이블이 N:M 관계로 변해 반정규화나 매핑 테이블을 추가해서 요구사항에 맞게 재설계 과정이 필요했습니다. Why 일대일 관계가 다대다 관계가 됐는지,더보기기존 서비스에서는 특정 시간 대에 하나의 객실에 대해 문의 예약건을 받아 처리했습니다. (문의 하나당 객실 하나를 담당한다.)하지만, 해당 기능은 사용자뿐만 아니라 관리자(사내 임직원)들도 사용하는 기능이어서 문의 하나 당 하나의 객실을 담당하게 되면 문의를 등록하는 데 불편한 점이 있었습니다. 그래서 이를 하나의 문의에 여러 개의 객실을 관리할 수 있도록 ERD를 재설계하였습니다.* 1:N 관계로 하게 되는 경우 객실 정보를 제외한 나..