분류 전체보기 645

grpcurl

grpcurl gRPC 서버와 통신할 수 있는 command-line tool gRPC 서버에 있는 RPC 메소드를 호출하는 것이 목적 secure/TLS 서버, plain-text 서버를 지원 Docker, 로컬에서 설치할 수 있다. grpcurl [flags] [address] [list|describe] [symbol] address는 다음과 같은 사항에서만 쓰이는 선택 옵션이다. list 또는 describe를 사용할 때 protoset 또는 proto flag가 주어질 때 list symbol은 fully-qualified service name symbol이 주어졌다면, 해당 서비스의 모든 메서드를 출력 symbol이 주어지지 않았다면, 모든 노출된 서비스가 출력되거나 protoset에 모든 ..

Framework/gRPC 2023.03.24

Abstract class(추상 클래스)

abstract class(추상 클래스) 하나 이상의 추상 메서드를 포함하는 클래스 다형성을 가지는 메소드의 집합을 정의하도록 한다. 반드시 사용되어야 하는 메소드를 추상 메소드로 선언해서 이 클래스를 상속받는 모든 클래스는 이 추상 메서드를 반드시 재정의하게 한다. 인스턴스를 생성할 수 없다. 상속을 통해 자식 클래스를 만들고, 자식 클래스에서 추상 메서드를 모두 오버라이딩해야 자식 클래스의 인스턴스를 생성할 수 있다. abstract class 클래스명{ abstract 반환타입 메서드명(); } abstract method(추상 메소드) 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 한다. 선언부만 존재 구현부를 자식 클래스에서 오버라이딩해서 사용 abstract 반환타입 메소드명(); 👇..

JAVA 2023.03.23

멀티 모듈 프로젝트

🟨 멀티 모듈 프로젝트 잘못 구성되면 나중에 변경할 때 힘들다. 🥹 프로젝트 초기에 이루어져야 하는 일련의 설계 과정 개발 생산성에 막대한 영향을 미친다. 무엇을 기준으로 멀티 모듈 프로젝트 구조를 나눠야 할까? Bounded Context 경계안에서 의미를 가질 수 있는 그룹을 정의한다. BOOT(Server), INFRA, DATA(Domain), SYSTEM(Cloud) 역할, 책임, 협력 관계가 올바른지 다시 한번 생각한다. 프로젝트가 커지고 있다면 다시 경계를 나누고 그 기준으로 소스 저장소를 분리 INFRA(외부) 라이브러리에는 DATA 관련 구현을 지향(Anticoruption Layer) 서비스 구현은 각자 역할에 맞게 각각 구현될 수 있다.(공통으로 한쪽에 구현 x) 시스템 레벨 구현이 ..

Architecture 2023.03.21

Gradle 7.1

build.gradle을 작성할 때 어느정도 기본은 알아야 하니까 ☺️ 구조 ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── app ├── build.gradle └── src ├── main │ └── java │ └── demo │ └── App.java └── test └── java └── demo └── AppTest.java gradle 👉 wrapper files를 위해 생성된 폴더 gradlew, gradlew.bat 👉 Gradle wrapper는 scripts를 시작한다. settings.gradl..

Gradle 2023.03.19

[파이썬] 17822. 원판 돌리기

문제 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀있고, i번째 원판에 적힌 j번째 수의 위치는 (i, j)로 표현한다. 수의 위치는 다음을 만족한다. (i, 1)은 (i, 2), (i, M)과 인접하다. (i, M)은 (i, M-1), (i, 1)과 인접하다. (i, j)는 (i, j-1), (i, j+1)과 인접하다. (2 ≤ j ≤ M-1) (1, j)는 (2, j)와 인접하다. (N, j)는 (N-1, j)와 인접하다. (i, j)는 (i-1, j), (i+1, j)와 인접하다. (2 ≤ i ≤ N-1) 아래 그림은 N = 3, M = 4인..

coding test 2023.03.16

gRPC

gRPC google에서 개발한 오픈소스 RPC(Remote Procedure Call) 프레임워크 HTTP/2를 사용한다. 한 커넥션으로 동시에 여러 개의 메시지를 주고 받을 수 있다. client application은 다른 컴퓨터의 server application에서 메서드를 직접 호출할 수 있다. ➡️ 분산 응용 프로그램 및 서비스를 쉽게 만든다. 원격으로 호출될 파라미터와 리턴 타입을 가지는 메서드를 작성한다. 서버 측에서 서버는 이 인터페이스를 구현하고 클라이언트 호출을 다루기 위해 gRPC 서버를 실행한다. 클라이언트 측에서 클라이언트에는 서버와 동일한 메서드를 제공하는 stub를 가진다. 서버와 클라이언트는 서로 다른 주소 공간을 사용하므로, 함수 호출에 사용된 매개 변수를 꼭 변환해줘야..

Framework/gRPC 2023.03.15

WebFlux

Spring MVC Servlet 기반으로 만들어졌다. sync + blocking 방식으로 동작 하나를 처리할 때 Response를 기다리며 thread를 지연 Multi Thread를 사용하면 block되지 않고 사용할 수 있지만, Thread 간의 Context Switch 발생 시 비용이 생겨 비효율적 WebFlux Spring5에서 새롭게 추가된 모듈 클라이언트와 서버에서 Reactive한 개발을 할 수 있게 도와줌 요청이나 응답을 처리하는 I/O를 async + non blocking으로 방식으로 수행 성능을 최대로 내기 위해서는 모든 I/O 작업이 non blocking 기반으로 동작해야 한다. I/O 작업이 block 되는 곳이 있다면 event loop meltdown 현상으로 다른 작업..

[파이썬] 16235. 나무 재테크

문제 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 칸에 대해서 조사를 한다. 가장 처음에 양분은 모든 칸에 5만큼 들어있다. 매일 매일 넓은 땅을 보면서 뿌듯한 하루를 보내고 있던 어느 날 이런 생각이 들었다. 나무 재테크를 하자! 나무 재테크란 작은 묘목을 구매해 어느정도 키운 후 팔아서 수익을 ..

coding test 2023.03.11

JWT 인증

JWT를 사용한 인증 구현 Access Token 보호된 자원(resource server)에 접근하기 위해 사용 Refresh Token 유효하지 않거나 만료된 Access Token을 재발급 받기위해 사용한다. 인증 서버에서만 사용되고 절대 resource server에 보내지는 일은 없다. (A) 클라이언트가 access token을 요청 (B) authorization server는 클라이언트를 인증하고 인증 권한이 유효하면 access token, refresh token을 발급해준다. (C) 클라이언트는 resource erver에 access token과 함께 요청을 보낸다. (D) resource server는 access token을 검증하고, 유효하면 요청을 실행 (E) access t..

Web 2023.03.09