반응형
[Next Step] 5장 웹 서버 리팩토링, 서블릿 컨테이너와 서블릿의 관계
독서/📚2023. 11. 16. 11:07[Next Step] 5장 웹 서버 리팩토링, 서블릿 컨테이너와 서블릿의 관계

실습 프로젝트 저장소실습의 경우 처음에 fork 받았는데, 깃 허브 잔디가 심어지지 않아 기술 블로그 참고(링크)하여 저장소 설정을 변경하도록 함 web-application-server (3 ~ 6장)https://github.com/slipp/web-application-server GitHub - slipp/web-application-server: 웹 애플리케이션 서버 실습을 위한 뼈대웹 애플리케이션 서버 실습을 위한 뼈대. Contribute to slipp/web-application-server development by creating an account on GitHub.github.com  4장에서 구현한 HTTP 웹 서버를 리팩토링하면서 설계를 개선하는 경험을 해보자  https://..

[Next Step] 3~4장 HTTP 웹서버 구현을 통해 HTTP 이해하기(No Framework)
독서/📚2023. 11. 15. 11:21[Next Step] 3~4장 HTTP 웹서버 구현을 통해 HTTP 이해하기(No Framework)

로컬 개발 환경 구축 https://dev-ljw1126.tistory.com/294 [Next Step] 3.3 원격 서버에 배포 (p84) 정리목차 요구사항 로컬 개발 환경에 설치한 HTTP 웹 서버를 물리적으로 떨어져 있는 원격 서버에 배포해 정상적으로 동작하는지 테스트한다. 이때 HTTP 웹 서버 배포 작업은 root 계정이 아닌 배포를dev-ljw1126.tistory.com 실습 프로젝트 저장소실습의 경우 처음에 fork 받았는데, 깃 허브 잔디가 심어지지 않아 기술 블로그 참고(링크)하여 저장소 설정을 변경하도록 함 web-application-server (3 ~ 6장)https://github.com/slipp/web-application-server GitHub - slipp/web-a..

[Next Step] 12.8 웹서버 도입을 통한 서비스 운영(p458) 정리
독서/📚2023. 11. 10. 21:35[Next Step] 12.8 웹서버 도입을 통한 서비스 운영(p458) 정리

4-1. nginx 설치 및 설정 디렉토리$ apt-get install -y nginx$ sudo service nginx start$ netstat -tnlp  서버 아이피 접속시(80포트) nginx default 페이지 확인 가능하다80/tcp 접근 되지 않을 경우 ufw 방화벽 설정 확인해보기 주요 디렉토리 - /etc/nginx/sites-available- /etc/nginx/sites-enabled  참고. 강의 https://www.youtube.com/watch?v=7GlCo6RHBns4-2. nginx 와 tomcat 서버 연동nginx 와 tomcat 연결 설정$ cd /etc/nginx/sites-availabe$ sudo vim jwp-basic# 아래 내용 작성 후 저장 - t..

[Next Step] 10.4 배포 자동화를 위한 쉘 스크립트 개선 (p362) 정리
독서/📚2023. 11. 10. 17:17[Next Step] 10.4 배포 자동화를 위한 쉘 스크립트 개선 (p362) 정리

요구사항소스 코드를 배포한 후 문제가 발생할 경우 빠르게 원복(롤백, rollback)할 수 있는 환경을 구축한다  ① 배포 스크립트( deploy.sh ) 개선② 원복(롤백) 스크립트( rollback.sh) 구현 참고. 영상 자료https://www.youtube.com/watch?v=UqocnEIX-mAhttps://www.youtube.com/watch?v=7OSzN16FqCw1. 배포 스크립트( deploy.sh ) 개선개선할 부분① /home/releases/프로젝트 디렉토리 생성하여 빌드 디렉토리를 rename 하여 이동시킨다② 배포할 디렉토리를 TOMCAT_HOME/webapps의 ROOT로 심볼릭 링크 생성 후 톰캣 재시작한다 deploy.sh 수정#!/bin/bashREPOSITORY_..

[Next Step] 6.6 쉘 스크립트를 활용한 배포 자동화(p218) 정리
독서/📚2023. 11. 3. 22:22[Next Step] 6.6 쉘 스크립트를 활용한 배포 자동화(p218) 정리

요구사항-지금까지 구현한 기능을 개발 서버에 톰캣 서버를 설치한 후 배포한다-서버가 정상적으로 실행되고 있는지 톰캣 로그 파일( catalina.out )을 통해 모니터링 한다-쉘 스크립트를 만들어 배포 과정을 자동화 한다 ① 톰캣 서버 설치② 실습 코드 배포③ 톰캣 서버 로그 모니터링④ 쉘 스크립트 통해 배포 자동화  참고. 영상 자료https://www.youtube.com/watch?v=ZsiO27LeW34https://www.youtube.com/watch?v=9Rr4gMRyUtQhttps://www.youtube.com/watch?v=bzM1WL4qdoA1. 톰캣 서버 설치톰캣 디렉토리 구조 - bin : 톰캣 서버 시작/종료,  catalina.sh 옵션 설정도 가능 - logs : 톰캣 실행..

[BOJ21925] 짝수 팰린드롬 (동적 프로그래밍, DP)
알고리즘/동적 프로그래밍2023. 10. 6. 21:17[BOJ21925] 짝수 팰린드롬 (동적 프로그래밍, DP)

문제링크 https://www.acmicpc.net/problem/21925 21925번: 짝수 팰린드롬 (1, 1), (5, 6, 7, 7, 6, 5), (5, 5) www.acmicpc.net 문제풀이 직접 풀이하여 통과는 하였지만, 방문 배열로 사용여부를 체크한다거나 맨앞에 펠린드롬이 아닌 경우 처리를 찾지 못해 아쉬움이 남는다. - 동적 프로그래밍 풀이 - palindrome 2차원 배열 전처리하여 구함 팰린드롬인 경우 1) 자기 자신이거나 (길이1) 2) 바로 옆에 수와 같거나 (길이2) 3) 양 끝이 같고, (시작점 + 1) ~ (끝점 - 1) 범위의 수도 팰린드롬인 경우 - 최대 수열의 길이 N = 5,000이기 때문에 int[][] palindrome 선언시 4byte * 5,000 * 5..

프림 알고리즘(최소신장트리, MST, prime)
알고리즘/탐욕(그리디)2023. 9. 23. 15:13프림 알고리즘(최소신장트리, MST, prime)

목차 최소 신장 트리 (MST, Minimum Spanning Tree) 그래프 내의 모든 정점을 포함하면서 사용된 간선들의 가중치 합이 최소가 되는 트리 MST 특징 1) 간선(Edge)의 가중치 합이 최소 2) N개의 정점을 가지는 그래프에서 반드시 (N - 1) 개의 간선만을 사용해야 함 (= 트리의 성질) 3) Cycle을 포함하면 안된다 프림(Prime) 알고리즘 - 인접 리스트와 우선 순위 큐, 그리고 방문 배열을 사용 - 시작점을 기준으로 인접한 정점 중에 아직 연결하지 않았고, 가중치가 최소인 정점을 선택 반복하여 노드를 연결함 - 우선 순위 큐를 집합으로 보고, 가장 가중치가 작은 노드를 우선 순위로 하여 연결(=방문) 여부 확인 후 연결 처리 한다. - 시간 복잡도 : O((V + E)..

크루스칼 알고리즘 (MST, 최소 신장 트리, kruskal)
알고리즘/탐욕(그리디)2023. 9. 23. 12:24크루스칼 알고리즘 (MST, 최소 신장 트리, kruskal)

최소 신장 트리 (MST, Minimum Spanning Tree) 그래프 내의 모든 정점을 포함하면서 사용된 간선들의 가중치 합이 최소가 되는 트리  MST 특징1) 간선(Edge)의 가중치 합이 최소2) N개의 정점을 가지는 그래프에서 반드시 (N - 1) 개의 간선만을 사용해야 함 (= 트리의 성질)3) Cycle을 포함하면 안된다  크루스칼(Kruskal) 알고리즘 - 최소 신장 트리(MST)를 구하는 알고리즘 중 하나- 매 순간 최소 가중치를 가지는 간선을 선택하여 연결하므로, 탐욕 알고리즘으로도 분류됨- 이때 Union-Find 알고리즘과 함께 사용하여 Cycle 형성되지 않을 경우 노드를 연결한다- 시간복잡도 : O(ElogE) - 실제 로직보다 간선 정보 정렬시 비용이 가장 큰 걸로 알려져..

[BOJ21278] 호석이 두마리 치킨 (최단거리, 다익스트라, 플로이드 워셜)
알고리즘/최단 경로2023. 9. 13. 22:58[BOJ21278] 호석이 두마리 치킨 (최단거리, 다익스트라, 플로이드 워셜)

문제 링크 https://www.acmicpc.net/problem/21278 21278번: 호석이 두 마리 치킨 위의 그림과 같이 1번과 2번 건물에 치킨집을 짓게 되면 1번부터 5번 건물에 대해 치킨집까지의 왕복 시간이 0, 0, 2, 2, 2 로 최소가 된다. 2번과 3번 건물에 지어도 동일한 왕복 시간이 나오지만 더 www.acmicpc.net 문제 풀이 다익스트라 풀이 건물 중 두 개를 뽑는 조합을 구하고 다익스트라 알고리즘으로 최단 거리를 구한다. - N : 건물의 개수, 노드 수, 최대 100 - M : 도로의 개수, 간선 수, 최대 N * (N-1)/2 = 4950 - 100개의 건물 중 2개를 뽑는 조합 : 100C2 = 100 * 99 / 2! = 4950 - 다익스트라 알고리즘 시간 ..

[Java] Quick Sort(퀵 정렬, 재귀 방식, 왼쪽/중간/오른쪽 피벗)
알고리즘/정렬2023. 8. 13. 14:12[Java] Quick Sort(퀵 정렬, 재귀 방식, 왼쪽/중간/오른쪽 피벗)

설명 - 피벗을 기준으로 좌측에 피벗 보다 작은 값, 우측에 피벗보다 큰 값을 위치 시킴 - partition(파티션)을 나눠 행위를 반복한다 - partition을 최소 까지 나눴을 때는 이미 정렬이 완료된 상태이다. 파티션을 나누기 전에 pivot 기준으로 임의 정렬을 하고 partition을 나눠 행위 반복하면 더이상 나눌 수 없을 때 이미 정렬이 완료된다. 반대로 merge sort의 경우 제일 작은 크기 까지 파티션을 먼저 나눈 후 병합을 하면서 정렬 수행한다. *과정 (1) pivot 을 정함 (2) 양쪽 끝에 L, R 포인터를 두고 다음 수행 2-1) L < pivot 경우 포인터 증가 L += 1 (pivot 기준 좌변은 항상 작아야 하므로, 큰 값이 나올 때까지 포인터 이동) 2-2) p..

[Java] 람다식을 더 짧게 - 메서드 참조 Method Reference
공부/Java2023. 8. 2. 20:54[Java] 람다식을 더 짧게 - 메서드 참조 Method Reference

Method Reference - Java 8 도입- 하나의 메서드만 호출하는 람다식은 메서드 참조로 간소화하여 표현가능하다 (전달 인자를 생략하여 코드 간결해짐)- 구분자로 :: 사용- 아래의 4가지 유형 있음 아래 코드는 정렬할 때 [클래스 구현 -> 람다 -> 람다 간소화 -> 정적 메서드 참조]에 대한 비교 예시이다// 배열 선언Person[] perons = ...// (1) Comparator 구현 방식 (구 시대적)class PersonAgeComparator implements Comparator { public int compare(Person a, Person b) { return a.age().compareTo(b.age()); }}Arrays.sort(persons,..

[Java] Optional 클래스 메서드 (자바의 정석)
공부/Java2023. 8. 1. 17:34[Java] Optional 클래스 메서드 (자바의 정석)

NullPointerException(NPE)- Null 상태인 오브젝트를 레퍼런스할 때 발생 - Runtime error 이기 때문에 실행 전까지 발생 여부를 알기 쉽지 않음 Runtime 환경에서 에러가 발생할 경우, 심할 경우 서버 다운까지 가능하므로 발생시 리소스 비용이 만만치 않음 "Null pointer를 발명한 것은 나의 10억불짜리 실수였다" - Tony Hoare (출처 wikipedia)I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references ..

[BOJ 10942] 팰린드롬 ? (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 18. 23:15[BOJ 10942] 팰린드롬 ? (Java, DP)

문제 링크 https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 문제 풀이 시간복잡도 - 상향식(Bottom-Up) 풀이시 O(N^2) = O(2000^2) - 하향식(Top-Down) 풀이시 O(N!) = O(2000!) 시간 초과 발생 가능 -> memorization 기법으로 시간내 풀이 가능 *팰린드롬 (PALINDROME) ? - 길이가 1일 때 자기 자신도 팰린드롬이다. (1, 2, 3, ...) - 길이가 2인 경우 두 숫자가 동일할때 팰린드롬이다. (11, 22) - 길이가..

[BOJ 11049] 행렬 곱셈 순서 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 18. 22:50[BOJ 11049] 행렬 곱셈 순서 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 문제 풀이 백준 11066 파일 합치기와 비슷한 문제였으나 행렬 곱셉을 어떻게 DP 배열로 처리할 지에 대해 파악하기 힘든 문제였다. - 상향식(Bottom-Up)으로 풀 경우 시간 복잡도 O(N^2) - 하향식(Top-Down)으로 풀경우 O(N!) , memorization 기법 활용하여 시간 내에 풀이 가능 - 최대치는 Integer 범위 - 행렬 A (m x k) ,..

[BOJ 1949] 우수마을 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 16. 22:05[BOJ 1949] 우수마을 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/1949 1949번: 우수 마을 N개의 마을로 이루어진 나라가 있다. 편의상 마을에는 1부터 N까지 번호가 붙어 있다고 하자. 이 나라는 트리(Tree) 구조로 이루어져 있다. 즉 마을과 마을 사이를 직접 잇는 N-1개의 길이 있으며, www.acmicpc.net 문제 풀이 - 인접 리스트 사용하여 시간 복잡도 O(V + E) = O(10,000 + 9,999) - 트리이기 때문에 간선의 수 = 노드의 수 - 1 - DFS 방식으로 리프 노드 구하는 문제에서 응용하는 문제로 2차원 배열로 방문 여부에 따라 조건 처리를 하게 된다 - 시작 노드는 1로 해서 최종적으로 DP[1][0], DP[1][1] 중 최대값이 최대 인구에 해당한다 DP..

[Next Step] 3.3 원격 서버에 배포 (p84) 정리
독서/📚2023. 7. 11. 21:38[Next Step] 3.3 원격 서버에 배포 (p84) 정리

요구사항 로컬 개발 환경에 설치한 HTTP 웹 서버를 물리적으로 떨어져 있는 원격 서버에 배포해 정상적으로 동작하는지 테스트한다. 이때 HTTP 웹 서버 배포 작업은 root 계정이 아닌 배포를 담당할 새로운 계정을 만들어 진행한다. ① 계정 추가 및 sudo 권한 할당② 각 계정별 UTF-8 인코딩 설정해 한글 이슈 해결③ JDK, 메이븐 설치④ Git설치, clone 및 빌드⑤ 방화벽 설정(ufw)⑥ 소스 코드 재배포 참고. AWS 사용할 경우 아래 링크 참고 (p83)https://opentutorials.org/module/1946 참고. 영상 자료https://www.youtube.com/watch?v=dWGzApCuF9Mhttps://www.youtube.com/watch?v=N8iLAuAo-..

[BOJ 15681] 트리와 쿼리 (Java, DP, DFS)
알고리즘/동적 프로그래밍2023. 7. 11. 17:00[BOJ 15681] 트리와 쿼리 (Java, DP, DFS)

문제 링크 https://www.acmicpc.net/problem/15681 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net 문제 풀이 - 시간 복잡도 O(V + E) // 인접 리스트 사용 - 백준 링크에 들어가보면 하단에 친절하게 로직을 설명하고 있어 참고하면 됨 # 입력 트리를 그릴 경우 5번 Root 기준 5 4 6 3 7 8 9 1 2 # subtree 결과 subtree [0, 1, 1, 3, 4, 9, 4, 1, 1, 1] 제출 코드 ..

[BOJ 15990] 1, 2, 3 더하기 5 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 10. 22:10[BOJ 15990] 1, 2, 3 더하기 5 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제 풀이 - 시간 복잡도 : O(N) - 1,2,3 더하기 문제에서 조금 변형된 문제, 상향식, 하향식 연습하기 좋은 문제 - 단, 같은 숫자를 연속적으로 붙일 수 없기 때문에 이전 숫자에서 무엇이 사용되었는지 상태값을 기록할 필요가 있다 (2차원 배열 사용) - 간단하게 2차원 배열로 해서 1 ~ 3 숫자 사용 여부를 표기하고 동일하게 점화식으로 구하면 됨 - 최대치 long DP[N + 1][4] 2차원 배열 생성 ( DP[N][1..

반응형
image