yeong-development-note의 등록된 링크

 yeong-development-note로 등록된 티스토리 포스트 수는 15건입니다.

Spring JPA / JPA [내부링크]

안녕하세요. 예전에 JDBC, JdbcTemplate, Mybatis까지의 포스팅을 했었는데요. 이번에는 최근(?)이라기 보다는 몇년 전부터 떠오르고 있는 JPA에 대해서 작성을 하려고 합니다. 아직 대부분의 회사에서 Mybatis를 사용하는거로 알고있는데 JPA는 우아한 형제들, 쿠팡 등 규모가 있는 회사에서 JPA를 사용을 하고 있고 또 많은 기업들이 JPA로 개발을 하려는 시도를 하고 있다고 생각을 하고 있습니다. 저도 회사에서 JPA를 사용을 하다가 Mysql의 Stored procedure로 전환을 하면서 최근에는 회사 프로젝트에서 JPA를 사용할 일이 많이 없어졌지만 그래도 꾸준히 JPA를 공부를 하면서 다시 프로젝트에 적용 시킬 준비를 하고 있습니다. JPA JPA는 Java Persiste..

도메인을 이용한 Nginx 분기 처리 [내부링크]

안녕하세요. 이번 포스팅에서는 서비스 환경보다는 개발 환경에서 제가 플젝을 진행 하면서 설정 했던 도메인에 따른 분기처리 방법을 작성 하고자 합니다. 현재 개발 환경에서 서버 인스턴스 한대에 3개의 WAS를 구동 시키고 요청이 들어오면 Nginx에서 도메인을 확인해 서버 내부에서 각각 구동중인 WAS로 분기처리를 하는 방식으로 구성을 했습니다. Cloud 환경 LB 한대를 구성하고 SSL 인증서를 적용시켜둔 상태에서 해당 LB public 주소를 각 c-name으로 만들어둔 서비스 도메인 3개를 연결 시켜둔 상태입니다. 원래는 서버 한대에 하나의 WAS가 존재하여 하나의 도메인과 하나의 LB가 연결되어있으며 LB는 개발 서버에 있는 WAS로 바로 연결이 되는 구조였습니다. 개발을 진행하다 보니 WAS가 ..

Object Storage 이미지 출력 [내부링크]

안녕하세요. 이번 포스팅에서는 요즘 프로젝트에서 안쓸 수 없는 Object Storage에서 이미지에 접근하는 방법을 포스팅 하려고 합니다. 회사에서 지난 프로젝트의 경우 Cloud 환경의 NAS를 이용하여 각 서버에 마운트 시켜 파일을 관리를 했던 반면 이번 프로젝트는 Object Storage를 이용한 파일 관리를 진행하기로 해서 프로젝트를 진행하면서 발생했던 이슈에 대해서 해결하는 과정을 작성하도록 하겠습니다. 1. 전체 공개 파일과 public url 접근 Object Storage를 사용하면서 개발 초반에는 버킷에 모두 공개 권한으로 파일을 업로드를 하고 클라이언트에게 해당 버킷의 public 도메인을 이용하여 이미지 파일을 보여주는 방식으로 개발을 해왔습니다. ex) https://버킷명.kr..

ElasticSearch 사용자 사전, 동의어, 불용어 적용 [내부링크]

안녕하세요. 이번 포스팅은 검색엔진 중 하나인 ElasticSearch 줄여서 ES에서 사용자 사전, 동의어, 불용어를 작성하는 방법을 포스팅 하려고 합니다. 검색 엔진에서 색인 작업을 하면서 사용자가 원하는 특정 단어로 검색, 비슷한 단어에 대해서 검색 또는 검색이 되면 안되는 단어를 구분하여 색일을 할 수 있는 ElasticSearch의 기능입니다. 1. 사용자 사전 - 사용자 사전이란 등록해둔 단어로 색인을 진행하며 해당 단어로 검색을 할 수 있게 해주는 사전이다. - 복합 명사와 같이 두가지 이상의 단어가 합쳐져서 하나의 단어로 사용되는 단어들에 대한 정의를 해준다. - 사전을 작성할 때에는 단일어와 복합어를 구분해서 작성을 한다. - 단일어의 경우 단일어 하나만 작성, 복합어의 경우 복합어를 작..

@Asnyc를 이용한 멀티 스레드 [내부링크]

안녕하세요. 지난 포스팅에 이어서 이번에도 멀티 스레드에 대해서 포스팅을 하고자 합니다. 이번 포스팅에서는 지난 ThreadPoolTaskExecutor의 스레드 풀 설정과 @Asnyc 어노테이션을 이용한 비동기 멀티 스레드를 구현하고자 한다. @Asnyc란 - @Asnyc는 Spring framework에서 제공해주는 기능으로 비동기 처리를 하고 싶은 메소드 위에 붙여서 사용하면 된다. - 해당 어노테이션을 사용하기 위해서는 @EnableAsync을 필수적으로 같이 사용해줘야 한다. - @Asnyc와 @EnableAsync는 Spring AOP의 하나로 AOP 제약 사항을 받는다. 1. ThreadPoolTaskExecutor 설정 - 이전 포스팅에서 작성해두었던 설정 파일을 그대로 가져와서 @Enab..

멀티 스레드 환경을 위한 스레드 풀 (Thread pool) - ThreadPoolTaskExecutor [내부링크]

안녕하세요. 지난 포스팅에서는 java 멀티 스레드에 대해 간단하게 설명을 드렸습니다. 이번 포스팅에서는 멀티 스레드를 더 효율적으로 사용할 수 있는 스레드 풀(Thread Pool)에 대해서 작성을 하고자 합니다. 스레드 풀이란. - 멀티 스레드 환경에서 무차별적으로 생성되는 스레드로 인한 성능 저하를 막기 위해 정해진 수의 스레드를 설정하여 사용하는 방식 - 미리 생성된 또는 이전에 생성된 스레드를 재사용하여 현재 작업을 수행 - 스레드 생성 오버 헤드 문제에 대한 해결책을 제공 Java에서의 스레드 풀 java에서 제공해주는 스레드 풀로는 ThreadPoolExecutor 클래스가 존재한다. ThreadPoolExecutor 클래스의 자세한 사용 방법은 해당 링크를 참고하자. 이번 포스팅에서는 Th..

멀티 스레드 Runnable [내부링크]

자바 개발을 하다보면 우리는 스레드(Thread)라는 단어를 많이 듣게 될것이다. 싱글 스레드, 멀티 스레드, 비동기 스레드 등등 그렇다면 이 스레드란 무엇일까? 스레드란? - 스레드는 어떠한 프로세스내에서 실제로 작업이 실행 되는 하나의 주체( 또는 단위)이다. - 프로그램 또는 프로세스가 실행 되기 위해서는 하나 이상의 스레드가 있어야 한다. 여담이지만 예전에 SNS에서 컴퓨터 용어를 쉽게 설명해주는 짤에서 코어란 일꾼이며 스레드는 일꾼의 손의 갯수로 비유를 했던걸 본 기억이 있다. 다시 본문으로 돌아와 이번 포스팅의 주제인 멀티 스레드에 대해서 작성을 해보고자 한다. 멀티 스레드란? - 특정 프로세스에서 두개 이상의 스레드가 동시에 작업을 하는것이다. - 각 스레드가 자신이 속한 프로세스의 메모리를..

Nginx [내부링크]

이번 포스팅에서는 회사에서 서버 설정을 하다가 너무나 간단한 설정인데도 불구하고 많은 시간을 허비했던 Nginx 설정에 대해서 작성을 해보려고 한다. (CentOS 기준으로 nginx 설정 방법을 포스팅 할 예정) Nginx란. - nginx는 아파치와 마찬가지고 많이 사용되고 있는 웹서버이다. - 프로그램이 가볍고 성능이 좋아 많은 사람들이 아직까지 nginx를 웹 서버로 사용을 하고 있다. - 기본 포트로는 80 포트를 사용하고 있다. - nginx는 웹서버 뿐만이 아니라 리버스 프록시 서버, LB 등 다양하게 사용이 가능하다. 1. Nginx 설치 - centOS에서는 yum이라는 패키지 설치 도구를 이용하는데 기본적인 yum 저장소에는 Nginx 패키지가 존재하지 않는다. - nginx 외부 저장..

MyBatis [내부링크]

지난 포스팅에서는 jdbc와 jdbcTemplate에 대해서 간략 하게 다뤄봤다. 이번 포스팅에서는 java 개발에 있어서 가장 흔하게 사용하는 MyBatis를 다뤄보겠다. MyBatis란. - MyBatis는 SQL 쿼리와 Store Procedure의 매핑을 지원하는 퍼시스턴스 프레임워크이다. - 기존에 jdbc나 jdbcTemplate을 사용하는거에 비해 불필요한 중복 코드도 줄어든다. - Db Connection을 가져오고 PreparedStatement 객체를 생성 후 쿼리를 실행 시켜 ResultSet 객체로 결과값을 받아오는 일련의 JDBC 과정들이 Mybatis를 사용함으로써 더 간결한 코드를 작성 할 수 있다. (해당 과정은 지난 포스팅에서 확인 가능) - xml을 이용해 쿼리를 작성하여..

jdbc와 jdbcTemplate [내부링크]

1. JDBC - jdbc는 java database connectivity 의 약자로 java에서 데이터 베이스에 접근을 할 수 있게 만든 Java API다. - DriverManager 또는 Datasource 객체를 이용해 DB connection을 가져와서 사용한다. - Statement, PreparedStatement 객체를 이용해 쿼리를 생성한다. - ResultSet 객체를 이용해 쿼리의 결과값을 받아 올 수 있다. // DB config 파일에 bean 객체로 Datasoure 객체를 생성 @Bean public DataSource dataSource() { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setUsername(..

콜백 함수 (Callback function) [내부링크]

콜백 함수 - 콜백 함수란 javascript에서 함수의 매개변수로 변수가 전달 되는게 아닌 함수가 전달 되는 함수를 얘기한다. - 매개변수로 넘어온 함수를 함수 구현체 내부에서 로직 도중 또는 로직이 끝난 뒤에 실행을 시킬 수 있다. // 함수 선언 function sample(callbacKFnc){ 로직 구현체 ... return callbacKFnc(); } // 함수 선언 function callback() { return console.log('콜백 함수 실행'); } // 함수 실행 sample(callback); - 콜백 함수는 익명 함수로도 정의 할 수 있다. function sample (callbackFnc){ 구현체 ... return callbackFnc(); } sample(fu..

javascript 함수 [내부링크]

1. 함수 (function) - javascript에서 함수란 작업을 수행하거나 어떠한 특정 로직을 수행하는 문장이 집합 되어있는 블록이다. - 기본적으로 함수를 호출하고자 하면 같은 scope 안에 함수를 정의를 해야 한다. 2. 함수 선언 - 함수를 선언 하는 방법은 크게 선언적 함수, 익명 함수 2가지의 방법이 있다. 선언적 함수 - 선언적 함수는 가장 흔히 사용되는 방법 중 하나이다. - 'function' 키워드를 사용하며 키워드 뒤에 함수명을 작성 하고 () 안에 매개변수를 넣을 수 있다. - 'return' 키워드를 사용해 함수가 끝날 때 함수 내부에서 구현한 코드의 결과값을 돌려줄 수 있다. - 선언적 함수는 javascript 호이스팅에 영향을 받는다. function 함수명 ( 매개변..

ElasticSearch Mapping 구조 추가 및 Reindex [내부링크]

인덱스의 매핑 구조 1. 조회 - GET Method 사용 - ES 접근 IP 주소:9200/인덱스명/_mapping 2. 추가 - PUT Method 사용 - ES 접근 IP 주소:9200/인덱스명/_mapping { "properties":{ "추가할 필드" : { "type" : "타입지정" ... } } } ※ 이미 존재하는 필드명과 추가할 필드명이 같으면 에러 발생 3. 수정 - ES에서 한번 등록된 매핑 구조는 수정이 될 수 없다. - 한번 생성할 때 신중하게 생성을 해야 한다. Reindex - 위에서 적어 놓았듯이 ES에서는 이미 정의된 매핑 구조는 수정이 될 수 없다. - 특정 필드의 타입을 변경 하고 싶을 때는 동일한 구조의 매핑에서 특정 필드의 타입을 변경 시킨 새로운 인덱스를 생성 ..

ElasticSearch mapping [내부링크]

매핑이란? - RDBMS의 스키마와 비슷한 역할 - json 형태의 데이터를 루씬이 이해할 수 있도록 바꿔주는 작업 - 다이나믹 매핑 - json 도큐먼트의 데이터 타입에 맞춰 자동으로 인덱스 매핑을 해주는것 - 명시적 매핑 - 인덱스를 생성할 때 인덱스 매핑을 직접 정의하거나 mapping API를 통해 매핑을 지정 매핑 타입 데이터 타입 설명 text* 전문 검색이 필요한 데이터로 텍스트 분석기가 텍스트를 작은 단위로 분리 keyword* 텍스트 분석을 하지 않고 원문을 통째로 인덱싱 date 날짜 / 시간 Bye, short, integer, long 정수형 타입 scaled_float, half_float, double, float 실수형 타입 scaled_float : float 데이터에 특정 ..

ElasticSearch란? [내부링크]

ElasticSearch(ES)란? - ElasticSearch는 Apache Lucene에서 기반이 되어 구축되어 대량의 데이터를 저장, 분석, 검색을 할 수 있는 검색 및 분석 엔진이다. - 대용량의 DB 데이터에서 문자열 검색의 속도 및 DB 과부하를 방지하기 위하여 사용 - 대용량의 데이터를 분석하기 위하여 사용 ElasticSearch 구성 요소 1. Document (도큐먼트) - 실제 데이터를 저장하는 단위로 Json 형태이다. - 하나의 도큐먼트는 여러 필드와 값을 갖는다. (field - value) - 모든 도큐먼트는 반드시 하나의 인데스에 포함 - 도큐먼트를 인덱스에 포함시키는 것을 인덱싱(indexing)이라고 표현 - RDBMS의 레코드와 비슷한 개념 2. Index (인덱스) -..