목록Programming (13)
DHistory
OverviewJIT Compiler는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다.처음 실행 시 interpret를 하면서 자주 쓰이는 코드를 캐시에 담아두었다가 재사용합니다.Runtime 시 적용되는 기술이며 interpret과 compile을 혼합하여 사용합니다.→ 처음 실행 시 interpret하면서 실행→ 다음 실행 시 캐싱된 기계어 파일을 읽음 (like compile) Interpret vs Static CompileInterpret: 실행 중인 프로그램 코드를 읽어가면서 기계어로 번역Static Compile: 실행하기 전에 프로그램 코드를 기계어로 번역 Java에서는 어떻게 사용할까? Compiler는 .java 파일을 .class 파일(bytecode)로 변..
1. 네 개의 영역 표현 (Presentation) : HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해서 응용 영역에 전달하고 응용 영역의 응답을 HTTP 응답으로 변환하여 전송한다. 응용 (Application) : 시스템이 사용자에게 제공해야 할 기능을 구현한다. 기능을 구현할 때는 도메인 영역의 도메인 모델을 사용한다. 도메인 (Domain) : 도메인의 핵심 로직을 구현한다. 인프라스트럭처 (Infrastructure) : 실제 구현 기술에 대한 것을 다룬다. (DB, Redis, SMTP 등) 2. 계층 구조 아키텍처 상위 계층에서 하위 계층으로의 의존만 존재한다. 도메인이 인프라스트럭처에 의존하면 테스트 어려움과 기능 확장의 어려움이 발생한다. 3. DIP (Dependency Inv..
1. 도메인이란? 해결하고자 하는 문제 영역 (ex. 쿠팡: 로켓 배송 온라인 쇼핑) 2. 도메인 전문가와 개발자 간 지식 공유 요구사항을 전달하는 과정에서 커뮤니케이션 오류로 인해 제품이 잘못만들어질 가능성이 있다. 요구사항을 제대로 이해하고 더 나은 방안을 제시하려면 도메인 전문가와 직접 커뮤니케이션 하는 방법도 있다. 기획은 (날개로) 날아갈 수 있는 새를 만들어 달라는 거지만, (머리로) 날아갈 수 있게 개발이 되었다. 모호한 요구사항이 있다면, 반드시 이야기하여 구체적인 요구사항을 파악해야한다. 또는 더 나은 방안을 제시할 수 있다. (ex. 자동화) 3. 도메인 모델 특정 도메인을 개념적으로 표현한 것 (ex. 상품, 카테고리 등) 4. 도메인 모델 패턴 아키텍처 상의 도메인 계층을 객체 지향..
data.sql 파일 생성 및 데이터 입력 resources ㄴdata.sql # 파일 생성 insert into climbing_park (name) values ('이름'); application.yaml 설정 파일 변경 spring: h2: console: enabled: true datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:local username: svc_local jpa: defer-datasource-initialization: true # 추가
명령어 전달을 해야하는 이유는 무엇인가? Local에 MySQL을 설치하지 않고 Docker Container를 이용하여 MySQL을 사용중이다. MySQL에 접속하기 위해 MySQL Container에 접속 후 mysql에 접속해야했다. 이 작업은 반복되어 귀찮기 때문에 이를 개선하기 위해 명령어 전달을 하게 되었다. 명령어를 어떻게 전달하는가? docker exec docs.docker.com docker exec -it {container} {executable command} # 예시 docker exec -it mysql echo hello docker 어떻게 mysql에 바로 접근할 것인가? vim ~/.zshrc # 아래 내용 추가 alias=mysql "docker exec -it mysq..
Why GraphQL? GraphQL은 RestAPI와 달리 단일 EndPoint를 사용할 수 있습니다. GraphQL을 사용하면 Over-fetching과 Under-fetching에서 자유롭습니다. Over-fetching: 불필요한 데이터까지 가져오는 것 Under-fetching: 필요한 데이터를 위해 여러번 요청하는 것 GraphQL은 Schema First로 구현합니다. 별도의 Class File을 만들지 않고 Client에서 필요한 Data를 Schema를 작성합니다. Schema: GraphQL API를 호출할 때 Client에서 요청할 수 있는 Data 입니다. Dto(Reqeust / Response)대신 사용합니다. DGS 적용하기 1. DGS Dependency 추가 plugins ..
가정 git remote를 origin으로 설정 git remote show $(git remote get-url origin) | sed -n '/HEAD branch/s/.*: //p'
MySQL Container 기본편 [Docker] MySQL Container에 CSV 파일 넣기 MySQL Container에 왜 CSV를 넣게 되었는가? datadog에 저장된 로그를 분석하는 작업을 진행하고 있었습니다. 로그를 group by하여 로그를 분석해야할 일이 생겼습니다. 처음에는 datadog에 내장되어 있는 gr dhistory.tistory.com 배경 데이터 정합성을 맞추기 위해 데이터 패턴을 확인하는 작업이 필요했습니다. 현재 AWS Aurora (MySQL 5.7)을 사용중이고, 5.7 버전에서는 regex를 이용하여 데이터를 변경하는 비용이 상당했습니다. 이를 해결하고자 MySQL 8.0에서 지원하는 regexp_replace() 함수를 사용하고자 합니다. MySQL 8.0을..
MySQL Container에 왜 CSV를 넣게 되었는가? datadog에 저장된 로그를 분석하는 작업을 진행하고 있었습니다. 로그를 group by하여 로그를 분석해야할 일이 생겼습니다. 처음에는 datadog에 내장되어 있는 group by를 활용하여 로그 분석을 진행했습니다. 하지만, 원하는 방식으로 group by를 할 수 없었고 다른 field로 group by 시 속도도 상당히 느렸습니다. 자유자재로 활용할 수 있고 빠르게 이용할 수 있는 방법을 찾기 시작했습니다. 로그를 CSV 파일로 추출할 수 있었기 때문에 해당 로그를 group by 하기 위해 DB를 생각했습니다. 현재 local에 설치된 DB는 없었고 docker로 mysql container를 띄워 사용중이었습니다. 이를 이용하고자 ..
코틀린에서 컬렉션 만들기 val set = hashSetOf(1, 7, 53) val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") println(set.javaClass) // class java.util.HashSet println(list.javaClass) // class java.util.ArrayList println(map.javaClass) // class java.util.HashMap 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스다. 하지만 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있다. val strings =..