일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프리코스
- 카카오 2차 코딩테스트
- 회고
- mysql
- java
- 블로그 병행
- InnoDB 버퍼 풀
- 우테코
- ci/cd
- 기능별 구조
- BalancedTree
- 계층별 구조
- N+1
- 주간회고
- db
- 도커
- useMutation
- jacoco
- useQuery
- Jenkins
- SQL 실행순서
- DeleteAll
- B+TREE
- 메서드명
- 백기선 스터디
- Blue-Green
- 월간회고
- 클래스
- 어댑티브 해시 인덱스
- 멀티쓰레드 프로그래밍
- Today
- Total
목록전체 글 (51)
Haneul's Blog
백기선님의 4주차 스터디 주제인 제어문에 대해서 다뤄보려고 합니다. 제어문에는 크게 조건문, 반복문이 있고, 자바에서 가장 많이 사용되며 가장 기초적인 부분이라고 해도 무방하다고 생각합니다. 하지만 가장 기초적인 부분이라서 그런지 자바에 대해 공부하다가 이 부분이 나오면 잘 알고 있다고 생각하고 넘어가기 일쑤였습니다. 그렇기 때문에 이번 기회에 다시 한 번 제대로 짚고 넘어가겠습니다. 목표 [백기선님 4주차 자바 스터디] 자바가 제공하는 제어문을 학습하세요. 학습할 것 선택(조건)문 반복문 제어문 제어문은 조건문과 반복문을 의미하며 코드의 실행 흐름을 제어하는 구문이라고 할 수 있습니다. 조건문 조건에 따라 코드의 실행 흐름을 제어하는 구문으로 다양한 조건문의 형태를 가지고 있습니다. if문 조건식의 진..

MySQL을 공부하다가 문득 내부적으로는 어떻게 동작하고 있는지 궁금하여 공부하면서 정리해보려고 합니다. MySQL의 실행 구조는 위의 그림과 같다고 할 수 있는데, 서버쪽에서 SQL 요청이 들어오면 쿼리 파서 -> 전처리기 -> 옵티마이저 -> 쿼리 실행기를 거져서 스토리지 엔진으로 통해 실제 디스크에서 데이터를 가져오는 과정을 거칩니다. 각 부분별 역할은 아래 부분에 자세하게 설명하겠습니다. 쿼리파서 쿼리 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어취나 기호)으로 분리하여 B-Tree 형태의 구조로 만드는 역할을 해주고, 기본 문법 오류의 발견 및 오류 메시지를 전달하는 역할도 합니다. 쉽게 정리하자면 SQL을 파싱하고 문법 오류를 검사하는 역할을 한다..

백기선님 자바 스터디의 3주차 주제인 연산자에 대해서 자세하게 정리해보려고 합니다. 오늘은 부연 설명하지 않고 바로 시작하겠습니다. 목표 [백기선님 3주차 자바 스터디] 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 산술 연산자 수학적인 계산에 사용되는 연산자로 모두 두 개의 피 연산자를 가지는 이항 연산자 입니다. 위의 그림과 같이 총 5개의 산술 연산자가 있고, (*, /, %)가 (+, -)보다 우선순위를 갖습니다. (/, %)를 사용하는 경우에는 나누는 수로 0을 사용하면 ..
백기선님 자바 스터디 2주차의 주제인 자바 데이터 타입, 변수 그리고 배열에 대해서 자세하게 정리해보려고 합니다. 이번 주제 같은 경우는 자바를 공부 해 보신 분들이라면 "나는 다 아는건데 다시 공부해야 하나"라는 생각을 하실 수 있습니다. 하지만 1주차를 공부하면서 느낀 것이 내가 알고 있다고 생각한 것이라도 다시 공부하면서 생각을 정리할 수 있고, 잘못 생각하고 있던 부분도 있을 수 있기 때문에 다시 한 번 복습하는 차원에서 정리해보겠습니다. 목표 [백기선님 2주차 자바 스터디] 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프..

예전에 백기선님이 진행하셨던 스터디의 과제를 늦었지만 차근차근 따라가보려고 합니다. 자바를 어느정도 할 순 있지만 스터디의 진행을 따라가면 자바에 대해 조금 더 깊은 이해를 할 수 있을 것 같아 시작해보려 합니다. 먼저 1주차인 JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 부터 시작하겠습니다. 목표 [백기선님 1주차 자바 스터디] 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이야기 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM의 구성요소 JDK와 JRE의 차이 JVM이란 무엇인가 JAVA Virtual Machine, 자바 머신의 약자를 따서 줄여 부르는 용어로, 자바를 실행하기 위한 가상 기계라..

먼저 페이징과 세그맨테이션을 알아보기 전에 알아야 할 지식부터 아래에 차근차근 설명해보겠습니다. 프로세스가 실행되기 위해서는 프로그램 코드를 메인 메모리에 저장해두어야 합니다. 하지만 엄청난 용량을 가진 게임이 있어서 메인 메모리가 가진 저장용량을 넘긴다면? 아니면 많은 서비스를 동시에 실행시키고 있어서 메모리에 용량이 부족해진다면? 물론 메인 메모리의 크기가 크다면 상관없지만 메인 메모리는 보조 기억 장치에 비해서 상대적으로 비싼 편입니다. 그래서 일반적인 사용자들은 이 메인 메모리의 비용을 고려하지 않을 수가 없습니다. 그리고 근본적으로 생각해서 현재 실행중인 프로세스의 프로그램 코드를 모두 메인 메모리에 저장해둘 필요가 있을지를 생각해봅시다. 게임을 예로 들어보면 롤을 하려고 하는데 롤이 가진 모든..

동시성 프로그래밍 환경에서 하나의 공유된 자원에 동시 접근을 하게 되면 문제가 발생하게 될 수도 있기 때문에 이에 대한 처리를 해줘야 합니다. 이러한 공유자원을 안전하게 사용하기 위해서는 어떠한 장치가 필요합니다. 바로 '상호배제'를 시켜주는 방법인데, 보편적으로 뮤텍스와 세마포어를 통해서 이를 지키고 있습니다. 먼저 뮤텍스에 대해서 설명해보겠습니다. 뮤텍스 결론부터 간단하게 말씀드리면 하나의 공유 자원에 하나의 프로세스 혹은 스레드만 접근할 수 있게 하고 나머지는 이들이 반납할 때까지 대기하고 있는 기법입니다. 뮤텍스에 관해 자료를 찾아보면서 가장 쉽게 이해가 되었던 예시로 설명을 해보겠습니다. 뮤텍스는 화장실이 하나 있는 식당과 비슷합니다. 이 화장실을 사용하기 위해서는 키가 있어야 하는데, 이를 카..
회고가 뭘까? 첫 주간 회고를 작성하는데 회고가 정확히 무엇인지 모르면 안 될 것 같아서 회고를 작성하기 전에 찾아보았습니다. 저는 지난 시간을 회상한다? 정도로 알고 있었는데, 찾아보니 간단하게 말하면 "지나간 일을 돌이켜 생각함"이라는 뜻으로 제가 생각한 바와 비슷하였습니다. 이러한 회고에는 다양한 방법이 있습니다. 그 중에서 저는 KPT회고 방법론을 통해서 진행해보려 합니다. 많은 회고 방법론 중에 왜 KPT? KPT회고는 Keep, Problem, Try의 약자로 회고 내용을 세 가지 관점으로 분류하여 회고를 진행한다는 것이 중요한 포인트입니다. 이렇게 3 가지의 관점으로 나누면서 회고를 진행하면 꼼꼼하고 효율적인 회고가 이루어질 수 있다고 합니다. 이러한 이유로 저는 회고의 방법으로 KPT를 선..

B-tree..? 만약 자료구조를 공부하지 않았더라도 DB를 공부한 적이 있는 분들이라면 들어본 적이 있는 자료구조일 것입니다. B-tree란? B-tree는 DB의 인덱스에서 사용되는 자료구조로 이진트리를 확장해서 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조입니다. 쉽게 말해 하나의 노드에 여러 자료가 배치될 수 있는 트리 구조라고 할 수 있습니다. 그리고 Balanced Tree라는 특징이 있는데, 이는 노드 삽입 및 삭제 시에 스스로 균형을 맞춰주는 트리를 의미합니다. 기존 이진트리의 경우에는 좌우 균형이 맞지 않는 편향 트리가 생길 수도 있는 문제점이 있어 최악의 경우에 O(n)이라는 시간 복잡도를 가져서 검색 효율이 떨어지는 경우가 생깁니다. Balanced Tre..
어쩌다 보니 카카오 코딩 테스트 1차를 합격하고 2차를 준비해야 하는 상황이 오게 되었습니다. 2차 테스트는 카카오에서 API를 제공하고 그 값을 호출해야 하는 상황이 있어서 API를 호출하는 로직이 필요합니다. Python이나 javascript 같은 경우에는 이 방법이 매우 쉽지만 Java의 경우에는 HttpConnection으로 처리를 해줘야 하기 때문에 시간이 걸리고 조금 번거롭다는 단점이 생깁니다. Python이나 javascript를 사용하지 못하는 것은 아니지만 주력 언어인 Java를 통해서 시험을 보고 싶었기 때문에 관련해서 잘 찾아보니 카카오 2차 코딩 테스트에서 Spring Webflux의 WebClient를 사용하여 API통신을 해도 된다는 블로그 포스팅을 보게 되어 이를 사용하면 되..

스프링 입문을 위한 자바 객체 지향의 원리와 이해의 "신기술은 이전 기술의 어깨를 딛고" 부분을 읽고 난 후 내 생각과 책 내용 섞어서 정리 생각보다 머리가 좋진 않은 컴퓨터 사람들에게 머리가 좋다는 것을 "와! 전자두뇌, 컴퓨터 같아!!"라고 많이들 표현합니다. 하지만 정말 컴퓨터가 머리가 좋을까요? 알고 보면 컴퓨터는 0과 1의 숫자를 많이 기억하고 빠르게 계산할 뿐입니다. 오히려 사람들이 240+1의 결과를 바로 241로 알아차리는 반면에 컴퓨터는 240+1? 이게 뭐지..라고 생각하는 바보..까진 아니고 단순한 친구입니다. 이렇듯 컴퓨터는 0과 1의 숫자만을 알아듣고 이와같이 0과1로만 이루어진 언어를 기계어라고 합니다. 하지만 기계어는 010101010111과 같이 한눈에 봐도 인간 친화적인 언..

생성 과정 1. 버킷 만들기 선택 2. 버킷의 이름과 리전을 선택(버킷의 이름은 고유해야 합니다!!) 3. public으로 하고 싶다면 엑세스 차단을 해제하면 됩니다.(프로필 이미지 같은 경우 사용자들이 URL에 접근해야 해서 풀어둠) → 여기서 public으로 열어두었지만 현재는 리소스에 대한 get, put, delete와 같은 요청들에 대한 정책이 설정되어 있지 않습니다. 4. S3 정책 설정(편집 버튼을 누르고 정책 생성기 버튼을 눌러줍니다.) 5. 정책생성(resourceName에 내 버킷 ARN 주소를 적어주고 add Statement → Generate Policy를 누르면 정책이 생성되는데, 이를 복사 해둡니다.) 6. 정책 적용(복사한 정책을 붙여넣기 하고 저장하면 정책 적용이 완료됩니다..