분류 전체보기 44

OpenApiMethodFilter 사용하여 Swagger API 분류하기

문제 상황 Swagger을 사용하게 되면, GroupedOpenAPI를 builder 패턴으로 생성하여 Bean으로 등록하여, API들을 그룹별로 나눌 수가 있다. 보통, pathsToInclude, pathsToExclude 와 같은 메소드를 사용하여, 직접 API의 엔드포인트를 파라미터를 인자로 입력하여, 나누는 경우가 많다. @Bean public GroupedOpenApi SecurityGroupOpenApi() { return GroupedOpenApi .builder() .group("그룹1") .addOpenApiCustomiser(buildSecurityOpenApi()) .pathsToExclude("/api1, /api2") .pathsToInclude("/api3, /api4") .b..

Swagger 2023.07.20

TCP 기반 Multi-Process 서버 구현

2023-1학기 숭실대 소프트웨어학부 조효진 교수님의 네트워크 프로그래밍 수업을 재구성하였습니다. 예제코드는 글 맨 아래에 있습니다. 단일 프로세스의 한계 단일 Process로만 TCP 소켓 프로그래밍을 수행하면, 새로운 프로세스의 클라이언트와 동시에 통신을 하기 힘들어진다는 한계를 가진다. 이 한계를 극복하고자 Multi-Process 서버를 구현해보고자한다. 새로운 Process 생성 Multi Process를 생성하려면, fork()함수를 이용하여, Child Process를 새로 생성하여야한다. -fork()이전 서버는 srvSd 파일디스크립터를 이용하여 클라이언트의 요청을 accept()하고 있으며, accept()함수를 통해, 클라이언트와의 연결을 진행하게 되면 새로운 연결 소켓인 clntSd..

네트워크 2023.05.15

C언어 소스파일에서 실행 파일까지

학부 수업 시간에 C언어를 배웠고, 리눅스 환경에서 컴파일하는 명령어나, 방법도 안 배운 건 아닌데, 언제부턴가 습관적으로 gcc -o a a.c 나 ./a와 같은 명령어만 사실 무슨 작업을 하는 지도 까먹어 간채 무의식적으로 썼던 것 같다. (과제는 c언어 코딩하는데 소스코드 작성하고 컴파일해서 시행해서 잘 실행만 되기만 하면 되니까..) 이번 글에선 우리가 작성한 c언어 소스파일(.c)이 어떤 과정을 거쳐 컴파일되어 실행파일로 우리 눈 앞에서 실행되는지 다뤄보고자 한다. 전체적인 흐름을 나타내는 사진이다. 우리에게 익숙한 .c 소스 파일, c컴파일러, .o 오브젝트 파일도 여럿 보인다. 과정은 크게 4가지로 나누어서 설명할 것이고, 해당 단계까지 실행할 수 있는 gcc 명령어를 옵션과 함께 설명할 것..

C코드에서부터 어셈블리 프로그램 연산까지

- 프로세서는 소량의 데이터만을 레지스터에 저장이 가능하지만, 컴퓨터 메모리는 수십억개의 데이터를 저장할 수 있다. 배열이나 구조체 같은 자료구조가 이러한 메모리에 저장되어있다. - MIPS의 산술 연산은 레지스터에서만 이루어지기 때문에, 메모리에 저장되어 있는 데이터와 레지스터 간의 데이터를 주고 받는 명령어가 있어야 한다. MIPS에서의 이러한 메모리 참조 명령어는 적재 명령어인 load와 저장 명령어인 store가 있다. 명령어 종류 1. load (lw) 메모리에서 레지스터로 데이터를 복사해 오는 데이터 전송 명령 - 연산자 이름 (lw) - 메모리에서 읽어 온 값을 저장할 레지스터 ($t0) - 메모리 접근에 사용할 상수(8)와 레지스터($s3) lw $t0, 32($s3) 해당 명령어는 쉽게 ..

컴퓨터 구조 2023.03.09

엘라스틱 서치에서의 역인덱싱

역 인덱싱 (Inverted Index)란? : 엘라스틱 서치에서의 분석기가 문자열을 토큰화하여 이를 인덱싱하는 기법 책 뒷면에 있는 색인(찾아보기)를 생각하면 쉽다. 어떠한 단어가 있고, 해당 단어가 전체 책에서 몇 페이지에 있는 지 적혀져있다. 우리가 찾고자하는 단어가 적혀져있는 내용을 보려면, 찾아보기 페이지를 통해 적혀져있는 페이지로 가서 관련 내용을 가서 보면 된다. 위 그림에서 보면 도큐먼트 2개에 검색 되어질 문장 2개가 있고, 분석기를 통해서 토큰화 되고 가공된 문자들이 오른쪽 테이블처럼 역인덱싱되어 저장이 된다. RDBMS 저장과의 비교 해당 그림에서와 같이 RDBMS에서는 Like 검색을 하게 된다. 그렇기 때문에, 특정 단어 fox를 찾기 위해선, doc1 ~ doc5까지 모든 도큐먼..

Elastic Search 2023.02.14

엘라스틱 서치에서의 유사도 점수 (Score)

스코어 (score) 점수 : 검색된 결과가 검색 조건과 얼마나 일치하는지를 점수로 계산하여 response로 보내준다. - 쿼리와 관련이 높은 검색결과(도큐먼트)일수록 더 높은 점수를 받는다. - 높은 점수일수록 우리가 원하는 검색결과일 가능성이 크다. 계산방법 - BM(Best Matching)25라는 알고리즘을 사용해서 점수를 계산한다. 해당 알고리즘에는 총 3가지의 구성 요소가 있다. 1. TF (Term Frequency) : 검색하려는 특정 용어가 하나의 도큐먼트에 얼마나 많이 등장했는가? 중요한 건 하나의 도큐먼트(문서)에서 검색하려는 용어가 얼마나 많이 등장했냐는 것이다. 예를 들어, "쥬라기 공원"이라는 용어를 검색했을 때, "쥬라기 공원"이라는 단어가 5번 들어 있는 웹 페이지 보다는 ..

Elastic Search 2023.02.13

[C언어] 사용자 정의형 - 구조체

구조체 -서로 다른 형의 변수들을 하나로 묶어주는 방법을 제공한다. : 이질적인 데이터 집합을 하나의 단위로 취급할 수 있게 한다. EX) 성적 처리 프로그램 학생 이름과 그 학생의 점수는 한 쌍으로 다루는 것이 좋다. 구조체 선언 struct name_grade { char name[10]; int grade; }; //struct : 구조체 선언을 위한 키워드 //name_grade : 구조체 태그 이름 //name, grade : 구조체 멤버 - 이 선언은 메모리 할당을 받는 변수를 선언한 것이 아니라, struct name_grade 형을 선언한 것이다. - struct name_grade는 자료형이 오는 자리에 사용할 수 있다. -struct name_grade 형의 크기는 단순히 구성 요소 덧..

c언어 2022.10.24

[C언어] 전처리기

-프로그램 개발과 유지보수를 쉽게 하고, 가독성을 높이고, 프로그램 포팅(컴퓨터 A에서 만든 것을 B에서 이식 및 실행)을 쉽게 함 -#으로 시작하는 행을 전처리 지시자라고 한다. #include ... #define ... #if ... -전처리 지시자를 위한 구문은 C언어의 나머지 부분과 독립적이다. -전처리 지시자가 영향을 미치는 범위는 그 파일에서 전처리 지시자가 있는 위치에서 시작하여 그 파일의 끝까지이거나, 다른 지시자에 의해서 그 지시자의 효혁이 없어질 때까지 이다. -전처리기는 C를 알지 못한다. [매크로] 여러가지 종류의 매크로 - 기호상수 (#define N 10) - 문자열 대치 -인자가 있는 매크로 -정의가 길어질 경우에 현재 행의 끝에 역슬래시 \를 삽입하면 다음 행에 연결해서 계..

c언어 2022.10.23

[C언어] 비트 수준 접근

#include 모든 내용은 메모리에 0과 1의 이진 값으로 저장된다. [단위] 비트(bit) : 이진 값의 각 자리 바이트(byte) : 8개 비트 워드(word) : 메모리에서 읽혀지는 단위 -비트열을 다울 때 , 16진수를 많이 사용 -int, short, long, long long, char 등과 같은 정수형 수식에 사용이 되며 시스템 종속적이다. [~연산자] 1의 보수 연산자, 비트 단위 보수 연산자 피 연산자의 각 비트를 0은 1로, 1은 0으로 한다. 예) int a = 0x10F07; // 0x10F07 = 69383 //a의 이진수 표현 00000000 00000001 00001111 00000111 //~a의 이진수 표현 11111111 11111110 11110000 11111000..

c언어 2022.10.23

[C언어] 공용체(union) / 열거형

공용체는 구조체와 비슷한 구문 형식을 가지지만 각 멤버들은 같은 기억장소를 공유한다. 공용체 형은 메모리의 같은 위치에 저장될 여러 값의 집합을 정의한다. [선언] union short_or_float { short s; float f; }; //union : 키워드 //short_or_float: 공용체 태그 이름이며, short_or_float 공용체 형을 선언한 것이다. //s,f : 공용체의 멤버 - 공용체 변수는 구조체 변수와 같은 방법으로 선언이 된다. union short_or_float a,b,c; //a,b,c에 대한 기억 장소 할당 -공용체의 멤버 접근 방법은 구조체의 멤버 접근 방법과 동일하다. a.s = 10 b.f = 1.0 [예제 프로그램] #include typeof union..

c언어 2022.10.12