공지사항
블로그 공지
블로그 공지
공지
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
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.기본 타입(기본 자료형)의 타입 변환(형 변환)에는 자동 타입 변환이 있고, 강제 타입 변환이 있다.클래스에도 이러한 타입 변환이 있다.메소드 재정의(오버라이딩)와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다.다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라질 수 있다.어떤 타이어는 고속주행에 유리한 타이어이고, 또 다른 타이어는 눈길에서 미끄러지지 않고 주행할 수 있는 타이어가 있듯이 말..
인기 글
[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..
[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..
[컴퓨터 구조] 명령어의 구조와 주소 지정 방식
[컴퓨터 구조] 명령어의 구조와 주소 지정 방식
컴퓨터 구조
2023.03.11 21:40
이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 연산 코드와 오퍼랜드 명령어는 연산 코드와 오퍼랜드로 구성되어 있다. 연산 코드 오퍼랜드 위 그림의 색으로 칠해져 있는 필드 값, 즉 '명령어가 수행할 연산'을 연산 코드라 하고, 흰색 배경 필드 값, 즉 '연산에 사용할 데이터' 또는 '연산에 사용할 데이터가 저장된 위치'를 오퍼랜드라고 한다. 후자가 훨씬 더 많이 사용하므로 이를 주소 필드라고 부르기도 한다. 연산 코드는 연산자, 오퍼랜드는 피연산자라고도 부른다. 이를 간단한 그림으로 나타내면 아래와 같다. 명령어는 연산 코드와 오퍼랜드로 구성되어 있다. 연산 코드는 명령어가 수행할 연산이다. 오퍼랜드는 '연산에 사용..
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기
Git & GitHub
2023.12.27 00:11
본 게시글은 모두의 git,github(저자 : 강민철)의 내용을 개인적으로 정리하는 글입니다. 브랜치란? 브랜치는 마치 줄기에서 뻗어 나오는 나뭇가지와 같이 버전을 여러 흐름으로 나누어 관리하는 방법이다. 브랜치는 버전의 분기이다. 작업을 분기하고 싶을 때 브랜치를 나누면 된다. 버전을 나누어 관리하는 것은 아래의 3단계로 버전을 관리하는 것을 의미한다. 브랜치를 나눈다. 각자 브랜치에서 작업한다. (필요할 경우) 나눈 브랜치를 합친다. 브랜치 나누고, 합치기 깃이 제공하는 가장 기본적인, 최초의 브랜치를 master 브랜치라고 한다. 가령 로컬 저장소를 만들고, 커밋 세 개를 만들었다고 가정하자 이 커밋 모두는 master 브랜치에 속한다. master 브랜치에 만들어진 세 커밋을 master 1번 ..
이클립스(Eclipse) 디버그 모드
이클립스(Eclipse) 디버그 모드
기타
2023.11.18 00:14
디버그 모드란? 오류가 발생했을 때, 코드의 논리적인 순서 흐름을 파악할 수 있도록 코드를 한줄 한줄씩 실행해나가는 과정을 뜻한다. 디버그 모드를 사용하면 어디서 에러가 발생하는지를 좀 더 쉽게 알 수 있다. 디버그 모드 사용 디버그 모드를 사용하려면 먼저 브레이크 포인트를 걸어야 한다. 브레이크 포인트 코드가 처음부터 실행되다가 일시적으로 멈추게 되는 지점이다. 브레이크 포인트부터 사용자가 순차적으로 코드를 진행시키며 코드의 실행 흐름을 파악할 수 있다. 소스코드 좌측에, 라인번호 왼쪽에 파란색으로 칠해진 공간을 더블 클릭하면 브레이크 포인트를 지정할 수 있다. 브레이크 포인트가 걸리면 위 사진처럼 동그란 아이콘이 나타난다. 이 포인트가 디버그 시작점이다. 이후 디버그 모드(단축키 : F11)를 실행하..
최신 글
[네트워크 이론] 무선 네트워크
네트워크 이론2025.04.24 17:36[네트워크 이론] 무선 네트워크

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.와이파이와 802.11IEEE 802.11은 무선 LAN의 표준이며, 와이파이(Wi-Fi)의 기술 기반이다.유선 LAN이 IEEE 802.3(이더넷)을 기반으로 하는 것처럼, 무선 LAN은 IEEE 802.11 표준을 따른다.IEEE 802.11 뒤에 붙는 알파벳(b, g 등)은 세부 규격을 의미하며, 주파수로는 2.4GHz와 5GHz 대역이 주로 사용된다. 802.11의 세부 규격은 주파수, 전송 속도, 전송 거리, 변조 방식 등에 따라 달라진다.버전별로 성능 차이가 있기 때문에 제품 스펙에 따라 지원 주파수와 최대 속도도 달라진다.와이파이를 선택할 때 ‘2.4G’ 또는 ‘5G’라고 표기되는 것은 이..

[네트워크 이론] 암호화 방식
네트워크 이론2025.04.24 17:08[네트워크 이론] 암호화 방식

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.암호화(encryption): 원문 데이터를 알아볼 수 없는 형태로 변경하는 것을 의미복호화(decryption): 암호화된 데이터를 원문 데이터로 되돌리는 것을 의미암호화와 복호화는 비단 안전한 데이터 송수신뿐만 아니라 인증서 기반의 검증도 가능하게 한다. 암호와 인증서키는 원문 데이터를 수학적 연산을 통해 암호문으로 바꾸는 데 사용되는 값이며, 이 과정을 암호화 알고리즘이라 한다.암호문은 키 없이는 제3자가 의미를 알 수 없도록 설계되며, 복호화를 통해 원문을 되찾을 수 있다. 대칭키 암호화 방식과 공개키 암호화 방식대칭키 암호화 방식대칭 키 암호화 방식은 암호화와 복호화에 동일한 키를 사용하는 방..

[네트워크 이론] 가용성, 이중화, 로드 밸런싱
네트워크 이론2025.04.24 00:16[네트워크 이론] 가용성, 이중화, 로드 밸런싱

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.가용성 가용성이란 시스템이나 네트워크가 얼마나 안정적으로 기능을 수행할 수 있는지를 나타내는 개념이다. 흔히 ‘불안정하다’, ‘안정적이다’라는 표현으로 대체되지만, 명확한 정의로는 일정 수준의 성능을 꾸준히 유지하며 기능을 제공할 수 있는 특성을 의미한다.가용성의 수준은 고가용성(high availability)이라는 개념으로 수치화할 수 있으며, 이는 전체 사용 시간 중 실제로 사용 가능한 시간의 비율을 말한다.업타임을 전체 시간(업타임 + 다운타임)으로 나눈 값이 가용성이며, 일반적으로 이 수치가 높을수록 시스템이 안정적이라고 평가받는다.업타임 : 정상적인 사용 시간다운타임 : 정상적인 사용이 불가..

[java] 백준 2667번 문제(단지번호붙이기)
BOJ2025.04.23 10:52[java] 백준 2667번 문제(단지번호붙이기)

원본 링크 : https://www.acmicpc.net/problem/2667문제설명 소스코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main{ static int n; static int[][] map; // 지도 static boolean[][] visited; // 방문 배열 public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Array..

[네트워크 이론] 응용 계층 - HTTP
네트워크 이론2025.04.23 00:10[네트워크 이론] 응용 계층 - HTTP

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.HTTP의 특성HTTP 프로토콜은 중요한 4가지 특성이 있다.요청과 응답 기반미디어 독립적무상태성(Stateless)지속 연결 요청-응답 기반 프로토콜HTTP는 ‘클라이언트–서버 구조 기반의 요청–응답 프로토콜’이다.클라이언트와 서버가 있고, 클라이언트는 서버에게 요청 메시지를 전송하며, 서버는 클라이언트에게 요청에 대한 응답 메시지를 전송한다.HTTP는 이와 같이 클라이언트와 서버가 서로 HTTP 요청 메시지와 HTTP 응답 메시지를 주고받는 구조로 동작한다.그렇기에 같은 HTTP 메시지일지라도 HTTP 요청 메시지와 HTTP 응답 메시지는 메시지 형태가 다르다. 미디어 독립적 프로토콜HTTP를 정의..

[네트워크 이론] 응용 계층 - DNS와 자원
네트워크 이론2025.04.22 17:01[네트워크 이론] 응용 계층 - DNS와 자원

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.도메인 네임과 네임 서버네트워크상의 어떤 호스트를 특정하기 위해 IP 주소를 사용한다.하지만 오로지 IP 주소만 사용하기에는 번거롭다. 통신하고자 하는 모든 호스트의 IP 주소를 기억하고 있기도 어렵기 때문이다.호스트의 IP 주소는 언제든지 바뀔 수 있기 때문이다. 여러분이 모든 친구의 전화번호를 전부 기억하기 어려운 것과도 비슷하다.그래서 일반적으로 사용자는 상대 호스트를 특정하기 위해 IP 주소보다는 도메인 네임을 많이 사용한다.도메인 네임은 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보이다.예를 들어 http://www.example.com, developers.naver.com,..

[java] 백준 2644번 문제(촌수계산)
BOJ2025.04.22 12:00[java] 백준 2644번 문제(촌수계산)

원본 링크 : https://www.acmicpc.net/problem/2644문제설명 소스코드import java.io.*;import java.util.*;public class Boj_2644{ static ArrayList[] list; // 인접 리스트 static boolean[] visited; // 방문 배열 static int[] depth; // 깊이(촌수) 배열 public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parse..

[네트워크 이론] 전송 계층 - TCP와 UDP
네트워크 이론2025.04.22 00:42[네트워크 이론] 전송 계층 - TCP와 UDP

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.TCP 통신 단계와 세그먼트 구조TCP는 통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료한다.그리고 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다. MSSTCP의 연결 수립과 종료를 이해하려면 가장 먼저 MSS라는 단위와 TCP의 세그먼트 구조를 이해해야 한다.MSS는 Maximum Segment Size의 약자로, TCP로 전송할 수 있는 최대 페이로드 크기를 의미한다.MSS의 크기를 고려할 때 헤더 크기는 제외한다. 헤더의 크기까지 포함했던 단위인 MTU와는 대조적이다. TCP 세그먼트 헤더 송신지 포트(source port)..

[네트워크 이론] 전송 계층 - IP의 한계와 포트
네트워크 이론2025.04.21 17:32[네트워크 이론] 전송 계층 - IP의 한계와 포트

이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.네트워크 계층의 IP는 신뢰할 수 없는 통신과 비연결형 통신을 수행한다는 한계가 있다.네트워크 계층과 응용 계층 사이에 위치한 전송 계층은 신뢰할 수 있는 통신과 연결형 통신을 가능하게 하여 이러한 IP의 한계를 극복하고, 포트 번호를 통해 응용 계층의 애플리케이션 프로세스들을 식별하는 역할을 수행한다. IP의 한계신뢰할 수 없는 통신과 비연결형 통신IP의 한계라고 볼 수 있는 두 가지 중요한 특징이 있다.IP는 신뢰할 수 없는(비신뢰성) 프로토콜이자 비연결형 프로토콜이라는 점이다.달리 표현하면, IP를 통한 패킷의 전달은 신뢰성이 없는 통신이자 연결을 수립하는 과정이 없는 통신이다.이는 전송 계층이 ..

[Spring 핵심원리 - 고급] 스프링 AOP 구현
Spring2025.04.21 16:23[Spring 핵심원리 - 고급] 스프링 AOP 구현

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.리포지토리 & 서비스import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Repository;@Slf4j@Repositorypublic class OrderRepository { public String save(String itemId) { log.info("[orderRepository] 실행"); //저장 로직 if (itemId.equals("ex")) { throw new IllegalStateException("예외 발생!"); } return..

image