공지사항
블로그 공지
블로그 공지
공지
2024.12.31 22:03
추천 글
[Ubuntu] ssh 원격접속 보안 강화
[Ubuntu] ssh 원격접속 보안 강화
서버 구축기
2024.11.29 10:53
최근에 개인 서버를 마련했다. 이 서버에 내 개인 프로젝트를 구동시킬 예정인데, 보안이 신경쓰여 내가할 수 있는 방법을 최대한 써서 보안을 강화하려고 한다. 아래의 내용을 따라하면 다음과 같은 보안적인 이점이 있다.SSH 포트번호 변경root 계정 SSH 접속 비허용RSA를 이용한 공개키 기반 인증허용된 포트만 열어둠(UFW)비정상적인 접근 차단 및 로깅(fail2ban)SSH 2단계 인증(2FA) 서버 환경은 Ubuntu 24.04 LTS 버전에서 이뤄졌다는점 참고 바랍니다. SSH 포트번호 변경ssh 설정파일을 변경해서 포트번호를 바꾸어햔다.sudo nano /etc/ssh/sshd_configPort 부분에 주석이되어있을 텐데 주석을 해제하고 원하는 포트번호로 바꾼다. sudo nano /lib/s..
[DB 성능 최적화] 인덱스(Index)
[DB 성능 최적화] 인덱스(Index)
MySQL
2024.08.21 00:51
이 글은 인프런의 MySQL 성능 최적화 입문/실전 (SQL 튜닝편) (박재성) 강의를 듣고 개인적으로 정리하는 글임을 알립니다.MySQL 아키텍쳐MySQL의 아키텍처를 간단하게 표현하자면 위와 같다.클라이언트가 DB에 SQL 요청을 보낸다. MySQL 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운다.어떤 순서로 테이블에 접근할 지, 인덱스를 사용할 지, 어떤 인덱스를 사용할 지 등을 결정한다.(옵티마이저가 세운 계획은 완벽하지 않다. 따라서 SQL 튜닝이 필요하다.)옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다. (DB 성능에 문제가 생기는 대부분의 원인은 스토리지 엔진으로부터 데이터를 가져올 때 발생한다. 데이터를 찾기가 어려..
[JPA] 병합(Merge)과 변경 감지(Dirty Checking)
[JPA] 병합(Merge)과 변경 감지(Dirty Checking)
JPA
2024.08.05 19:29
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.JPA(Java Persistence API)에서 변경 감지(Dirty Checking)와 병합(Merge)은 엔티티 상태 관리를 위한 중요한 개념이다. 이 두 가지는 데이터베이스와 애플리케이션 간의 동기화를 효율적으로 관리하는 데 사용된다. 결론부터 말하면 두 방법중에 변경 감지를 사용하는 것이 더 좋다. 병합병합(Merge)은 JPA에서 준영속 상태의 엔티티를 영속성 컨텍스트에 포함시키고, 해당 엔티티의 상태를 데이터베이스에 반영하는 작업이다.이 과정은 데이터베이스에 이미 저장된 데이터를 수정할 때 사용된다.@PostMapping(value = "/items/{itemId}/edit")public String..
[Linux] 프로세스와 시그널
[Linux] 프로세스와 시그널
Linux
2024.11.08 20:37
프로세스 계층구조리눅스의 프로세스 계층구조는 부모-자식 관계를 기반으로 형성되며, 트리 구조로 표현된다.  부모 자식 관계새로운 프로세스는 기존 프로세스가 fork()를 호출하여 생성한다.프로세스가 생성되면 부모 프로세스의 자식 프로세스로 연결된다.모든 사용자의 최상위(최초의) 프로세스는 init 또는 systemd이다. 프로세스 계층 구조 Process 0 (Idle Process)리눅스 시스템 부팅 시 커널이 가장 먼저 생성하는 프로세스로, 메모리 관리 및 시스템 초기화 같은 커널 수준의 작업을 담당한다.시스템 부팅 중 커널의 초기화를 수행.이후 사용자 영역의 첫 프로세스인 프로세스 1(init)을 생성.모든 초기화가 완료되면, Idle Process로 전환되어 CPU의 유휴 상태를 관리.PID 0이..
[Docker] Docker Compose를 이용한 SpringBoot + MySQL + Redis 컨테이너 동시에 띄우기
[Docker] Docker Compose를 이용한 SpringBoot + MySQL + Redis 컨테이너 동시에 띄우기
Docker
2024.08.26 00:47
주의사항Docker Hub의 최신버전 MySQL은 9.x 버전이다.그런데 현재 24.8.25일 기준 최신 스프링부트 버전인 3.3.3은 MySQL 9.x 버전을 지원하지 않는다.따라서 MySQL의 모든 버전은 8.0.32 버전으로 맞추었다. 스프링부트 설정build.gradledependencies {...implementation 'org.springframework.boot:spring-boot-starter-data-redis'implementation("org.springframework.boot:spring-boot-starter-data-jpa")implementation 'mysql:mysql-connector-java:8.0.32'}  application.propertiesspring.d..
[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화
[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화
CI & CD
2024.09.13 00:20
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.CI/CD는 Continuous Integration(지속적 통합)과 Continuous Deployment(지속적 배포) 또는 Continuous Delivery(지속적 전달)를 뜻한다.이 개념은 개발자가 더 효율적으로 코드를 작성하고, 빠르고 안정적으로 사용자에게 소프트웨어를 제공하는 것을 목표로 한다. GitHub Actions는 자동화된 워크플로우를 지원하는 도구로, 저장소의 빌드, 테스트, 배포 등의 작업을 자동화할 수 있다.즉, GitHub Actions는 CI/CD 과정에서 빌드, 테스트, 배포에 대한 로직을 실행시키는 서버(컴퓨터)의 역할을 한다.개발자가 코드를 작성 후 커밋 & 푸시를 하는 순간 Gi..
[Database] 트랜잭션 ACID, DB 연결구조와 세션
[Database] 트랜잭션 ACID, DB 연결구조와 세션
데이터베이스 이론
2024.02.27 00:59
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 트랜잭션의 기본적인 내용은 아래의 글을 참고 2023.08.20 - [Java Category/Java] - [Java] DB 트랜잭션 처리 [Java] DB 트랜잭션 처리 이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다. 트랜잭션 트랜잭션(transaction)은 기능 처리의 최소 단위를 말한다. 하 rebugs.tistory.com 트랜잭션 ACID ACID 속성 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전부 완료되거나 전부 실행되지 않아야 한다는 원칙이다. 즉, 트랜잭션의 연산 중 하나라도 실패하면, 이미 실행된 모든 연..
[JAVA] 상속 - 타입 변환과 다형성(매우 중요)
[JAVA] 상속 - 타입 변환과 다형성(매우 중요)
Java
2023.01.08 00:17
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.기본 타입(기본 자료형)의 타입 변환(형 변환)에는 자동 타입 변환이 있고, 강제 타입 변환이 있다.클래스에도 이러한 타입 변환이 있다.메소드 재정의(오버라이딩)와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다.다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라질 수 있다.어떤 타이어는 고속주행에 유리한 타이어이고, 또 다른 타이어는 눈길에서 미끄러지지 않고 주행할 수 있는 타이어가 있듯이 말..
인기 글
[Linux / Ubuntu] VMware Tools 수동 설치
[Linux / Ubuntu] VMware Tools 수동 설치
Linux
2024.03.28 18:37
나의 가상머신 환경에서는 아래와 같이 reinstall VMware Tools 버튼이 비활성화되어있다.(처음 설치부터 이랬음) 참고로 VMware Fusion 13.5 버전 사용중 (또한 우분투 GUI) 폭풍 구글링 결과 https://www.liquidweb.com/kb/how-to-install-vmware-tools-ubuntu/ 이 사이트를 참고하여 해결하였다. 방법 #1: Open VM Tools 패키지를 사용하여 VMware Tools 설치 1. 패키지 정보 업데이트 sudo apt-get update 2. GUI 기반 Ubuntu에 VMware Tools 설치 sudo apt-get install open-vm-tools-desktop 3. 머신 재부팅 sudo reboot 4. 설치된 VM..
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
Git & GitHub
2023.12.27 00:11
본 게시글은 모두의 git,github(저자 : 강민철)의 내용을 개인적으로 정리하는 글입니다. 브랜치란? 브랜치는 마치 줄기에서 뻗어 나오는 나뭇가지와 같이 버전을 여러 흐름으로 나누어 관리하는 방법이다. 브랜치는 버전의 분기이다. 작업을 분기하고 싶을 때 브랜치를 나누면 된다. 버전을 나누어 관리하는 것은 아래의 3단계로 버전을 관리하는 것을 의미한다. 브랜치를 나눈다. 각자 브랜치에서 작업한다. (필요할 경우) 나눈 브랜치를 합친다. 브랜치 나누고, 합치기 깃이 제공하는 가장 기본적인, 최초의 브랜치를 master 브랜치라고 한다. 가령 로컬 저장소를 만들고, 커밋 세 개를 만들었다고 가정하자 이 커밋 모두는 master 브랜치에 속한다. master 브랜치에 만들어진 세 커밋을 master 1번 ..
[JSP] IntelliJ 에서 JSP 개발환경 만들기
[JSP] IntelliJ 에서 JSP 개발환경 만들기
JSP
2024.01.08 00:26
개발 환경 windows 11 pro jdk : 17.0.9 Apache Tomcat : 10.1.17 intelliJ : 2023.3.2 IntelliJ에서 JSP 개발환경 초기 설정 인텔리제이를 실행하고 프로젝트를 만든다. 우측 상단에 돋보기 버튼을 누른다. add framework support 를 검색하고 클릭한다. Java EE - web applition을 체크하고 Create web.xml 도 체크하고 ok를 누른다. 이후 우측 상단의 current file 의 드랍다운 박스를 눌러서 Edit configurations...를 누른다. 아래와 같은 화면이 나오면 왼쪽 상단의 + 버튼을 누른다. 이후 Tomcat Server - Local을 누른다. Application server에서 Con..
IntelliJ에서 Database(MySQL, Oracle) 연결하기
IntelliJ에서 Database(MySQL, Oracle) 연결하기
기타
2024.01.09 00:01
개발 환경 windows 11 pro jdk : 17.0.9 mysql : 8.0.35 oracle : 19.3.0 intelliJ : 2023.3.2 데이터베이스 연결하기 우측 상단의 톱니바퀴 모양을 클릭하고 Project Structure 클릭 Libraries - +버튼 - Java 클릭 JDBC가 있는 폴더에서 jar 파일 클릭 mySQL, Oracle 각각 JAR이 다르니 검색해서 버전에 맞는거 다운로드 하세요 프로젝트 선택후 ok 버튼 클릭 정상적으로 추가된 것을 확인했으면, ok 버튼이나 apply 버튼 클릭 이제 데이터베이스와 연결할 준비가 끝났다. 또 다른 방법 우측 끝에서 Database 아이콘 클릭 + 버튼 클릭 Data Source - 원하는 데이터 베이스 클릭 MySQL - MyS..
JAVA+Eclipse 설치 및 환경변수 설정 총정리 (+Hello, World!출력하기)
JAVA+Eclipse 설치 및 환경변수 설정 총정리 (+Hello, World!출력하기)
Java
2022.12.20 05:24
올해는 C++과 파이썬을 주로 공부했습니다. 내년부터는 JAVA복습, HTML, CSS, JS를 공부하려고 합니다 그래서 자바를 하기 위해 JAVA와 Eclipse를 설치하는 방법을 정리합니다. JAVA 다운로드하기 https://www.oracle.com/java/technologies/downloads/ Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts. www.oracle.com 위 사이트에 접속합니다. 저는 Java19대신 Java17을 설치할 것이고 저는 윈도우 사용자이기에 Wind..
최신 글
[Kubernetes] Deployment와 Service
Kubernetes2025.05.10 00:23[Kubernetes] Deployment와 Service

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.DeploymentDeployment 개념디플로이먼트(Deployment) 란 파드를 묶음으로 쉽게 관리할 수 있는 기능을 말한다.현업에서는 일반적으로 서버를 작동시킬 때 파드(Pod)를 수동으로 배포하진 않는다.디플로이먼트(Deployment)라는 걸 활용해서 파드(Pod)를 자동으로 배포한다. 디플로이먼트의 장점파드의 수를 지정하는 대로 여러 개의 파드를 쉽게 생성할 수 있음.ex) 파드를 100개를 생성하라고 시키면 디플로이먼트가 알아서 파드를 100개 생성해준다.파드가 비정상적으로 종료된 경우, 알아서 새로 파드를 생성해 파드 수를 유지한다.동일한 구성의 여러 파드를 일괄적으로 일시 중지, 삭제, 업데이트를..

[Spring Boot 핵심원리와 활용] 액츄에이터(Actuator)
Spring2025.05.09 19:41[Spring Boot 핵심원리와 활용] 액츄에이터(Actuator)

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.액츄에이터를 사용하려면 스프링부트 의존성에 다음과 같이 추가해야한다.build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter- actuator' // actuator 추가} 의존성을 추가하고 /actuator 경로로 접근하면 액츄에이터에 접근할 수 있다.http://localhost:8080/actuator 액츄에이터의 모든 기능을 웹에 노출하려면 application.yml에 아래와 같이 작성하면 된다.application.ymlmanagement: endpoints: web: exposur..

[java] 백준 18429번 문제(근손실)
BOJ2025.05.09 16:58[java] 백준 18429번 문제(근손실)

원본 링크 : https://www.acmicpc.net/problem/18429문제설명 소스코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_18429{ static int n, k, count; static int[] kitEffect; static boolean[] usedKit; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.i..

[Kubernetes] 파드(Pod)
Kubernetes2025.05.09 00:45[Kubernetes] 파드(Pod)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.파드(Pod)도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너라고 부른다. 쿠버네티스에서는 하나의 프로그램을 실행시키는 단위를 파드(Pod)라고 부른다.도커 : 컨테이너쿠버네티스 : 파드(하나 또는 여러개의 컨테이너로 구성)따라서 파드(Pod)는 일반적으로 쿠버네티스에서 하나의 프로그램을 실행시키는 단위라고 기억해두면 이해하기 편하다.쿠버네티스에서 가장 작은 단위일반적으로 하나의 파드가 하나의 컨테이너를 가진다. (예외적으로 하나의 파드가 여러 개의 컨테이너를 가지는 경우도 있다.) 쿠버네티스도 도커처럼 이미지를 기반으로 파드를 띄워 실행시킨다. Pod 생성 및 실행Nginx먼저 Manifest File을 ..

[Kubernetes] 쿠버네티스 설치(Mac)
Kubernetes2025.05.08 00:58[Kubernetes] 쿠버네티스 설치(Mac)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.쿠버네티스쿠버네티스(Kubernetes)는 다수의 컨테이너를 효율적으로 배포, 확장 및 관리하기 위한 오픈 소스 시스템이다.쿠버네티스(Kubernetes)는 Docker Compose와 비슷한 느낌을 가지고 있다. Docker Compose도 다수의 컨테이너를 쉽게 관리하기 위해 활용하기 때문이다.하지만 도커 컴포즈로 수백, 수천 개의 컨테이너를 관리하기는 힘들다. 하지만 쿠버네티스는 가능하다.Docker Compose: 로컬 개발 환경 또는 소규모 서비스 구성에 적합하며, 오케스트레이션 기능은 제한적이다.Kubernetes: 프로덕션 환경에서 수천 개의 컨테이너를 안정적으로 관리할 수 있다. 쿠버네티스의 장점컨테..

[Nginx] 다중 도메인 설정, 로드 밸런싱
Nginx2025.05.07 13:35[Nginx] 다중 도메인 설정, 로드 밸런싱

다중 도메인 설정Nginx를 통해서 하나의 서버에서 도메인마다 다른 애플리케이션에 연결시킬 수 있다.예를들어, aaa.com 이라는 도메인에는 A라는 스프링부트 애플리케이션에 연결시키고, bbb.com이라는 도메인에는 B라는 스프링부트 애플리케이션에 연결시킬 수 있다. 이 글에서 설명하는 방법은 우분투 환경을 기준으로 설명하며, /etc/nginx/conf.d에 있는 .conf 파일을 사용하지 않는다. /etc/nginx/nginx.conf모든 사이트에 적용할 전역 설정 /etc/nginx/sites-available이 디렉토리는 Nginx에서 사용할 수 있는 모든 서버 블록 설정 파일을 보관하는 장소이다.이곳에 설정 파일을 작성한다고 해서 Nginx가 자동으로 해당 설정을 반영하지는 않으며, 단순히 설..

[java] 백준 24542번 문제(튜터-튜티 관계의 수)
BOJ2025.05.07 11:57[java] 백준 24542번 문제(튜터-튜티 관계의 수)

원본 링크 : https://www.acmicpc.net/problem/24542문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_24542{ static int[] parent; static final int MOD = 1_000_000_007; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRead..

[java] 백준 1976번 문제(여행 가자)
BOJ2025.05.07 11:25[java] 백준 1976번 문제(여행 가자)

원본 링크 : https://www.acmicpc.net/problem/1976문제설명 소스코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_1976{ static int[] parent; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); // 도시 수 ..

[java] 백준 1717번 문제(집합의 표현)
BOJ2025.05.06 22:29[java] 백준 1717번 문제(집합의 표현)

원본 링크 : https://www.acmicpc.net/problem/1717문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_1717{ static int[] parent; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new ..

[java] 유니온 파인드(Union-Find)
알고리즘2025.05.06 22:17[java] 유니온 파인드(Union-Find)

이 글은 Do it! 알고리즘 코딩 테스트 - 자바편을 개인적으로 공부하고 정리하는 글임을 알립니다.유니온 파인드유니온 파인드는 여러 개의 원소들이 어떤 그룹(집합)에 속해 있는지를 빠르게 확인하고, 서로 다른 그룹을 하나로 합치기 위해 사용하는 자료구조이다.예를 들어 친구 관계, 네트워크 연결, 그래프의 사이클 여부처럼 ‘서로 연결되어 있는지 아닌지’를 효율적으로 판별해야 하는 문제에서 매우 빠른 속도로 연산할 수 있기 때문에 자주 사용된다. 유니온 파인드는 일반적으로 여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union 연산과 두 노드가 같은 집합에 속해있는지를 확인하는 find 연산으로 구성되어있는 알고리즘이다. union 연산 : 여러 노드가 있을 때 특정 2개의 노드를..

image