본문 바로가기

전체 글

(56)
프로세스와 스레드 관련 용어 정리CPU(프로세서) : 연산을 수행하고 명령어를 실행하는 컴퓨터 장치메모리작업하는 데이터를 임시로 저장하는 장소CPU는 메모리에 저장된 프로그램과 데이터를 통해 연산을 수행프로그램 : 컴퓨터가 실행할 수 있는 명령어들의 집합프로세스컴퓨터에서 실행중인 프로그램프로세스는 독립적인 메모리 공간을 가짐하나의 프로그램을 두 번 실행하면 각각 독립된 프로세스로 실행됨스레드프로세스 내에서 실행되는 단위스레드는 같은 메모리 공간을 공유 여러 작업을 동시에 처리하는 방법 예시를 통해 여러가지 처리 방법에 대해 알아봅시다주방 = CPU주방 내 조리대 = 메모리, 1개만 있다고 가정요리사 = 코어주문(샐러드, 스테이크, 파스타) = 프로그램, 프로세스요리 과정 = 스레드스테이크일 경우 재료 손질, 고기 굽기, ..
JAVA SOLID 원칙 가이드: 코드 예제로 보는 5가지 원칙 SOLID 원칙 유지보수와 확장에 용이한 객체지향적인 프로그래밍을 확인하기 위한 5가지 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙한 클래스는 하나의 책임만 가져야 한다.한 클래스가 두 가지 이상의 책임을 진다면 클래스 분리를 고려해야 한다.OCP(Open/Closed Principle) : 개방-폐쇄 원칙소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.기능이 확장되는 것은 허용하나, 스스로 변경이 되어서는 안된다.LSP(Liskov Substitution Principle) : 리스코프 치환 원칙프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.부모 클래스 자리에 자식 클래스를 넣어도 예상..
자바의 날짜와 시간 클래스 기존의 날짜 클래스 Java 1.0에는 Date 클래스, Java 1.1에는 Calender 클래스로 날짜와 시간 관련 기능을 제공했습니다.하지만 두 클래스에는 다음과 같은 문제가 존재합니다Date1900년을 기준으로 하는 오프셋0부터 시작하는 달문자열 활용의 어려움기본 시간대가 중앙 유럽 시간대(CET)스레드 안전하지 않은 DateFormat유지보수가 어려운 가변 클래스Calender0부터 시작하는 달DateFormat 사용 불가유지보수가 어려운 가변 클래스따라서 새로운 날짜와 시간 클래스의 요구가 증가하였고 자바 8에서 java.time 패키지를 추가하게 됩니다. LocalDateTime, LocalDate, LocalTime 이름에서 알 수 있듯이 LocalDateTime은 날짜와 시간, Local..
Nginx를 이용하여 HTTP를 HTTPS로 리다이렉트하는 방법 HTTPS로 리다이렉트 해야 하는 이유 - HTTP는 평문으로 데이터를 주고받기 때문에 네트워크에서 쉽게 도청될 수 있는 보안 취약점 존재- HTTPS는 SSL/TLS 인증서를 통해 데이터를 암호화하여 전송- HTTP를 HTTPS로 리다이렉트함으로 서버 통신 간의 보안을 강화할 수 있음 Nginx 설치sudo apt update #패키지 목록 업데이트sudo apt install nginx -y #Nginx 설치sudo systemctl status nginx #Nginx 설치 확인, active (running) 확인sudo ufw allow 80 #HTTP 포트 열기sudo ufw allow 443 #HTTPS 포트 열기 브라우저에서 서버의 IP 주소 또는 도메인 이름으로 접속하였을 때 Nginx 환..
Java TreeSet, TreeMap, 그리고 Red-Black Tree TreeSet  - 정의Set 인터페이스를 구현한 클래스 중 하나로 중복을 허용하지 않는 정렬된 집합 Red-Black Tree 기반으로 구현삽입, 삭제, 검색 연산의 시간 복잡도가 O(log n)집합 내 모든 요소가 정렬된 상태로 유지null을 허용하지 않음 - 생성자 TreeSet() : 빈 TreeSet 생성TreeSet(Collection c) : 컬렉션의 원소를 이용하여 TreeSet 생성TreeSet(Comparator comparator) : 주어진 조건대로 정렬하는 TreeSet 생- 메서드 add(E e) : 원소 삽입remove(E e) : 원소 삭제first() : 첫 번째 원소 반환last() : 마지막 원소 반환pollFirst() : 첫번째 원소 제거 후 반환pollLast() ..
GitLab, Jenkins, Docker, S3, EC2를 활용한 CI/CD 파이프라인 구축 - (1) Webhook 설정하기 목표 Gitlab에 push 혹은 mr이 승인되어서 merge가 될 시 jenkins의 파이프라인이 실행되도록 webhook 설정백엔드(dev-server)는 Gradle로 build, test 후 Docker 이미지를 생성 후 Dockerhub에 등록ec2에서 Dockerhub에 등록한 Docker 이미지를 pull 받아와서 실행ec2에서 MySQL Docker image를 pull 받아와서 실행프론트(dev-client)는 npm으로 build 후 s3에 등록 EC2 인스턴스에 Jenkins 설치 1. CLI를 통해 ssh로 ec2에 원격 접속ssh -i "ssh 파일" ubuntu@"ec2 주소" 2. Java 설치Jenkins는 Java가 필요하므로 temurin 17버전으로 Java를 설sudo..
이진 검색(이분 탐색) 완벽 가이드: 개념부터 문제 풀이까지 with. 프로그래머스 징검다리 이진 검색(이분탐색)이란? 1 ~ 100까지의 수 중 생각하고 있는 수를 맞춰봅시다바로 생각나는 방법은 1부터 100까지 맞는지 물어보는 것입니다이렇게하면 최악의 경우 100번을 물어봐야 합니다 더 적게 물어볼 방법은 없을까요?반씩 잘라서 그 수보다 작은지 큰지 물어보는 것입니다50 - 25 - 13 - 7 - 4 - 2 - 1 최악의 경우라도 7번만의 답을 찾을 수 있습니다정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘으로 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방법 그러면 알고리즘 테스트에서 이진 검색은 언제 사용할까요?10^9의 배열이 주어졌을 때 10억번의 연산이 필요하므로 약 10초가 필요하지만 대부분의 알고리즘은 1~2초 내에서 문제를 해..
유니온파인드(Union-Find) 알고리즘: 기본 개념과 최적화 기법 서로소 집합 공통원소가 없는 두 집합 서로소 집합은 대표적으로 두 가지 연산을 수행합니다 1. Find(X): X가 속한 집합의 대표 찾기2. Union(X, Y) : X가 속한 집합과 Y가 속한 집합을 합침 따라서 서로소 집합을 이용하는 알고리즘을 유니온파인드라고 말합니다 유니온파인드 연산 일반적인 배열을 사용해서도 유니온파인드 연산을 수행할 수 있습니다이 경우 Union연산 수행을 위해 배열의 모든 값을 돌면서 대표를 변경해야하므로 시간복잡도는 O(N)입니다유니온파인드 알고리즘을 사용하는 이유는 이 시간복잡도를 O(a(N)), 약 O(1)의 시간복잡도로 줄이기 위해서입니다 최초에는 각 원소는 각자 자신이 대표가 됩니다 원소01234대표01234 - Find 임의로 1번 원소를 0번 집합에 포함시키고 ..