전체 글

기록합시다.
JAVA

[JAVA] Gabage Collection

→ 가비지 컬렉터(GC) 애플리케이션의 동적 메모리 할당 요청을 자동으로 관리한다. 운영 체제에서 메모리를 할당하고 반환. 애플리케이션이 요청할 때 해당 메모리를 애플리케이션에 전달. 응용 프로그램에서 아직 사용 중인 메모리 부분을 확인. 애플리케이션에서 재사용할 수 있도록 사용하지 않은 메모리를 회수. JAVA는 프로그램 코드에서 메모리를 지정하거나 해제하지 않는다. 객체를 Null로 지정하는 것은 상관없지만, System.gc()메서드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 끼친다. * System.gc() 메서드는 가비지를 탐색 및 정리하는 작업이고 상당히 무거운 작업이다. 공식 문서에 따르면 대부분의 VM 종료시까지 유지되는 초기화 시 할당된 객체 외에는 위의 그림과 같은 그래프에 해당한..

SERVER

[SERVER] docker / centos 8 / oracle cloud

😢 oracle cloud의 centos 8 에 docker를 설치해서 spring boot 프로젝트를 구동해본다. 도커 : 가상의 공간을 이미지로 만듦. 하나의 이미지를 통해 여러개의 컨테이너를 만들 수도 있음. 이러한 과정이 완전히 독립된 가상의 공간에서 실행된다. 그냥 호스트의 포트를 컨테이너의 포트로 연결하기만 하면 된다. 도커 이미지는 Dockerfile이라는 파일로 관리하고, 컨테이너 실행 시, docker-compose 파일을 이용한다. VMware 같은 가상머신과 달리 host OS 위에 또다른 OS를 띄우는 것이 아닌 같은 OS에서 프로세스를 격리 시켜 실행하기 때문에 실행 속도가 빠르고, CPU , memory , network 성능 저하가 거의 없다. docker 설치 이전에 yum-..

SERVER

[SERVER] GitLab CI CD / oracle cloud / docker

The One DevOps Platform From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster. about.gitlab.com GitLab : 중앙 서버에서 Git 저장소를 관리하며, CI / CD 를 통해 DevOps 환경을 구축할 수 있게 도와준다. CI / CD 는 지속적 통합, 지속적 서비스 제공, 지속적 배포를 말한다. 😒 개발팀에서는 보통 메인 리포지토리에 주기적으로 머지 또는 push 한다. CI 원칙을 통한 MERGE → 자동으로 팀에서 만든 CI 스크립트를 통해 빌드 및 유닛 테스트 및 기타 등등을 스크립트등을 통..

SERVER

[Server] Session 과 JWT

🥕 Http 프로토콜에서는 클라이언트와 서버의 통신이 끝나자마자 상태정보를 잊어버린다 (Stateless) 따라서 통신을 할 때마다, 클라이언트의 정보를 요구한다. 이를 해결하기 위한 방법으로 인증을 하게된다. 로그인을 통해 사용자에게 권한을 부여하고, 인증을 통해 사용자의 권한을 확인하고, 반복되는 리소스 낭비를 피하게 된다. 인증에 자주 쓰이는 세션과 토큰을 비교한다. 😢 Session : 유저 인증 성공 이후 서버에 세션 저장. 저장 후 response를 통해 유저의 쿠키에 세션 ID 가 저장되도록 한다. 유저 측에서 http를 요청할 떄에는 Session id 가 포함된 쿠키가 헤더에 포함되며, 서버는 Session id 및 Session Storage에서의 정보를 대조 후, 유저 및 로그인 정보..

ALGORITHM

[피보나치 수열] 재귀호출, 배열

🤢 1 ~ 45 번째 항으로 구한 피보나치 수열은 다음과 같다. 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 메모이제이션을 사용한 재귀 호출로 구현 할 경우 : package com.org.jmc; import java.util.Scanner; public class 피보나치..

ALGORITHM

[이진 탐색] Binary Search Algorithm

오름차순 정렬이 필수인 알고리즘이다. 특정한 값의 위치를 찾으려 할 때, 중간값을 선택하고 찾고자 하는 값의 크고 작음을 비교한다. O(log n) 의 시간복잡도를 가진다. 하지만 최악의 경우에는 한쪽으로 편향된 트리가 될 수 있다. 이러한 케이스에는 시간복잡도가 O(n) 이 된다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.next()); int m = Integer.parseInt(sc.next()); int[] array = new int[n]; for (int i=0; i< n; i++) { array[i] = Integer.parseInt(sc.nex..

WAS

[WAS & WEB SERVER] Tomcat 동작 과정

TOMCAT 동작 방식 과 트래픽이 많아 서버가 감당하지 못하는 상황을 어떻게 예방 할 지에 대해 정리해본다. 🦐 WEB-SERVER 는 아파치 기준, WAS는 tomcat 기준으로 본다. 🤨 사용자의 요청이 Tomcat에 도달해 응답하기까지. 🥸 동작 순서 : → 사용자가 웹 브라우저 접근, 사용자의 요청 발생. → 80 포트로 web server 전달 → web server에서 처리 할 정적인 컨텐츠가 아니라면 tomcat으로 요청 ( AJP 포트 통상 8009 ) → Tomcat Connector에서 체크 → Tomcat Servlet Container 에서 사용자의 요청 분석 및 HttpServletRequest , HttpServletResponse 생성 → 어느 서블릿에 대한 요청인지 확인. ..

카테고리 없음

[FTP] Centos 8 vsftpd 설정

🥞 centos 8 -> vsftd 설치 및 계정 및 포트 설정 $ yum -y install vsftpd $ cd /etc/vsftpd/ $ vi vsftpd.conf vsftpd의 설정 파일에 아래 LINE의 옵션을 설정한다. ( line 추가가 아닌 수정 && 주석일 경우 주석 해제) anonymous_enable=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list listen=YES listen_ipv6=NO 🧇 ipv4 와 ipv6 를 동시에 열어 놓는 설정일 경우 ftp 실행 시 에러가 발생 할 수 있다. $ vi /etc/vsftpd/chroot_list 접속 할 사용자 계정을 chroot_list에 추가한다. 위 설정이 끝..

AWS

[AWS S3] 임시테이블을 활용한 1억 4천만건 데이터 삭제 요청

https://girinprogram93.tistory.com/62 [CURSOR PAGING] 커서 페이징처리. 🥞 오프셋 기반 페이징에서 -> 커서 방식 페이징으로 변경하기 전에 미리 알아보려 한다. 🥞🥞 오프셋 기반 페이징의 단점 : LIMIT / OFFSET 을 이용할 경우 offset이 늘어나는 양에 따라 비효율적인 girinprogram93.tistory.com 작업 환경 : java 1.8 / spring boot / gradle / jdbcTemplate / tomcat 9.06 / MySQL 🍔 지난번의 커서 기반 페이징 S3 삭제 요청에 이어서 최종본이다. ( 지금은 삭제된 데이터를 전수검사하고 있다. ) 🥣 상황 : S3 스토리지에 삭제 대상인 특정 오브젝트가 1억 4천만건이 존재하며..

ALGORITHM

[ALGORITHM] Dynamic programming / 동적 계획법

👌 동적 계획법. 핵심은 top down / bottom up 방식에서 중복되는 연산을 피하는 것. -> O(2^n)의 시간복잡도를 가지게 될 경우 ( 재귀 함수 ) -> 연산의 횟수가 늘어난다. -> 콜 스택이 많이 늘어나므로 성능이 안좋아진다. 성능뿐만이 아닌 한계점까지 갈 경우 에러도 발생한다. 이미 연산을 한 과정을 다시 연산하는 부분이 생겨난다. 😔 피보나치 수열로 예시를 많이 든다. public class pbnc { public static void main(String[] args) { int n = 10; } // 반복되는 연산을 고려하지 않음. static int ffibo1( int x ) { if (x == 1 || x== 2) { return 1; } return ffibo1(x-..

girin_dev
girin_dev