juntcom의 등록된 링크

키자드에 등록된 총 116개의 포스트를 확인하실 수 있습니다.

Tistory

스프링 Security 및 JWT 활용하여 DB 유저 테이블 회원가입 로그인 API 만들기

스프링 시큐리티 및 JWT 를 활용하기 위해 결국 유저정보를 저장하는 DB 가 있어야 합니다.아래 글과 겹치는 부분 있을 수 있으니 먼저 확인해보세요. 아래 포스트는 디비 없이 하드코딩으로 user 와 password 를 설정했습니다.https://juntcom.tistory.com/249  spring security 와 jwt 를 이용한 인증 인가(spring boot3)• Spring Security는 Spring 기반 애플리케이션의 보안을 제공하는 강력하고, 유연한 프레임워크입니다.특징  • 인증(Authentication)과 인가(Authorization) 기능 제공 • 다양한 보안 공격 방어 (CSRF, XSS 등)juntcom.tistory.com 회원 테이블CREATE TABLE users..

Tistory

EC2 에 클라우드 와치 적용하기(Cloud Watch)

AWS CloudWatch는 보고서 작성 기능을 포함한 다양한 모니터링 및 관리 기능을 제공합니다. 구체적으로는 CloudWatch Logs Insights와 CloudWatch Dashboards를 사용하여 데이터를 시각화하고 보고서를 작성할 수 있습니다.클라우드와치 구성 종류는 크게 두가지로 나눌 수 있습니다.1. CloudWatch Logs InsightsCloudWatch Logs Insights는 로그 데이터를 쿼리하고 분석할 수 있는 강력한 도구입니다. 이를 통해 특정 기간 동안의 로그 데이터를 기반으로 다양한 보고서를 생성할 수 있습니다.  • 로그 쿼리 작성: SQL과 유사한 쿼리 언어를 사용하여 로그 데이터를 분석할 수 있습니다. • 쿼리 결과 시각화: 쿼리 결과를 그래프로 시각화할 수 ..

Tistory

스프링과 스프링부트 차이점

스프링과 스프링부트 차이 (spring vs spring boot)1. 설정 및 구성: • 스프링: 스프링 프레임워크는 다양한 기능을 제공하지만, 이를 설정하는 데 많은 XML 구성 파일이나 Java 설정 클래스가 필요합니다. 개발자가 직접 빈(bean)을 정의하고 연결해야 하므로 초기 설정이 복잡할 수 있습니다. • 스프링부트: 스프링부트는 자동 설정(autoconfiguration)을 통해 대부분의 설정 작업을 자동화합니다. 기본적인 프로젝트 설정과 함께 필요한 대부분의 의존성을 자동으로 구성해주기 때문에 설정 작업이 크게 줄어듭니다. 2. 프로젝트 구조 및 시작: • 스프링: 스프링 프로젝트를 시작하려면 각종 라이브러리를 수동으로 추가하고 설정해야 합니다. 초기 세팅에 많은 시간이 걸릴 수 있습니다..

Tistory

스프링부트 jpa 시작해보기 - jpa 정의 및 jdbc 설명

JPA 란JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스와 객체 간의 매핑을 관리하는 표준 API입니다.  • 객체-관계 매핑(Object-Relational Mapping, ORM): 객체 지향 프로그래밍의 객체를 관계형 데이터베이스의 테이블에 매핑. • 표준 인터페이스: JPA는 인터페이스를 제공하고, Hibernate, EclipseLink 등의 구현체를 통해 사용할 수 있음. • 데이터베이스 독립성: 코드 변경 없이 다양한 데이터베이스에서 동작. 하이버네이트란Hibernate는 자바 환경에서 객체 관계 매핑(Object-Relational Mapping, ORM) 프레임워크입니다. 이를 통해 자바 객체와 관계형 데이터베이스 간의 변환을 자동화할 수 있습니다..

Tistory

jpa 데이터 insert 및 read 해보기

mysql 간단한 blog 테이블 만들기-- mydb.tb_blog definitionCREATE TABLE mydb.tb_blog (blog_id BIGINT auto_increment NOT NULL,blog_title varchar(100) NOT NULL,blog_content varchar(100) NOT NULL,reg_dt DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,upd_dt DATETIME DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL,PRIMARY KEY (`blog_id`))ENGINE=InnoDBDEFAULT CHARSET=utf8mb4COLLATE=utf8mb4_0900..

Tistory

public ip 와 private ip 는 어떤것인지

공개 IP 주소(Public IP)와 사설 IP 주소(Private IP)는 인터넷 및 내부 네트워크에서 장치들이 통신하기 위해 사용하는 두 가지 주요 유형의 IP 주소입니다. 이들 주소는 각각 다른 용도로 사용되며, 네트워크의 구조와 보안에 중요한 역할을 합니다. 공개 IP 주소 (Public IP) 정의  • 공개 IP 주소는 인터넷에 직접 연결된 장치에 할당되는 IP 주소입니다. 전 세계에서 유일하며, 인터넷 상의 다른 모든 장치와 직접 통신할 수 있습니다. • 예: 192.0.2.1, 203.0.113.1 특징  • 고유성: 전 세계적으로 유일한 주소입니다. 인터넷 상의 다른 장치와 중복되지 않습니다. • 공인된 할당: IANA(Internet Assigned Numbers Authority) 및..

Tistory

개발자 기술 로드맵

1. 프론트엔드 개발자 로드맵 기초 단계  • HTML/CSS   HTML5   CSS3   Flexbox   Grid 레이아웃 • JavaScript    ES6 기본 문법    DOM 조작    이벤트 처리 중급 단계  • 프레임워크 및 라이브러리ReactVue.jsAngular상태 관리 라이브러리 (Redux, Vuex 등) • 패키지 관리자npmyarn 고급 단계  • 빌드 도구WebpackBabel • 테스팅JestMocha • 최적화LighthouseDevTools 2. 백엔드 개발자 로드맵 기초 단계  • 프로그래밍 언어JavaPythonNode.jsRuby • 웹 프레임워크Spring Boot (Java)Django (Python)Express (Node.js)Ruby on Rails (R..

Tistory

스칼라 서브쿼리 설명 및 단점, 사용해야 하는 경우

서브쿼리(Subquery)란 sql내에 다른 sql이 포함되어있는 포함되어있는 쿼리를 의미합니다. 스칼라 서브쿼리(Scalar Subquery)는 주로 SELECT 절이나 다른 쿼리의 일부로서 단일 값을 반환하는 서브쿼리를 말합니다. 스칼라 서브쿼리는 반드시 단일 값(하나의 행과 하나의 열)을 반환해야 하며, 이를 통해 주 쿼리에서 계산이나 조건 비교 등의 작업에 사용할 수 있습니다. WHERE 절이나 HAVING 절에 사용되는 서브쿼리는 서브쿼리지만, 일반적으로 “스칼라 서브쿼리”라고 지칭하지 않습니다. 보통 WHERE 절에 사용되는 서브쿼리는 존재 여부를 확인하는 서브쿼리(Existential Subquery) 또는 다중 행 서브쿼리(Multi-row Subquery)로 불릴 수 있습니다. 스칼라 서..

Tistory

jpa 와 jpql vs queryDSL 정의 및 장단점

JPA (Java Persistence API)  • 정의: JPA는 자바 애플리케이션에서 객체 관계 매핑(ORM)을 위한 표준 명세입니다. • 주요 특징: • ORM 제공: 객체를 관계형 데이터베이스 테이블과 매핑합니다. • 표준화: JPA는 여러 구현체 (예: Hibernate, EclipseLink) 간의 표준을 제공합니다. • 애너테이션: 엔티티 클래스에 애너테이션을 사용하여 매핑을 정의합니다. • EntityManager: JPA의 핵심 인터페이스로, 데이터베이스 작업을 관리합니다. • 장점: • 코드와 데이터베이스 간의 간단한 매핑을 제공합니다. • 여러 데이터베이스 벤더에 대한 추상화를 제공합니다. • 단점: • 복잡한 쿼리 작성이 어렵고, 특히 동적 쿼리에서는 제한적입니다. JPQL (Ja..

Tistory

자바 primitive 와 Reference type 차이 및 사용

자바의 Integer와 int 자료형 차이 1. 기본 데이터 타입 (Primitive Type) - int  • 정의: int는 기본 데이터 타입으로, 32비트 정수를 저장합니다. • 특징: • 메모리 효율적: 4바이트(32비트)를 사용하여 정수 값을 저장합니다. • 값 저장: 단순히 값을 저장하고 연산을 수행합니다. • 기본값: 0 (선언만 하고 초기화하지 않은 경우) • 성능: 오토박싱/언박싱이 필요 없기 때문에 성능이 더 좋습니다. 2. 참조 데이터 타입 (Reference Type) - Integer  • 정의: Integer는 자바의 래퍼 클래스(wrapper class)로, int의 객체 표현입니다. • 특징: • 클래스 기반: Integer 클래스는 java.lang 패키지에 속하며, 객체로..

Tistory

스트림 API와 람다 표현식 소개

스트림 API 스트림 API의 필요성  • 함수형 프로그래밍 지원: 자바 8에서 도입된 스트림 API는 함수형 프로그래밍을 지원하여 코드의 간결성과 가독성을 높입니다. • 데이터 처리 효율성: 컬렉션 데이터의 필터링, 매핑, 정렬 등 다양한 작업을 쉽게 수행할 수 있습니다. • 병렬 처리: 스트림 API는 간단한 병렬 처리를 지원하여 대량 데이터 처리의 성능을 향상시킵니다. 스트림 API의 기본 사용법  • 스트림 생성  - 컬렉션에서 스트림 생성:List items = Arrays.asList("Apple", "Banana", "Orange");Stream stream = items.stream();  - 배열에서 스트림 생성:String[] array = {"Apple", "Banana", "Oran..

Tistory

자바 스트림의 중간 연산과 최종 연산 종류

중간 연산은 스트림 파이프라인에서 데이터를 변환하고 필터링하는 작업을 수행합니다.중간 연산은 지연 연산(lazy evaluation)으로, 최종 연산이 호출될 때까지 실제로 수행되지 않습니다. 중간 연산은 항상 새로운 스트림을 반환합니다.  1. filter • 설명: 주어진 조건에 맞는 요소만을 포함하는 스트림을 반환합니다. • 예시:List items = Arrays.asList("Apple", "Banana", "Orange");Stream filteredStream = items.stream().filter(item -> item.startsWith("A")); 2. map • 설명: 각 요소를 주어진 함수에 의해 변환된 결과로 매핑하여 새로운 스트림을 반환합니다. • 예시:List items =..

Tistory

자바 CompletableFuture 를 사용하여 비동기 프로그래밍 구현

CompletableFuture는 자바 8에서 도입된 java.util.concurrent 패키지의 클래스입니다. 비동기 프로그래밍을 쉽게 구현할 수 있도록 다양한 메서드와 기능을 제공합니다. CompletableFuture는 비동기 작업을 수행하고, 그 결과를 비동기적으로 처리할 수 있게 해줍니다. 1. CompletableFuture의 기본 개념  • 비동기 프로그래밍: 메인 스레드와는 별도로 작업을 수행하여 응답성을 높입니다. • 비동기 작업의 관리: 작업의 완료 여부를 확인하고, 작업이 완료되면 후속 작업을 수행합니다. • 콜백 등록: 작업이 완료되면 실행할 콜백 함수를 등록할 수 있습니다. 2. CompletableFuture의 생성 CompletableFuture 객체는 여러 가지 방법으로 생..

Tistory

Executor 를 CompletableFuture와 같이 사용하는 방법

비동기 작업에서 Executor를 사용하는 방법은 CompletableFuture의 비동기 작업을 특정 Executor를 통해 실행하도록 설정하는 것입니다. 기본적으로 CompletableFuture.supplyAsync와 CompletableFuture.runAsync는 공용 ForkJoinPool의 공용 스레드 풀을 사용하지만, 특정 Executor를 지정하여 사용자 정의 스레드 풀을 사용할 수도 있습니다. Executor를 사용하는 방법 1. Executor 생성 먼저, 사용할 Executor를 생성해야 합니다. 예를 들어, ExecutorService는 자주 사용되는 Executor 구현 중 하나입니다.import java.util.concurrent.ExecutorService;import ja..

Tistory

gcp vm인스턴스 생성 및 워드프레스 최저가로 구축하기

Compute Engine 인스턴스 생성 1. GCP 콘솔에서 Compute Engine > VM 인스턴스로 이동합니다. 2. 인스턴스 만들기를 클릭합니다. 3. 인스턴스 설정: • 이름: 원하는 이름 입력 • 지역: 가까운 지역 선택 • 머신 유형: e2 선택 • 부팅 디스크: Ubuntu (최신 LTS 버전) 선택 4. 네트워킹, 디스크, 보안 설정을 필요에 따라 구성합니다. 5. 만들기를 클릭하여 인스턴스를 생성합니다. 3. SSH를 통해 인스턴스에 접속인스턴스가 생성되면 브라우저 창에서 열기를 통해 터미널 열 수 있다. 4. Docker 설치SSH 세션에서 다음 명령어를 실행하여 Docker를 설치합니다:sudo apt-get updatesudo apt-get install apt-transpo..

Tistory

gcp vm 인스턴스에 외부 도메인 연결하기

우선 이것을 하기 위해서는 앞에 선행 작업들이 이루어져야 합니다. 인스턴스를 생성하고 간단한 웹서비스 실행도메인 구매 사이트 & 네임서버 변경 외부 도메인에 네임서버를 GCP로 변경GCP에 접속한뒤 네트워크 서비스 > Cloud DNS 메뉴에 들어간 뒤, 영역만들기로 하나 생성합니다.원래는 domain 을 구매한 서비스에 ip 만 등록하면 되나 gcp 의 경우 gcp 내부에 cloud dns 에 도메인을 추가로 등록해줘야 dns 가 동작을 합니다. 네트워크 서비스 > cloud DNS > 영역 만들기 상단에 영역 만들기 통해서 만들어 줍니다. 여기 까지 생성하게 되면 dns 목록에 뜨게 됩니다. 이름만 설정하고 나머지 옵션은 기본으로 두시고 사용하셔도 됩니다. 기본으로 만드시면 SOA 와 NS 가 기본으..

Tistory

spring security 와 jwt 를 이용한 인증 인가(spring boot3)

• Spring Security는 Spring 기반 애플리케이션의 보안을 제공하는 강력하고, 유연한 프레임워크입니다.특징  • 인증(Authentication)과 인가(Authorization) 기능 제공 • 다양한 보안 공격 방어 (CSRF, XSS 등) • 확장 가능하고 커스터마이징이 용이  프로젝트 라이브러리build.gradle implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'io.jsonwebtoken:jjwt-api:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2' runtimeOnly 'io.jsonwebtoken:j..

Tistory

스프링 코틀린 의존성 주입.

프링 부트에서 의존성 주입(DI, Dependency Injection)은 주로 세 가지 방식으로 이루어집니다: 생성자 주입, 수정자 주입, 필드 주입. 각각의 방법에 대한 코틀린 예시를 제공하겠습니다. 1. 생성자 주입(Constructor Injection) 생성자 주입은 가장 권장되는 방법으로, 클래스의 의존성을 생성자를 통해 주입하는 방식입니다. 예시: 생성자 주입package com.example.demo.serviceimport org.springframework.stereotype.Service@Serviceclass GreetingService { fun greet(name: String): String { return "Hello, $name!" }}  packag..

Tistory

[Node] Mac OS에서 NVM 설치 및 사용 명령어 정리

NVM이란? Node Version Manager. 노드 버전 관리자이다. 프로젝트마다 다른 노드 버전을 관리하기에 유용하다. 2. NVM 설치 1. Homebrew 설치 Homebrew는 Mac용 패키지 관리자이다. 사용하면 간단하게 명령어로 필요한 패키지를 설치할 수 있다. Homebrew: https://brew.sh/ 터미널을 열어 명령어로 Homebrew를 설치하고 잘 설치 됐는지 확인해보자. $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ brew --version Homebrew 3.6.20 2. NVM 설치 homebrew를 통해 NVM을 설치한다. $ brew..

Tistory

Google Cloud Platform(GCP) 시작하기

구글 클라우드 플랫폼(GCP) 시작하기 구글 클라우드 플랫폼(GCP)를 사용하려면 먼저 계정을 등록시켜야 합니다. Gmail에 사용하는 구글 계정이 있는경우 이를 통해 로그인을 진행 할 수 있지만 클라우드 계정이 없다면 클라우드 계정에 가입해야합니다. 구글 클라우드 플랫폼은 90일간 $300을 사용할 수 있는 무료 크레딧을 제공해 주기 때문에 이를 통해 구글 클라우드 플랫폼을 체험해 볼수도 있습니다. 구글 클라우드 플랫폼 등록을 맞추면 클라우드 콘솔로 이동하고 My First Project라는 새로운 프로젝트가 자동으로 만들어 줍니다. 또한 페이지의 왼편에는 컴퓨팅, 서버리스, 저장소등과 같이 구글 클라우드 플랫폼이 제공하는 서비스가 속한 카테고리와 프로젝트별 구성란이 있습니다. 1. 프로젝트 선택하기 ..

Tistory

[GCR] google cloud docker image 저장 (cloud build, Artifact Registry)

이 포스트는 google cloud shell 커맨드에서 제공하는 편집기와 터니널을 이용해 docker image 를 생성하고 google cloud 도커이미지 저장소인 Artifact Registry 에 도커이미지를 저장하는 방식에 대한 튜토리얼입니다. Google Cloud API가 사용 설정됩니다. Cloud Build API Artifact Registry API 빌드할 소스 파일 준비 Cloud Shell 세션을 엽니다. quickstart-docker라는 이름의 새 디렉터리를 만들고 디렉터리로 이동합니다. mkdir quickstart-docker cloudshell workspace \ quickstart-docker Cloud Shell의 파일 편집기에서 파일 > 새로 만들기를 선택하여 q..

Tistory

[GCR] github action 에 google cloud 배포 위한 IAM 등록

google cloud 에 어플리케이션을 배포하려면 CI/CD 도구가 필요하다. 배포 도구로 github actions 를 통해 구글 클라우드에 어플리케이션을 배포하려면 IAM 이라는 서비스계정 인증절차가 필요한대 이에 대해 포스팅하려고 한다. Github Action 최상위 폴더에서 ./github/workflows 폴더에 .yml 파일을 넣어주면 된다. 이 떄 파일명은 상관없다. name: Google Cloud Auth on: push: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Google Auth id: auth uses: 'google-github-acti..

Tistory

[GCP] cloud sql 인스턴스 만들기

gcp 에서 cloud sql 메뉴를 들어가게 되면 인스턴스 생성할 수 있다 데이터베이스를 선택하자 데이터베이스 버젼 설정 cloud sql 버젼 선택 리젼 asia-northeast3 (서울) 선택하시고 영역 가용성 서비스 중단 될 경우 다른 DB 를 올릴지 여부인데, 테스트일 경우 단일만 하자 머신구성 전용 코어랑 공유 코어 가 있는데 공유코아가 더 낮은 사양의 cpu 및 메모리를 사용할 수 있다. 저장용량 SSD 를 권장한다고 한다. 하지만 돈 아끼려면 HDD 연결 보안 측면적으로는 비공개 IP 로 생성해서 같은 vpc 망에서 db 접속 처리 해야한다. 비공개 IP 설정 데이터보호 자동백업 기능이 있는데, 개발이면 백업 필요없다. 유지보수 주지적으로 업데이트 되어 인스턴스 재시작 되는 항목이다. 앞..

Tistory

자바 면접 질문 모음

Q.1 Java의 가장 중요한 특징은 무엇인가요? 플랫폼 독립성은 "한 번 작성하면 어디서든 실행 가능" (WORA) 개념을 통해 가능해지며, 이는 Java의 주요한 장점 중 하나입니다. Java 코드는 바이트코드로 번역되어 어떤 플랫폼에든 Java 가상 머신 (JVM)이 탑재되어 있다면 실행할 수 있습니다. 이로 인해 Java 애플리케이션은 변경 없이 다양한 운영 체제에서 작동할 수 있는 매우 이식성이 높으며, Java는 크로스 플랫폼 개발을 위한 인기 있는 선택지가 됩니다. Java는 온라인 애플리케이션, 사무실 시스템, 모바일 개발 및 임베디드 기기 등 많은 분야에서 널리 사용되었고 성공적이었습니다. 이는 개발을 한 번만 하고 어디서든 배포할 수 있는 능력 때문입니다. Q.2 플랫폼 독립성이란 무엇..

Tistory

firebase hosting 에 vue 프로젝트 배포하기

vue 프론트를 배포하려면 구글 플랫폼에서는 google cloud run 및 firebase hosting 을 통해 배포할 수 있습니다. cloud storage 에 정적 파일로 올릴 수 있지만 이 경우에 vue router 등 프론트에서 라우트 기능을 사용한다면 경로 오류가 생길 수 있습니다. 완전 static 하게 경로 이동 없는 경우에 cloud storage 이용하는게 좋습니다. Firebase Hosting 비용: Firebase Hosting은 정적 파일(HTML, CSS, JS 등)을 호스팅하기 위한 것이므로, 주로 네트워크 대역폭과 저장 공간에 대한 비용이 발생합니다. Firebase는 무료 티어를 제공하며, 이는 작은 프로젝트나 테스트 용도로 충분한 경우가 많습니다. 무료 티어를 초과하..

Tistory

Intellij 다운 및 프로젝트 처음 시작하기

웹사이트 접속: • JetBrains의 공식 웹사이트에 접속합니다. JetBrains 공식 웹사이트 링크를 클릭하거나 웹 브라우저에서 “IntelliJ IDEA download”로 검색하여 접근할 수 있습니다. 3. Community Edition 및 Ultimate 다운: • 두 버젼 차이 Community Edition은 JVM 언어로 작업하는 개인 개발자나 학생들에게 적합한 반면, Ultimate Edition은 다양한 프로그래밍 언어와 웹 개발, 데이터베이스 관리, 서버 관리 등 복잡한 기업용 애플리케이션을 개발해야 하는 전문 개발자나 기업에 적합한 버전입니다. 이를 통해 개발 환경의 요구 사항과 예산에 맞는 적절한 버전을 선택할 수 있습니다.2. 운영 체제 선택:• 다운로드 페이지에서 사용 중인..

Tistory

sourcetree 시작하기 및 로컬프로젝트 github 에 푸쉬하기

SourceTree는 Atlassian에서 제공하는 무료 Git 클라이언트로, Git 저장소를 시각적으로 관리할 수 있도록 해줍니다. 사용하기 쉬운 인터페이스 덕분에 Git 명령어에 익숙하지 않은 사용자도 쉽게 접근할 수 있습니다. 여기에 SourceTree의 설치 방법과 기본 사용 방법을 설명하겠습니다. SourceTree 설치하기  1. 다운로드 페이지 접속: • SourceTree의 공식 웹사이트(https://www.sourcetreeapp.com/)에 접속합니다. 2. 소프트웨어 다운로드: • 홈페이지에서 Download for Windows 또는 Download for Mac 버튼을 클릭하여 운영 체제에 맞는 SourceTree 설치 파일을 다운로드합니다. 3. 설치 파일 실행: • 다운로드한..

Tistory

스프링 의존성 주입 어노테이션 및 의존성 주입하는 방법

스프링 프레임워크에서 객체 의존성을 관리하기 위해 주로 사용되는 세 가지 어노테이션인 @Autowired, @Resource, 그리고 @Inject에 대해 설명하고, 각각의 특징과 차이점을 비교해 드리겠습니다. 이 어노테이션들은 모두 의존성 주입(Dependency Injection, DI)을 수행하는 데 사용되며, 스프링 애플리케이션에서 중요한 역할을 합니다. 의존성 주입이란의존성 주입(Dependency Injection, DI)은 소프트웨어 엔지니어링에서 사용되는 디자인 패턴 중 하나로, 객체가 자신의 의존성(즉, 다른 객체들)을 직접 생성하거나 검색하지 않고, 외부에서 받도록 하는 기술입니다. 이 패턴을 사용하면 컴포넌트 간의 결합도가 낮아지고, 유연성이 향상되며, 코드의 재사용성과 테스트 용이성..

Tistory

도메인 주소를 브라우저 주소창에 입력 후 일어나는 프로세스 정리

1. 도메인 이름 입력 및 요청 사용자가 웹 브라우저의 주소창에 URL을 입력하고 엔터를 누르면, 브라우저는 입력받은 URL을 해석하여 해당 도메인의 IP 주소를 찾아야 합니다. URL이 도메인 이름으로 구성되어 있기 때문에, 먼저 이 도메인의 IP 주소를 알아내야 실제 서버와 통신이 가능합니다. 2. DNS 조회 브라우저는 도메인 이름을 IP 주소로 변환하기 위해 DNS(Domain Name System) 조회를 수행합니다. DNS는 전 세계의 도메인 이름과 그에 해당하는 IP 주소를 관리하는 시스템으로, 인터넷 전화번호부와 유사합니다.  • 브라우저는 먼저 로컬 DNS 캐시를 확인하여 최근에 조회된 도메인의 IP 주소가 저장되어 있는지 확인합니다. • 캐시에 없는 경우, 브라우저는 설정된 DNS 서버..

Tistory

도커 설치 부터 실행 및 mysql 도커 실행 및 설치

Docker Desktop for Mac 설치  1. 다운로드 페이지 접속: • Docker 공식 웹사이트에서 Docker Desktop for Mac 다운로드 페이지로 이동합니다.https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.www.docker.com 도커란 Docker는 컨테이너화를 통..

Tistory

[스프링] @Retryable - 특정오류시 재시도

특정 Exception이 발생했을 경우 일정 횟수만큼 재시도할 수 있는 어노테이션이다. 예를 들어, 서비스 내에서 다른 서비스에 있는 API를 호출할 때 간헐적으로 통신 오류가 발생할 수 있다. 이럴 때 특정메소드에 재시도 할 수 있는 기능이 있다. 사용법은 아주 간단하다. 1. Spring Application에 @EnableRetry 어노테이션 추가 2. 재시도 하고 싶은 메소드에 @Retryable 어노테이션 추가 - include : 여기에 설정된 특정 Exception이 발생했을 경우 retry한다. - exclude : 설정된 Exception 재시도 제외 - maxAttempts : 최대 재시도 횟수 (기본 3회) - backoff : 재시도 pause 시간 @Retryable(maxAtte..

Tistory

스프링 코딩 공작소 책 리뷰

1. 왜 이 책을 선택하였나? 현업 7년차 개발자로 스프링 및 개발에 처음 입문하는 누군가에게 추천해줄 책을 찾고 있었다. 그러던 중 이 책이 예제를 통해 간단하게 스프링 입문하기 좋다는 느낌을 받았다. 일단 예제소스의 복잡도가 깊지 않고 간결해서 좋다. 또한 1,2 장을 통하여 스프링에 처음 입문하는 사람들이 세팅할 수 있게 정리가 되어 있다. 그 이후의 장들은 간단하게 쇼핑몰을 구축해가면서 한단계씩 순차적으로 스프링에서 제공하는 많은 기능을 자유롭게 확장해 사용할 수 있으며 영역별로 개발할 수 있다는 장점이 있다. 또한, MultipartFile, RESTful 웹 서비스, 스프링 웹 플로우, 스프링 시큐리티, Log4j 등을 사용하기 때문에 다양한 스프링 기능도 함께 익힐 수 있다. 책을 따라 실습..

Tistory

spring @ControllerAdvice, @ExceptionHandler 예외처리 방법

@ExceptionHandler @ExceptionHandler 는 @Controller , @RestController 가 적용된 Bean 에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능이다. @ExceptionHandler 에 설정한 예외가 발생하면 handler가 실행된다. @RestController public class MyRestController { ... ... @ExceptionHandler(NullPointerException.class) public Object nullex(Exception e) { System.err.println(e.getClass()); return "myService"; } } 위와 같이 적용하기만 하면 된다. @ExceptionHandler라..

Tistory

spring netty thread sleep, webflux 에서 sleep 어떻게 하는게 나을까

webflux 를 사용하면 spring boot 내장서버가 tomcat 에서 netty 로 사용해야 하는데, netty 가 비동기에 유리한 서버이다 보니, sleep 을 주고 싶은 로직이 있을 떄 sleep 을 주기가 비효율적이다 Spring Netty를 사용할 때 Thread.sleep()를 사용하여 지정된 시간 동안 스레드 실행을 일시 중지 할 수 있다 . 하지만 이벤트 루프를 차단하고 성능 문제를 일으킬 수 있으므로 Netty 애플리케이션에서 와 같은 차단 작업을 사용하는 것은 일반적으로 권장되지 않는다 . 대신 Netty는 패키지 에서 사용할 수 있는 ScheduledExecutorService를 사용하여 작업 지연을 위한 비동기 대안을 제공한다 io.netty.util. schedule()의 방..

Tistory

vue Quasar 에 axios 추가하기

Axios 모듈 패키지 추가/설치 패키지에 axios 패키지 추가해서 쓸 수 있다. $ yarn add axios or $ npm install axios --save Boot File 에 추가하기 quasar new boot axios 명령어를 입력하면 src/boot 폴더에 axios.js 파일이 생긴다. 여기에 import { boot } from 'quasar/wrappers' import axios from 'axios' const api = axios.create({ baseURL: 'https://api.example.com' }) export default boot(({ app }) => { // for use inside Vue files (Options API) through this...

Tistory

spring boot 3 r2dbc 설정(mysql)

필요한 라이브러리 org.springframework.boot spring-boot-starter-data-r2dbc io.asyncer r2dbc-mysql com.mysql mysql-connector-j runtime 설정 코드 @Configuration @EnableR2dbcRepositories public class R2DBCConfiguration extends AbstractR2dbcConfiguration { @Override @Bean public ConnectionFactory connectionFactory() { ConnectionFactory connectionFactory = ConnectionFactories.get(ConnectionFactoryOptions.builder(..

Tistory

spring webflux mono excel dowonlad(poi 라이브러리)

excel poi 라이브러리 org.apache.poi poi-ooxml 5.2.3 spring webflux 에서는 HttpServletResponse 를 사용하지 않아 header 에 xlsx 정보를 넣어주는부분에서 spring 일반 샘플대로 하면 오류가 생길 것이다. HttpHeaders 에 set 해주고 Mono.just 에 headers 를 세팅해주면 된다. import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpHeaders; imp..

Tistory

Lightsail 로 워드프레스 시작하기. https 인증까지(구축대행해드립니다)

https://aws.amazon.com/ko/lightsail/ 가상 프라이빗 서버 및 웹 호스팅–Amazon Lightsail—Amazon Web Services WordPress, Magento, Prestashop, Joomla와 같은 사전 구성된 애플리케이션을 통해 단 몇 번의 클릭으로 블로그, 전자 상거래 또는 개인 웹 사이트를 구축합니다. aws.amazon.com 여기서 lightsail 시작하기를 합니다. 여기서 create instance 를 통해 서버 (instance) 를 생성합니다. region 은 서울로 해주세요. 가까운 위치의 서버가 더 빠릅니다. 외국 서비스가 아니라면 워드프레스 일반이 일반적인데, 저는 처음이지만 꿈과 욕심이 커서 multisite 로 하겠습니다. multi..

Tistory

워드프레스 .htaccess file not found 파일 없는 경우

Htaccess 파일 에디터 플러그인 - Htaccess File Editor FTP 클라이언트 사용에 부담을 느끼는 경우 Htaccess File Editor와 같은 플러그인을 사용하여 워드프레스 대시보드에서 .htaccess 파일을 편집할 수 있습니다. 설치하고 나면 블로그 관리 내부에 settings > WP Htaccess Editor 에 노출됩니다.

Tistory

워드프레스에 에드센스 연결하기 adsense in wordpress

워드프레스 에드센스 연결 방법 워드프레스 에드센스 연결하는 방법은 워드프레스에 site kit 을 설치하면 된다고 한다. 1. 플러그인 설치 - site kit google analytics 랑 search console 에도 연동이 되나보네요. 저는 이미 search console 에는 도메인을 미리 추가했어서, 필요는 없었지만 에드센스 넣기 위해 다운 받았습니다, 내 계정으로 로그인 하면 바로 연동이 되네요. 각 통계 지표의 오른쪽 하단에 search console 인지 analytics 인지 설명이 있네요. 저는 아직 만든지 얼마 안되는 블로그여서 조촐하네요. 열심히 키워보겠습니다. 제일 마지막 항목이 에드센스 항목인데, 여기는 들어가서 연결을 하더라도 바로 안되는거 같네요. 에드센스 화면으로 링크..

Tistory

Optional in java 8 example 예제

Java 8 Optional optional 은 java.util 패키지의 Java 8에 추가된 새로운 클래스입니다. 이 도움말에서는 Java Optional 클래스와 해당 개체에 대해 자세히 설명합니다. Optional의 필요성 간단히 말해서, Optional은 Java에서 NullPointerException을 우아하게 다루기 위해 설계되었습니다. 아마도 null 참조에 익숙하실 겁니다. 이로 인해 가장 흔하게 발생하는 NullPointerException을 아래와 같이 보실 수 있습니다. String str = null; if(str.equals("codippa")) { // do something } null 참조에서 메서드를 호출하려고 하기 때문에 java.lang.NullPointerExcep..

Tistory

[책 리뷰] 챗GPT 거부할 수 없는 미래

챗 gpt 책을 추천하려고 한다. 챗GPT 의 사전 지식부터 챗GPT 서비스에 대한 종류들 그리고 챗GPT 의 등장으로 인한 여러 변화들과 api 를 사용하는 방법 등등 그리고 챗GPT 를 활용하는 방법까지 이 책은 소개 하고 있어서 개발자부터 비개발자 전부 이 책을 활용 할 수 있을 것 같아 범용적인 책으로 소개하고 싶다. 하지만 아무래도 컴퓨터 관련 전공자가 책을 읽기 조금 수월하다. 아래는 전체적인 내용을 요약한 개요다. [챗GPT 개념과 동작 원리 이해] ㆍ 임베딩, 인코딩, 디코딩, 자연어 처리 개념 ㆍ 자연어 처리 알고리즘과 챗GPT 동작 원리 [다양한 챗GPT 서비스 소개] ㆍ 챗GPT 플러그인, GPT-4 모델 ㆍ 달리, 코덱스, 위스퍼, 빙, 코파일럿, 루프 [챗GPT 직접 사용해보기] ..

Tistory

Spring JPA Pageable 처리 - sort 및 Page 처리(totalElements)

Pageable Pagination 기능을 편리하게 사용할 수 있도록 JPA는 Pageable이라는 객체를 제공한다. controller 에서 부터 pageable 관련 파라미터를 받을 수 있다. 정렬 기능 @GetMapping("/") public ResponseEntity getData( @PageableDefault(size = 10, sort = "reqDt", direction= Sort.Direction.DESC) Pageable pageable) // reqDt 에 대한 내림차순 정렬 @SortDefault 위의 방식은 정렬을 한가지만 할 수 있어, 여러 정렬 조건을 추가하려면 @SortDefault 를 추가하면 된다. @GetMapping("/") public ResponseEntity g..

Tistory

spring cloud resilience4j 모니터링

circuit breaker 가 오픈되었는지 닫혀있는지를 확인하려면 대시보드가 필요하다는 생각이 든다. 예전에 histrix 를 이용할때는 turbin 이라는 모니터링이 있던거로 기억하는데, spring cloud gateway 의 circuit breaker 인 Resilience4j 는 없다. Resilience4j 에는 모니터링 툴이 존재 하지 않아 micormeter 로 metric 제공하는 내용으로 모니터링을 직접 구성해야 한다. 메트릭을 수집하고 표현하는 대시보드는 prometheus 와 grafana 로 모니터링을 할 수 있다. 준비 1. Prometheus 설치 2. grafana 설치 스프링 yml cloud: gateway: routes: - id: test uri: http://loc..

Tistory

[책 리뷰] 도커 교과서 (설치부터 실전 운영 투입까지, 한 권에 담았다!)

도커를 실무에서 사용하고 있어서 책을 통해서 더 배울게 있나 했는데, 도커교과서 라는 교재를 보니 아직 알아야 할게 너무 많은 걸 알았다. 요즘 도커를 안쓰고 개발을 하기가 어렵다. 실무에서 쓰지 않는다고 하더라도 도커는 알아야 외부 개발자와의 간단한 미팅에서라도 무시당하지 않는다. 개발자 친구가 도커를 전혀 모른다고 하면 내심 무시당할 수 있다. 자세히는 모르더라도 도커가 뭔지는 알아야 한다. 또한 요즘 쿠버네티스 또한 안하는 회사를 점차 찾기 힘들어졌다. 이런 쿠버네티스를 도입하려면 도커는 정말 필수적으로 알아야 하는 기본 지식이 되어버렸다. 이 책을 보면 도커를 처음 시작하는 사람부터 실습가능하게 설명이 되어 있다. 도커의 기본적인 사용법부터 Dockerfile 로 도커이미지 생성하는 내용을 통해 ..

Tistory

CentOS 7 에 golang 설치하기

Go 설치 방법 go 현재 버전 1.19.4입니다. 타르볼을 다운로드하기 전에 공식 이동 다운로드 페이지를 방문하여 버젼을 확인한다. 01. 파일 다운로드 Go 바이너리를 다운로드하려면 wget 또는 curl을 사용한다. wget https://dl.google.com/go/go1.19.4.linux-amd64.tar.gz 02. 압축 풀기 이전 go 파일 삭제 후 tar 명령을 사용하여 /usr/local 디렉토리에 설치한다. $ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.4.linux-amd64.tar.gz 해당 경로에 go 폴더가 생긴다. $ cd /usr/local/go/bin $ ./go version go version go1.19.4 li..

Tistory

[KAFKA] CommitFailedException

카프카 오류 Synchronous auto-commit of offsets {topic-2=OffsetAndMetadata{offset=96, leaderEpoch=0, metadata=''}} failed: Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group. 위와 같은 오류가 발생해서 찾아보니 다음과 같다. Kafka에서 CommitFailedException이 나오는 유형은 아래와 같다. consumer 로직의 처리시간이 max.poll.int..

Tistory

spring boot 3.0 추가되는 점(spring 6)

Spring Boot 2.x -> 3.0 차이 최소 요구사항 변경 (M4 기준) Gradle 7.5 Groovy 4.0 Jakarta EE 9 Java 17 Kotlin 1.6 Hibernate 6.1 Spring Framework 6 AOT maven, gradle 플러그인 제공 native 지원 기능 확대 spring 3.0 지원 라이브러리 Spring AMQP 3.0. Spring Batch 5.0. Spring Data 2022.0. Spring GraphQL 1.1. Spring HATEOAS 2.0. Spring Integration 6.0. Spring Kafka 3.0. Spring LDAP 3.0. Spring REST Docs 3.0. Spring Retry 2.0. Spring Se..

Tistory

[ELK] logstash filter grok 사용

https://logz.io/blog/logstash-grok/ A Beginner’s Guide to Logstash Grok | Logz.io Logstash Grok plays a crucial part in the logging pipeline. Here's how to get started and construct filters for Syslog, Apache, and Elasticsearch. logz.io https://www.elastic.co/kr/blog/a-practical-introduction-to-logstash A Practical Introduction to Logstash Elastic Stack은 가능한 한 쉽게 Elasticsearch에 데이터를 수집할 수 있도록 해 ..

Tistory

[KAFKA] 카프카 producer configuration

acks 란 acks는 acknowledgments의 약자로 사전에서 찾아 보면 "승인", 확인 프로듀서가 메시지를 보내고 그 메시지를 카프카가 잘 받았는지 확인을 할 것인지 또는 확인을 하지 않을 것인지를 결정하는 옵션 acks 옵션 OPTION 손실율 속도 DESCRIPTION acks = 0 상 상 프로듀서는 자신이 보낸 메시지에 대해 카프카로부터 확인을 기다리지 않는다. acks = 1 중 중 프로듀서는 자신이 보낸 메시지에 대해 카프카의 leader가 메시지를 받았는지 기다립니다. follower들은 확인하지 않습니다. leader가 확인응답을 보내고, follower에게 복제가 되기 전에 leader가 fail되면, 해당 메시지는 손실될 수 있다. acks = all(-1) 하 하 프로듀서는 ..

Tistory

Burrow 시작하기

Burrow 는 또한 링크드인에서 제작한 아파치 카프카용 컨슈머 lag 를 체크하기 위한 api 서비스이다. kafka 에 대한 endpoint 정보를 burrow 에 적용을 하면 카프카 lag 에 대한 정보부터 다양한 정보를 api 로 제공 받을 수 있다. 이 정보들을 활용해서 로그로 적재할 수 도 있다 공식문서 https://github.com/linkedin/Burrow GitHub - linkedin/Burrow: Kafka Consumer Lag Checking Kafka Consumer Lag Checking. Contribute to linkedin/Burrow development by creating an account on GitHub. github.com burrow 설치 먼저 bur..

Tistory

telegraf 시작하기

Telegraf 설정 Telegraf는 agent application으로서 burrow의 rest api데이터를 일정주기로 ES에 전달하는 역할을 합니다. 설치 centos 다운 # influxdb.key GPG Fingerprint: 05CE15085FC09D18E99EFB22684A14CF2582E0C5 cat

Tistory

[ELK] logstash 설치 및 실행하기

logstasth 로 elasticsearch 에 데이터를 넣어줄 수 있다. 나는 kafka 데이터를 logstash 로 컨슘하고 output 저장소로 elasticsearch 에 넣으려고 한다. https://www.elastic.co/guide/en/logstash/6.6/installing-logstash.html Installing Logstash | Logstash Reference [6.6] | Elastic Use the echo method described above to add the Logstash repository. Do not use add-apt-repository as it will add a deb-src entry as well, but we do not provide a..

Tistory

[vue] vee-validation yup 자바스크립트 validation 체크

npm install -S yup 기본사용법 import * as yup from 'yup'; let schema = yup.object().shape({ name: yup.string().required(), age: yup.number().required().positive().integer(), email: yup.string().email(), website: yup.string().url(), createdOn: yup.date().default(function () { return new Date(); }), }); // check validity schema .isValid({ name: 'jimmy', age: 24, }) .then(function (valid) { valid; // =>..

Tistory

프로메테우스 Prometheus 시작하기(docker)

프로메테우스란 - prometheus 란 오픈소스 모니터링 툴로 지표 수집을 통한 모니터링이 주요 기능이다. 쿠버네티스 뿐만 아니라 애플리케이션이나 서버, OS등 다양한 대상으로부터 지표(Metric)를 수집하여 모니터링 할 수 있다. 기본적으로 Pull 방식으로 데이터를 수집하는데, 이 말은 모니터링 대상이 되는 자원이 지표정보를 프로메테우스로 보내는 것이 아니라, 프로메테우스가 주기적으로 모니터링 대상에서 지표를 읽어온다는 뜻이다(Push 방식으로 지표를 수집하는 모니터링 툴은 ELK스택 또는 Telegraf & InfluxDB 등이 있다). Pull 방식으로 지표정보를 읽어올때는 각 서버에 설치된 Exporter를 통해서 정보를 읽어오며, 배치나 스케쥴 작업의 경우에는 필요한 경우에만 떠 있다가 작..

Tistory

ZIPKIN 시작하기

Zipkin 설치방법 1(Jar 파일 실행) curl -sSL https://zipkin.io/quickstart.sh | bash -s java -jar zipkin.jar Zipkin Elasitc 저장소로 실행 java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://127.0.0.1:9200 Zipkin 설치방법 2(도커 이미지 실행) docker run -d -p 9411:9411 openzipkin/zipkin docker-compose.yml version: "3.3" # 파일 규격 버전 services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 zipkin: image: openzipkin/zipkin container..

Tistory

[spring boot] 스프링 부트 2.1 변경 내역

1. 자바 11 지원 2. 스프링 데이터 JPA, lazy 모드 지원 3. 의존성이 많이 변경됨. 스프링 프레임워크 5.0 -> 스프링 프레임워크 버전 5.1 로거 설정 개선 spring-jcl 컴포넌트 스캐닝 성능 개선이 가능한 “컴포넌트 인덱스" 기능 제공 -> https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-scanning-index 함수형 프로그래밍 지원 - > https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-fn 코틀린 지원 리액티브 프로그래밍 모델 지원 -> https://d..

Tistory

[Spring] multi datasource 동적으로 사용 - AbstractRoutingDataSource

사용이유 datasource 커넥션을 로직이나 상황별로 나눠야 하는 상황이 올 수 도 있고, 어플리케이션단에서 샤딩을 구현해야 할 수 도 있고, read 커넥션 및 write 커넥션의 datasource 를 나눠야 하는 경우가 있다. 애초에 다른 datasoure 파일을 만들어도 되지만, 동적으로 쿼리 요청시마다 datasource 를 변경해야 할 때 AbstractRoutingDataSource 를 사용하면 된다. AbstractRoutingDataSource란? spring-jdbc 모듈에 포함되어 있는 클래스로, 여러 DataSource를 등록하고 특정 상황에 맞게 원하는 DataSource를 사용할 수 있도록 추상화한 클래스이다. 구현방식 AbstractRoutingDataSource는 이름 기반..

Tistory

[spring] Mybatis batch upsert 하는 방법(mysql)

spring 에서 mybatis 로 bulk upsert 를 해줘야 할때 아래와 같이 작업을 했다. jpa 를 사용하면 saveall 메소드로 bulk upsert 가 가능했는데, mybatis 에서는 메소드를 직접 만들다 보니 그런게 없어서, 직접 만들어줘야 한다. 일반적으로는 pk 로 데이터 조회 후 없으면 insert 있으면 Update 를 해줘야 하나 매번 select 를 하기 db 커넥션도 아깝고 코드가 번거롭다. 하지만 mysql 에는 ON DUPLICATE KEY UPDATE 기능 이 있어 이미 데이터가 있다면 update 를 할 수 있다. 해당 방식은 INSERT를 하다가 PK값이 존재하면 UPDATE를 한다는 조건이 있는데 이 조건을 만족하기 위해 테이블에 무조건 PK값이 지정이 되어있어..

Tistory

[SPRING]스프링 어노테이션 정리

@Configuration @Configuration: 이 어노테이션을 단 클래스는 빈 설정을 담당하는 클래스가 된다. 이 클래스 안에서 @Bean 어노테이션이 동봉된 메소드를 선언하면, 그 메소드를 통해 스프링 빈을 정의하고 생명주기를 설정하게 된다. 자바 기반의 config가 싫다면 XML 쓰면 된다. @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 Bean을 부를 수 있다. @ComponentScan: @Configuration 어노테이션과 함께 쓰면, 이 클래스는 자바 빈 설정 클래스이며, 이 @ComponentScan 어노테이션에서 제공하는 package 속성을 통해 스프링 빈 범위를 정의할 수 있다. 복수개를 지정하고 싶..

Tistory

[spring boot] mybatis 연동 및 설정

spring boot 에서 mybatis 를 연동하는 법을 해보자 pom.xml org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 일단 pom.xml 에 mybatis 라이브러리부터 추가하자. dbms 에 맞는 driver 는 추가됐다고 가정하고 진행한다. 사용버젼 표 아래 표에 맞게 version 명시하면 된다. MyBatis-Spring-Boot-Starter MyBatis-Spring Spring Boot Java 2.2 2.0 (need 2.0.6+ for enable all features) 2.5 or higher 8 or higher 2.1 2.0 (need 2.0.6+ for enable all features) 2.1 - 2.4 8 o..

Tistory

[vue] vuex binding helper - vue store 사용하기

vue 에서 vuex 를 사용하여 store 를 만들면, getters 의 경우 this.$store.getters.[getter이름] 로 사용가능 actions 의 경우 this.$store.dispatch(‘[action이름]’, data) 과 같이 사용할 수 있다. 또는 직접 state 에 바로 접근해서 this.$store.state.book.message 로도 사용가능은 하다. helper 없이 기본적으로 사용 {{getMsg}} Click store/index.js store 를 하나만으로는 사용하기 어려우므로 기능별 또는 페이지별로 분리해야한다. 기능/페이지별로 store를 분리하고, 하나의 store에는 state, mutations, actions, getters를 포함해서 관리하는게 편..

Tistory

[Elasticsearch] 엘라스틱서치 bool query 사용

query_string 쿼리는 여러 조건을 조합하기에는 용이한 문법이지만 옵션이 한정되어 있다. 여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리들을 넣는 식으로 사용 가능하다. bool 쿼리는 4개의 인자를 가지고 있고, 그 인자 안에 다른 쿼리들을 배열로 넣는 방식으로 동작한다. must : 쿼리가 참인 도큐먼트들을 검색 must_not : 쿼리가 거짓인 도큐먼트들을 검색 should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높인다 filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않는다. must 보다 검색 속도가 빠르고 캐싱이 가능. GET /_search { "query": { "bool": { "must": [ { }, … ], ..

Tistory

[Java CompletableFuture]CompletableFuture 로 List 를 쓰레드 병렬처리 구현하기

CompletableFuture 하나만 있으면 비동기 처리 및 여러 병렬처리를 원하는 대로 할 수 가 있다. 여기서 코드 구현하려는 내용은 list 데이터가 있고, 각 list 의 item 이 http 커넥션을 통해 데이터를 가져오는 등 순차적으로 수행하기에는 시간소요가 오래걸랄때 쓰레드를 이용해 시간을 줄여보고자 한다. List list = itemRepository.findAll(); ExecutorService executorService = Executors.newFixedThreadPool(10); log.info(list.size() + "개"); List resultList = list.stream().map( item -> CompletableFuture.supplyAsync(() -> {..

Tistory

[Redis] 레디스 명령어

KEYS 패턴에 일치하는 모든키를 반환한다. 시간복잡도는 O(N) 이지만 시간은 적게 걸린다. 레디스는 40밀리 초 이내에 백만개 데이터를 스캔 가능하다. 주의 : KEYS 명령어는 조심스럽게 사용해야 하는데, 대규모 데이터베이스에서 실행되면 성능이 저하 될 수 있다. > KEYS 패턴 패턴 : h?llo => hello, hallo, hxllo h*llo => hllo, heeeeello, haaaaaallo h[ae]lo => hello, hallo, hillo (X) h[^e]llo => hallo, hillo, hello (x) h[a-b]llo => hallo, hbllo * => like 검색과 같음 > MSET one 1 two 2 three 3 four 4 --- > KEYS * one t..

Tistory

AKKA 샘플 예제 분석하기 - akka QUICKSTART java

Akka 솔직히 좀 개념이 좀 생소해서 어떨때에 어떻게 사용해야하는지 분간이 안가서 학습중이다. Akka 정의 Akka는 오픈 소스 툴킷으로, JVM 상의 동시성과 분산 애플리케이션을 단순화하는 런타임이다. pom.xml com.typesafe.akka akka-actor-typed_2.13 2.6.14 com.typesafe.akka akka-actor-testkit-typed_2.13 2.6.14 test AKKA 프로젝트 템플릿 다운로드 http://dev.lightbend.com/start/?group=akka&project=akka-quickstart-java AKKA 는 자바개발환경에서는 maven, gradle 로 실행 가능하고, 스칼라 사용시 SBT 로 빌드 후 사용 가능하다. 프로젝트를 ..

Tistory

[raspberry pi] 라즈베리파이 4 시작하기

라즈베리 파이를 미니 서버로 사용하기 위해 새로 구매를 했다. 세팅조차 처음이라 포스팅을 한다. 목차 1. Micro SD 카드에 라즈비안 이미지 라이팅(writing) 2. SSH 활성화 3. 라즈베리파이 동작 4. SSH 클라이언트 사용하여 라즈베리파이에 접속 1. Micro SD 카드에 라즈비안 이미지 라이팅(writing) 키트를 샀을때 sd 카드가 왔을거다. sd 카드를 pc 에 연결시켜 라즈비안 os 이미지를 sd카드에 업로드 해야한다. Raspberry Pi OS를 Micro SD 카드에 인스톨하기 위해 사용할 프로그램을 다운로드하여 설치해야한다. 윈도우, 맥, 리눅스 용을 다운로드 받을 수 있다. https://www.raspberrypi.org/software/ 라즈베리파이를 위한 운영체..

Tistory

vue cli 실행모드 설정 및 node 환경변수 설정(NODE_ENV)

실행 모드 vue cli 에는 기본적으로 3개 모드가 있다. vue cli 뿐 아니라 다른곳에서도 마찬가지. 1) development, 2) production, 3) test 그 외에 사용자가 정의한 모드를 추가 할 수 있다. 사용자 정의 모드 // 최상단 경로 /package.json "scripts": { .. 생략 // local 로컬 모드 추가 "local": "vue-cli-service serve --mode local", "mymode": "vue-cli-service serve --mode mymode", // 임의로 생성 .. 생략 }, > npm run local > npm run mymode 로 정의된 모드를 실행할 수 있다. 환경변수 실행 모드에 따라 변수 설정을 달리 할 수 있..

Tistory

vue3 에서 vuex4 시작하기 - module 관리

vue3 를 사용하게 되면 vuex4 를 사용하여 store 를 관리 할 수 있다. vuex 4 설치 npm install --save [email protected] store 작성 vuex 의 store를 module 형식으로 구성 |-- store | |-- index.js | |-- mutation-types.js | |-- modules | |-- person.js mutation-types.js : 뮤테이션 타입 정의를 담당 modules : vuex 에서 각 모듈들을 담아두는 폴더 index.js : vuex 의 store 를 정의 다음과 같은 구조로 해야 소스관리가 편하다. mutation-types.js 작성 export const PERSON = { SET_NAME: 'SET_NAME', // 이름..

Tistory

[spring JPA] column annotation 컬럼 매칭 레퍼런스

jpa 관련 어노테이션 @Column : 컬럼을 매핑한다. @Enumerated : enum 타입을 매핑한다. @Temporal : 날짜 타입 매핑한다. @Lob : BLOB, CLOB 타입을 매핑한다. @Transient : 해당 필드를 데이터 베이스에 매핑 시키지 않는다. @Access : JPA가 엔티티 접근하는 방식을 지정한다. @Column name : 필드와 매핑할 테이블의 컬럼 이름 insertable : 엔티티 저장시 이 필드도 같이 저장한다. false로 설정하면 데이터베이스에 저장하지 않는다. 읽기 전용일때 사용한다. updatable : 위와 동일한 하지만 수정일때 해당 된다. @Column(insertable=false, updatable=false) private String de..

Tistory

[spring boot] 스프링 firebase database 사용하기

firebase 가 클라이언트 사이드에서 구현하기 위한 severless db 로 많이 쓰이는데, 나 같은 경우는 db 를 구축하기 일단 비용 및 인프라가 없어서 간단히 만들려고 firebase 를 서버에서 사용하기 위한 db 로 일단은 선택했다. 일정량 이하는 free 로 사용할 수 있다. firebase 프로젝트 생성 대쉬보드에서 프로젝트 추가를 통해 프로젝트를 생성 console.firebase.google.com/ firestore Database 를 생성하자. 주의 할 것은 realtime database 와 firestore database 는 다르다. 다른 점으로는 과금 정책도 다르고, realtime 이 더 비싸다고 한다. 둘의 차이점은 아래 링크 문서에 있다. firebase.google..

Tistory

nodejs 와 node-sass 버젼 호환 : Node Sass does not yet support your current environment

node-sass 버젼과 node 버젼이 맞지 않을떄 빌드시 서버에서 다음과 같은 오류 가 낫다. npm ERR! code 1 npm ERR! path ~~~~node_modules/node-sass npm ERR! command failed npm ERR! command sh -c node scripts/build.js 로컬에서는 npm start 로 실행시 Syntax Error: Error: Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (88) 과 같은 오류가 난다. 오류 원인은 node 버젼이 해당 Node-sass 버젼을 지원하지 않기 때문에 발생한다 노드 버젼이 호환하는 ..

Tistory

[Telegram] 텔레그램 API 시작하기

업무하다가 웹사이트를 빈번하게 들어가서 검색하기 어려운 것들이 조금 있어서, 메신저에서 검색하고 싶은 내용들이 많아서 봇을 만들어 보려고 한다. 텔레그램 봇 기능 https://core.telegram.org/bots 에 명시된 기능 가능 텔레그램 bot api 문서 https://core.telegram.org/api 문서가 있지만 이거로 보고 개발하기 내용물이 많아 라이브러리를 사용하는게 낫겠다. 우선 이런 API 들을 사용하려면 키를 발급 받아야 한다. bot 만들기 및 API 키 발급하기 텔레그램 검색창에 BotFather 검색 후 말을 건다. BotFather 를 사칭하는 애가 ㅁ낳으니 위에서 처럼 로 체크된 공식 파더한테 말을 걸어라 방에 들어가면 위와 같이 help 메시지가 온다. /ne..

Tistory

[heroku] 시작하기 java 배포

사이드프로젝트를 배포하기가 자금적으로나 서버를 새로 띄우기 여간 번거롭다. 그래서 무료로 배포할 수 있는 heroku 를 사용해봤다. Heroku 사이트 : https://www.heroku.com/ heroku cli 다운 받기 컴퓨터에서 heroku를 사용하기 위해서는 Heroku CLI(command line interface)를 설치해야 한다. heroku login 설치하게 되면 command 창에서 heroku 명령어가 사용가능해 진다. 로그인 먼저 터미널에서 heroku login 을 하자 heroku login 배포 앱 준비 배포할 앱이 있어야 한다. 샘플로 헤로쿠에서 git 저장소를 만들어놨다. git clone https://github.com/heroku/java-getting-sta..

Tistory

[spring boot] 스프링 부트 h2 인메모리 db 시작하기

외부에 물리db 를 생성하기 어려울떄가 있다. 나 같은 경우 사이드 프로젝트를 하고 싶은데 물리 db 를 생성하기 부담스러울때 간단히 내부 db 를 사용하고 싶어 인메모리 h2 를 사용한다. h2 는 보통 프로덕션보다는 보통 test 용으로 사용한다. 왜냐면 휘발성이기 때문이다. 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스입니다. 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다. 스프링 부트에서 H2, HSQL 같은 인메모리, 디스크 기반 DB를 지원합니다. 라이브러리 추가 현재 spring boot 버젼 2.4.5 org.springframework.boot spring-bo..

Tistory

[DART API] 전자공시 API 사용하기

주식을 하다보면 공시를 확인해야 하는데 매번 사이트를 들어가서 공시를 보기 여간 불편하기 때문에 dart 에서 제공하는 api 를 사용해보자 전자공시시스템(DART ; Data Analysis, Retrieval and Transfer System)은 상장법인 등이 공시서류를 인터넷으로 제출하고, 투자자 등 이용자는 제출 즉시 인터넷을 통해 조회할 수 있도록 하는 종합적 기업공시 시스템이다. 오픈 API 를 신청하려면 아래 주소로 접속하자 opendart.fss.or.kr/intro/main.do 여기서 [인증키 신청]을 통해 접속할 수 있는 계정을 발급받고 더블어 인증키를 받자 [오픈API 이용현황] 메뉴를 들어가면 인증키가 바로 나온다. DART 오픈 API 개발가이드 - drive.google.co..

Tistory

[자바] Java 8 스트림 특징

자바8의 스트림 API 특징 선언형: 더 간결하고 가독성이 좋아진다. 조립할수있음: 유연성이 좋아진다. 병렬화: 성능이 좋아진다. 스트림이란 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소'로 정의..

Tistory

[Python] pip 설치

윈도우 설치 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py 위 명령어 전에 파이썬을 설치해야 한다. http://www.python.org/downloads

Tistory

[Python] python 으로 네이버 검색어 조회

사전작업 파이썬 설치 pip 설치 http 요청에 필요한 라이브러리 python requests 라이브러리 설치 pip install requests 검색어 파싱하기 원래는 html 파일 파싱하려고 했으나 2020 5월 19일 기준 네이버 검색어는..

Tistory

Github gist 사용해보기

블로그 플랫폼 관련된 글을 보면 종종 gist 라는 말이 나온다. github 에서 만든 코드 및 글을 공통으로 사용하기 위해 만든 저장소 라고 보면 된다. https://gist.github.com/ Discover gists GitHub Gist: insta..

Tistory

[Spring] 스프링 라이프사이클

빈 라이프사이클 관리 인터페이스 기반 InitializingBean 인터페이스 구현한 afterPropertiseSet 메소드 모든 인스턴스의 콜백을 한번에 지정 가능, 스프링과 결합을 해야함 빈 생성시 메소드 실행 init-method 빈..

Tistory

[Spring] 스프링 어플리케이션 kill 시키기

spring kill 시키기 SIGTERM 과 SIGKILL 주의해야할 것은 "정상(?) 종료" 되었을 때에 호출된다는 것이다. 무슨 말이냐면 애플리케이션이 종료될 때 일반적인 인터럽트는 SIGTERM 이라는 인터럽트다. 이 인터럽트(..

Tistory

[Spring Boot] 스프링 부트 시작 Main

STS > File > New > Spring Starter Project Intellij > File > new > project > Spring Initializr import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringB..

Tistory

Buy me a coffee 블로그로 후원받기

블로그및 사이트에 후원 위젯을 받을 수 있는 사이트를 소개하겠습니다. https://www.buymeacoffee.com/ Buy Me A Coffee | Where creators make money doing what they love Buy Me A Coffee is the best way for..

Tistory

[Spring] Mybatis SqlSessionFactory 란

SqlSessionFactory SqlSessionFactory는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체다. 이 객체가 DataSource를 참조하여 MyBatis와 Mysql 서버를 연동시켜준다. SqlSessionFact..

Tistory

[자바] Intellij 에서 javadoc 문서 만들기

Locale 을 ko_KR arguments 를 -encoding UTF-8 -charset UTF-8 -docencoding UTF-8  로 설정해주면 된다. 다음과 같이 설정해주면 output directory 경로에 index.html 이 생성되고 파일 클릭하면 자바문서를..

Tistory

jMeter 사용

1. 설치 및 실행 http://jmeter.apache.org/download_jmeter.cgi 여기서 binaries zip 파일 다운 받고 압춘 푼 뒤 bin 폴더에서 jmeter.bat 파일 실행 2. 설명 Name : 테스트 이름이다. 당연하지만 안 중요하다. C..

Tistory

http status 값 정의

응답값 정리 200 번대 응답(Response) : 성공(Success) 200 OK * 요청 정상 처리. 204 No Content * 요청 정상 처리하였지만, 돌려줄 리소스 없음. * 응답에 어떠한 엔티티 바디(Entity Body)도 포함하지 않음...

Tistory

[Spring] @Resource @Inject @Autowired 차이

@Resource 어노테이션 자바 표준,이름으로 찾을때 JSR-250 표준 어노테이션에 속한다. 의존성을 찾는 순서 이름 타입 지정자 @Inject 어노테이션 자바 표준,타입으로 찾을 때 JSR-330 표준 어노테이션에 속한다...

Tistory

[Spring] 스케쥴 설정

@Scheduled(cron="*/30 * * * * *") 시간 설정 @scheduled(cron=" ") * 리눅스 crontab 과 같은 설정방법 @Scheduled(cron="0 0 02 * * ?") // 매일 새벽2시에 실행 @Scheduled(cron="0 0 02 2,20 * ?") // 매월 2..

Tistory

[Spring] AOP 포인트컷 표현식

포인트컷 표현식 execution() : 가장 대표적이고 강력한 지시자로, 접근제어자, 리턴 타입, 타입 패턴, 메서드, 파라미터 타입, 예외 타입 등을 조합해서 메서드까지 선택가능한 가장 정교한 포인트컷을 만들수 있..

Tistory

[Oracle] Select SQL 실행순서

Select SQL 실행순서(오라클 SQL 기준) 1) FROM table(s) [alias] - FROM 절에 사용된 테이블을 인식하여 데이터 딕셔너리에서 관련된 정보들을 파악 2) [WHERE condition(s)] - WHERE절에서 조건에 맞는 데이터를..

Tistory

정리잘 된 개발 블로그 정리

제이 블로그 자바 관련 컨텐츠가 많습니다. 자바 뿐만 아니라 자바를 쓰면서 사용할 수 있는 devops 관련된 기술 블로그 또한 많습니다. https://pjh3749.tistory.com/ JayTech의 기술 블로그 개발, 알고리즘 등..

Tistory

[책 정리]Modern Java In Action 4장

Modern Java In Action 정리 Modern Java In Action을 읽고 내용을 정리해본다. 4장 스트림 소개 스트림(Stream) 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 자바8에 추가된 기능으로 스트림을..

Tistory

[책 정리]Modern Java In Action 5장

Modern Java In Action 정리 Modern Java In Action을 읽고 내용을 정리해본다. 5장 스트림 활용 필터링 filter() 메서드는 Predicate 를 인자로 일치하는 모든 요소를 포함하는 스트림을 반환한다. @Test public..

Tistory

[책 정리]Modern Java In Action 시작

https://www.hanbit.co.kr/support/supplement_survey.html?pcode=B4926602499 한빛출판네트워크 출판사, IT전문서, 대학교재, 경제경영, 어린이/유아, MAKE, 실용/여행, 전자책, 인터넷 강의 www.hanbit.co.kr 예..

Tistory

[책 정리]Modern Java In Action 6장

스트림으로 데이터 수집 Collectors 클래스로 컬렉션 만들고 사용하기 하나의 값으로 데이터 스트림 리듀스 하기 특별한 리듀싱 요약 연산 데이터 그룹화와 분할 자신만의 커스텀 컬렉터 개발 컬렉션(Collection),..

Tistory

[책 정리]Modern Java In Action 1장

자바 8, 9, 10, 11 무슨 일이 일어나고 있는가? 자바 역사를 통틀어 가장 큰 변화가 자바 8에서 일어났다. 자바 8에서 제공하는 새로운 기술 스트림 API 메서드에 코드를 전달하는 방법 인터페이스의 디폴트 메서..

Tistory

[책 정리]Modern Java In Action 2장

동작 파라미터화 코드 전달하기 소비자의 요구사항은 항상 바뀌기 마련입니다. 이런 변화하는 요구사항에 대해 효과적으로 대응하기 위해서 동작 파라미터화(behavior parameterization) 을 이용하면됩니다. 동작..

Tistory

CloudFront란

ClounFront 란 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스 CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를..

1 2