전체 글
인증과 인가란?
📖 인증이란? (Authentication) 보호된 리소스에 접근하는 것을 허용하기 이전에 등록된 유저의 신원을 입증하는 과정 📖 인가란? (Authorization) 요청된 리소스에 접근할 수 있는 권한이 있는 인증된 유저인지 입증하는 과정 인증된 사용자만이 인가 받을 수 있다. 인증된 사용자만이 인가받을 수 있다. 인가 받은 "인증된 사용자"만이 요청된 자료에 접근할 수 있다. 인증과 인가의 방법 인증하기 : Request Header 인증 유지하기 : 브라우저의 쿠키, Session 안전하게 인증하기 : Server 효율적으로 인증하기 : Token (Ex: JWT : Json Web Token) 다른 채널을 통해 인증하기 : OAuth 1. Request Header 사용자는 Request Hea..
그래프 간단 정리
그래프 EX) SNS 사용자와 사용자의 친구관계, 지하철 노선도 노드와 간선으로 이루어진 관련 용어 정점 (vertax) : 노드 간선 (edge) : 노드를 연결하는 선, 노드 간의 관계 인접 정점 : 하나의 간선에 의해 직접 연결된 정점 정점의 차수 : 정점에 연결되어 있는 간선의 갯수 구현 배열 : 인접행렬 (불필요한 공간 많이 차지) 연결리스트 : 인접리스트 ( 전체 정점을 표현한 후 각 노드별로 연결된 정점을 표현) 분류 [방향성에 따른 분류] 1. 방향 그래프 (A to B : ) 2. 무방향 그래프 ( A to B : (A, B) ) [연결에 따른 분류] 1. 연결 그래프 : 모든 정점 간의 경로가 존재하는 그래프 2. 비연결 그래프 : 무방향 그래프에서 특점 정점쌍 사이에 경로가 존재하지 ..
트리 간단 정리
트리 트리는 그래프의 한 종류로 무방향, 연결 비순환 그래프이다. 계층적인 구조 사이클이 없다. 노드가 N개인 트리는 N-1개의 간선을 가진다. 임의의 두 노드 간의 경로가 유일하다. 관련 용어 - 노드 - 루트 - 서브트리 - 차수 : 각 노드의 자식의 갯수 - 리프노드 : 자식없는 노드 - 레벨 (층을 나타내는 index) : 루트노드부터 0레벨 내려갈수록 1++ - 높이 :트리의 최대 레벨, (중간노드의 높이는 해당 노드가 루트노드가 되는 서브트리의 높이) 트리의 종류 이진트리 모든 노드의 차수가 2 이하인 트리 (모든 노드가 최대 2개의 자식 노드를 가짐) 이진트리의 모양에 따른 분류 포화 이진 트리(Full Binary Tree) : 레벨의 노드가 꽉 차 있는 트리 (높이가 h일 때 노드의 개수..
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 정리
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 테스트 코드 작성 TDD와 단위 테스트는 다른 이야기 ※ TDD : 테스트가 주도하는 개발 단위 테스트 기능에 대한 불확실성 감소 문제 발견 리팩토링, 라이브러리 업그레이드 후 기능 작동 확인 단위 테스트를 해야 하는 이유 톰캣을 내렸다 껐다 할 필요 없다. Print 찍어서 눈으로 확인하지 않는다 새로운 기능이 추가될 때 기존 기능이 잘 작동하는지 확인할 수 있다. JPA JPA의 등장 배경 데이터 베이스 모델링에 치중되지 않고 객체지향적으로 프로그래밍하도록 집중 관계형 DB와 객체지향적 언어의 패러다임 일치를 시켜줌 Spring Data JPA JPA는 인터페이스로서 사용하기 위해 Hibernate 같은 구현체가 필요한데, 구현체를 직접 쓰지않고 Spr..
[Git] Commit message 작성 규칙
Git Commit 메시지 관련한 글을 퍼옴 출처 : https://meetup.toast.com/posts/106 좋은 git 커밋 메시지를 작성하기 위한 7가지 약속 제목과 본문을 한 줄 띄워 분리하기 제목은 영문 기준 50자 이내로 제목 첫글자를 대문자로 제목 끝에 . 금지 제목은 명령조로 본문은 영문 기준 72자마다 줄 바꾸기 본문은 어떻게보다 무엇을, 왜에 맞춰 작성하기 커밋 메시지 성격 ⭐ feat : 새로운 기능에 대한 커밋 🛠 fix : 버그 수정에 대한 커밋 🧱 build : 빌드 관련 파일 수정에 대한 커밋 👏 chore : 그 외 자잘한 수정에 대한 커밋 ⚒ refactor : 코드 리팩토링에 대한 커밋 🎨 style : 코드 스타일 혹은 포맷 등에 관한 커밋 ✏ docs : 문서 수..
[SQL 구문] 차집합 (LEFT OUTER JOIN 이용)
SELECT A.test FROM _test AS A LEFT OUTER JOIN _test2 AS B ON A.id = B.id WHERE B.id IS NULL A - (A,B 교집합)
[SQL구문] Delete records with table join
DELETE A FROM _EmpInfo AS A JOIN _Emp AS B ON A.EmpSeq = B.EmpSeq /* DELETE 별칭 FROM 지울테이블 AS 별칭 JOIN 조인할테이블 ON 조건절 */ B 테이블과 조인시켜 해당되는 A 테이블의 레코드들을 지운다.
[PS] 그리디 알고리즘
그리디 알고리즘 현재 상황에서 가장 좋은 것만 고르기 ✨현재 상황만을 고려하고 나중에 미칠 영향에 대해서는 고려하지 않는다. ✨ 기준에 따라 좋은 것을 선택하므로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로' 등 기준을 제시한다. ✨ 정렬 알고리즘과 짝을 이룬다. 거스름돈을 생각한다. 해법 그리디 알고리즘으로 해법을 찾았을 때, 그 해법이 정당한지 검토해야 한다. 10000, 5000, 1000, 100, 50, 10 의 거스름돈의 경우 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 다른 해가 나올 수 없기 때문이다. 알고리즘 유형 유추 문제 유형을 파악하기 어렵다. 탐욕적인 해결법이 존재한다. 그래도 해결 방법을 못 찾겠다면 다이나믹 프로그래밍이나 그래프 알고리즘을 의심한..
ORM 과 SQL Mapper 비교
ORM vs SQL Mapper 얼마 전 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 라는 도서를 읽으며 처음 ORM이라는 기술을 접했다. 이전에 회사에서 접했던 스프링 프로젝트에서는 Ibatis 혹은 Mybatis(SQL Mapper)를 이용하여 직접 작성한 SQL문으로 RDB에 질의를 하고 그 결과를 객체에 매핑을 시켜줬었는데, 도서를 읽으며 토이프로젝트에 JPA라는 기술을 사용하니 SQL 구문을 직접 작성하지 않고 간단한 CRUD는 모두 처리할 수 있어 편리하였다. 지금까지 스프링 프로젝트를 진행하며 사용해본 기술에 대해 정리하고자 글을 작성한다. 📝 영속성(Persistence) 먼저 데이터가 갖는 특성 중 영속성을 알아본다. 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는..
[SQL] 기본키 채번, 마스터-디테일 채번, Serl 구조의 채번
🌸 기본 키의 구성 고유한 데이터를 식별하기 위해 테이블에는 기본 키가 존재해야 한다. 이때 기본 키를 어떻게 구성하는가에 따라 테이블의 관계를 표현할 수 있다. 크게 3개의 형태에 대해 키를 구성하는 방법에 대해 알아본다. 기본 키가 단일 키로 구성될 때(순번) 마스터 - 디테일 구조(부모의 순번을 갖고 자식의 순번을 채번) 마스터 - 디테일 구조(부모의 순번으로 일련번호를 채번) 1. 기본 키가 단일 키로 구성될 때 위와 같은 테이블이 있을 때, Key 값에 대해 채번을 한다. 1. 삽입할 데이터를 정렬시킨다. 2. 기존 테이블 키값의 Max값을 가져온다. 3. 삽입할 데이터들의 키값을 Max+1 부터 채번한다. // 위의 테이블의 경우 다음 데이터는 5부터 채번 2. 마스터 - 디테일 구조(부모의 ..