분류 전체보기
드디어 나의 리눅스 티셔츠를 자랑할 날이 왔다~ ㅋㅎㅋㅎ 1. Linux 소개 - 운영 체제 : 컴퓨터를 운영하기 위한 소프트웨어. 컴퓨터의 물리적 자원을 관리 소프트웨어가 자원을 사용할 수 있도록 관리 사용자에게 인터페이스를 제공해 컴퓨터를 사용할 수 있도록 - 커널 (Kernel) : 운영체제의 여러 구성 요소 중 핵심 실제 물리적 자원과 여러 프로세스를 관리 OS의 다른 요소는 커널을 활용한 소프트웨어에 가깝다. - Linux Kernel : 많은 대기업들이 Linux에 관심을 가지고, 현재 데스크탑을 제외한 수많은 컴퓨터 OS는 Linux 커널을 사용한다. - Shell : 커널과 외부 소프트웨어를 연결해주는 프로그램 (커널을 감싸는 껍데기..) 사용자의 명령을 해석하여 커널로 전달 사용자의 프로..
1. DevOps 1) 여러 개발자가 모였을 때...? 하나의 프로젝트를 작은 단위로 분리한다. -> 각각의 작업을 합치는 건 복잡할 수 밖에 없다..3 2) 개발 산출물이 어떻게 사용자에게 도달할까? (운영과정) 적당한 성능의 컴퓨터 구비 컴퓨터에 개발한 웹 서비스 실행 해당 컴퓨터를 인터넷에 연결, 24시간 꺼지지 않도록 조정 인터넷 사용자가 이 컴퓨터를 찾을 수 있도록 환경 조성 (방화벽, 포트포워딩 등) + SEO, DNS 등 작업할 것들이 많다.. 3) 개발 프로젝트의 전체적 과정 : 소프트웨어 생명 주기 (Software Life Cycle) 어떤 기능을 만들어야 할지를 결정하기 위한 기획 각각의 개발자가 만든 코드의 통합 완성된 코드의 테스트 및 배포 배포된 프로젝트 모니터링 > Softwa..
: 큰 문제를 나누어서 풀고, 그 결과를 조합해서 문제를 해결하는 알고리즘 기법. - 분할 (Divide) : 해결할 문제를 여러개의 작은 문제로 나눈다. - 정복 (Conquer) : 작은 단위의 문제를 해결한다. - 조합 (Merge or Combine) : 해결한 작은 단위 문제들을 합해 원래 문제의 답을 구한다. 1. 하노이의 탑 : 세 개의 기둥과 기둥에 꽂을 수 있는 서로 다른 크기의 원반이 있다. 전부 하나의 기둥에 큰 것이 아래에 있도록 꽂혀있다. - 한 번에 하나의 원반만 옮길 수 있다. - 가장 위의 원반만 옮길 수 있다. - 큰 원반이 작은 원반 위에 놓여서는 안된다. - 위의 규칙을 지키면서 하나의 기둥에서 다른 기둥으로 모든 원반을 옮긴다면? 1) 원반이 두 개인 경우 : 3회 2..
- 특수한 형태의 완전 이진 트리 1. Heap - 완전 이진 트리의 어떤 노드 C와 부모 노드 P가 있을 때 C의 값보다 P의 값이 항상 크거나 / C의 값보다 P의 값이 항상 작을 때. - 다양한 요소를 가지고 있는 집합에 대하여 가장 큰 값이나 가장 작은 값을 찾기 용이함. - 우선순위 큐를 만드는데 유용하게 사용됨. 1) 힙 삽입 연산 - 제일 오른쪽 아래에 원소를 삽입 - 새로 삽입한 원소를 부모 노드와 비교 (힙의 조건을 만족시키지 못하게 배치된 경우 서로 교환) - 새로 추가한 원소가 루트 원소가 되거나, 힙의 조건을 만족시킬 때까지 반복 2) 힙 삭제 연산 - 힙의 루트 원소를 제거 - 루트 원소의 위치에 힙의 마지막 원소를 배치 (완전 이진트리 조건) 2. Heap Sort : Heap의..
- 원소들 간에 1:N 관계를 가지는 비선형 자료구조 - 상위 원소와 하위 원소의 관계가 있는 계층적 자료구조 1. 정의 : 한 개 이상의 노드로 이루어진 유한 집합. - 노드/정점 : 각각 데이터를 담고 있는 원소 - 루트 노드 : 노드 중 최상위 노드 - 각 노드는 0개 이상의 자식 노드를 가질 수 있음. - 하나의 부모에 여러 자식이 연결 - 하나의 자식은 둘 이상의 부모 X - 노드의 갯수가 N개일 때, N-1개의 간선을 가지고 있음. -> 그래서 순환 구조가 생기지 않음. (cf. Graph는 순환 구조가 있음.) - 형제 노드 : 같은 부모 노드를 가진 자식 노드들 - 조상 노드 : 간선을 따라 루트 노드까지 가는 경로의 모든 노드들 - 차수 (Degree) : 노드에 연결된 자식 노드의 수 ..
처음 프로젝트를 시작할 때 세운 목표이다. 최대한 목표를 고려하며 프로젝트를 진행하려 했다. 프로젝트를 진행하며 배운 것들을 정리해보려 한다. 1. Spring Security와 JWT 이해하기 : 나에겐 너무너무 어렵고 두려웠던 스프링 시큐리티와 JWT를 직접 사용하여 프로젝트 전체에 적용해봄으로써 점점 이해하게 되었다. 어떤 구조로 어떻게 구현해야할지 시행착오를 겪으며 이해해왔다. 물론 모든것이 착착 머릿속에 존재하지는 않지만, 계속 여러번 정리하고, 반복하고, 공부하면서 조금 더 이해에 가까워졌다. 특히 필터가 작용하는 흐름을 이해하게 되어 속시원해졌다. 다음 인터셉터 이해해보기.. 2. 오류에 대한 기록: 오류가 수없이 많이 찾아왔다. 그때마다 기록하기 정말 귀찮게 느껴졌지만, 기록하지 않으면 다..
1. UserDetailsManager와 UserEntity - UserDetailsManager의 구현체인 CustomUserDetailsManager를 만들어주었고, 여기서 UserEntityRepository와의 연결점이 되었다. 고민은 UserDetails의 구현체인 CustomUserDetails 자체를 UserEntity 취급을 하여야 할 것인지, CustomUserDetails는 UserEntity와는 다른 것으로 취급해야할지 잘 모르겠다. 일단 내가 구현한 방식은 CustomUserDetails, CustomUserDetails는 Spring Security에서 제공되는 부분이므로 이는 유저의 인증과 관련한 부분을 다루어야 하고, UserEntity는 인증보다는 실제 DB에 저장되는 유저 ..
https://hehesim.tistory.com/36 스프링 시큐리티 인증 절차 1) Authentication (인증) : 'A'라고 주장하는 주체가 'A'가 맞는지 확인하는 것. - 코드에서 Authentication : 인증 과정에 사용되는 핵심 객체. 2) Authorization (권한) : 특정 자원에 대한 권한이 있는지 확인하 hehesim.tistory.com 이것은 내가 이전에 공부하며 만들었던 Spring Security 인증 절차이다. 이때는 딱 Spring Security만을 사용하여 인증과정을 구현하고 공부했다. 이번 프로젝트에서는 여기에 더하여 JWT토큰을 활용한 인증을 구현했다. 이유는 Stateless를 지키기 위하여였다. 상태를 저장하지 않기 때문에 세션관리가 필요없고, ..