다이나믹 프로그래밍(동적 계획법)큰 문제를 작은 문제로 나누어 해결하고, 그 결과를 저장하여 동일한 작은 문제가 다시 등장했을 때 재계산하지 않고 저장된 값을 재사용하는 방식 아래의 조건을 충족해야 다이나믹 프로그래밍을 사용할 수 있다.🔥핵심 개념 : 부분 문제(Overlapping Subproblems) + 최적 부분 구조(Optimal Substructure)부분 문제 : 큰 문제를 작은 문제로 나누었을 때, 동일한 작은 문제가 여러 번 반복해서 나타나는 경우최적 부분 구조 : 문제의 최적 해결 방법이 그 하위 문제들의 최적 해결 방법을 조합하여 만들 수 있는 경우DP 해결 방식Top-Down (메모이제이션, Memoization)재귀(Recursion) + 캐싱(변수에 저장)큰 문제를 작은 문제로..
MapKey-Value로Key-Value로 데이터를 저장하는 ADT(추상 자료형)key는 중복될 수 없다.Associative Array, Dictionary라고 불리기도 한다.Hash Table(Hash Map)배열과 해시 함수(hash function)를 사용하여 Map을 구현한 자료 구조(일반적으로) 상수 시간으로 데이터에 접근하기 때문에 매우 빠르다.Hash Function임의의 크기를 가지는 type의 데이터를 고정된 크기를 가지는 type의 데이터로 변환하는 함수(hash table에서)임의의 데이터를 정수로 변환하는 함수예를 들어) "김철수" 라는 이름을 hash function을 거치면 20030이 나온다. 이렇게 해시를 통해"김철수"라는 이름이 중복되지 않게 유지한다.hash table은..
Set중복 허용 X순서 보장 X(순서를 보장하는 경우도 있음)Set은 ADT(Abstract Data Type)이다Set은 Interface이고 Set을 구현한 구현체인 HashSet, SortedSet 등이 있다.HashSetHashSet의 구현체는 HashMap이다.HashMap은 key:value로 테이블 형태로 데이터를 저장key는 중복X, value는 중복 OHashSet에서 사용하는 HashMap은 Key만 사용하고 Value부분에는 그냥 0,1 같은 dummy 값을 넣는다.HashMapkey:value로 데이터를 저장특징삽입, 삭제, 갱신, 탐색이 O(1)(상수) 시간에 처리된다.상수시간으로 데이터가 처리된다는 것은 아무리 데이터가 커지더라도 일정 시간 안에 데이터를 처리 가능하다.반대로, ..
SOP(Same-Origin-Policy)같은 출처의 자원만을 허용여기에서 "출처"라는 것은 다음 세 가지 요소로 구성된다.아래 세 가지 요소가 모두 같아야 동일한 출처로 본다.프로토콜: http, https호스트: www.example.com포트: 80, 443예를 들어http://www.ecample.com와 http://www.example.com/page2는 동일한 출처이다.- 프로토콜:호스트:포트가 모두 같고 Path만 추가되었기 때문이다.하지만, https://www.example.com과 http://www.example.com은 다른 출처이다.- 호스트:포트가 같더라도 프로토콜이 다르기 때문에 다른 출처이다.기본적으로 웹 브라우저는 SOP를 사용한다. 그래서 다른 출처에서 API요청 등을 ..
1. REST API란?? Representational state transfer의 약자로 2000년에 Roy Fielding(로이 필딩)의 논문에 처음 등장한 용어입니다. REST는 분산 하이퍼미디어 시스템의 구조화 스타일에 대해 다룹니다. ‘분산 하이퍼미디어 시스템’은 웹을 지칭합니다. 클라이언트와 서버 간의 효율적인 통신을 지원합니다. 2. REST 구성 자원(RESOURCE) - HTTP URI 행위(Verb) - HTTP METHOD 표현(Representations): 자원에 대한 행위의 내용 - HTTP Message Pay Load 3. REST의 특징 Uniform Interface(일관된 인터페이스) 리소스가 URI로 식별돼야 합니다. HTTP method로 리소스를 조작해야 한다. ..
안전한 클래스 설계를 설명하기 전에 Java에서 클래스에 대해 간략하게 설명하자면 클래스는 코드를 작성하기 위한 초기 단계, 즉 객체 설계도의 역할을 합니다. 객체 == 클래스라고 혼동해서는 안됩니다. 객체를 표현하기 위한 수단이 클래스일 뿐입니다. 1. 생성자를 통한 변수 초기화 public class User { private String name; private Team team; public User(String name, Team team) { this.name = name; this.team = team; } } 생성자를 통해 변수를 초기화하면 예상하지 못한 값이 들어올 수 있다. 매개변수에 전혀 관계가 없는 값을 넣거나 null을 넣어도 할당이 가능하기 때문이다. //잘못된 값 초기화 Use..
DTO란? DTO란 Data Transfer Object의 약자로, 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체이다. 여기서 계층이란 Presentation(View, Controller), Business(Service), Persistence(DAO, Repository)를 의미한다. DTO의 특징 데이터를 저장하는 용도로만 사용되어야 한다. 데이터에 대한 getter, setter 만을 가져야 한다. 저장, 조회를 제외한 어떠한 비즈니스 로직도 있어서는 안 된다. 하지만, 데이터 전송을 위해 직렬화, 역직렬화 메커니즘은 포함할 수 있다. 직렬화란 객체를 JSON, XML, 바이트스트림 등으로 변환하는 것을 의미한다. 역직렬화는 직렬화의 반대이다. 도메인 대신 DTO를 사용하는 이유 ..
JWT 토큰 기반 인증 토큰 기반 인증 사용자가 서버에 인증을 하는 방법은 다양하다. 스프링 시큐리티에서는 기본적으로 세션을 사용해서 인증을 한다. 하지만 내가 이번에 사용해 볼 방법은 토큰을 사용해 인증을 하는 방식이다. 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이다. 서버가 토큰을 생성해서 제공하면, 클라이언트가 이 토큰을 가지고 여러 요청을 토큰과 함께 한다. 서버는 토큰을 보고 유효한 클라이언트인지 검증을 한다. 토큰을 전달하고 인증 받는 과정 클라이언트가 회원 정보를 서버에게 전달하면서, 인증을 요청 서버는 회원 정보 유효성 검사를 한다. 유효하면 토큰을 발급한다. 클라이언트는 서버에서 발급 받은 토큰을 저장한다. 이후 인증이 필요한 API를 사용할 때 요청과 함께 토큰을 보낸다. 서..