1. SQL 쿼리를 실행하면 일어나는 일사용자가 SQL 쿼리를 실행하면 DBMS 내부에서 SQL 파서가 파싱을 한다.파싱을 한다는 건 아래와 같은 일들을 하는 것이다.문법 체크오브젝트에 권한이 있는지 확인쿼리문에 사용한 테이블이나 컬럼이 존재하는지 확인이런걸 확인하고 통과하고나면 옵티마이저는 여러 실행경로를 생성하고 가장 효율적인 실행경로를 선택한다. 2. 옵티마이저란? 영단어로 Optimizer는 최적화하는 사람 또는 도구를 의미한다.DBMS에서 옵티마이저는 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 액세스 경로를 골라주는 핵심 엔진이다. 옵티마이저는 오브젝트 및 시스템 통계정보를 바탕으로 실행계획의 예상비용(cost)를 산정하고 예상 비용이 가장 적게 드는 실행 계획을 선택..
1. 명령형 프로그래밍 vs 선언형 프로그래밍 레거시한 시스템의 코드를 분석하다보니 대부분 for, while, if문으로 명령형 프로그래밍으로 데이터를 처리하고 있는 것을 알 수 있었다.명령형 프로그래밍은 컴퓨터에게 해야할 작업 순서를 하나씩 명령하는 방식이다. ✅ 명령형 프로그래밍 예시List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);int sum = 0;for (Integer number : numbers) { if (number % 2 == 0) { // 짝수 필터링 int square = number * number; // 제곱 sum += square; }}System.out.println(sum); // 출력: 4 + 16..
달력을 보면서 새삼 놀랐다. 새해를 맞이한 지 며칠 안 된 것 같은데 벌써 1월이 다 지나가고 있다. 취업한 뒤로 시간이 참 빠르게 흘렀다. 정신없이 바쁜 하루하루가 쌓여 한 달이 금방 지나갔다. 그런데 문득, 지금 회사에 들어온 지 얼마나 됐는지 떠올려 보니 4개월 반 정도였다. "4개월 반밖에 안 됐다고? 1년은 된 것 같은 기분인데, 왜 이렇게 시간이 느리게 갔지?" 같은 시간인데도 두 가지 상반된 느낌을 동시에 가지고 있다는 게 신기했다. 체감 시간이 왜 다르게 느껴질까?시간의 속도를 판단하는 기준에 따라 달라지는 것 같다. 내 일상의 흐름을 기준으로 보면 시간이 빠르게 느껴진다. 반복되는 루틴 속에서는 하루하루가 비슷하게 흘러가고, 특별한 사건이 없으니 기억의 밀도가 낮아진다. 회상할 일상이 딱..
정보처리기사를 공부할 때, 객체지향의 3요소 객체, 클래스, 메시지를 외웠다.캡슐화, 추상화, 상속, 다형성같은 객체 지향의 특징도 달달달 외웠다.Java 강의를 통해 객체지향적으로 코드를 짜려면 인터페이스를 사용해야한다는 것도 배웠다.인풋이 있으면 그만큼 아웃풋도 있어야 하는데, 나는 과연 배운 만큼 제대로 아웃풋을 내왔을까?🤔이 책이 이론을 실무에 녹여낼 수 있는 징검다리가 되주길 바라며 차근히 완독해봐야겠다. 이 책의 목차는 이렇게 이뤄져있다.01 .협력하는 객체들의 공동체02 .이상한 나라의 객체03 .타입과 추상화04 .역할, 책임, 협력05 .책임과 메시지06 .객체 지도07 .함께 모으기 이 목차만 봤을 때는 아직 감이 잡히지 않는다.책 앞단에 이 책은 1장부터 7장까지 유기적인 흐름으로..
1. 스프링 시큐리티란?스프링 기반 애플리케이션의 인증(Authentication)과 권한(Authorization)을 처리하는 보안 프레임워크다. 2. 주요 개념2-1) 인증(Authentication)사용자 요청을 처리하려면 사용자가 누구인지 인증을 해야한다.사용자의 신원 확인을 하는 것! * 인터페이스Authentication : 현재 인증된 사용자의 정보를 담은 객체. AuthenticationManager : 인증을 처리하는 주요 엔트리 포인트다.SecurityContext : 현재 애플리케이션의 보안 컨텍스트. 인증된 사용자 정보를 담는다. *클래스SecurityContextHolder : 현재 스레드의 SecurityContext를 관리하는 헬퍼 클래스. UsernamePasswordAuth..
대분류는 스프링 시큐리티이지만, 이 포스팅에서는 스프링 시큐리티에 대한 내용이 없다.스프링 시큐리티에 대한 본격적인 이야기는 다음 포스팅에서 할 예정이다. 스프링 시큐리티를 프로젝트에 도입하기 전에 알아두면 좋을 배경 지식이니 찬찬히 정리해보았다. 1. 인증과 권한1-1) 인증사용자가 누구인지 확인하는 과정이다.예를 들어, 아이디와 패스워드, 인증 토큰, 인증서 등으로 신뢰할 수 있는 사용자인지 검증하는 것이다. 1-2)권한인증된 사용자가 무엇을 할 수 있는지 결정하는 과정이다.주로 역할이나 권한 기반으로 관리한다.역할: 관리자, 사용자 등.권한: 읽기, 쓰기, 삭제 등. 예시)네이버 블로그에 내 계정으로 로그인 하면, 내 블로그를 관리할 수 있는 계정 관리에 접근할 수 있다.그리고 글을 쓸 수 있고 수..
2진수를 4개의 비트를 한 그룹으로 묶어서 변환한다.16진수는 각 자릿수가 4비트와 대응되기 때문에 각 그룹을 16진수로 치환하면 된다. 비트의 수가 4의 배수가 아니라면, 앞쪽에 0을 추가해서 4비트로 맞추면 된다. 2진수16진수000000001100102001130100401015011060111710008100191010A1011B1100C1101D1110E1111F ✅예시) 1101011010 을 16진수로 변환하기1. 앞에 00을 추가해서 12비트로 만들어준다.001101011010 2. 4비트씩 쪼개준다.0011 0101 1010 3. 4비트를 16진수로 변환한다.0011 -> 30101 -> 51010 -> A 결과 : 35A
1. Dockerfile1-1) Dockerfile이란?애플리케이션을 패키징하여 Docker 이미지로 만들기 위한 스크립트다.패키징이란, 실행되기 위해 필요한 모든 파일, 라이브러리, 의존성 등을 하나의 배포 가능한 단위로 묶는 것을 의미한다. Dockerfile을 통해 애플리케이션을 다른 환경에서 손쉽게 배포하고 실행할 수 있게 된다.패키징된 애플리케이션은 해당 환경에서 설치나 설정 없이도 바로 동작한다. 1-2) Dockerfile 경로애플리케이션의 루트 디렉토리에 위치해야 한다. 왜냐하면 Docker 이미지 빌드 시 Docker 컨텍스트가 설정되는데, 컨텍스트는 Dockerfile이 있는 디렉토리 기준으로 로컬 파일을 컨테이너로 복사하거나 참조할 수 있기 때문이다.(*컨텍스트란 Docker 이미지를..