사용자 자격증명 및 데이터 동기화 서비스모바일 인터넷에 연결된 다양한 기기에 설치된 앱에서 사용자 데이터를 손쉽게 관리할 수 있음Google Facebook, Amazon 같은 로그인 서비스를 사용한 소셜 로그인 및 Guest 로그인 지원Guest 사용자들은 로그인하지 않고 앱을 사용할 수 있으며, 나중에 로그인 서비스를 사용해 프로필을 만들어도프로필 데이터가 그대로 이전 Amazon Cognito를 사용하면 어떤 종류의 사용자 데이터나 키-값 쌍으로 저장할 수 있음환경설정이나 게임 진행상황 등 여러분의 앱에 필요한 것이라면 뭐든지 Cognito를 사용하면 네트워크, 저장소, 동기화 문제도 없고 백엔드 구축이 필요 없음Cognito API를 사용해 사용자 데이터를 저장하고 동기화하면 됨(그것이 전부)사용..
AWS SAM(Serverless Applicaion Model)- 서버리스 애플리케이션을 만드는 오픈소스 프레임워크- JSON/YAML- 클라우드 포메이션(IaC) 스택 형태로 배포되는 형태로 만들수 있음(카나리 블루/그린 배포) SAM TEMPLATE- Lambda function- IAM role- API Gateway- DynamoDB table SAM CLI를 통해서 로컬에서 개발하고 테스트할 수 있는 기능을 제공 sam local을 이용해서 로컬에서 람다 서버를 실행이 되고 로컬에서 람다 환경(서버리스 애플리케이션 환경) 컨테이너가 뜨게 되고 컨테이너 안에 환경이 property의 환경이 적용되서 로컬에서 컨테이너로 뜨게 됨 sam template 안에 서버리스 애플리케이션의 정의가 되어있..
요즘 대세는 컨테이너(Container) 환경, 쿠버네티스 클러스터(Kubernetes Cluster), 마이크로서비스(MicroService)데브옵스(DevOps) 이런 형태로 구체화되는 클라우드 네이티브(Cloud Native) 환경클라우드 네이티브(Cloud Native) 환경- 위에서 언급한 클라우드 환경에 쿠버네티스 클러스터 및 MSA 서비스가 올라가고 애플리케이션 올라가는 형태 모놀리식 아키텍쳐 (Monolithic Architecture)- 마이크로서비스 아키텍처와 상반된 개념으로 마이크로서비스 아키텍처 이전의 전통적인 아키텍처- 하나의 애플리케이션 뭉쳐져 있음(패키지 형태) 마이크로서비스(MicroService)- 단일 책임 원칙에 맞추어 잘게 쪼개어진 독립적인 빌드/배포가 가능한 최소 ..
플랫폼 엔지니어링은 기존의 데브옵스와 신뢰성 엔지니어링과 비교하면 그 특징이 확연히 드러남 과거의 온프레미스 환경: 개발 조직과 운영 조직이 분리되어 있는 경우가 많았음 클라우드가 대세가 되면서 개발한 사람이 운영도 하는 데브옵스 환경 도입 각 데브옵스 기반 개발팀이 좀 더 신뢰성 있는 서비스를 운영할 수 있도록 모니터링 같은 부분만 빼서 공통 운영 조직을 만드는 것이 바로 SRE 조직 플랫폼엔지니어링은 여기서 좀 더 나아가서, 공통 인프라 세팅, 보안 규정 준수 같은 중복되는 영역을 완전히 빼서 사내 개발자 도구를 만들어주는 것이 세 가지 방법은 어는 것이 더 나은 게 아니라 조직에 따라 선택할 수 있는 것 플랫폼엔지니어링은 규모가 큰 조직에서 클라우드 복잡성이 커졌을 때 채택하면 좋음 애플리케이션 ..
테넌트: B2B 비즈니스(고객사) / B2C (소프트웨어 최종 사용자) / SaaS 설계 (테넌트 인증/로깅) SaaS 테넌트별 소비 패턴 파악(사용량 기반 SaaS 비즈니스 핵심) 컨테이너: 리소스 효율 (비용 효율성) 관리형 서비스(EKS): 관리 부담을 낮추면서 고가용성 및 높은 확장성 제공 매니지드 워커 노드 + 파게이트 등 옵션을 더하면서 관리의 부담 경감시키는 장점 테넌트 간 환경을 공유하면서 인프라 활용도를 높이는 구조를 가져감 테넌트를 나누는 주된 요인 - SaaS 멀티테넌트는 한 회사의 여러 팀이 가지는 멀티 테넌트와 비교해본다면 각 테넌트가 서로 다른 이해 조직 -> 첫번째 고려사항 보안 / 컴플라이언스(A테넌트의 데이터가 B에게 노출된다면 SaaS 솔루션의 신뢰성을 심각하게 훼손)-보..
AWS EC2: Amazon Elastic Compute Cloud(EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 제공하는 웹서비스사용자는 간단한 웹 서비스 인터페이스를 이용하여 간편하게 필요한 용량으로 서버를 구성 할 수 있음컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 컴퓨팅 인프라에서 실행할 수 있음 컴퓨팅 머신: 다양한 크기 타입 / CPU 코어 개수 등 여러가지를 제어할 수 있음간단한 인터페이스를 통해 서버를 구성할 수 있음아마존이 만들어놓은 하드웨어 인프라에서 실행 가능 SSH(Secure Shell Protocol):네트워크 프로토콜 중 하나로 보통 클라이언트(컴퓨터)와 서버(컴퓨터)가 인터넷과 같은 Network를 통해 통신을 할 때, 보안적으로..
도메인 지식만 많으면 넌 주니어! 개발자 포프님의 유튜브를 보면서 요새 느끼는 감정에 대해 생각해봤다. SM 업무에 약 2년간 종사하다보니 도메인 지식(맡고 있는 업무의 배경지식)을 잘 정리하면 운영 및 개발 업무를 하는데 큰 도움이 된다. 문제점 1) 구현에 급급하여 기존에 있던 레거시 코드의 내용을 이해하지 않고 복붙하여 살짝 소스 코드를 수정한 점 2) 가독성이 좋은 코드를 짜기 위해 고민을 하지 못했던 점 3) API 및 비즈니스 로직 설계 등의 역량을 키우는데 미진했다는 점 4) 여러 업무에 동기들이 많았음에도 불구하고 전체적인 시스템 구성을 열심히 파악하지 않은 점 개발자는 금융/제조/유통/서비스/게임 어떠한 도메인에 가더라도 코드로 퍼포먼스를 내야 한다고 생각한다. 그런 의미에서 나는 도메인..
46회 SQLD 합격예정!!! ㅋㅋㅋㅋ 사내에 자격증 지원금 제도가 있어서 시험 신청해서 벼락치기로 준비한감이 없지 않아 있는데 합격했다!! 9월 1일날 비 오는날 시험 보러 갔는데 수험생은 대학생 친구들이 많아 보였다 46회는 주관식이 4문제였나? 5문제 밖에 안 나와서 부담이 덜했다. 자잘한 문법 물어보면 틀릴뻔..... 솔직히 1과목 과락 나오지 않을까봐 조마조마 했었는데... 시험장 나오는 순간까지 그래도 결과는 3개 틀렸네.... ㅋㅋ 2과목은 롤업이랑 큐브 그룹핑 문법을 숙지 못해서 그 부분 문제는 거의 찍다시피 했다...... 근데 생각보다 마니 출제되었다는............ 같은 번호로 긋기.... 다음 시험 준비하는 분들은 해당 부분 마니 준비해가면 좋을듯 노랭이책 풀고가는 거 강추
싱글톤 패턴: 인스턴스 하나만 생성해야할 객체를 위한 패턴 개발 요구 사항: 개발 중에 시스템에서 스피커에 접근할 수 있는 클래스 생성 public class SystemSpeaker { static private SystemSpeaker instance = new SystemSpeaker(); private SystemSpeak() { } public static SystemSpeaker getInstance() { return instance; } } 이렇게 하면 안된다 public class SystemSpeaker { static private SystemSpeaker instance; private SystemSpeak() { } public static SystemSpeaker getInsta..
OSI 7 LAYER OSI 7계층이란 캡슐화(Encapsulation): 데이터를 전송할 때 각각의 계층마다 별도로 인식할 수 있는 헤더를 각각 붙이는 작업 디캡슐화(De-Encapsulation): 데이터가 전송 매체를 통해 전송된 후 헤더가 벗겨지게 되는 것 각 계층은 아래 계층의 데이터가 됨. Payload: 직전 계층에서 내려오는 부분 각 계층마다 요청(Request)와 응답(Response)의 상호작용 서버와 클라이언트 관계 PDU(Process Data Unit): 각 계층에서의 데이터 단위 구분 1계층: 물리 계층(Physical Layer) 전기, 물리 신호 계층 전기 공급부터 장비끼리의 물리적인 연결을 위한 랜 케이블 등 전기적/물리적인 모든 것 단위 Bit (전기적 신호 0 or 1)..
코드업 100제 자바[1020-1029] 1020 import java.io.*; public class Ex1020 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String[] number = br.readLine().split("-"); for(String x: number){ bw.write(x); } bw.flush(); bw.close(); } } 1021 impor..
HTTP 요청 GET /kakao HTTP/1.1 Host: naver Content-Type: application/json Content-Length: 20 { "id": "춘식" } naver에 http GET 메서드를 이용해 kakao라는 리소스를 요청한다는 뜻이다. 따라서 서버는 자기 주소를 제외한 /{리소스} 부분을 이해하고 또 이 요청이 어떤 HTTP 메서드를 이용했는지 알아야 한다. 그 후 해당 리소스의 HTTP 메서드에 연결된 메서드를 실행해야 한다.
REST: Restpresentational State Transfer 아키텍처 스타일: 반복되는 아키텍처 티자인 REST 6가지 제약조건 클라이언트-서버 클라이언트-서버: 리소스(REST API가 리턴할 수 있는 모든 것 ex: HTML, JSON, 이미지 등)를 관리하는 서버가 존재하고 다수의 클라이언트가 리소스를 소비하려고 네트워크를 통해 서버에 접근하는 구조 상태가 없는 stateless 상태가 없다: 클라이언트가 서버에 요청을 보낼 떄 이전 요청의 영향을 받지 않음 HTTP: 기본적으로 상태가 없는 프로토콜 로그인 예시 - 클라이언트는 서버에 요청을 할 때마다 요청에 리소스를 받기 위한 모든 정보를 포함해야 한다. 서버는 로그인 상태를 유지하지 못하므로, 요청을 보낼 때마다 로그인 정보를 항상 ..
@Builder Builder는 오브젝트 생성을 위한 디자인 패턴 롬복이 제공하는 해당 어노테이션을 사용하면 Builder 클래스를 따로 개발하지 않고 Builder 패턴 사용해 오브젝트 생성 이렇게 빌더 패턴을 사용하는 것은 생성자를 이용해 오브젝트를 생성하는 것과 비슷하다. 생성자를 이용하는 것과 비교해 장점이 있다면 생성자 매개변수의 순서를 기억할 필요가 없다는 점. EXAMPLE CODE Car sonata = Car.builder() .id("가2056나") .userId("강백호") .title("ef sonata") .build(); @NoArgsConstructor 매개변수가 없는 생성자를 구현 EXAMPLE CODE public Car() { } @AllArgsConstructor 클래스..
코드업 100제 자바[1010-1019] 1010 import java.io.*; public class Ex1010{ public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int number = Integer.parseInt(br.readLine()); bw.write(String.valueOf(number)); bw.flush(); bw.close(); } } 1011 import ..
[BOJ/백준] 13913 - 숨바꼭질 4 파이썬/Python3 https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 숨바꼭질 시리즈 중에 4번째 공통된문제: 수빈이의 최소 소요 시간 추가된 요구 조건: 수빈이의 탐색 경로를 함께 제시 수빈이가 탐색한 경로를 어떻게 출력해야 될지를 고민했던 문제 [문제해결방식] 1. 수빈의 최소 이동 시간 1) 수빈이는 3가지 선택지가 있다. 현재 위치를 기준으로 -1칸, +1칸, ..
BOJ 1167 - 트리의 지름 파이썬 https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net 트리의 지름 구하기 - 정형화된 문제 패턴 1. 트리의 지름: 가장 먼 두 노드 사이의 거리 2. 선형 시간 안에 트리의 지름을 구하는 방법 1) 트리에서 임의의 노드 X를 설정 2) 노드 X를 기준으로 가장 먼 노드 Y를 탐색한다. 3) 노드 Y를 기준으로 가장 먼 노드 Z를 탐색한다. 4) 트리의 지름: 노드 Y와 노드 Z 사이의 거리 자..
[BOJ/백준] 23288 주사위 굴리기2 파이썬/Python3 주사위 굴리기 2 성공 https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 1. 문제 풀이 1. 해당 문제는 기존에 출제되었던 주사위 문제의 업그레이드 2. 문제에 주어진 대로 구현하면 해결할 수 있는 문제 (주사위 인덱스를 변경하는 과정에서 실수가 잦을 수 있음) 3. bfs 탐색 알고리즘을 활용해서 주사위의 밑면의 수와 같은 수로 이루어진 칸이 몇 칸인지를 찾기 ..