728x90

분류 전체보기 166

MySQL 에 쿼리가 들어왔을때?

SQL 에 사용자가 쿼리를 날리면 어떤 동작과정이 있을까? 너무 딥다이브 하게는 어려울꺼 같고, Real MySQL 을 보면서 간단한 동작을 공부했던걸 정리해보려고 한다. 위와 같이 사용자가 DB 에 쿼리를 날리는 상황이라고 해보자. 일단 대부분의 컴파일 언어처럼 SQL 도 쿼리 컴파일러를 통해서 SQL 쿼리를 트리형태로 파싱한다. 이 파싱해 내는 과정에서 기본 문법 오류들을 짚어낸다. 이해하기 쉽게 대략적으로 요런식이라고 그려보았다. 근데 틀린 내용이 있으니 감안하고, 대충 이런식으로 토큰 처럼 만든다고 이해를 해주면 좋을 것 같다. 그럼 다음단계로 넘어가면, 전처리기 과정이다. 전처리기는 첫번째 단계에서 만들어진 파서트리를 바탕으로 쿼리문장에 구조적인 문제가 있는지 확인한다. 각 토큰을 컬럼이나 테이..

젠킨스 JVM 메모리 설정

프로젝트를 AWS 에 올리게 되면서 Jenkins 메모리 부족관련 이슈를 겪었습니다. AWS 프리티어를 이용하다보니, 메모리 부족 관련 이슈가 계속해서 발생했습니다. 요금제 때문에 더 높은 인스턴스를 이용할 수 없었고, 결과적으로 메모리를 늘려주기 위해 SWAP 메모리를 사용해야만 했습니다. SWAP 메모리? 간단하게 SWAP 메모리는 우리의 물리 하드디스크를 메모리 처럼 이용해줄 수 있게 만들어주는 것입니다. 쉽게 설명하면 하드디스크를 어느정도 메모리 처럼 사용할 수 있다는 것이죠 아마존 공식문서는 아래와 같습니다. https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/ 스왑 파일을 사용하여 Amazon EC2 인스..

Java 2021.10.20

객체는 무엇일까?

객체지향 프로그래밍에서는 클래스 내부 변수를 private 으로 선언하여 외부에 노출하지 않는 것을 선호합니다. 또한 무의미한 setter 와 getter 는 객체를 객체가 아닌 단순한 데이터 Sturucture 로 간주해 버릴 수도 있으니, 신중하게 외부로 내부의 속성을 노출하라고 말합니다. 그 이유는 무엇일까요? 아래의 클래스를 한번 봅시다. public class Point { public double x; public double y; } 이렇게 했을때 문제는 무엇일까요? 문제는 외부에서 Point Class 의 Property 에 직접적으로 붙을 수 있다는 것입니다. 예를 들면 아래와 같이 말이죠. Point point = new Point(); point.x = 10; point.y = 20;..

Java 2021.10.14

InnoDB 엔진의 특성

들어가기 전에 앞서, 이 책은 Real My SQL 1판을 읽고 정리한 내용입니다. 틀린 내용이 있댜면 댓글로 남겨주시면 감사하겠습니다. InnoDB 엔진은 우리가 주로 사용하는 데이터베이스 엔진 중 하나이다. InnoDB 는 도대체 어떤 특성을 가지고 있을까? 그 특성에 대해서 간단히 공부해보도록 하자 첫번째 특성, InnoDB 는 프라이머리로 기본적으로 기본키로 클러스터링을 구성한다. 즉 프라이머리 키 값의 순서대로 FileSystem 에 저장된다는 뜻이다. 따라서 Primary Key 값을 통한 범위 탐색을 하게 되면 빠르게 검색할 수 있는 이유이다. 두번째 특성, InnoDB 는 잠금이 필요없는 일관된 읽기를 제공한다. InnoDB 스토리지 엔진은 MVCC 를 이용해서 락을 걸지 않고 읽기 작업을..

Switch 문 반복을 없애기

Switch 문을 어떻게 걷어낼 수 있을까? 이건 참 어려운 경우라고 생각한다. 하지만 Switch 의 경우에는 해당 Type 을 걷어내지 않는 이상 불가능하기에 숨기는 형태로 진행할 수 있다고 생각한다. 예를 들면 아래와 같은 코드를 보자 public class PayRoll { private static final String COMISSIONED = "COMISSIONED"; private static final String HOURLY = "HOURLY"; private static final String SALARIED = "SALARIED"; public Money calculatePay(Employee e) { switch(e.type) { case COMISSIONED: return cal..

Java 2021.10.07

JVM 구조

서론 이 스터디 내용은 백기선님의 자바 스터디를 참여하기 위한 정리 내용으로, 아래 링크에서 참가 가능합니다. 1900 원 정도의 구독비로 해당 스터디 내용을 확인할 수 있으니 자바에 대해 공부하고 싶으신 분들은 참가 하시는 것을 추천 드립니다. 백기선님 유튜브 참고로 읽으시면서 틀린 내용이 있을 수도 있습니다. 댓글로 지적해주시면 감사하겠습니다 목표 자바 소스 파일을 JVM 으로 실행하는 과정 이해하기 학습할 것 JVM 이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성요소 JDK 와 JRE 의 차이 JVM 이란 무엇인가? JVM 이란 Java Virtual Machine 의 줄임말으로 추상적인 컴퓨터 머신이라고 이해하는게 좋지 ..

Java 2021.10.07

루비의 상속구조

루비도 잘 알려진 객체지향 언어이다. 사실 최근에는 루비 온 레일즈라는 프레임워크를 아는 사람은 있어도, 이게 루비라는 언어로 이루어져 있다는 걸 모르는 사람도 보았다 😂 뭐 여튼 루비도 나름의 루비만의 장점이 있다. 서론은 뒤로 하고, 오늘은 루비가 어떻게 상속구조를 이루고 있는지 적어보려고 한다. 일단 보통언어와 비슷하게 루비도 아래와 같은 코드로 상속구조 표현이 가능하다. class Bird def speak puts "tweet" end end class Duck < Bird def speak puts "quack" end end duck = Duck.new duck.speak 위와 같이 적고 실행하게 되면 아래와 같은 결과가 나온다. "quack" 당연해 보인다. Duck 안에 speak 가 있..

Ruby 2021.09.28

[Google Cloud Platform] 이미지 이전하기

GCP 서버 변경기 기존 서버가 일일 3000원 가량의 가격이 측정되고 있었음.. 너무 비쌈😂.. 그래서 급하게 서버를 옮겨야 하는 상황이 발생함. 그래서 서버를 옮기기에 좋은 방법은 뭘까를 생각하다가, 기존 도커처럼 이미지형태로 인스턴스를 관리할 수 있도록 도와주거나 쉽게 도커를 쓸 수 있도록 도와주는 Image Registry Service 를 사용하기로 하였다. 그래서 현제 인스턴스를 이미지로 만들어 두었다. 이제 이렇게 만들어진 이미지는 도커 이미지와 동일한 형태로 GCP 내에서 쉽게 사용할 수 있으며 이것을 통해 인스턴스를 쉽게 마이그레이션 할 수 있었다. 바뀌고 난뒤 젠킨스 바뀌고 난뒤 도커로 뛰어진 서버 느낀점 요즘 사이드 프로젝트를 하거나 회사일을 하면서 느끼는 점은 도커처럼 이미지 형태로..

카테고리 없음 2021.09.26

ES6 이후 함수들

ES6 함수의 추가 기능 ES6 이전의 함수들은 함수 사용 목적에 따라 명확히 구분되지 않았음. 일반 함수로도 호출이 가능했고, 생성자 함수로도 호출이 가능했음. 이게 문제가 됬던이유는 [[Call]] 과 [[Construct]] 를 공부했을때 배운것은 인스턴스를 생성할 수 있는 함수 객체는 constructor, 인스턴스를 생성 할수 없는 함수 객체는 non-constructor 인데 ES6 이전의 함수들은 아래와 같은 구분이 되지 않는 특성때문에 아래와 같은 로직이 가능하다. var person = { age: 99, myAge: function() { return this.age } } var bar = person.myAge; console.log(bar()); // undefined 위와 같은 ..

JavaScript 2021.09.25

[M1] Apache Jmeter로 Socket Server Test 하기

최근 회사에서 소켓 서버를 구현하게 되면서, 스트레스 테스트를 할 일이 필요해졌다. 처음에는 Go 언어로 Client 코드를 직접작성했으나, 단순 연결성이나 메세지를 주고 받는 정도에 그쳤고, 더 많은 부가 정보를 알기 위해서는 기존에 좋은 테스트 툴을 사용하는 것을 추천받았다. 두 가지정도의 방안을 생각했는데, 첫번째로는 Naver 가 만든 Ngrinder 이라는 테스트 툴이였다. 이미 유명한 툴이고 많은 이들이 사용하고 있을 툴이라고 생각한다. Groovy 로 Script 를 구성할 수 있는게 매력적이였다. http://naver.github.io/ngrinder/ nGrinder Please post questions in Discussions not Issues. nGrinder 3.5.3 ver..

Java 2021.09.24
728x90