[AWS] API Gateway란?
·
AWS
📌 API Gateway 규모와 관계없이 REST 및 WebSocket API를 생성, 관리, 모니터링 및 보호하기 위한 AWS 서비스공식문서에서는 위와 같이 설명한다.쉽게 말하면, API Gateway는 클라이언트(웹, 앱)가 서버의 다양한 API와 직접 통신하지 않고, 하나의 입구를 통해 통신하게 해주는 역할을 한다. 예를 들어, 앱이 아래처럼 여러 API를 갖고 있다고 가정하자.https://auth.myapp.com/loginhttps://contract.myapp.com/uploadhttps://user.myapp.com/profile클라이언트에서는 여러 도메인 또는 포트로 각각 호출해야 한다. 이는 번거롭고 나중에 백엔드 구조가 바뀌면(ex. API 앞 주소가 바뀜) 클라이언트도 다 바꿔..
[Spring Boot] OAuth와 애플 로그인
·
Spring Boot
💡 Apple Login 구현에 필요한 전체 흐름1. 클라이언트 → Apple 로그인 요청 (Apple SDK or WebView)2. 애플 로그인 성공 → authorization code 수신3. 클라이언트 → 서버로 code 전달4. 서버 → 애플 서버에 code와 함께 토큰 요청 (OAuth)5. 애플 → id_token (JWT) 응답6. 서버 → id_token 파싱 → 사용자 정보 추출7. 서버 → DB에서 사용자 조회 or 신규 저장 (JPA)8. 서버 → 우리 앱용 JWT 발급 → 클라이언트 응답 5~8번은 전 글에서 다뤘으니 생략하며, 본 게시글은 1~4번 내용을 다룬다. 📌 OAuth 2.0다른 서비스의 인증 정보를 빌려서 로그인할 수 있게 해주는 표준 프로토콜 예를 들어, 우..
[Spring Boot] JWT란?
·
Spring Boot
Spring Boot에서 애플로그인을 구현하기 전에 JWT를 학습한다. 📌 JWT (Json Web Token)JWT는 인증 정보나 사용자 데이터를 안전하게 담아서 전달하기 위한 토큰이다. 로그인 상태를 증명하거나 사용자 정보를 주고받을 때 쓰이는 문자열이다. 즉, JWT는 서버가 사용자에게 로그인 상태를 기억시키기 위한 방식이다. JWT는 서버가 로그인된 사용자의 인증 정보를 토큰에 담아 클라이언트에게 전달하고, 이후 요청마다 이 토큰을 통해 인증을 확인하는 방식이다. JWT는 3개의 부분(헤더, 페이로드, 서명)으로 나뉘며, 각각은 . 으로 구분된다. 구성 요소 설명Header토큰의 타입과 서명 알고리즘 (예: HS256)Payload사용자 정보(Claims)가 담긴 부분 (예: userId, em..
[Spring Boot] JPA란?
·
Spring Boot
📌 JPA 란?ORM (Object-Relational Mapping)객체(Object)와 데이터베이스 테이블(Relation)을 매핑(Mapping)해주는 기술이다.즉, 자바의 클래스와 DB의 테이블을 1:1로 연결해서, SQL을 직접 작성하지 않아도 자바 코드만으로 데이터를 저장하거나 조회할 수 있다.객체와 쿼리를 분리해 복잡도를 줄이고, 트랜잭션 처리나 기타 데이터베이스 관련 작업들을 좀 더 편리하게 처리할 수 있다. JPA (Java Persistence API)JPA는 자바의 ORM기술을 쉽게 사용할 수 있도록 표준화한 API이다. JPA를 사용하면 객체와 관계형 데이터베이스 간의 매핑을 손쉽게 처리할 수 있다. 즉, JPA는 '어떻게 동작해야 한다'는 규격만 정의하고, 실제 구현은 Hibe..
[AWS] Amazon OpenSearch
·
AWS
📌 OpenSearch대용량 데이터를 빠르게 검색하고 분석할 수 있는 오픈소스 프로젝트 기능웹사이트 검색 기능 (검색창 만들기)서버 로그 분석 (DevOps, 모니터링)사용자 행동 분석 (실시간 데이터 시각화)머신러닝 기반 이상 탐지 (Anomaly Detection)SQL로 데이터 조회시각화 도구(OpenSearch Dashboards)로 차트 만들기 장점1. 빠르다: 수억 건의 데이터도 빠르게 검색하고 필터링한다.2. 확장 가능: 데이터가 많아지면 노드를 늘려서 처리할 수 있다.3. 오픈소스: Apache 2.0 License 분산형인 이유?분산형은 데이터를 여러대의 서버에 분산해서 하나처럼 묶어 처리하는 구조를 말한다.데이터가 너무 많아지면 한 대의 서버로는 부족하므로, OpenSearch는 분산..
[AWS] 서버리스와 AWS Lambda
·
AWS
📌 서버리스(Serverless)'서버리스'란 용어가 서버가 없다는 뜻이 아니다. 개발자가 서버를 프로비저닝할 필요 없이 어플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 개발 모델이다. 사용자는 코드 작성에만 집중하고, 나머지 인프라 관리는 AWS가 담당하며, 배포 후 오토스케일링된다. 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드(요청이 있을 때만)로 실행된다. 따라서, 기능이 유휴 상태일 때는 아무 비용도 들지 않는다. 장점1. 서버 관리 부담 완화(오토스케일링): 서버를 프로비저닝, 유지 관리, 스케일링할 필요가 없음2. 비용 효율성: 실제 실행 시간에 대해서만 비용을 지불하면 됨3. 개발자 생산성: 인프라 관리의 필요성과 배포 설정이 줄어듬단점1. 복잡한 아키텍처: ..
[AWS] Bedrock과 Knowledge Base
·
AWS
AI foundation model을 쉽게 사용할 수 있는 AWS의 완전 관리형 서비스 📌 핵심 특징1. FMs (Foundation Models)지원 모델: Amazon(Nova, Titan), Anthropic(Claude), Deepseek, Meta(Llama), A21 Labs(Jamba) 등FM은 대규모 데이터로 미리 훈련된 AI 모델들을 뜻한다. Bedrock을 통해 다양한 벤더의 모델들을 제공받을 수 있으며, 하나의 통합된 API로 여러 모델을 사용할 수 있다.여러 모델 간 테스트 및 비교를 통해 나에게 가장 적합한 모델을 선택한다. 보안 걱정 없이 안전하게 사용 가능하다. 2. 서버리스Bedrock은 서버리스 서비스이므로, 인프라 관리가 필요 없다. 빠르게 AI 서비스를 구축할 수 있다..
[ArgoCD] ApplicationSet 컨트롤러의 Application 리소스 수정 제어하기
·
ArgoCD
❗️ 부모 ApplicationSet이 삭제되면 다같이 삭제되므로, 방지할 무언가가 필요하다. ApplicationSet 컨트롤러는 Application 리소스를 언제, 어떻게 수정할 지 제어할 수 있다.예를 들어, 하위 Application을 삭제하지 못하도록 제한할 수 있다. 다음과 같은 제어가 가능하다. Application 리소스에 대한 수정 시점 및 방식 제어해당 Application이 관리하는 클러스터 리소스(Deployment, Service 등)에 대한 영향 제어1️⃣ ApplicationSet 수정 정책 (syncPolicy)ApplicationSet 컨트롤러는 Argo CD Application 리소스에 어떤 변경을 허용할지 제어할 수 있다.다음 네 가지 값 중 하나를 가질 수 있다...
[ArgoCD] ApplicationSet과 App of Apps 패턴 비교
·
ArgoCD
GitOps와 ArgoCDGitOps: Git을 토대로 인프라와 어플리케이션 상태를 관리하고 자동으로 동기화하는 운영 방식.ArgoCD: Kubernetes 환경에서 GitOps를 실현하는 배포 도구 GitOps에서 요구하는 원칙은 다음과 같다. 1. 배포 방법이 명령형이 아니라 선언형이다.사용자가 원하는 상태(desired state)를 선언적으로 Git에 정의했다.2. Git을 이용한 배포 버전 관리git에 모든 배포에 관련된 정보가 정의되어 있어야 하며, 각 버전이 git에 기록되어야 한다. 이를 통해 쉽게 이전으로 롤백하거나 새 버전으로 업그레이드할 수 있다.3. 변경 사항의 반영 자동화Git에 변경 사항이 생기면 배포가 자동으로 이루어져야 한다. 이것을 책임지는 주체가 ArgoCD와 같은 배포..
[Networking] gRPC 개요
·
Golang
📌 RPC(Remote Procedure Calls)분산 시스템에서 편하게 프로그래밍하기 위해 등장한 모델로, 네트워크를 통해 서로 다른 시스템에 있는 프로그램들이 마치 로컬 함수인 것처럼 서로의 기능을 호출할 수 있도록 해주는 프로토콜이다. 클라이언트- 서버 간의 커뮤네케이션에 필요한 상세 정보는 최대한 감추고,개발자는 각 로직에만 집중할 수 있도록 클라이언트, 서버는 일반 메소드를 호출하는 것처럼 개발을 진행한다. RPC를 위한 3가지 구성 요소caller/callee: caller는 RPC를 요청하는 쪽(클라이언트), callee는 요청받아 작업을 수행하는 쪽(서버)Caller: 개발자가 원하는 비즈니스 로직 작성 및 IDL로 호출할 함수 정의.Callee는 호출할 함수의 실제 구현을 작성한다..