일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 비동기
- 스프링부트 구조
- 로그인/로그아웃
- 어노테이션
- java I/O
- 스프링
- spring
- formmatted
- 프레젠테이션 계층
- RESTfull API
- 스프링 부트 테스트
- MSA
- 로그인 인증 흐름
- 작업명중복
- ./gradlew docker
- 스프링부트 계층구조
- http
- JPA
- ORM
- JWT
- 동기
- 토큰기반 인증
- @temproal
- 스프링부트
- 비즈니스 계층
- ./gr
- 퍼시스턴스 계층
- Java
- IPC
- 세션기반 인증
- Today
- Total
목록2024/04 (11)
[DEV] J-Jay

IPC(Inter Process Commuication) Async(비동기) 패턴의 한계→ 특정 상황들에서는 필연적으로 2번이상 데이터를 받을 가능성이 있다. Async(비동기) 통신을 활용해서 중요한 비즈니스를 하기는 어려울까? Q. Async에서는 2번이상 수신되는 것을 해결하고 싶으며, Sync에서의 장점으로 설명되었던 중요한 비즈니스에서도 리소스 활용을 최적화 해서 사용하고 싶다면 어떤 방법이 있을까? A. 멱등성(Idemptotent)이 필요한 상황을 식별한다.멱등성(Idemptotent) 이란? → 특정 호출이 1번 혹은 여러번 호출되더라도 서버의 상태는 1번 호출된 것과 동일해야 한다는 특성이다. 일반적으로 Update, Delete 요청은 멱등성을 가지며, Create 요청은 멱..

IPC(Inter Process Commuication) Async(비동기) 패턴 → Queue를 활용하여 Produce, Consume 방식으로 데이터 통신 MQTT (Message Queuing Templemetry Transport) - Spec ↓ 기능↓ 쓰지 않음- 경량 메시징 프로톸로로서, IoT 경량화가 최대 목적인 프로토콜- Publish, Subscribe, Topic 사용AMQP (Advanced Message Queuing Protocol)- 엔터프라이즈 레벨의 메시징 시스템을 위한 프로토콜- MQTT 개념 외에도, Exchange, Binding 등 개념 추가- Rabbit MQ, Active MQ... Publisher(발행자)는 Exchange(Routing 역할)만 바라본다..

IPC(Inter Process Commuication) Sync(동기) 패턴 HTTPOSI 7 응용 계층의 통신 프로토콜로서, L4 계층에서는 TCP 방식을 활용하는 프로토콜여러가지 종류의 메서드가 존재하지만 일반적으로 4개의 메서드를 활용한다. (GET, POST, PUT, DELETE)gRPC (google Remote Procedure Call)Protocol Buffer 라는 것을 기반으로 하는 원격 프로시저 호출 프로엠워크일반적으로 Server to Server Call 경우에 한해 사용빠르지만, 번거로운 작업과 위험이 수반 (ex stub파일 생성, type을 하나만 잘못 넣어도 전체 error)

IPC(Inter Process Commuication) 전 사전 지식 프로세스 간 통신 → 서비스 간 통신 → MSA IPC를 이용하기 위해서는 Network 통신이 어떻게 이루어지는지 이해가 필요하다.→ OSI 7 계층(Open Systems Interconnection), TCP/IP 모델OSI 7계층(Open Systems Interconnection), TCP/IP 모델 들은 한 곳에서 다른 곳으로 통신이 어떻게 되는지설명하는 모델이다. 논리적으로 이해 → TCP/IP (4 계층) 모델ISO 표준 → OSI 7계층 모델 IPC(Inter Process Commuication) 방식 일반적인 IPC 는 크게 2가지로 나눌 수 있다.Sync(동기) 방식 (Restful, Http, gRPC)→ 적..

"분해" 로 인해 생기는 문제 해결 방법 문제1: 수 많은 서버와 수 많은 서비스들은 어떻게 배포하고 관리 할 것인가?해결1: Container로 관리 → Docekr문제2: 그럼 많은 컨테이너는 또 어떻게 관리할 것인가?해결2: Container Ochestration로 관리 → K8S, docker-compose(경량)문제3: MSA환경에서의 모니터링(로깅, 메트릭, 트레이싱, 서비스 메시)은 어떻게 할 것인가?해결3(로깅)- 수많은 서버(IDC, CLoud 내의 수많은 서비스들의 로그들을 적절히 필터링 하여 누락없이 로그 저장소까지 전송- 수 많은 로그들을 적절히 인덱싱 하여, 필요 시 빠르게 다양한 조건으로 검색→ EFK, ELK해결3(메트릭, 얼럿)- 수 많은 서버(IDC, Cloud) 내의, ..

1. 모듈간 통신 → 서비스(프로세스) 간 통신 (개발자 입장) Method(Function) Call을 해서 → Network(http, grpc, ... ) 통신을 한다는 과정이라고 했을때,일반적인 상황에서는 모놀리식이든, MSA든 전혀 차이가 없다. 하지만! 항상 모든 이슈는 문제(장애) 상황에서 발생한다. 발생 가능한 문제들요청에 대한 처리량(throughput)이 급격히 하락↓→ 필요한 컴퓨팅 자원의 최적화 어려움 → 성능 하락 or 낭비 가능성http,grpc 프로토콜 상의 이슈로 문제가 생기는 경우 디버깅이 어려움→ Connection Pool 관리→ 한정된 리소스로인한 JVM 최적화가 더 어려워짐으로써 의도치 않은 결과 발생 가능성 ↑ → http, grpc 프로토콜에 디펜던시가 있는 지식..
코드를 실행하니 아래와 같은 에러가 발생했다.> Process 'command 'C:\Program Files\jdk-17.0.2\bin\java.exe'' finished with non-zero exit value 1* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights. 어라...? 해결방법1. 검색을 해본 결과 아래와 같은 방법을 시도 하면 된다고 하지만... 1. File > Settings 메뉴 클릭 (단축키: ctrl + alt + s) 2..
@Temproal JPA를 사용시, 엔티티의 날짜에서 사용되는 어노테이션이다. 자바는 보통 java.util.Date 객체를 사용하지만, DB는 날짜도 여러 형태가 존재한다.예를 들어, date(년월일), time(시분초), timestamp(년월일 시분초) 또는 datetime 등의 타입등이다. 따라서, @Temporal이라는 어노테이션을 사용하여, DB 타입에 맞도록 매핑할 수 있다. TemporalType.Date : 년-월-일 의 date 타입TemporalType.Time : 시:분:초 의 time 타입TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입 어노테이션을 사용하지 않을 경우 기본값은 timestam..
문제 >./gradlew docker 터미널에서 위 코드를 실행시 아래와 같은 에러가 발생했다. > Configure project : 서비스명 task Jar명 output files > Task :서비스명:docker FAILED ERROR: error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/_ping": open //./pipe/docker_engine: The system cannot find the file specified. FAILURE: Build failed with an exception. * What went..
1. 로컬 저장소(repository) 만들기 본인이 원하는 경로에 작업할 디렉토리를 생성 2. Git 저장소 초기화 (git init) git init 3. git add / git commit git add . git commit -m "커밋 메시지" 4. 로컬 저장소와 원격 저장소 연결(git remote) git remote add origin https://github.com/사용자이름/저장소이름.git 5. 로컬 저장소의 변경 내용을 원격 저장소로 Push (git push) $ git push -u [원격 저장소 이름] [로컬 저장소의 브랜치 이름]