분류 전체보기
-
NGINX 0: Ubuntu에 NGINX 설치하기DevOps 2023. 3. 5. 17:43
Unutu 환경에서 NGINX를 설치하는 방법을 알아보자. 실습을 진행하기 위해 AWS EC2 서비스를 이용해서 Ubuntu 22.04.1 LTS 버전의 서버를 준비했다. (Ubuntu 버전은 크게 상관 없다.) $ cat /etc/issue Ubuntu 22.04.1 LTS \n \l 1. 운영체제의 패키지 정보를 업데이트 $ sudo apt-get update ... Fetched 26.2 MB in 5s (5655 kB/s) Reading package lists... Done 먼저 Ubuntu에서 패키지를 설치하고 관리할 수 있는 apt(Advanced Packaging Tool) 업데이트를 진행해야 한다. 2. 엔진엑스 공식 패키지 저장소 설정을 도와줄 몇 가지 패키지 설치 $ sudo apt ..
-
[자료구조] 해싱, 해시 함수, 해시맵 이란?자료구조 2021. 5. 30. 00:34
이번 글에서는 해싱(hasing)에 대한 개념과 Java에서 사용하는 자료구조인 HashMap을 알아보겠습니다. 개념 (concepts) 해시 함수(hash function)란 데이터의 효율적인 관리를 목적으로 임의의 길이를 가진 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 이때 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시(hash) 또는 해시 코드(hash code)라고 합니다. 이렇게 매핑하는 과정을 해싱(hasing)이라고 합니다. 사실 앞에서 언급한 임의의 길이를 가진 데이터인 키(key)는 그 종류가 무한대에 가깝지만 해시 함수를 통해 매핑된 해시(hsah)는 정수형 데이터이기 때문에 그 값이 유한합니다. 이 말은 해싱을 하다 보면 서로 다른 키(key)가 같..
-
[자료구조] 배열(Array) 이란?자료구조 2021. 5. 20. 20:46
자료 구조의 기본이 되는 배열과 배열을 다루기 위한 ArrayList를 알아봅니다. 배열 (Array) 배열이란? 배열은 연관된 데이터를 모아서 관리하기 위해서 사용되는 데이터 타입입니다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것이라고 할 수 있습니다. 배열 생성 및 사용하기 String[] fruits = new String[4]; 자바 프로그램에서 위 코드로 배열을 생성하면 컴퓨터는 메모리에 크기 4 만큼의 공간을 할당해서 사용자가 사용할 수 있도록 합니다. 1000 1001 1002 ... null [0] null [1] null [2] null [3] ... 1031 배열은 메모리상에 고정된 크기의 연속된 공간을 갖기 때문에 한 번 생성된 배열의 ..
-
[스프링 5 레시피] 10장: 스프링 트랜잭션 관리Spring 2021. 4. 20. 21:10
1. 트랜잭션 관리와 성질 트랜잭션 관리는 엔터프라이즈 애플리케이션에서 데이터 무결성과 일관성을 보장하는 필수 기법입니다. 트랜잭션 관리를 하지 않으면 데이터의 일관성이 깨질 수 있기 때문에 저장되어있는 데이터를 신뢰할 수 없게 됩니다. 트랜잭션의 성질은 ACID로 설명할 수 있습니다. 원자성(Atomicity) : 트랜잭션은 연속적인 작업으로 이루어진 원자성 작업이기 때문에 트랜잭션의 작업은 부분적으로 성공하거나 실패할 수 없고, 전부 다 수행되거나 아무것도 수행되지 않도록 보장합니다. 일관성(Consistency) : 트랜잭션이 실행을 완료하면 커밋되고 데이터베이스는 언제나 비즈니스 규칙에 맞는 일관된 상태를 유지하는 것을 의미합니다. 예를 들어, 무결성 제약 조건이 회원의 이메일은 필수 값이어야 한..
-
[스프링 5 레시피] 5장: 스프링 MVC 비동기 처리Spring 2021. 4. 7. 15:46
이 장의 주제인 스프링 MVC 비동기 처리가 필요한 이유에 대해서 간단하게 살펴보겠습니다. 클라이언트에서 요청을 보내면 하나의 서블릿 쓰레드가 그 요청을 받아서 처리하고 응답까지 도맡아 하기 때문에 클라이언트에게 응답을 돌려줄 때까지 해당 쓰레드는 블로킹(차단)됩니다. Tomcat의 쓰레드 풀에 생성할 수 있는 최대 쓰레드 개수는 기본 200개이기 때문에 요청이 폭주하게 되면 여유 쓰레드가 없어서 Connection refuse나 Connection timeout이 발생할 수 있는데요, 이러한 문제로 서블릿 3부터는 HTTP 요청을 비동기로 처리할 수 있게 되면서 HTTP 요청을 접수했던 쓰레드를 WAS에 반환하고 Backend 작업을 할 때는 스레드를 작업 쓰레드 풀에서 꺼내 쓰다가 작업이 완료되면 다..
-
[스프링 5 레시피] 3장: 스프링 MVCSpring 2021. 3. 10. 22:15
먼저 이 장의 주제인 스프링 MVC와 그의 Front Controller를 담당하고 있는 DispatcherServlet에 대해 알아보겠습니다. 스프링 MVC MVC 패턴은 웹 개발을 할 때 필수적으로 알아야 할 디자인 패턴인데요, MVC 패턴을 적용하면 애플리케이션에서 모델, 뷰, 컨트롤러의 역할을 각각 분담하고 UI에서 비즈니스 로직을 떼어낼 수 있습니다. UI에서 비즈니스 로직을 떼어낸다는 말을 이해하려면 예전에 사용하던 모델1 방식과 현재의 MVC 패턴을 따르는 모델2 방식의 차이를 이해해야 합니다. 모델1 방식 화면의 기능과 비즈니스 로직 처리를 하나의 JSP 페이지에서 개발하는 방법을 모델1 방식이라고 하는데요, 클라이언트에서 입력값과 함께 요청이 들어오면 JSP 페이지는 자신이 직접 작성한 ..
-
[스프링 5 레시피] 2장: 스프링 코어 (2-7 ~ 2-12)Spring 2021. 3. 4. 14:45
2-7. 프로퍼티 파일에서 로케일마다 다른 다국어 메시지를 해석하기 IoC 컨테이너는 국제화(i18n)와 관련된 기능을 제공해 주는데요, 스프링에서는 리소스 번들 메시지를 처리하는 메서드가 정의되어있는 MessageSource 인터페이스를 사용할 수 있습니다. 메시지 properties 파일 작성하기 resources 디렉토리 아래에 message.properties를 여러 개 작성하면 인텔리제이에서 자동으로 'messages'라는 이름의 Resource Bundle 패키지로 묶어줍니다. 기본 파일인 messages.properties와 messages_en_US.properties는 greeting의 값을 영어로 작성하고 messages_ko_KR.properties는 한국어로 작성하겠습니다. 중괄호 ..
-
[스프링 5 레시피] 2장: 스프링 코어 (2-1 ~ 2-6)Spring 2021. 2. 26. 13:16
개요 이 장의 주제는 스프링의 주요 기능입니다. IoC는 스프링 프레임워크의 심장부라고 할 수 있는데요. IoC가 무엇인지 간단히 살펴보겠습니다. IoC 란? Inversion of Control의 약자로 해석하면 제어의 역전이라는 뜻인데요, 스프링을 사용하기 전에는 객체를 생성하고 객체 간의 의존 관계를 연결하는 등 제어권이 개발자에게 있었습니다. 무슨 의미인지 간단한 코드를 통해 알아보겠습니다. public class A { private B b; public A() { this.b = new B(); // 자기가 사용할 의존성을 직접 만들어서 사용 } } A 객체는 B객체에게 의존하고 있는데요, 개발자는 A 객체를 생성할 때 B 객체를 함께 생성해서 의존하고 있는 객체를 직접 주입하고 있습니다. 다..