일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백기선 스터디
- db
- B+TREE
- jacoco
- useQuery
- 멀티쓰레드 프로그래밍
- 도커
- mysql
- N+1
- 우테코
- DeleteAll
- Jenkins
- 클래스
- 메서드명
- java
- 계층별 구조
- InnoDB 버퍼 풀
- 기능별 구조
- 주간회고
- useMutation
- 블로그 병행
- ci/cd
- Blue-Green
- BalancedTree
- 회고
- 카카오 2차 코딩테스트
- 월간회고
- 어댑티브 해시 인덱스
- SQL 실행순서
- 프리코스
- Today
- Total
목록전체 글 (51)
Haneul's Blog

회고를 시작하기 전에 2주차 미션과 3주차 미션에 대한 간단한 설명과 해당 미션에 대한 목표에 대해서 약간 설명하고 넘어가겠습니다. 2주차 미션 - 숫자 야구 게임 간단한 설명 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임으로, 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. 예) 상대방(컴퓨터)의 수가 425일 때 123을 제시한 경우 : 1스트라이크 456을 제시한 경우 : 1볼 1스트라이크 789를 제시한 경우 : 낫싱 구현 목표 함수 분리 연습 각 함수별로 테스트를 작성 연습 3주차 미션 - 로또 게임 간단한 설명 로또 구입 금액을 입력..
회고를 시작하기에 앞서.. 저번주에 친누나가 결혼을 하게 되어서 그 날은 자연스럽게 잠깐 공부를 쉬게 되었습니다. 그렇게 하루 공부 흐름이 끊기다보니 공부가 잘 손에 잡히지 않고 이번주는 약간 설렁설렁하게 된 것 같아서 공부에 한해서 많이 아쉬웠던 한 주였습니다.. Keep(현재 만족하고 이어가고 싶은 부분) 알고리즘 스터디 이번주는 공부를 열심히 못했지만 그 와중에도 알고리즘 스터디를 위한 알고리즘 문제 풀이는 빼먹지 않고 풀었습니다.(그나마 다행..) 본론으로 돌아가서 최근에 스터디를 하면서 내가 알고 있는 지식을 설명하는 연습을 꾸준히 하고 있는데 요즘에는 약간 정체된 기분이 들었습니다. 그래서 생각해낸 방법이 스터디 내용을 녹음해서 내가 어떤 식으로 말하고 있는지 확인하고, 말이 빠르다면 이것을 ..
프로그래머스에서 SQL 문제를 풀면서 쿼리문은 어떤 순서로 실행이 되는지에 대한 궁금증이 생겼습니다. 쿼리문도 당연히 프로그래밍 언어와 같이 실행되는 순서가 있고, 그 이유가 있을텐데 그러한 점을 생각하지 않고 쿼리문을 공부하니 학습 속도가 떨어지는 것 같아서 이에 대해 찾아보았습니다. 문법 순서와 실행 순서가 같은거 아니야? 라는 생각을 할 수 있는데 둘의 순서는 확연히 다르고, 둘의 차이점을 알아야 조금 더 좋은 쿼리문을 작성하는데 있어서 도움이 될 거라고 생각하고 아래에서 쿼리 문법 작성 순서와 실행 순서를 정리해보겠습니다. 문법 작성 순서 SELECT FROM WHERE GROUP BY HAVING ORDER BY 실행 순서 FROM ON JOIN WEHRE GROUP BY CUBE | ROLLU..

TDD란? TDD란 테스트 주도 개발인 Test-driven develoment를 줄인 말입니다. 이는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나로 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성하고, 그 테스트 케이스를 통과하기 위한 코드를 생성합니다. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링하는 짧은 사이클을 통해서 개발을 하는 방법론이라고 할 수 있습니다. 더 정확하게 말하자면 TDD는 Red, Green, Refactoring의 사이클로 개발을 하는 과정을 거치는데 자세한 것은 아래에서 설명하겠습니다. Red, Green, Refactoring 위 그림을 보면 빨간줄, 초록줄, 파란줄이 보입니다. 빨간줄 즉, Red는 하려는 행위를 변수, 객체 메서..

InnoDB 어댑티브 해시 인덱스를 알아보기 전에 MySQL에서 데이터를 접근할 때 사용하는 방법에 대해서 간단하게 설명하고 넘어가겠습니다. MySQL에서의 데이터 접근 방식 MySQL의 InnoDB 대표적인 인덱스는 B-Tree 자료구조를 사용합니다. 데이터는 Primary Key 순으로 정렬되어 관리되고, Secondrary Key는 인덱스키+PK 조합으로 정렬되어 있습니다. 특정 데이터를 찾기 위해서는 Secondrary Key에서 PK를 찾고, 그 PK를 통해 다시 원하는 데이터로 찾아가는 형태로 데이터가 처리됩니다. 트리의 가장 큰 강점은 데이터 접근 성능이 데이터가 증가하더라도 선형적으로 증가하지 않는다는 점입니다. 즉, 실제 데이터를 B-Tree 구조를 통해 찾을 때 Secondrary Ke..

InnoDB 버퍼 풀이란? InnoDB 버퍼 풀은 InnoDB 스토리지 엔진에서 가장 중요한 부분으로 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간입니다. 데이터를 변경하는 쿼리는 데이터 파일 곳곳의 레코드를 변경하기 때문에 랜덤한 디스크 작업을 발생시키지만 버퍼 풀이 이러한 변경된 데이터를 모아서 처리하여 랜덤한 디스크 작업을 줄여주는 역할, 즉 쓰기 지연을 해줍니다. 또한 버퍼 풀은 대량 읽기 조작의 효율성을 위해 여러 행을 보유할 수 있는 페이지로 분할되며 캐리 관리 효율성을 위해링크된 페이지 목록으로 구현됩니다. 거의 사용되지 않는 데이터는 LRU 알고리즘을 사용하여 캐시에서 제거합니다. 이러한 버퍼 풀을 통해 데이터를 메모리에 유지하는 것은 MySQL 튜닝에서 핵심적인 측면입니..
우테코의 프리코스를 참여하면서 문제를 다 풀고 조금 더 개선할 부분이 없을까 찾아보다가 많은 분들이 자바 변수명 및 메서드의 네이밍을 짓는데 많은 고민을 하는 것을 보고 이와 관련하여 정리하면 좋겠다고 생각하였습니다. 저 또한 개발을 할 때 가장 어려워 하는 것이 변수명이나 메서드의 네이밍을 정하는 것인데, 기존에 제가 알고 있던 것과 좋은 코드를 위한 네이밍은 어떻게 해야 하는지를 비교하면서 글을 정리해보겠습니다. 자바 변수명 네이밍 규칙 기본적으로 제한하는 변수 명명 규칙 자바에는 기본적으로 제한하는 변수 명명 규칙이 있습니다. 이를 지키지 않으면 컴파일 자체가 되지 않기 때문에 아마 이 글을 읽지 않아도 자바로 개발을 해보셨다면 몸으로 자연스럽게 체득했을 수도 있습니다. 그 규칙은 아래와 같습니다...
활동 여러 스터디 활동(CS, 알고리즘, 모각코) 1일 1 커밋 1일 1 블로깅 DB 위주의 CS 공부 우아한테크코스 프리코스 참여 회고 여러 스터디 활동(CS, 알고리즘, 모각코) 9월달에 혼자 개발 공부를 하면서 나도 모르게 나태해지는 것이 느껴져서 나를 공부라는 바다에 강제로 뛰어들게 하기 위해서 여러 스터디를 참여하였다. 가장 먼저 참여했던 것이 CS 스터디였는데 사실 CS 공부에서는 꾸준히 공부하고 있었지만 혼자 하다보니 약간 모르는 부분이 있어도 넘어가게 되기도 하고 공부를 했더라도 내가 가진 정보를 다른 사람들에게 어떤 식으로 설명해야할지에 대한 소프트 스킬의 부족함을 느껴서 CS 스터디에 참여하게 되었다. 다행히도 이 스터디를 하면서 알고 있던 지식들을 다시 한 번 정립하는 시간이 되기도 ..

MySQL에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역이 있습니다. 글로벌 메모리 영역과 로컬 메모리 영역은 MySQL 서버 내에 존재하는 많은 스레드가 공유해서 사용하는 공간(글로벌 메모리)인지 아니면 각 스레드 별로 사용하는 공간(로컬 메모리)인지에 따라 나뉩니다. 글로벌 메모리 영역 글로벌 메모리 영역의 메모리 공간은 MySQL 서버가 시작되면서 운영체제로부터 할당되고, 이는 운영체제의 종류에 따라 할당해주는 방법이 다릅니다. 일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간만 할당되며, 필요에 따라 메모리 공간을 2개 이상 할당 받을 수 있지만 클라이언트의 스레드 수와는 무관합니다. 그리고 글로벌 영역은 앞에서 말했다시피 공유되는 공간이기 때문에 글로벌 영..

목표 [백기선 자바 스터디 15주차] 자바의 람다식에 대해 학습하세요. 학습할 것 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식 사용법 람다식이란? 람다식은 메서드를 하나의 식으로 표현한 것입니다. 함수를 간략하면서도 명확하게 표현할 수 있게 해주며 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어져서 람다식을 익명 함수라고도 합니다. 자바에서의 모든 메서드는 클래스에 포함되어야 해서 일반적으로는 클래스를 만들고 객체를 생성해야 메서드를 호출할 수 있습니다. 하지만 람다식은 오직 람다식 자체만으로 메서드의 역할을 할 수 있게 해줍니다. 람다식 작성법 (a, b) -> {return a + b}; // 일반적인 람다식 (a, b) -> a + b; ..
목표 [백기선 자바 스터디 14주차] 자바의 제네릭에 대해 학습하세요. 학습할 것 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭(Generics)이란? 제네릭은 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크(compile-time type check)를 해주는 기능입니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다. 그렇다면 타입 안정성을 높인다는 것을 정확히 무슨 의미일까요? 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환 되어 발생할 수 있는 오류를 줄여준다는 것입니다. 제네릭을 사용해..

목표 [백기선 자바 스터디 13주차] 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 스트림/버퍼/채널이란? 스트림 스트림은 흐름이라는 뜻을 가지고 있습니다. 람다의 스트림과 헷갈릴 수 있지만 전혀 다른 것입니다. 여기서 말하는 스트림은 입력에서 출력으로 흐르는 단방향 데이터 흐름을 말하는데, 자료의 입출력을 도와주는 중간 통로(매개체)라고 생각하면 좋을 것 같습니다. 그렇다면 여러 개의 데이터를 하나의 스트림으로 보낸다고 생각하..