분류 전체보기 75

[Algorithm] 백준 - 2920번 음계 (파이썬/Python)

문제 (링크) 알고리즘 분류 - 구현 문제 다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오. 입력 첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다. 출력 첫째 줄에 ascending, descending, mixed 중 하나를 출력한다..

Algorithm 2023.12.23

[Java] REST API URI 디자인을 위한 7가지 규칙

URI RFC 3986은 다음과 같이 일반 URI 구문을 정의합니다. URI = scheme "://" authority "/" path [ "?" query ] [ "#" fragment ]​ 1. URI 구성요소 API 내에서 사용되는 URL의 구조는 소비자에게 의미가 있어야 하며, URL은 이해 가능성과 사용성을 높이기 위해 예측 가능한 계층적 구조를 따라야 합니다. URL은 다음과 같이 표준 명명 규칙을 따라야 합니다. https://gw.api.gov.au/namespace/project-name/v1/collection?fields=startDate,endDate \___/ \___________/ \__________________________________/ \_______________..

Java 2023.10.10

[Docker] 도커에 Jenkins 설치

사전 준비 1. Docker Desktop 설치 2. Docker 사전 지식 Jenkins 설치 docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 --restart=on-failure --name jenkins-server jenkins/jenkins:lts-jdk17 1. -d: 백그라운드 모드 2. -v: 데이터 바인딩 3. -p: 외부 접속 8080 포트 바인딩 4. --restart: 비정상 종료 시 컨테이너를 재실행 5. --name: 컨테이너 이름 6. image: jenkins/jenkins:lts-jdk17 Jenkins 접속 확인 * http://localhost:8080 접속 $ docker exec -it $CONTAINER_..

Docker 2023.10.10

[Spring] JUnit5 테스트 코드 작성

테스트 코드를 작성해야 하는 이유 코드 테스트는 소프트웨어 개발 과정에서 매우 중요한 부분입니다. 아래는 코드 테스트를 실시해야하는 이유 몇 가지입니다. 1. 버그 발견: 코드 테스트를 통해 프로그램 내의 버그와 오류를 식별할 수 있습니다. 이렇게 발견된 버그를 수정하면 소프트웨어의 안정성과 신뢰성을 높일 수 있습니다. 2. 기능 검증: 코드 테스트는 소프트웨어의 기능을 확인하는 데 사용됩니다. 시스템이 기대대로 작동하는지 확인하고, 모든 기능이 올바르게 구현되었는지 확인할 수 있습니다. 3. 코드 변경 관리: 코드를 수정하거나 업데이트할 때, 테스트를 통해 변경된 코드가 이전 버전과 호환되는지 확인할 수 있습니다. 이를 통해 새로운 기능 추가나 버그 수정을 안정적으로 수행할 수 있습니다. 4. 코드 문..

Spring 2023.10.06

[DB] MySQL IN과 EXISTS 차이

MySQL IN과 EXISTS 차이 MySQL에서 `IN`과 `EXISTS`는 서로 다른 방식으로 데이터를 비교하는 데 사용되는 두 가지 다른 조건절입니다. 각각의 차이점과 어떤 상황에서 사용해야 하는지에 대해 설명하겠습니다. 1. IN 조건절은 지정된 값 목록과 비교하여 결과를 필터링하는 데 사용됩니다. 일반적으로 하나 이상의 값을 비교할 때 사용됩니다. 예를 들어, 다음 쿼리는 customers 테이블에서 customer_id가 1 또는 2 또는 3인 고객을 선택합니다. SELECT * FROM customers WHERE customer_id IN (1, 2, 3);​ 명시적인 값 목록을 비교하기 때문에 간단하고 직관적입니다. 2. EXISTS 조건절은 하위 쿼리의 결과에 따라 조건을 평가합니다. ..

DB 2023.09.24

[DB] SQL 쿼리 튜닝 시 고려사항

SQL 쿼리 튜닝 시 고려사항 쿼리 튜닝(query tuning)은 데이터베이스 성능을 최적화하기 위해 SQL 쿼리를 개선하는 과정입니다. 데이터베이스 성능을 향상시키기 위해 쿼리를 튜닝할 때 고려해야 할 주요 사항은 다음과 같습니다. 1. 실행 계획 분석: 데이터베이스 관리 시스템(DBMS)이 생성하는 실행 계획을 분석합니다. 이를 통해 쿼리가 어떻게 실행되는지 이해할 수 있습니다. 2. 인덱스 활용: 인덱스를 적절하게 활용하여 데이터베이스 접근 속도를 향상시킬 수 있습니다. 쿼리에서 사용되는 조건절과 조인 조건에 인덱스를 생성하거나 적절한 인덱스를 활용하는지 확인하세요. 3. 조인 최적화: 조인 연산을 최적화하여 쿼리의 성능을 개선합니다. 필요한 경우 INNER JOIN, LEFT JOIN, RIGH..

DB 2023.09.18

[DB] MySQL 해시 조인(hash join) 개념

MySQL 해시 조인(hash join) 개념 MySQL에서 "hash join"은 두 개 이상의 테이블을 결합하는 데 사용되는 조인 알고리즘 중 하나입니다. Hash join은 대용량 테이블 간의 조인 작업을 최적화하기 위해 설계되었습니다. 일반적으로 다음과 같은 상황에서 사용됩니다. 1. 큰 테이블과 작은 테이블 간의 조인: 하나는 큰 테이블이고 다른 하나는 작은 테이블인 경우에 특히 유용합니다. Hash join은 작은 테이블을 메모리에 적재하고 대용량 테이블과 조인하는 데 사용됩니다. 2. 조인 조건이 등식 연산자(예: "=")를 사용하는 경우: Hash join은 등식 연산자를 기반으로 조인을 수행하며, 이 연산자가 가장 효과적으로 작동합니다. MySQL 해시 조인(hash join) 동작 원리..

DB 2023.09.12

[DB] MySQL 스토리지 엔진 종류 및 특징

MySQL 스토리지 엔진 종류 및 특징 MySQL 스토리지 엔진은 MySQL 데이터베이스 시스템에서 데이터를 저장하고 관리하는 데 사용되는 데이터 저장 및 처리 엔진입니다. MySQL은 여러 가지 스토리지 엔진을 지원하며, 각 스토리지 엔진은 데이터를 저장하고 관리하는 방식, 기능 및 성능 측면에서 다릅니다. 사용자는 MySQL 데이터베이스 테이블을 만들 때 어떤 스토리지 엔진을 사용할 것인지 선택할 수 있으며, 각 테이블은 하나의 스토리지 엔진만 사용할 수 있습니다. 1. InnoDB: InnoDB는 MySQL의 기본 스토리지 엔진으로, 트랜잭션 처리, 외래 키 제약 조건, 다중 버전 동시성 제어(MVCC) 등의 고급 기능을 제공합니다. 데이터 무결성과 내구성을 보장하며, 복구 및 로그 기반의 백업을 ..

DB 2023.09.03

[DB] MySQL과 MariaDB 차이점

MySQL과 MariaDB 차이점 MySQL과 MariaDB는 모두 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 이 둘은 기술적으로 서로 밀접하게 관련되어 있지만 몇 가지 차이점이 있습니다. 아래에서 각각의 특징을 살펴보겠습니다. 1. 소스 코드의 기반: MySQL은 원래 MySQL AB에서 개발되었으며 후에 Oracle이 인수하였습니다. MariaDB는 MySQL의 포크(fork)로 시작되었으며, MySQL의 초기 개발자 중 한 명인 Michael "Monty" Widenius가 MariaDB를 개발하고 있습니다. 2. 라이선스: MySQL은 GNU General Public License(GPL) 라이선스를 기반으로 한 다중 라이선스 모델을 사용합니다. MariaDB는 MySQL의 GPL 라이..

DB 2023.08.28

[Java] 가비지 컬렉션(Garbage Collection)의 개념

가비지 컬렉션(Garbage Collection) 개념 가비지 컬렉션(Garbage Collection)은 프로그래밍 언어에서 메모리 관리를 위한 중요한 개념 중 하나입니다. 프로그램이 동적으로 메모리를 할당하고 사용할 때, 할당된 메모리 중에서 더 이상 사용되지 않는 부분을 찾아내고 해제하는 작업을 의미합니다. 이를 통해 메모리 누수(memory leaks)와 같은 문제를 방지하고, 프로그램의 안정성과 성능을 향상시킬 수 있습니다. 가비지 컬렉션은 주로 자바(Java), C#, Python, JavaScript와 같은 고급 프로그래밍 언어에서 사용되며, 다양한 방법으로 구현될 수 있습니다. 가장 일반적으로 사용되는 가비지 컬렉션 알고리즘에는 다음과 같은 것들이 있습니다. 1. 참조 카운팅(Referen..

Java 2023.08.21