[docker] 컨테이너와 도커의 이해
·
DevOps/docker
왜 도커를 리눅스에서 돌려요 ?리눅스 커널의 기능들인 chroot, namespace, cgroup을 가지고 컨테이너를 생성하기 때문.chroot : 독립된 공간 형성namespace : isolate 기능 지원cgroup : 필요한만큼 HW 지원컨테이너 기반 기술 → 리눅스 커널리눅스 커널이 없으면 컨테이너를 돌릴 수 없다.window,mac os는요 ? → hypervisor를 활성화시켜서 그 위에 컨테이너를 돌리는 것 !!!  컨테이너? 컨테이너 이미지? 컨테이너컨테이너는 하나의 Application 프로세스 → 각 컨테이너는 독립적으로 운영된다. 간단히 말해서 컨테이너는 앱의 각 구성 요소에 대해 격리(Isolation)된 프로세스이다.각 컨테이너는 호스트 시스템에 사전 설치된 종속성에 의존하지 ..
[Network] foward & reverse proxy server
·
Computer Science/Network
프록시 서버란 ?프록시, 웹 프록시라고도 하는 정방향 포록시는 클라이언트 시스템 그룹 앞에 위치하는 서버이다. 컴퓨터가 인터넷의 사이트 및 서비스에 요청하면 프록시 서버가 이러한 요청을 가로채고 중개자처럼 해당 클라이언트를 대신하여 웹 서버와 통신한다.ex)A : 사용자의 가정용 컴퓨터B : 정방향 프록시 서버C : 웹 사이트의 원본 서버(웹 사이트 데이터가 저장되는 곳) 표준 인터넷 통신에서는, 컴퓨터 A가 컴퓨터 C에 직접 연결하고 클라이언트는 원본 서버에 요청을 보내며 원본 서버가 클라이언트에 응답한다. 정방향 프록시가 설정되면 A가 대신 B에 요청을 보내고 B가 요청을 C로 전달한다. 그런 다음 C가 B에게 응답을 보내고 B가 응답을 A에게 다시 전달한다. 그렇다면, 정방향 프록시를 사용하는 이유..
Junit5 Controller Test Mockmvc 기본 사용 방법 (get, post, delete, patch)
·
Backend/Junit5
Controller SpringBoot에서 JUnit5를 사용하여 테스트 코드를 작성할 때, @SpringBootTest 어노테이션을 자주 쓰는데, 상황에 따라 @WebMvcTest를 쓰는게 좋을 떄도 있다. @SpringBootTest는 프로젝트의 전체 컨텍스트를 로드하여 빈을 주입하기 때문에 속도가 느리고, 통합 테스트를 할 때 많이 사용한다. 필요한 빈만 등록하여 테스트를 진행하고자 한다면, 슬라이스 테스트 어노테이션인 @WebMvcTest를 사용하는 것이 효율적이다. 슬라이스 테스트란? 특정 부분만 테스트할 수 있는 테스트를 말한다. 아래는 대표적인 슬라이스 테스트 어노테이션이다. @WebMvcTest - Controller를 테스트할 수 있도록 관련 설정을 제공 - 특정 컴포넌트만 Bean으로 ..
Query did not return a unique result: 2 results were returned 에러 해결하기
·
Backend/Spring Boot
테스트 코드를 작성하다가 문뜩 이런 에러를 마주하였다. Query did not return a unique result: 2 results were returned 엥?.. 왜 2개의 결과값이 들어오지 ? 살펴보니 Repository에서 값을 받아오면서 생긴 문제였다. Optional findByIdentifer (string identifier); 해결 방법은 Optional이 아닌 List로 데이터를 받자! 쉽죠잉? Optional findByIdentifer (string identifier); // 변경 전 List findByIdentifer (string identifier); // 변경 후
[BOJ] 20056번: 마법사 상어와 파이어볼
·
Problem Solving/삼성 유형
출처 : https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 실수한 목록 1. 문제를 제대로 이해하지 않고, 넘어감 '1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다.' 라는 말은 2차원 배열의 격자를 벗어나더라도 연결되어 있음을 의미한다. ex) 3 x 3크기의 2차원 0-indexed 배열에서 (0,0)에서부터 열을 기준으로 +1 칸씩 이동해보자. 1칸 이동 (0,0) -> 1칸 이동..
그래프 표현 방법 간단한 정리
·
Computer Science/Algorithms
그래프(Graph)정점과 간선의 집합으로 구성되는 자료구조  방향 그래프간선에 방향이 있는 그래프A정점에서 B정점으로 향하는 간선과 B정점에서 A정점으로 향하는 간선이 서로 다를 수있다.무방향 그래프간선에 방향이 없는 그래프A-B를 연결하는 간선이 동일한 간선이다.가중치 그래프간선에 가중치(weight) 혹은 비용(cost)이 할당된 그래프연결된 정점들 간 탐색에 드는 비용이나, 연결 강도 등을 표현  그래프 표현 방법인접 행렬일반적으로 2차원 배열을 이용해서 표현adj[행][열] = 연결여부(or 가중치)공간 복잡도V개의 정점이 있다면, V*V 만큼의 공간을 사용한다.시간 복잡도연결관계(가중치) 조회/저장 : O(1)한 정점에 연결된 모든 간선 조회 : O(V)A와 B를 잇는 간선 존재 여부 확인 : ..
[Spring Security] OAuth 2.0 개념과 이해
·
Backend/Spring Security
OAuth제3의 서비스에 계정 관리를 맡기는 방식용어 정리리소스 오너(resource owner) : 자신의 정보를 사용하도록 인증 서버에 허가하는 주체. 서비스를 이용하는 사용자가 리소스 오너에 해당된다.리소스 서버(resource server) : 리소스 오너의 정보를 가지며, 리소스 오너의 정보를 보호하는 주체를 의미. 네이버, 구글, 페이스북이 리소스 서버에 해당한다.인증 서버(authorization server) : 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰을 발급하는 역할을 하는 애플리케이션.클라이언트 애플리케이션(client application) : 인증 서버에게 인증을 받고 리소스 오너의 리소스를 사용하는 주체를 의미. 지금 만들고 있는 서비스가 이해 해당한다.client..
Monotonic Stack
·
Computer Science/Algorithms
모노토닉 스택 (Monotonic Stack) 원소가 Increasing / Decreasing으로 정렬되어 있는 배열을 의미한다. 정렬되어 있지 않은 배열을 Monotonic 하게 만들거나 Monotonic Stack에 새로운 원소가 입력되었을 때, 정렬하는 과정에서 발생하는 정보들이 유용하다. 추천 문제 [백준] 옥상 정원 꾸미기 : https://www.acmicpc.net/problem/6198 [백준] 오큰수 : https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acm..
Comparable과 CompareTo
·
Backend/Java
CompareTo() compareTo() 함수는 두개의 값을 비교하여 int 값으로 반환해주는 함수이다. compareTo() 함수에는 “문자열의 비교”와 “숫자의 비교” 두 방식이 존재한다. 숫자의 비교 : 크다(1), 같다(0), 작다(-1)의 결과값을 리턴 문자열 비교 : 같다(0), 그 외 양수/음수값 같이 참 재미난 결과 리턴 비교대상에 문자열이 포함되어 있을 경우 1. 기준값에 비교대상이 포함되어 있을 경우 서로의 문자열 길이의 차이값을 리턴해준다. 예를 보면, “ab”(2) - “a”(1) = 1 “ab”(2) - “ab”(2) = 0 “”(0) - “ab”(2) = -2 “ab”(2) - “”(0) = 2 public class Test { public static void main(St..
시스템 콜(System Call)
·
Computer Science/Operating System
2024.02.08 - [Computer Science/Operating System] - 운영체제란 ? 시스템 콜을 설명하기 앞서, 운영체제와 커널에 대한 사전지식이 필요합니다. 운영체제는 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종입니다. 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해 주는 역할을 하는 것이죠. 자세한 내용은 위 글에서 확인할 수 있습니다. 그렇다면 커널은 무엇일까요? 커널(Kernel) 컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행됩니다. 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야하는 것 처럼, 운영체제도 마찬가지입니다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가있으..
인터럽트(Interrupt)
·
Computer Science/Operating System
인터럽트란 무엇인가? 프로그램 실행 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것입니다. 그렇다면, 인터럽트가 발생했을 때 수행중이던 프로세스의 정보는 어디로 가는걸까요? 진행 중이던 작업의 내용은 커널(운영체제 중 메모리에 상주하여 일을 처리하는 역할)의 자료 구조에 저장됩니다. 이 자료 구조를 우리는 PCB라고 부릅니다. PCB에 대한 내용은 추후 다룰 예정입니다. 내부 인터럽트 하드웨어 고장 컴퓨터 고장 데이터 전달 과정에서의 비트 오류 전원이 나간 경우 실행할 수 없는 명령어 : 기억장치에서 인출한 명령어의 비트 패턴이 정의되어 있지 않은 경우 예외상황(Exception) : 나누기 0을 하는 경우, 권..
[Spring Security] 내부 흐름 - 2
·
Backend/Spring Security
2024.02.17 - [Backend/Spring Security] - Spring Security 내부 흐름(1)에서 Spring Security 내부 흐름에 대해 간략하게 살펴봤다. 이번에는 디버깅을 통해 내부 코드를 파헤쳐보자.  Spring Security 내부 흐름 - 1이 글은 아래 링크의 강의를 바탕으로 정리된 글입니다. https://www.udemy.com/course/spring-security-6-jwt-oauth2-korean/ spring security 내부 흐름 과정 1단계 유저가 로그인 페이지에 본인의 자격증명을 입력 (브kimdozzi.tistory.com   Spring Security를 다루는 과정에서 핵심적인 부분만 확인하고 넘어가는 점을 유의해주세요 !   Spri..