반응형

전체 글 194

Spring에서 service와 serviceImpl(구현체)를 나누는 이유

1. Controller - Service - ServiceImpl 계층 구분 이유각 계층은 맡은 역할(관심사)이 명확히 다릅니다.Controller (웹 계층): 클라이언트의 요청(HTTP Request)을 받아 파라미터를 검증하고, 비즈니스 로직을 호출한 뒤 결과를 응답(HTTP Response)으로 변환합니다.Service (비즈니스 계층): 트랜잭션 관리, 도메인 로직 처리, 여러 Repository/외부 API의 종합 호출 등 프로젝트의 핵심 기능을 수행합니다.ServiceImpl (구현체): Service 인터페이스에서 정의한 비즈니스 스펙을 실제로 코드로 구현한 부분입니다.계층을 나누면 Controller는 비즈니스 로직이 어떻게 동작하는지 몰라도 되고, Service는 웹 요청이 REST ..

지식공부 2026.08.24

[SQL]인덱스가 있는데도 느린 쿼리의 원인

1. 인덱스 컬럼 순서 문제복합 인덱스는 왼쪽부터 순서대로 사용해야 효과가 있습니다.EX) (name, age) 선택도(selectivity) 순서도 중요합니다. 카디널리티(값의 다양성)가 높은 컬럼을 앞에 두는 게 일반적으로 유리해요.예를 들어 성별(M/F)을 앞에, 이메일을 뒤에 두면 인덱스 효율이 떨어집니다. 2. 인덱스 컬럼에 함수/연산을 씌운 경우-- ❌ 인덱스 못 탐 (컬럼에 함수 적용)SELECT * FROM orders WHERE YEAR(created_at) = 2024;-- ✅ 이렇게 바꿔야 함SELECT * FROM orders WHERE created_at >= '2024-01-01' AND created_at 3. 앞쪽에 와일드카드 LIKE 검색-- ❌ 인덱스 못 탐SELEC..

지식공부 2026.08.24

Mysql 과 Oracle 문법 차이 ( 계속 정리해서 추가할 예정)

SELECT * FROM users WHERE AGE='20' and CITY='SEOUL'order by CAST(ID AS UNSIGNED) /*MY SQL방식 ORACLE방식 : TO_NUMBER(ID)*/SELECT * FROM users WHERE AGE='20' and CITY='SEOUL'order by CAST(created_at AS DATE) DESC/*MY SQL방식 ORACLE방식 : TO_DATE(created_at)*/select CONCAT('ID : ',ID)FROM USERS; /*MYSQL 방식 CONCAT(A,B) ORACLE방식 : A || B*/select NOW(); /*MYSQL : NOW() , ORACLE : SYSDATE*..

지식공부 2026.06.29

TLS(SSL)

SSL/TLS란?한 줄 정의인터넷 통신을 암호화하여 중간에 누가 보더라도 내용을 알 수 없게 만드는 보안 프로토콜ex) http://example.com ( TLS 적용 X 암호화 X)https://example.com (TLS 적용 O 암호화 O)SSL과 TLS 차이SSL = 옛날 버전TLS = 현재 버전 TLS를 왜 사용하는가?TLS가 제공하는 3가지1. 암호화(Encryption) ID : adminPW : 1234 다음과 같은 정보를 클라이언트가 입력한다고 가정 중간에서 패킷( 컴퓨터 네트워크를 통해 데이터를 전송할 때 사용하는 기본 데이터 단위 )을 보면 해당 정보가 그대로 보이게 됨butTLS 사용 시 A8F91D...X7AA11... 와 같은 암호문으로 보이게됨 (해석불가능) 2. ..

지식공부 2026.06.10

윈도우함수에 대해 (LAG , LEAD , ROW_NUMBER , RANK )

윈도우 함수 = JOIN 없이 "행 간 관계" 처리하는 도구대표적으로 1) LAG 2) LEAD 3)ROW_NUMBER 4)RANK/DENSE__RANK 🔹 1. LAG (이전 행 조회)👉 현재 행보다 앞(이전) 데이터를 가져옴기본 문법LAG(컬럼명, offset, default값)OVER (PARTITION BY ... ORDER BY ...) offset: 몇 행 이전 (기본 1)default: 이전 값 없을 때 반환 값 (옵션)ex) 사용예시전날 매출과 오늘의 매출을 비교 👉 LAG + PARTITION BY = "그룹 내 이전 상태 비교ex)부서 내에서 급여 상승여부를 본다🔹 2. LEAD (다음 행 조회)👉 현재 행보다 뒤(이후) 데이터를 가져옴기본 문법LEAD(컬럼명, offset, ..

지식공부 2026.04.25

네트워크 지식

1. HTTP vs HTTPS HTTP란?HyperText Transfer Protocol — 클라이언트와 서버가 데이터를 주고받는 규칙(프로토콜)입니다.기본 포트 80텍스트 기반, 암호화 없음 → 패킷 탈취 시 내용 그대로 노출 HTTPS란?HTTP에 TLS(SSL) 암호화 레이어를 추가한 것입니다.기본 포트 443데이터를 암호화해서 전송 → 중간에 탈취해도 내용을 알 수 없음TLS(SSL) 방식 [간단히]1. 클라이언트 → 서버에 접속 시도 2. 서버가 인증서(공개키 포함) 전달 3. 클라이언트가 인증서 유효성 검증 (CA 기관) 4. 대칭키를 공개키로 암호화해서 서버에 전달 5. 이후 해당 대칭키로 암호화 통신2. GET vs POST핵심 차이목적리소스 조회리소스 생성/처리데이터 위치URL 쿼리스트..

지식공부 2026.04.23

Executor / ThreadPool

1. Executor스레드를 직접 만들지 말고, 대신 관리해주는 인터페이스” 기존의 쓰레드를 직접 만드는 방식)new Thread(() -> { // 작업}).start();👉 문제스레드 계속 생성됨 (비용 큼)관리 안됨서버 터질 수 있음 ✔ Executor 사용Executor executor = Executors.newSingleThreadExecutor();executor.execute(() -> { System.out.println("작업 실행");});👉 핵심“스레드 생성/관리 책임을 Executor에게 맡긴다” 2. ThreadPool“스레드를 미리 만들어두고 재사용하는 구조”👉 비유❌ Thread → 매번 새 직원 채용✅ ThreadPool → 직원 미리 뽑아두고 일 시킴 ..

지식공부 2026.04.13

REST API

REST : Representational State Transfer 의 약자로 '네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침' 정도로 볼 수 있다. API : ApplicationProgrammingInterface 의 약자로 응용 프로그램 프로그래밍 인터페이스를 뜻한다. 프로그램을 작성하기 위한 일련의 부프로그램, 프로토콜 등을 정의하여 상호 작용을 하기위한 인터페이스 사양을 말한다. 🌐 Web API (가장 넓은 개념)웹(인터넷)을 통해 통신하는 모든 API를 의미합니다.HTTP, WebSocket, GraphQL, gRPC 등 다양한 방식 포함"웹에서 동작하는 API"라면 모두 Web API예: 카카오 지도 API, 날씨 API, 결제 API 등📡 HTTP API (중간 개념)..

지식공부 2026.04.06

JOIN VS 서브쿼리

🔥 1. 가장 큰 차이 (핵심 개념)✅ JOIN 방식SELECT u.name, o.order_dateFROM users uJOIN orders o ON u.id = o.user_id; DB가 한 번에 실행계획을 세워서 최적화인덱스 활용 + 조인 순서 최적화 가능보통 한 번의 큰 연산👉 즉, Set 기반 처리 (집합 처리) ----- ------- --------- ------------ -----------------------❌ SELECT 절 서브쿼리SELECTu.name,(SELECT o.order_dateFROM orders oWHERE o.user_id = u.id) AS order_dateFROM users u;users row 하나마다 서브쿼리 실행 가능즉, N번 반복 실행 (row-..

지식공부 2026.04.01

<Spring>Controller → Service → Repository → DB 의 흐름

1️⃣ 요청 진입 ( Front Controller)모든 요청은 Spring의 핵심인 DispatcherServlet이 받음DispatcherServlet 란? HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러 HandlerMapping을 통해 어떤 Controller가 처리할지 결정👉 핵심 키워드: Front Controller 패턴 ---------------------2️⃣ Controller@RestController / @Controller역할:요청 URL 매핑파라미터 바인딩 (@RequestParam, @PathVariable)입력값 검증 (@Valid) --- 해당검증은 서비스에서 해도 무관함👉 절대 하면 안되는 것❌ 비즈니스 로직 작성..

지식공부 2026.04.01
반응형