전체 글
-
[Mysql] 샤딩과 파티셔닝에 대해 알아보자!DB/Mysql 2025. 4. 22. 13:40
MySQL에서의 샤딩(Sharding)과 파티셔닝(Partitioning) 개념 및 예제 대용량 데이터를 효율적으로 저장하고 처리하기 위한 방법으로 샤딩(Sharding)과 파티셔닝(Partitioning)이 자주 활용됩니다. 이 글에서는 이 두 개념을 MySQL을 중심으로 설명하고, 각각의 사용 사례 및 차이점을 정리합니다.1. 샤딩(Sharding) 이란? 샤딩은 데이터를 수평으로 분산 저장하기 위해 데이터베이스 자체를 여러 서버로 나누는 방법입니다. 사용자의 ID, 지역, 생성일자 등 특정 기준(샤딩 키)을 사용하여 데이터를 물리적으로 다른 DB에 저장합니다.샤딩 예시 (MySQL 기반)DB A: 사용자 ID 1 ~ 99999DB B: 사용자 ID 100000 ~ 199999DB C: 사용자..
-
OSI 7계층과 TCP/IP 4계층의 차이?Web 2025. 4. 22. 13:26
OSI 7계층과 TCP/IP 4계층 모델의 이해와 차이점 컴퓨터 네트워크를 이해하기 위해 가장 기초적이면서도 중요한 개념이 바로 계층 모델입니다. 네트워크 통신을 계층화해서 설명한 대표적인 모델로는 OSI 7계층과 TCP/IP 4계층이 있습니다. 이 글에서는 두 모델이 무엇인지, 각각의 계층은 어떤 역할을 하는지, 그리고 어떤 차이가 있는지 정리해보겠습니다.1. OSI 7계층이란? OSI(Open Systems Interconnection) 7계층 모델은 국제표준화기구(ISO)에서 제정한 네트워크 통신 모델로, 통신 과정을 7단계로 나누어 설명합니다. 1계층 - 물리 계층: 전기적 신호, 케이블, 커넥터 등 물리적 전송 2계층 - 데이터 링크 계층: MAC 주소 기반 프레임 전송, 오류 감지 ..
-
OSI 7 계층과 TCP, HTTP 의 이해Web 2025. 4. 22. 13:21
TCP와 HTTP의 차이점 이해하기 전에 알아야 할 OSI 7계층인터넷 통신을 이해하려면 먼저 OSI 7계층(Open Systems Interconnection Model)을 알아야 합니다. 이 모델은 네트워크 통신을 7단계로 나누어 각 계층이 수행하는 역할을 정의합니다.1. OSI 7계층이란? OSI 7계층은 네트워크에서 데이터가 전송되는 과정을 논리적으로 7단계로 나눈 모델입니다. 각 계층은 독립적으로 동작하며, 상위 계층과 하위 계층 간의 인터페이스를 통해 데이터를 전달합니다. 1계층 - 물리 계층 (Physical): 전기 신호, 케이블, 하드웨어 연결 등 물리적인 데이터 전송 2계층 - 데이터 링크 계층 (Data Link): MAC 주소를 이용한 프레임 전송, 오류 감지 3계층 - 네트..
-
[Mysql] slow query 발생 원인 및 해결 방안을 알아보자!DB/Mysql 2025. 4. 22. 11:02
MySQL에서 잘 동작하던 쿼리가 갑자기 느려지는 이유와 해결 방안MySQL을 운영하다 보면 이전까지 빠르게 실행되던 쿼리가 어느 순간부터 슬로우 쿼리(Slow Query)로 전환되는 경우가 있습니다. 이 글에서는 그러한 현상이 발생하는 주요 원인과 해결 방법을 정리해보았습니다.🛠 주요 원인 데이터 양의 급증 인덱스를 잘 사용하던 쿼리도 데이터 양이 많아지면서 쿼리 성능이 떨어질 수 있습니다. 통계 정보(Statistics) 갱신 지연 MySQL 옵티마이저는 통계 정보를 기반으로 실행 계획을 수립합니다. 통계 정보가 오래되었으면 비효율적인 실행 계획이 수립될 수 있습니다. 인덱스 손상 또는 누락 테이블 구조 변경, 인덱스 제거 등의 이유로 기존에 잘 사용되던 인덱..
-
[Springboot] 인증(Authentication)과 인가(Authorization) 구분하기!Server/Spring Boot 2025. 4. 21. 17:42
✅ 인증(Authentication)과 인가(Authorization)의 차이📌 비유로 쉽게 이해하기회사 건물에 출입하는 상황을 떠올려 봅시다. 인증(Authentication): 당신이 누구인지 확인하는 것 👉 출입문에서 사원증을 찍고 "나는 홍길동입니다" 라고 밝히는 단계입니다. 즉, 아이디와 비밀번호로 본인을 증명하는 것입니다. 인가(Authorization): 당신이 무엇을 할 수 있는지 확인하는 것 👉 사원증을 찍었더니 5층까지는 출입 가능, 9층은 출입 불가라고 나옵니다. 즉, 인증된 사용자가 어떤 권한(Role)을 가지고 있는지에 따라 접근 제한됩니다. 🛠 Spring Boot에서 로그인과 토큰을 활용한 인증/인가 구현📍 사용 기술 Spring Boo..
-
[Springboot] SQL Injection 이란? 해결 방안은?Server/Spring Boot 2025. 4. 21. 17:28
🔐 SQL Injection이란?SQL Injection은 사용자의 입력값이 검증 없이 SQL 쿼리에 포함될 때 발생합니다...💥 SQL Injection 발생 예제 (Spring Boot)// 취약한 코드 예시@RestController@RequiredArgsConstructorpublic class UserController { private final JdbcTemplate jdbcTemplate; @GetMapping("/user") public String getUser(@RequestParam String username) { String sql = "SELECT * FROM users WHERE username = '" + username + "'"; ..
-
[Springboot] 통합 테스트 코드 작성해보기 (Controller)Server/Spring Boot 2025. 4. 21. 15:48
Spring Boot Controller 통합 테스트 (JUnit 5 + MockMvc)이번에는 UserService를 사용하는 UserController에 대한 통합 테스트 예제를 알아봅니다.Spring Boot의 @SpringBootTest와 MockMvc를 활용하여 실제 HTTP 요청/응답 시나리오를 검증할 수 있습니다.1. 컨트롤러 클래스 (UserController.java)@RestController@RequestMapping("/users")public class UserController { private final UserService userService; public UserController(UserService userService) { this.userSe..
-
[Springboot] 단위 테스트 코드 작성해보기 (Service, Dao, Repository)Server/Spring Boot 2025. 4. 21. 15:45
Spring Boot에서 JUnit 5로 Service, Repository, DAO 단위 테스트하기1. 엔티티 클래스 (User.java)@Entitypublic class User { @Id @GeneratedValue private Long id; private String name; private String email; // getters, setters, constructors}2. Repository 인터페이스 (UserRepository.java)public interface UserRepository extends JpaRepository { Optional findByEmail(String email);}3. DAO 클래스 (UserDao.java)@Re..