분류 전체보기 37

[MySQL] 시스템 변수 내맘대로 설정해보기

Real MySQL 8.0을 읽으면서 MySQL과 데이터베이스에 대해 학습하는 스터디를 시작했다. 책을 읽다보니 특정 기능을 활성화/비활성화하거나 특정 설정 값들을 변경하기 위해 시스템 변수를 조작하라는 내용이 많이 나온다. 예를 들어 InnoDB 버퍼풀의 크기에 대해 innodb_buffer_pool_size 시스템 변수를 더 큰 값으로 설정하여 버퍼 풀의 크기를 확장할 수 있다거나, innodb_buffer_pool_instances 시스템 변수를 이용해 버퍼 풀 인스턴스의 개수를 조절할 수 있다는 내용이다. 책에서는 MySQL 서버가 실행되는 운영체제의 리소스에 따라 시스템 변수를 적절히 조정하여 MySQL 서버의 성능을 높이는 다양한 방법들을 설명하고 있다. 이런 방법들을 적용해보기 위해서는 현재..

SSH Bruteforce 공격 방어하기

프로젝트를 배포해 놓은 NCP 서버로 SSH 브루트포스 공격이 들어오는 문제가 있었다. SSH Bruteforce 공격이란? Bruteforce는 사전의 단어 조합 또는 입력 가능한 모든 값을 무차별 대입하여 계정 정보를 획득하는 공격입니다. Bruteforce가 성공할 경우 공격자가 시스템을 장악하여 정보 유출 및 악성 코드 감염 등의 2차 피해가 발생할 수 있습니다. Bruteforce 공격은 다수의 공격자 IP에서 공격이 발생할 경우 공격자 IP가 표시되지 않을 수 있습니다. SSH 로그인 실패 로그를 통해 브루트포트 공격을 확인할 수 있다. sudo cat /var/log/auth.log | grep "sshd" | grep "Failed password" 실패 로그를 보면 무수히 많은 로그인 요..

클라우드 2023.11.26

포트(port)란 뭘까?

📚목차포트?프로세스는 포트 번호가 꼭 필요할까?포트 번호는 몇번까지 있을까?웰논 포트 (Well-Known Ports)등록된 포트 (Registered Ports)동적 포트 (Dynamic Ports)참고자료포트?💡포트(port)는 항구를 의미한다. 🚢 인터넷의 바다에 연결되어 다른 곳과 통신하려면 항구를 열어놓아야 한다. 네트워크 통신이 필요한 프로세스는 포트를 할당 받아서 다른 프로세스와 통신할 수 있다.네트워크 통신할 때 컴퓨터(기기)까지는 IP 주소로 찾아갈 수 있다. (네트워크 계층)그러나 컴퓨터 안에서 실행되는 특정 프로세스(웹서버, 데이터베이스 등)에 접근하려면 해당 프로세스의 포트 번호를 알아야 한다. (전송 계층)이해를 돕기 위해 다음과 같은 비유를 들어보겠다.IP 주소 = 집주소포트 번..

네트워크 2023.11.25

쉘(Shell)과 커널(Kernel)

쉘(Shell)이란? 쉘은 사용자가 OS의 자원에 접근하기 위해 사용하는 인터페이스이다. 사용자는 다양한 쉘 명령어(shell script)를 사용하여 OS의 자원에 접근할 수 있다. 커널(Kernel)이란? 쉘(shell)은 껍질 ↔ 커널(kernel)은 알맹이 커널은 운영체제의 일부이며, 하드웨어를 제어한다. 만약 커널이 없다면 하드웨어를 기계어 수준으로 직접 제어해야한다. 커널을 사용한다면 커널을 거치지 않고 직접 하드웨어를 제어할 수 없으며, 커널에서 제공하는 시스템 콜을 통해 하드웨어에 접근해야한다. 쉘과 커널의 관계 쉘은 커널과 통신하기 위한 도구이다. 쉘은 명령어 집합으로 이루어져 있으며 사용자는 CLI를 통해 명령어(shell script)를 실행할 수 있다. 쉘은 3가지 표준 입출력을 통..

운영체제 2023.09.18

[Java] 상속

상속이란? 상속의 개념을 이해할 때 “상속”이라는 단어보다 코드에서 extends 라는 표현이 더 직관적인 것 같다. 상위 클래스를 유지하면서, 상위 클래스를 연장(extend)하여 하위 클래스를 만든다. 하위 클래스는 상위 클래스의 기능을 그대로 가져오면서 새로운 멤버(변수, 메소드)를 추가하거나, 기존의 메소드를 변경(overriding)할 수 있다. class Calculator1 { public int sum(int v1, int v2) { return v1 + v2; } } class Calculator2 extends Calculator1 { public int subtract(int v1, int v2) { return v1 - v2; } } Calculator2는 Calculator1을 e..

언어/Java 2023.08.22

[Java] final

추상(abstract) 이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제이다. final 필드 class Calculator { static final double PI = 3.24; } final로 지정된 필드(변수)에는 한번 값이 할당되면 그 값을 바꿀 수 없다. final 변수에 값을 재할당하면 컴파일 오류가 발생한다. final 메소드 final 메소드를 상속하려 하면 컴파일 오류가 발생한다. class A { final void b() {} } class B { void b() {} // error: overridden method is final } final 클래스 final 클래스를 상속하려고 하면 컴파일 오류가 발생한다. final class C { final void ..

언어/Java 2023.08.10

[Java] abstract

abstract abstract로 지정된 클래스나 메소드는 직접적으로 사용할 수 없고, 반드시 상속해서 사용하도록 강제된다. 이렇게 하면 상위 클래스(추상 클래스)에서는 일부 메소드를 추상적으로 남겨두어 하위 클래스에서 구현하도록 한다. 상황에 따라 동작 방법이 달라지는 메소드를 추상 클래스로 구현하면 하위 클래스들에서 각자 다르게 구현하여 사용할 수 있다. 추상 메소드 추상 메소드란 메소드의 시그니처만이 정의되어 있는 메소드를 의미한다. 메소드 시그니처(Method signature)란? 메소드가 설계된 구조를 의미하며, 메소드 이름, 파라미터의 순서, 타입, 개수로 식별된다. abstract class A { // 추상 메소드 (구체적인 로직이 구현되지 않음) public abstract int b(..

언어/Java 2023.08.10

[Java] 접근 제어자

접근 제어자 접근 제어자(access modifier)는 클래스의 멤버(변수, 메소드)들의 접근 권한을 지정한다. Java에서는 4가지 접근 제어자를 제공한다. private public protected default private🔥 클래스 내부에서만 접근할 수 있는 변수, 메소드 사용자가 내부 로직에 접근하는 것을 막아 개발자가 의도하지 않은 오작동을 방지한다. public🔥 클래스 외부에서 접근 가능한 변수, 메소드 사용자에게 객체를 조작하기 위한 의도로 작성된 수단만을 제공하여 결과적으로 객체의 사용에 집중할 수 있도록 돕는다. protected 상속 관계에 있을 때 서로 다른 패키지에 있는 클래스의 접근을 허용 같은 패키지 → 접근 O 다른 패키지, 상속 관계 X → 접근 X 다른 패키지, 상속..

언어/Java 2023.08.10

[Java] 클래스와 인스턴스

객체 지향 프로그래밍 클래스와 인스턴스 객체 지향을 단순하게 생각하면 연관되어 있는 변수(상태)와 메소드(행동)를 하나의 그룹으로 묶어서 그룹핑하는 것이다. 연관된 변수와 메소드들을 모아 놓은 그룹이 클래스(class)이고, 클래스를 이용하여 선언된 객체(object)가 인스턴스(instance)이다. 클래스 클래스는 연관되어 있는 변수와 메소드의 집합이다. 계산기를 클래스로 구현한다고 생각해보면, 입력된 숫자를 저장할 공간(변수)과 더하기, 빼기 등의 계산 기능(메소드)이 있어야 할 것이다. class Calculator { int left; int right; public int add() { return this.left + this.right; } public int subtract() { ret..

언어/Java 2023.08.10

[알고리즘] 누적합 - Python

누적합, 구간합배열의 구간 합을 구할 때 해당 구간을 순회하면서 구하면 최대 O(n)의 시간이 걸리지만, 누적합 배열을 미리 만들어 놓으면 O(1)의 시간 복잡도로 구할 수 있다.index 0 1 2 3 4 nums = [1, 2, 3, 4, 5] acc = [0, 1, 3, 6, 10, 15] nums[i]부터 nums[j]까지의 합 = acc[j+1] - acc[i]누적합 배열 acc[i+1]는 nums 배열의 0번 값부터 i번 값까지의 합을 의미한다.따라서 nums 배열의 i번째 값부터 j번째 값까지의 합은 0번 ~ j번 값까지의 합인 acc[j+1]에서 0번 ~ i-1번 값까지의 합인 acc[i]를 뺀 값이 된다.누적합과 관련한 백준 문제https://www.acmicpc.net/problem/2..

알고리즘 2023.08.07