본문 바로가기

전체 글

(52)
Java Compile Process 자바는 OS 에 독립적인 특징 (WORA: Write Once Run Anywhere) 을 가지고 있다. 어떻게 OS 에 독립적인 특징을 가질 수 있을까? 이는 JVM 때문이라고 할 수 있다. 자바는 Compiler ( javac.exe ) 에 의해 '.java' 파일을 java bytecode 로 변환해 '.class' 파일을 만든다. '.class' 파일에 쓰여진 java bytecode 는 java JVM( Java Virtual Machine ) 에 의해(정확히는 JIT Java-In-Time compilation 또는 동적번역 Dynamic-Translation 에 의해) binary 파일로 변환되고 컴퓨터가 이해하는 저수준의 언어가 되어 실행되게 된다. 즉, 자바 Compiler(javac.e..
Postman?"No", Http?"Yes" - IntelliJ의 .http를 사용해보자 Postman 을 사용하다보면 단점을 느낄때가 많다. - Postman 을 설치 후 실행해야한다. - 진행중인 프로젝트가 여러개인경우 url 관리하기가 힘들다. 때문에 어느순간 Postman 을 거의 사용하지 않고 Swagger 를 사용해 API 요청이 잘되는지 확인하고있다. 그런데 Swagger 또한 사용하다 보면 단점이 존재한다. Request를 보낼 때 data 가 필요한경우 계속해서 data 의 값을 입력한뒤 요청을 보내야 한다. 반면에 IntelliJ .http 은 파일로 관리가 되기때문에 git 으로 형상관리가 가능하다. 물론, 협업시에는 data 의 구조를 한번에 파악할 수 있고, 사용법이 간단한 Swagger 는 좋은 프레임워크이다. 그러나 협업을 위함이아닌 서버의 요청이 잘되는지, 단순 ..
ApiResponse 를 사용하자 참고 블로그 1 ResponseBody 로 응답을 하는 RestController 의 경우 ResponseEntity body 에 data 가 객체로 담기면 Json 으로 변환해 내려주게된다. 그러나 String 이 담긴다면 plain/test 형태로 내려주기에 응답의 형태가 달라지게 된다. -> 즉, HttpResponse 응답을 내려줄때 정상응답/에러 등등 에서 데이터의 형식을 json 으로 통일시켜줄 필요가 있다. 이를 위해 공통 응답 클래스인 ApiResponse 를 만들어 사용하게 된다. ApiResponse 클래스는 status, data, message 세가지 필드를 갖는다. status : 정상(success), 예외(error), 오류(fail) 중 한 값을 갖는다. data : 정상(s..
Jpa - QueryDsl 준비하기 Jpa 와 QueryDsl 은 추가할 의존성도 많고 QueryDsl 같은경우 빌드뒤 생성된 Q파일을 사용하기에 따로 빼서 관리하는 것이 좋다. Jpa 와 QueryDsl 관련 gradle 설정을 따로 외부로 빼고, 사용할 domain 모듈에서 파일을 불러와 사용해 보도록 하겠다. Root 모듈에 jpa.gradle 파일을 만들자 apply plugin: "com.ewerk.gradle.plugins.querydsl" apply plugin: "idea" def querydslVersion = '5.0.0' def queryDslDir = "src/main/generated" // Q파일 생성위치 querydsl { library = "com.querydsl:querydsl-apt:${querydslVer..
Flyway 사용해보기 flyway는 데이터베이스의 형상관리를 목적으로 사용한다. 마이그레이션 파일 flyway에서는 데이터베이스에 일어나는 모든 행위를 마이그레이션(migration) 이라고 표현합니다. 마이그레이션은 파일로 관리되어 지고, 파일의 이름은 지정하는 규칙은 아래와 같습니다. Prefix: V, U, R 중 하나를 입력하게 됩니다. V는 Verion, U는 undo, R은 Repeatable 입니다. Version: 버전 정보입니다. 정수, 소수, 날짜 등이 가능합니다. Seperator: __ ( underscore 2개를 이용합니다. ) Description: 추가되는 설명입니다. _ (underscore)가 space를 대신합니다. 위 규칙으로 파일을 만들면 아래와 같이 만들 수 있습니다. 예) V0__cr..
NEXUS - 사용해보기 현업에서는 여러가지 서비스들이 어우러지는경우가 많다. 때문에 공통로직을 한곳에 모아놓고 쓰는경우가 많은데, 이때 Gradle을 사용해서 private한 nexus repository에 jar형태로 deploy하는 방법을 정리해볼까 한다. Nexus 는 다양한 포맷(Maven, Docker, NPM 등)의 저장소를 지원하고, 현업에서는 Maven 에서 사용할 수 있는 가장 널리 사용되는 무료 저장소로 잘 알려져있다. 여기서는 두개의 프로젝트를 두고 한 프로젝트에서는 Nexus 에 배포하는 작업을 한 프로젝트에서는 Nexus 에 접근해 공통로직을 사용하는 실습을 진행해 보자. 1. Nexus 다운로드 다운로드 : https://help.sonatype.com/repomanager3/product-inform..
버전관리 project version - Semantic Versioning Semantic Versioning 원문 페이지 Semantic Versioning 2.0.0 Semantic Versioning spec and website semver.org 유의적 버전 명세는 그라바타(Gravatars)의 창시자이자 깃헙(GitHub)의 공동창업자인 톰 프레스턴-베르너(Tom Preston-Werner)가 작성했다. 유의적 버전 명세를 써야하는 이유 : 어떠한 형태로 정식 명세를 정해서 따르지 않는다면, 버전 번호는 의존성 관리에서 무의미하다. 이상의 아이디어에 이름을 정하고 명시적인 정의를 내림으로써, 소프트웨어 사용자에게 제작자의 의도를 전달하기 쉬워진다. 의도가 명확해야만, (너무 지나치지는 않은) 융통성 있는 의존성 명세를 만들 수 있다. 요약 : 버전을 MAIN.MINO..
Real Mysql 8.0 - 인덱스 도서 : Real MySQL 8.0 - 인덱스는 쿼리의 성능을 언급하면서 뺴놓을 수 없는 부분이다. - MySQL 8.0 으로 업그레이드 되면서 전문 검색이나 위치 기반 검색 기능도 모두 InnoDB 스토리지 엔진에서 사용할 수 있게 개선되었다. - 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O 를 줄이느냐가 관건일 때가 상당히 많다. - SSD 가 기계식 하드디스크보다 훨씬 대중화된 상태이며 요즘은 DBMS 용으로 사용할 서버에는 대부분 SSD 를 채택하고 있다. SSD는 기존 하드 디스크 드라이브에서 데이터 저장용 플래터(원판)을 제거하고 그 대신 플래시 메모리를 장착하고 있다. 그래서 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다. 플래시 메모리는 전원이 ..