일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- quicksort
- g1gc
- datatype
- Kotlin
- 기초
- SpringBoot Initializr
- Fluent-bit
- C++
- If
- JavaScript
- JPA
- zgc
- Java
- ansible
- jvm
- redis
- programmers
- Algorithm
- lambda
- Class
- While
- For
- 연산자
- MergeSort
- IAC
- 자료형
- UserDetails
- datastructure
- Spring Security
- Sprint Security
- Today
- Total
목록전체 글 (78)
뭐라도 끄적이는 BLOG
implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-web' 사용한 Dependency는 2가지 이다. spring: data: redis: host: 192.168.0.18 port: 6379 spring boot 2.x버전에서는 spring.redis.host와 spring.redis.port에 설정을 하지만 spring boot 3.x부터는 spring.data.redis에서 설정을 해야 한다. @RestController public class HelloController { @Autowired StringRed..
Redis (Remote Dictionary Server) Redis는 아래 3가지 용도로 주로 사용된다. Storage: 데이터 저장소의 역할을 한다. Database: DBMS의 역할을 수행할 수도 있다. Middleware: 어플리케이션이 이용할 수 잇는 유용한 기능을 제공한다. In Memory DB이기 때문에 빠르게 데이터를 저장및 읽을 수 있다. 하지만 휘발성이기 때문에 중요한 데이터를 저장하기 보단 Session과 같은 단기적인 데이터 또는 Cache로 사용하여 빠르게 데이터를 불러오는데 사용한다. 어느정도 영속성도 확보할 수 있긴 하지만 절대적인 무결성을 위해서는 데이터베이스를 이용하는 것이 맞다. Redis는 Key-Value 저장서로 List, Hash, Set, 정렬된 Set등 여러 ..
import java.util.*; public class DijkstraProblem { public static void main(String[] args) { /** * Dijkstra 문제를 풀 때 사용한 Java Code */ int v = 5; // vertex 갯수 int e = 6; // edge 갯수 int[][] nodes = {{5,1,1},{1,2,2},{1,3,3},{2,3,4},{2,4,5},{3,4,6}}; // node, node, 거리 Integer start = 1; // 시작 노드 Map graph = new HashMap(); Map dist = new HashMap(); Set visited = new HashSet(); for (int i = 1; i !visite..
Inventory Ansible은 인프라에 존재하는 여러 호스트를 관리한다. 호스트의 목록 또는 그룹을 지정한 호스트를 관리할 수 있는 파일이 필요한데 이것이 Inventory이다. Inventory가 정의되면 패턴을 사용하여 Ansible을 실행할 노드 또는 그룹을 선택할 수 있다. 기본 인벤토리 파일은 `/etc/ansible/hosts`이며, `-i` 옵션을 사용하면 다른 인벤토리 파일을 지정할 수 있다. Inventory 파일은 INI또는 YAML 형식이다. 아래 같은 설정을 다른 파일 형식으로 표기한 예시이다. INI 형식 YAML 형식 mail.example.com [webserver] foo.example.com bar.example.com [dbservers] one.example.com ..
Servlet Filtes Spring Security는 Servlet Filter를 기반으로 Servlet을 지원하므로, Filter의 역할을 살펴보는 것이 이해에 도움이 된다. 다음 이미지는 단일 HTTP 요청을 처리하는 일반적인 레이어를 보여준다. 클라이언트가 어플리케이션에 요청을 보내면 컨테이너는 요청 URI Path를 기반으로 HttpServletRequest를 처리해야 하는 Filter로 구성된 FilterChain을 생성한다. Spring MVC 어플리케이션에서 Servlet은 DispatcherServlet 인스턴스이다. 단일 HttpServletRequest 및 HttpServletResponse처리는 최소 하나의 Servlet이 담당한다. 하지만 둘 이상의 Filter를 사용할 수 있다..
SQL 중심적 개발의 문제점 현대적인 애플리케이션을 개발할 때 대부분은 객체지향 언어를 사용한다. 그리고 우리는 데이터를 저장하기 위해 관계형 데이터베이스를 사용한다. NoSQL이 많긴 하더라도 주요 DB는 오라클이나 MySQL과 같은 관계형 데이터베이스를 더 많이 사용한다. DB-Engines Ranking Popularity ranking of database management systems. db-engines.com 이렇다 보니 현재는 객체를 관계형 데이터베이스에 저장해야 되고, 저장한 데이터를 사용하는 것도 관계형 데이터베이스 테이블에서 객체로 불러와야 한다. 여기서 문제점이 발생한다. 관계형 데이터베이스는 SQL만 알아들을 수 있기 때문에 애플리케이션에선 SQL을 만들어서 보내주어야 한다. ..
JPA는? 과거에는 EJB라는 기술표준의 엔티티 빈이라는 ORM기술을 사용했지만 너무 복잡하고 기술 성숙도도 떨어졌으며 자바 엔터프라이즈 애플리케이션(J2EE) 서버에서만 동작한다는 문제점이 있었다. 여기서 ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. EJB를 사용하던 한 개발자가 이러한 문제들을 해결하고자 hibernate라는 오픈소스를 탄생시켰다. 이후 EJB3.0부터 하이버네이트를 기반으로 하여 새로운 자바 ORM 기술표준을 만들었는데 이것이 JPA이다. JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해 ..
이번에는 사용자가 직접 UserDetailsService를 구현하는 class를 생성하고 Bean으로 등록한다. 그리고 직접 User정보를 데이터베이스에서 가지고와서 인증에 사용되어질 수 있도록 User를 상속한 MyUser를 만들어 반환하는 작업을 진행해 본다. 추가로 인증 성공시와 실패시 이벤트 설정을 어떻게 하는지에 대해서도 살펴본다. Inmemory UserDetailsService public class MyUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if (username..
Multiple SecurityChain 이전에 하나로 작성한 SecurityFilterChain을 연달아서 정의할 수도 있다. 각각의 filter의 이름은 달라야하며 @Order라는 Annotation으로 Filter등록 순서를 정할 수 있다. 낮은 순서가 우선시 된다. @Configuration @EnableWebSecurity public class SecurityConfiguration { @Bean @Order(100) SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .securityMatcher("/user") .authorizeHttpRequests(authorize -> { authorize..
OAuth Google, Facebook과 같은 다양한 플랫폼의 특정 사용자 데이터에 접근하기 위해 제3자 클라이언트가 사용자의 접근 권한을 위임받을 수 있는 표준 프로토콜이다. 우리 서비스가 다른 클라이언트에게 접근 권한을 위임해 줄 수도 있다. Spring OAuth Client Spring Security에서 기본적으로 Google, Github, Facebook 3가지 OAuth사용방법을 만들어 놓았다. 이외 OAuth Client는 사용자가 Custom으로 생성해 주어야 한다. 이번에는 기본적으로 제공해 주는 Google, Github, Facebook만 사용해 본다. implementation 'org.springframework.boot:spring-boot-starter-oauth2-cli..