본문 바로가기

분류 전체보기70

[Dev] 애자일(Agile) 방법론 Agile 출처 애자일(Agile)은 소프트웨어 개발 및 프로젝트 관리를 위한 반복적이고 유연한 방법론 및 철학을 지칭하는 용어입니다. 애자일 방법론은 초기 계획보다는 변화에 민첩하게 대처하고 고객의 피드백을 적극 수용하며 작은 단위의 작업을 반복적으로 수행하여 제품을 개선하는데 중점을 두는 개발 방법론입니다. 미리 정해진 몇 개의 단계에 따라 엄격한 순서대로 이루어지는 워터폴(Waterfall) 프로세스와 비교가 많이 되는 반대 개념입니다. 워터폴은 작은 단위의 작업을 신속하게 완료하는데 주력하는 애자일과 달리 몇 달 또는 몇 년이 걸리는 전체 프로젝트에 집중합니다. 애자일은 지속적으로 테스트하는 반면 워터폴은 프로젝트가 끝난 후에야 QA를 실행합니다. 마지막에 테스트를 진행하므로 개발자는 개발 중에 .. 2023. 11. 6.
[Algorithm] 병합 정렬(Merge Sort) 병합 정렬(Merge Sort) 출처 병합 정렬(Merge Sort)은 비교 기반 정렬 알고리즘이자 분할 정복 알고리즘 중 하나입니다. 분할 정복 알고리즘은 큰 문제를 작은 하위 문제로 나누고 각 하위 문제를 해결한 다음 그 결과를 결합하여 원래 문제를 해결하는 방식으로 진행합니다. 또한 하위 배열들을 병합하는 과정에서 투 포인터 기법이 사용됩니다. 분할: 주어진 배열을 반으로 나누는 과정으로 시작하며 정렬되지 않은 배열의 중간 지점을 기준으로 나눕니다. 해당 분할 작업을 더이상 나눌수 없을 때까지 재귀적으로 반복합니다. 정복: 나뉜 하위 배열들들에 대해 재귀적으로 병합 정렬 진행합니다. 각 하위 배열은 독립적으로 정렬됩니다. 병합: 투 포인터 기법을 사용하여 두 정렬된 하위 배열을 하나로 합칩니다. 두.. 2023. 11. 3.
[DB] Transaction Transaction 트랜잭션은 데이터베이스에서의 상호 작용의 단위이며 하나 이상의 작업을 처리하는 개념으로 데이터베이스의 무결성과 데이터의 일관성을 보장하기 위한 단위를 의미합니다. 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다. 데이터베이스에서 수행되는 일련의 여러 작업이며 모두 단일 논리적 작업 단위로 사용됩니다. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위입니다. 하나의 트랜잭션은 Commit 되거나 Rollback 됩니다. 트랜잭션은 "전체"로 처리하려는 작업 단위이며 이는 완전히 일어나거나 전혀 일어나지 않아야 합니다. 동작 데이터베이스는 초당 수백만 개의 동시 요청을 처리하며 대부분의 경우 이런.. 2023. 11. 2.
[Algorithm] 선택 정렬(Selection Sort) 선택 정렬(Selection Sort) 출처 선택 정렬(Selection Sort)은 배열에서 가장 작은(또는 가장 큰) 원소를 선택하고 이를 배열의 앞쪽으로 이동시키는 방식으로 동작합니다. 비교 연산을 기반으로 동작하며 원소 간의 비교를 통해 작은(또는 큰) 값을 찾고 배열에서 다른 위치로 이동시키는 방식으로 동작합니다. 예제 먼저 다음과 같이 정렬되지 않은 배열이 있다고 가정하겠습니다. 위 배열을 오름차순으로 정렬하기 위한 선택 정렬 알고리즘은 다음과 같이 동작합니다. 먼저 첫 번째 위치의 값과 해당 배열에서의 가장 작은 값이 무엇인지 확인합니다. 영 번째 인덱스의 값인 15보다 세 번째 인덱스의 값 10이 더 작은 값 입니다. 가장 작은 값인 10을 영 번째 인덱스에 넣고 15는 세 번쨰 인덱스로 .. 2023. 10. 28.
[Web] HTTPS(HyperText Transfer Protocol over Secure Socket Layer) HTTPS 출처 HTTPS는 인터넷을 통해 정보를 안전하게 전송하기 위한 통신 프로토콜입니다. HTTP의 보안 버전으로 웹 브라우징 및 데이터 전송 과정에서 데이터 기밀성과 무결성을 보장하는 프로토콜입니다. 전송 과정에서 무결성 검사 기술을 사용하여 데이터가 변조되었는지 확인하고 변경된 데이터를 자동으로 거부합니다. 즉 HTTPS는 클라이언트가 웹 사이트와 통신할 때 민감한 데이터를 전송하는 경우 해당 데이터가 중간에서 수정되거나 탈취되지 않도록 보장합니다. HTTP는 평문을 이용하여 웹 통신을 진행합니다. 암호화 되지 않은 데이터는 스누핑(Snooping), 스니핑(Sniffing)의 위협에 노출될 수 있으며 이를 방지하기 위해 상호간 적당한 사용자인지 인증서를 통해 검증하고 서로 약속한 암호화 알고리.. 2023. 10. 26.
[Java] JPMS(Java 9 Platform Module System) JPMS(Java 9 Platform Module System) 출처 JPMS는 Java 애플리케이션의 구조화와 관리를 개선하기 위해 Java 9부터 도입된 시스템입니다. 모듈 시스템은 기존의 패키지 시스템을 보완하고 애플리케이션의 더 나은 모듈화를 가능하게 합니다. 즉 모듈 시스템은 패키지보다 높은 레벨의 집계를 추가할 수 있으며 서로 관련된 패키지 및 리소스(이미지, XML 파일 등)를 한 곳에 묶어 지칭하기 위한 재사용 가능한 고유 명칭을 의미합니다. JDK는 모놀리틱(Monolithic) 라이브러리 대신 약 90개의 플랫폼 모듈로 구성됩니다. 또한 모듈에는 이름이 있으며 관련 코드 및 기타 리소스를 그룹화하고 모듈 디스크립터(module descriptor)로 설명됩니다. 모듈 디스크립터는 mod.. 2023. 10. 23.
[Algorithm] 삽입 정렬(Insertion Sort) 삽입 정렬(Insertion Sort) 삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘입니다. 정렬되지 않은 목록(리스트, 배열)을 정렬된 부분과 정렬되지 않은 부분으로 나누며 정렬되지 않은 부분의 원소를 하나씩 선택하여 정렬된 부분의 적절한 위치에 삽입하는 방식으로 동작합니다. 출처 예제 먼저 다음과 같이 정렬되지 않은 배열이 있다고 가정하겠습니다. 위 배열을 오름차순으로 정렬하기 위한 삽입 정렬 알고리즘은 다음과 같이 동작합니다. 0 번째 인덱스 요소인 5는 정렬된 상태로 가정을하고 그 외 나머지 1... n-1 인덱스 요소는 정렬되지 않은 배열이라고 가정합니다. 첫 번쨰 요소를 정렬된 하위 배열의 요.. 2023. 10. 22.
[Dev] 도커(Docker) Docker 출처 도커는 애플리케이션을 컨테이너로 패키징해주는 툴로 Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼입니다. 컨테이너를 이용해 애플리케이션 소스 코드를 임의의 환경에서 해당 코드의 실행에 필요한 운영체제(OS) 라이브러리 및 종속 항목과 결합하는 실행 가능한 표준으로 컴포터넌트화 합니다. 도커를 사용하지 않고도 컨테이너를 구축할 수 있지만 도커 플랫폼을 사용함으로서 보다 손쉽고 간편하고 보다 안전하게 컨테이너를 빌드, 배치 및 관리 할 수 있습니다. 즉 도커는 기본적으로 개발자가 단일 API를 통한 업무 절감 자동화와 간단한 명령어를 사용하여 컨테이너를 빌드, 배치, 실행, 업데이트 및 중지할 수 있도록 해주는 툴킷(toolkit)입니다. Docker Containe.. 2023. 10. 19.
[Algorithm] 버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort) 두 개의 인접한 요소를 비교하고 필요한 경우 위치를 교환(Swap)하여 리스트를 정렬합니다. 버블 정렬은 모든 요소를 탐색하며 정렬 조건(오름차순, 내림차순 등)에 해당하는 요소가 가장 뒤로 이동할 때까지 반복됩니다. 정렬 시 거품이 올라오는 것처럼 보여 버블 정렬이라고 이름이 지어졌습니다. 출처 예제 먼저 다음과 같이 정렬되지 않은 배열이 있다고 가정하겠습니다. 위 배열을 오름차순으로 정렬하기 위한 버블 정렬 알고리즘은 다음과 같이 동작합니다. 첫 번째 인덱스부터 시작하여 첫 번째 요소와 두 번째 요소를 비교합니다. 첫 번째 요소가 두 번째 요소보다 크면 교체됩니다. 마지막 요소에 도달할 때까지 이전 절차가 반복됩니다. 첫 번째 인덱스부터 시작하여 첫 번째 요소와 두 .. 2023. 10. 17.