서버 10

[스프링부트/Spring boot] 스프링 입문 4/4 - API

인프런 강의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리 스프링 웹 개발 스프링을 이용한 웹 개발은 크게 세 가지로 나뉜다. 정적 컨텐츠 MVC와 템플릿 엔진 API API API는 안드로이드 개발할 때 많이 사용한다. key-value 쌍의 JSON 형식으로 클라이언트에게 전달해준다. @ResponseBody 사용 뷰가 필요하지 않기 때문에 viewResolver 또한 동작하지 않는다. 대신 HttpMessageConverter가 동작한다. body 부분에 내용을 직접 넣어 반환한다. @Controller public class HelloController { @GetMapping("hello-api") @ResponseBody public Hello helloAp..

[서버/Server] Apache VS Nginx 짧고 굵게 비교하기

2주에 걸쳐 서버 프로그램으로 Apache와 Nginx를 설치해서 사용해봤다. 두 가지 프로그램이 전체 웹 서비스의 반 이상을 차지할 정도로 폭넓게 사용된다고 하니 어떤 차이점이 있는지 궁금해졌다. Apache http 웹 서버의 대명사라고 불리는 아파치는 MPM(Multi Processing Module : 다중처리모듈) 방식으로 요청을 처리한다. 스레드/프로세스 기반 구조 스레드/프로세스 기반 구조는 기본적으로 한 개의 스레드가 한 개의 요청만을 처리하는 구조이다. 사용자가 늘어날수록 많은 스레드를 생성해 메모리나 CPU 소모가 증가한다. 대표적으로 prefork와 worker 방식이 있다. Prefork MPM 실행 중인 프로세스를 복제하여 처리하는 방식 각 서버 프로세스는 한 번에 하나의 요청만 ..

[서버/Server] APM 컴파일 설치하기 3/3 - PHP

PHP 7.4.1 컴파일 설치 현재 Ubuntu 18.04위에 Apache 2.4.46과 MySQL 8.0.19까지 컴파일 설치했다. PHP 버전 7.4.1 설치를 마지막으로 우분투 위에 패키지 매니저를 사용하지 않고 APM 컴파일 설치를 완료했다. 의존성 패키지 설치 의존성 패키지까지 모두 컴파일 설치 할 수는 없으니 편하게 apt-get 명령어를 사용해준다. $ apt-get install libxml2-dev $ apt-get install libjpeg-dev $ apt-get install libpng-dev php 설치 Apache와 MySQL 설치할 때와 동일하게 tar.gz 파일을 다운 받아 압축 해제한다. $ cd /usr/local/ $ wget https://www.php.net/di..

[서버/Server] APM 컴파일 설치하기 2/3 - MySQL

MySQL 8.0.19 컴파일 설치 Ubuntu 18.04 위에 Apache 2.4.46 설치를 완료했다. (이전 내용) MySQL은 버전 8.0.19 를 컴파일 설치했는데 시간이 정말 많이 걸려서 놀랐다. 심지어 도중에 한 번 우분투 복구까지 진행했다. 스냅샷을 찍어 백업시켜둔 과거의 나한테 고마웠다. 덕분에 apt-get upgrade하는데 굉장히 많은 시간이 걸렸지만… 의존성 패키지 설치 MySQL 공식 문서에 꼭 설치해야 하는 패키지들이 명시되어 있다. apt-get update 후 필요한 패키지들을 설치하면 된다. MySQL Community Server 8.0.19 설치 Apache 설치할 때와 동일하게 tar.gz파일을 다운받아 압축 해제해준다. $ cd /usr/local $ wget ht..

[서버/Server] APM 컴파일 설치하기 1/3 - Apache

컴파일 설치를 하는 이유 소프트 스퀘어드에서 내준 첫 과제는 서버를 구축하는 것 이다. 단순히 Linux에 Apache / PHP / MySQL (이하 APM) 세 가지만 깔면 된다고 해서 쉬운 과제일 줄 알았는데, package manager를 사용하지 않고 컴파일 설치만을 요구했다. 그렇다면 왜 컴파일 설치를 해야 하는지 알아보도록 하자. Ubuntu를 예로 들면 apt 혹은 apt-get이라는 패키지 매니저가 있다. 패키지 매니저를 통해 프로그램을 설치하게 되면 OS 종류나 버전에 맞춰 의존성 있는 프로그램들도 같이 설치해준다. 개인적인 목적으로 설치하는 프로그램인 경우에는 패키지 매니저를 이용해 쉽게 설치하면 되나, 회사에서 업무적인 목적으로 설치하는 경우 이것을 막을 수도 있다. 첫 과제 이후로..

[서버/Server] 백엔드 틀 잡기 5/5 - 인증

로그인 인증 및 유지 방법 HTTP의 큰 특징으로는 stateless와 connectionless가 있다. stateless는 무상태성, 즉 상태 관리를 하지 않는다는 뜻이다. 조금 더 쉽게 설명하자면 서버가 클라이언트의 상태를 몰라 식별할 수 없다는 말이다. 따라서 로그인 상태가 유지되지 않아 매 요청마다 다시 로그인해줘야하는 번거로움이 있다. 왜 stateless한 특징을 갖는지 의문이 생길 수 있다. 그 이유가 바로 connectionless이다. 클라이언트와 서버가 성공적으로 연결을 맺어 요청에 대한 응답을 마치면 연결을 끊어버린다. 이러한 비연결성의 장점은 연결을 유지하기 위한 리소스를 줄여 더 많은 연결을 가능하게 한다. 하지만 매번 새로운 연결 과정을 거치기 때문에 오버헤드가 발생한다는 단점..