본문 바로가기
반응형

컴퓨터170

[네트워크] 세션 클러스터링 | 이중화 시 서버들이 사용자를 기억하는 방법 🌟 세션 클러스터링 (Session Clustering)로그인한 사용자 정보(세션)를 여러 서버가 같이 기억하는 방법왜 여러 서버가 같이 기억해야 되냐면 → 서버가 여러 대니까. → 어떤 서버에 연결돼도 "나 로그인했어" 상태가 유지돼야 하니까 🛠️ 방법은 두 가지1. 톰캣 설정으로 세션 클러스터링2. 토큰 기반 세션 유지 (JWT 같은 거) 1. 톰캣 설정으로 세션 클러스터링서버끼리 세션 내용을 실시간으로 동기화하는 방식 톰캣 같은 웹 서버(WAS)들이 서로 세션 정보를 주고받는다.그래서 서버 A에서 로그인했어도, 서버 B로 요청이 가도 로그인 상태를 알게된다.이걸 하려면 톰캣에 Cluster 설정을 해야 한다. (ex: server.xml 파일에 태그 추가) 장점기존 세션 로직 거의 안 .. 2025. 5. 3.
[네트워크] 이중화(HA) 및 세션 관리 | 끊기지 않고 돌아가는 프로그램을 위한 기술 🔥 이중화(HA, High Availability)"서버가 죽어도 서비스는 끊기지 않게 만드는 것" 우리가 서비스하는 사이트가 있는데, 서버가 하나밖에 없으면?서버 고장나면 사이트도 그냥 🧨펑🧨 망가짐. 그래서 서버를 두 개 이상 띄워놓고:하나가 죽으면 다른 서버가 바로 대신 일하는 구조를 만들어 놓는 것.고객은 아무것도 모르게 계속 서비스를 쓸 수 있어야 한다. 🛠️ 기술적으로는 이렇게로드밸런서 (트래픽 분배기) 앞에 두고서버(A) 서버(B) 서버(C) 여러 대를 동시에 돌림.A 서버가 죽으면 → B나 C가 대신 응답함.그리고 세션이나 데이터도 서버끼리 공유하거나 복제해서,끊기지 않고 이어지게 만들어야 한다. 🌟 이중화 안 하면서버 한 대가 죽으면로그인했던 사람 → 튕김결제 중.. 2025. 5. 2.
[네트워크] 시스템 부하와 세션, 쿼리와의 관계 | 시스템 속도가 느린 이유는 무엇일까 전체 시스템 부하는 세션 + 쿼리 관리 이슈와 연결된다.시스템이 느려지거나 먹통되는 이유는 보통, 세션이 쌓이거나 쿼리가 느리게 동작하기 때문이다.→ 세션이 메모리를 먹고, 쿼리가 CPU를 잠근다. 📌 세션 관리가 시스템 부하에 미치는 영향 세션 = 사용자 수 만큼 생기는 저장소사용자 1명 접속 → 서버 메모리에 세션 1개사용자 1000명 접속 → 세션 1000개사용자 10만 명 접속 → 서버 메모리에 10만 개 쌓임 😵 문제는세션을 계속 들고 있으니까, 메모리 누수처럼 점점 RAM을 먹는다.심하면 서버가 OOM (Out Of Memory) 으로 죽어버린다.HttpSession session = request.getSession();// 여기에 무거운 객체 넣으면 메모리 펑session.s.. 2025. 4. 30.
[JVM] JVM(자바) 의 메모리 구조 - 스택과 힙 영역, 스택 프레임이 쌓이는 과정과 힙 영역에 객체가 생기는 과정 if (list.get(i).getDataYN() == "Y") { dataSize++;} 만약 이 코드를 보고 이상한걸 못느낀다면…JVM 스택영역, 힙 영역에 어떤 데이터가 들어가는지 공부해야 한다.  JVM 의 실행자바 프로그램이 실행되면 컴파일된 .class 를 실행엔진이 메서드영역에서 읽으면서-> 스택영역에 순서대로 쌓으면서(스택 프레임 생성) 실행 + 실행되는동안 객체/배열이 있으면 힙에 생성  + 실행되는동안 가비지컬렉션이 힙 관리-> 실행이 다 되면 순서대로 스택에서 나감를 한다. 선요약 JVM 의 스택영역과 힙 영역public class Sample { // 인스턴스 필드 int x = 10; String name1 = "홍길동"; public void m.. 2024. 12. 24.
[JVM] JVM 의 메모리구조, 메모리 영역 별 저장되는 데이터 선요약 메서드 영역(Method Area): 클래스 로더에 의해 로드된 클래스의 메타데이터, 상수 풀, 정적 변수, 메서드 코드 등이 저장스택 영역(Stack Area):메서드 호출 시 생성되는 프레임이 저장각 스레드마다 스택이 하나씩 있고, 메인 스레드에 main()-프로그램 시작점 이 있음힙 영역(Heap Area): 객체와 배열, 인스턴스 변수가 동적으로 저장모든 객체는 힙에 생성되며, 전역 접근 가능  메모리 구조메서드영역, 스택영역, 힙영역으로 구성되어있다.일명 메스힙 자바 프로그램 실행 시의 대충 흐름은..자바실행 -> .java가 .class 로 컴파일 -> (클래스가 처음으로 참조될 때) 클래스로더가 .class 읽으면서 메서드영역에 클래스메타데이터, 상수풀, 정적변수 저장 + 정적변수 초.. 2024. 12. 23.
Spring Boot 의 요청-응답 순서 정리 | MVC 와 차이점 | DispatcherServlet 자동/수동 구성 SpringBoot 도 SpringMVC 의 요청 - 응답과 똑같이 처리가 되는데요청 처리 부분에서 차이점이 존재한다.SpringBoot 와 SpringMVC 의 큰 차이점 중 하나는 '설정파일 구성 여부' 이다.SpringMVC 는 개발자가 수동으로 구성하는 반면, SpringBoot 는 자동으로 구성된다.요청-응답 과정도 마찬가지… 차이점순서SpringMVCSpringBoot클라이언트가 요청을 보냄--DispatcherServlet에 요청이 도착xml 을 만들어서 요청 처리방법 정의web.xml 파일에 DispatcherServlet을 정의하고, 별도의 XML 파일(예: dispatcher-servlet.xml)이나 Java 설정 클래스를 통해 요청 처리 방법을 구성자동으로 (DispatcherSer.. 2024. 12. 21.
Spring MVC 의 요청-응답 순서 정리 | DispatcherServlet 과 컨트롤러 메소드의 선/후처리 순서클라이언트가 요청을 보냄DispatcherServlet에 요청이 도착HandlerMapping을 사용하여 적절한 핸들러(컨트롤러)를 찾음HandlerInterceptor 인터페이스의 preHandle 메소드 를 호출해서 선처리HandlerAdapter를 사용하여 핸들러 실행 준비HandlerMethodArgumentResolver를 사용하여 컨트롤러 메소드의 파라미터를 해석파라미터 전처리가 필요한 경우, 관련 메소드가 호출됨실제 컨트롤러 메소드 실행컨트롤러가 반환된 후 뷰 이름에 따라 뷰가 렌더링DispatcherServlet이 HandlerInterceptor 인터페이스의 postHandle 메소드를 호출해서 후처리응답 종료 (클라이언트에게 전송) 후 afterCompletion 메소드 호출 용어정.. 2024. 12. 20.
[JVM] JVM 동작 과정 - | 클래스로더, 실행엔진, 가비지 컬렉션 JVM 동작 선요약1. 컴파일된 자바를 클래스 로더를 통해 읽으면, 클래스 로더가 바이트코드를 검증하고 메모리에 올림 2. 클래스 로더가 할일을 끝낸다면 정적변수들이 기본값으로 설정된 후에 정적 초기화 블록이 실행됨 (초기화) 3. 그 후, 초기화가 끝나면 JVM 실행엔진이 작동 : 메모리에 올라간 바이트코드를 기계어로 번역해서 실행 4. 실행되는 동안 가비지 컬렉션이 힙메모리를 돌면서 사용되지 않는 객체들을 정리 클래스로더컴파일된 클래스 파일들을 JVM 안에 있는 클래스 로더가 읽음. 클래스로더는 컴파일된 바이트코드들을 동적로딩 한 다음에  메서드 영역에 넣음 => 클래스 로더는 클래스 파일을 로드하고 메모리에 올리는 일을 하는애 클래스로더 - 동적로딩클래스 파일을 로드한다 = 동적로딩 동적로딩은 프로.. 2024. 12. 19.
[레거시분석] 메모리 관점에서 참조형 객체 초기화 방법 (new, null) 회사 레거시 코드 분석중 어떤 코드는 참조형 객체를 null로 초기화했고어떤 코드는 참조형 객체를 new() 로 생성했다. 비슷한 로직인데 왜 이렇게 다르게 로직을 짰을까  예전에 고객이 프로젝트가 자꾸 죽는다고 컴플레인이 들어왔다.원인을 찾아보니 힙메모리를 3기가로 설정해서조금만 메모리를 사용해도 풀 gc 가 계속 돌아서 죽어버렸다. 아무튼 위의 얘기를 한 이유는new() 키워드로 객체 생성 : 안정성List columnList = new ArrayList(); 안정성: null 체크 없이 리스트의 메서드를 호출할 수 있으므로, NullPointerException 이 나지 않는다.그라고 변수를 선언할 때 바로 리스트를 생성하기 때문에 별도의 초기화 과정 없이 변수를 바로 사용할 수 있다.단점불필요한 .. 2024. 10. 22.
[리눅스] centos 7,8,9 mariadb 설치하기 | 연결테스트 설치할때마다 까먹어서 내가보려고 적음 아니 근데 centos8 나온지가 언젠데 벌써 지원 종료되면 어떡함centos 9로 다시 설치해야되잫아ㅠ  yum install mariadb 명령어로 설치하면mariadb server 가 없어서 start 오류가 남[root@proworks etc]# systemctl start mariadbFailed to start mariadb.service: Unit mariadb.service not found.이런 오류    그래서 밑의 명령어로 설치해야됨yum install mariadb-server mariady 눌러서 진행해준다.  설치 완료되면 start 해준다systemctl start mariadbps -ef | grep mariadb  잘 떠있으면 실행ㄱ  .. 2024. 10. 8.
[리눅스] mariaDB 설치 에러 : Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY 오류  centos 8 stream 버전 에서 마리아 디비 설치 시 발생(centos6 ~ 버전도 해당)     root 로그인 후 mariadb 설치 중  Curl error 가 발생wget https://downloads.mariadb.com/MariaDB/mariadb_repo_seup./mariadb_repo_setupdnf install MariaDB-server MariaDB-client MariaDB-common      그래서 systemctl restart mariadb  이런거 해도 인식안됨 설치가 안되었으니까…    /etc/pki/rpm-gpg -> 이 경로로 접근해서 MariaDB-Server-GPG-KEY 키가 있는지 확인했는데 없음👍🥹    해결  마리아디비 공식 사이트인데.. 2024. 6. 20.
[리눅스] 오류: repo를 위한 메타자료 내려받기에 실패하였습니다 'appstream ': Cannot prepare internal mirrorlist: No URLs in mirrorlist_Centos 8, stream 오류내용/오류원인 BaseOS, Extras 등등...또는 오류: repo를 위한 메타자료 내려받기에 실패하였습니다 'appstream': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried이런 오류   centos 기반 linux 사용자에게 뜨는 에러메세지centos6~8 버전 지원 종료로 인한 미러사이트 접근 오류이다.  일단 나는 yum install jenkins 하다가 오류가 났다.java 랑 기타 tools 잘 설치했었는데 갑자기 jenkins 만...   오류해결  root 계정으로 로그인 후 cd /etc/yum.repos.dls -al자신의 centos 버전에 맞는 .repo 파일들이.. 2024. 6. 5.
[리눅스] 가상 OS-웹 개발💻5a-1 | VirtualBox 6 + CentOS 8 | linux _webtob 설치 후 서버 기동(1) 이전글 목록CentOS Stream과 미러 사이트 의미, iso 파일 종류설명https://gallery-k.tistory.com/454Java 프로젝트 개발에 맞는 CentOS 설정https://gallery-k.tistory.com/455linux _외부/내부망 네트워크 설정https://gallery-k.tistory.com/457jdk 설치, JAVA_HOME 환경변수 잡기https://gallery-k.tistory.com/458    webtob, jeus 다운/라이선스 받기 webtob, jeus, tibero는 티맥스 소프트의 소프트웨어이다.설치 전 티맥스소프트 회원가입을 해야 한다.회원가입 후에는 다음 화면에서 다운로드 받아야 한다.https://www.tmaxsoft.com/kr/dow.. 2024. 5. 30.
[리눅스] linux _jdk 설치, JAVA_HOME 환경변수 잡기 shell 에 접속해서 root 로 로그인해준다.jdk 도 사실 사용자별로 만들어주는게 좋지만 보통은 JAVA_HOME 은 고정이기 때문에 root 에 설정해준다.    jdk 버전 확인   설치할 jdk 버전을 확인한다.yum list java*jdk-devel 이때 devel 은 JDK 이다.자바 개발을 해야 한다면 devel 붙은거로 받아주고 그냥 코드실행만 한다면 devel 없는 버전을 다운받아준다. 참고로 devel 없는 버전들까지 검색하면 이렇게 나온다.   JDK 설치다음 명령어를 이용해 원하는 jdk 를 설치해준다.yum install -y java-1.8.0-openjdk-devel다라라락 설치되는 모습  설치완료 후 버전 확인을 해주고 설치 경로를 확인한다. 설치경로를 확인하는 이유는 .. 2024. 5. 29.
[리눅스] 가상 OS-웹 개발💻3 | VirtualBox 6 + CentOS 8 | linux _외부/내부망 네트워크 설정 이전글 목록CentOS Stream과 미러 사이트 의미, iso 파일 종류설명https://gallery-k.tistory.com/454Java 프로젝트 개발에 맞는 CentOS 설정https://gallery-k.tistory.com/455   네트워크 초기 설정  금융권 개발은 보안이 중요하기 때문에 (금융권이 아니더라도 보안이 중요한 회사라면은)외부망/내부망 네트워크가 나눠져있다.내부망에서 개발을 진행하고, 개발이 완료된다면 외부망의 깃이나 타 서버와 연동해서 프로젝트 배포하는 식이다.   그래서 개발용 리눅스 서버에 외부망 네트워크, 내부망 네트워크를 각각 세팅해줘야 한다.NAT호스트 전용 어댑터외부 인터넷 연결용SSH 접속용 어댑터(내부)   세팅할 OS 를 우측클릭 후 설정 클릭(OS 이름 바.. 2024. 5. 28.
반응형