본문 바로가기

728x90

분류 전체보기

(132)
Spring Boot와 내장 톰캣 내장 톰캣은 WAR 방식의 단점을 보완하기 위해서 등장하였습니다. (참고: 외장 서버와 내장 서버) 내장 톰캣은 쉽게 말해 톰캣을 라이브러리로 포함하고 자바 코드로 직접 실행하는 것을 의미합니다. 이번 포스팅에서는 내장 톰캣을 이용하여 Spring과 연결하여 웹 애플리케이션을 만들어보는 과정을 작성하였습니다. 사용할 코드의 패키지 구조와 build.gradle 구조는 아래와 같습니다. plugins { id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { //스프링 MVC 추가 implementation 'org.springfra..
외장 서버 vs 내장 서버 외장 서버 과거에는 자바로 웹 애플리케이션을 개발할 때, 먼저 서버에 톰캣과 같은 WAS(Web Application Server)를 설치한 뒤, 설치한 WAS에서 동작하도록 Servlet 스펙에 맞추어 코드를 작성하였습니다. 그리고 작성한 코드를 WAR 형식으로 빌드하여 war 파일을 생성하고, 생성한 war 파일을 설치한 WAS에 배포하는 방식으로 애플리케이션을 개발하였습니다. 하지만 이렇게 개발을 하는 것은 상당히 복잡하고 추가 설정이 필요합니다. 따라서 현재는 다른 방식으로 개발을 진행하는 데요, 그 방식인 내장 서버를 이용한 방식입니다. 내장 서버 최근에는 Spring Boot가 내장 톰캣을 포함하고 있습니다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있어, 개발자가 코드..
해시 함수 (Hash Table) Hash Function 해시 함수(hash function) 또는 해시 알고리즘(hash algorithm)은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 이때, 이 고정된 길이는 해시 함수마다 다릅니다. 하지만 동일한 해시 함수는 동일한 길이의 데이터를 출력합니다. 아래 그림과 같이, data를 hash function에 입력하면, 이 함수는 고정된 길이의 값을 출력합니다. 해시 함수에 의해 얻어지는 값을 해시 값(Hash value) 이라고 합니다. 해시 함수의 특징 해시 값은 항상 고정된 길이의 값을 가집니다.(위 설명 참고) 같은 입력값이면 해시 값은 항상 동일합니다. 다른 입력값일 때, 1bit만 다르더라도 해시 값은 크게 달라질 수 있습니다. 다른 입력값일 때, 같은 ..
C언어 - Quick sort 구현 Pivot 선택을 위한 Partition 첫 번째 방법 int hoarePartition(int* a, int low, int high) { int p = a[low]; int i = low; int j = high; while (i
Cookie (쿠키) Cookie란? 웹 서버가 생성하여 웹 브라우저(클라이언트)로 전송하는 작은 정보 파일 Set-Cookie: 서버에서 클라이언트로 쿠키 전달 (응답 시) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달 Cookie가 필요한 이유 HTTP는 무상태(Stateless) 프로토콜 (클라이언트와 서버는 서로 상태를 유지 X) 클라이언트와 서버가 요청과 응답을 주고받으면 연결이 끊어진다. 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못하는 문제 발생 로그인 시, 새로고침 할 때마다 매번 로그인을 해야 하는 번거로움 발생 대안: 모든 요청에 사용자 정보를 포함해서 요청 보안 문제 발생 가능 모든 요청에 사용자 정보 포함되도록 개발해야 하는 어려움 브라우저를 완전히..
HTTP 헤더 정보 일반 정보 From: 유저 에이전트의 이메일 정보 Referer: 이전 웹 페이지 주소 User-Agent: 유저 에이전트 애플리케이션 정보 Server: 요청을 처리하는 Origin 서버의 소프트웨어 정보 Date: 메시지가 생성된 날짜 From: 유저 에이전트의 이메일 정보 (요청 시 사용) 일반적으로 잘 사용하지 않음 검색 엔진 같은 곳에서 주로 사용 Referer: 이전 웹 페이지 주소 (요청 시 사용) 현재 요청된 페이지의 이전 웹 페이지 주소 A → B로 이동하는 경우, B를 요청할 때 Referer: A를 포함해서 요청 Referer를 사용해서 유입 경로 분석 가능 참고로, referer는 referrer의 오타 User-Agent: 유저 에이전트 애플리케이션 정보 (요청 시 사용) 클라이언..
HTTP 헤더 HTTP 헤더 header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용) field-name은 대소문자 구분 없음 HTTP 전송에 필요한 모든 부가정보 포함 ex) 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등 필요시 임의의 헤더 추가 가능 과거 스펙 - RFC2616 HTTP 헤더 분류 General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh;..) Response 헤더: 응답 정보, 예) Server: Apache Entity 헤더: 엔티티 바디 정보, 예..
C언어 - 문자열 탐색, 비교 구현해보기 이번 포스팅은 C++를 사용하지 않고 (라이브러리 없이) C언어를 이용하여 직접 문자열 관련 함수들을 구현해 보았습니다. strlen: 문자열 길이 C++의 str.size() 혹은 str.length() C언어 첫 번째 방법 (포인터) int strlen(const char* str) { int len = 0; while (*str != '\0') { ++len; ++str; } return len; } int main() { printf("%d\n", strlen("Hello")); // 5 } 두 번째 방법 (배열) int strlen(const char* str) { int len = 0; while (str[len] != '\0') { ++len; } return len; } strcpy: 문자..

728x90
반응형