N+1 문제는 데이터베이스를 사용하는 애플리케이션에서 자주 발생하는 성능 문제 중 하나로, 특히 ORM(Object-Relational Mapping) 도구를 사용할 때 자주 나타난다. 이 문제는 하나의 메인 쿼리를 실행한 후에, 그 결과로 얻어진 N개의 레코드 각각에 대해 추가적인 쿼리(N개의 쿼리)를 실행하는 상황에서 발생하며, 불필요하게 많은 쿼리를 보내게 되어 성능 저하를 초래한다. 요약하자면 N+1 문제는 다음과 같은 상황에서 발생한다. N개의 항목을 가져오는 쿼리를 실행한다.각각의 항목에 대해 추가로 1개의 쿼리를 실행한다.결과적으로, 처음에 실행한 1개의 쿼리(N개를 가져오는)와 각 항목에 대해 실행한 N개의 쿼리를 합쳐 N+1개의 쿼리가 실행된다. Example 이어서 코드로 예를 들어보..
SQL에서 'UNION'과 'UNION ALL'은 두 개 이상의 SELECT 문에서 반환된 결과를 결합하는 데 사용된다. 말로 하니까 어려운데 예를 들어 아래와 같이 사용한다고 보면 된다.SELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2;그럼 'UNION'과 'UNION ALL', 두 명령어의 차이는 뭐냐, 결론부터 말하자면 '중복제거 연산의 유무'이다. 조금 상세히 정리하자면 다음과 같다. UNION 'UNION'은 결과 세트에서 중복된 행을 제거한다. 그러니까 두 SELECT 문에서 동일한 데이터를 반환하면 해당 데이터는 결과 세트에 한 번만 포함된다. 이와 같은 중복 제거 작업 때문에 'UNION' 은 'UNI..
로컬 스토리지(Local Storage), 쿠키(Cookies), 세션(Session)은 웹 개발에서 클라이언트 측과 서버 측의 데이터를 저장하고 관리하는 중요한 방법이다. 이들의 특징과 사용 사례, 보안 및 성능에 대해 간결히 정리해 보자. 선요약: 특성로컬 스토리지쿠키세션저장 용량각 도메인당 약 5MB각 쿠키당 최대 4KB서버 설정에 따라 다름수명영구적설정된 만료 시간까지브라우저 종료시 또는 세션 만료시접근 범위동일 도메인 내의 모든 페이지도메인과 경로에 따라 설정 가능서버에서만 접근 가능데이터 타입문자열문자열다양한 데이터 타입보안민감한 데이터 저장에 부적합HTTPS, HttpOnly로 보안세션ID를 통한 보안성능서버 통신 불필요, 빠름모든 HTTP 요청에 포함, 네트워크 성능에 영향서버 메모리 또..
@Service와 @Repository 애너테이션은 스프링 프레임워크에서 각각 서비스 계층과 데이터 접근 계층을 표현하는 데 사용된다. 이 두 애너테이션은 기능적으로 차이가 있을 뿐만 아니라, 내부 구조와 목적에서도 차이를 보인다. 결론부터 말하자면 두 애너테이션 모두 내부적으로는 @Component 애너테이션을 포함하고 있다. 그러나 @Repository는 추가적으로 데이터 접근 예외를 일관된 방식으로 처리하기 위한 예외 변환 기능을 제공한다. 이를 통해 애플리케이션은 더 구조적이고 명확하게 계층을 나눌 수 있으며, 각각의 역할에 맞는 클래스를 정의할 수 있다. 이러한 구분은 코드의 가독성과 유지보수성을 높이는 데 기여한다. @Service @Service 애너테이션은 비즈니스 로직을 구현하는..
@Controller와 @RestController 애너테이션은 스프링 프레임워크에서 웹 애플리케이션 개발 시 주로 사용되는 애너테이션이다. 이 두 애너테이션은 모두 클래스를 스프링 MVC 컨트롤러로 선언하지만, 그 동작 방식에는 중요한 차이가 존재한다. @Controller @Controller 애너테이션은 스프링 MVC의 전통적인 컨트롤러를 정의하는 데 사용된다. 이 애너테이션은 주로 뷰(View) 템플릿을 반환할 때 사용된다. @Controller 클래스 내의 메서드는 주로 JSP, Thymeleaf와 같은 템플릿 엔진을 통해 HTML 페이지를 반환한다. 뷰 리졸버(View Resolver)를 통해 뷰 이름을 해석하고 해당하는 HTML 페이지를 렌더링한다.@Controller는 기본적으로 뷰 리..
접근 제어자(Access Modifier)는 객체 지향 프로그래밍에서 클래스, 메서드, 변수 등의 접근 수준을 제어하기 위해 사용되는 키워드이다. 접근 제어자를 통해 외부에서 해당 멤버에 접근할 수 있는 범위를 지정할 수 있다. 이를 통해 데이터 캡슐화와 정보 은닉을 실현할 수 있으며, 자바에서는 주로 네 가지 접근 제어자가 있다. public접근 범위: 모든 클래스설명: public으로 선언된 멤버는 모든 클래스에서 접근 가능하다. 패키지나 클래스에 상관없이 어디서든 접근할 수 있다. protected 접근 범위: 동일 패키지, 서브클래스설명: protected로 선언된 멤버는 같은 패키지 내의 다른 클래스와 다른 패키지에 있는 서브클래스에서 접근 가능하다. 즉, 상속을 통해 접근 범위를 넓힐 수 있..
프로세스 스케줄러(Process Scheduler)는 OS의 핵심 기능으로서 동시에 실행되는 프로세스의 실행순서와 우선순위를 관리하는 역할을 한다. 조금 더 자세히 말하자면 여러 프로세스가 시스템의 리소스에 접근할 때 필연적으로 경쟁상태에 놓이게 되는데, 프로세스 스케줄러는 이 경쟁상태를 적절히 조율해서 리소스의 사용 효율성과 짧은 응답시간, 처리량과 처리율 등을 극대화시키기 위해 다양한 알고리즘을 이용해 프로세스의 스케줄을 관리한다. 이와 같은 프로세스 스케줄링 알고리즘은 크게 아래의 두 가지로 나뉘며, 선점형 스케줄링 특정 프로세스가 CPU를 점유하고 있더라도 우선순위가 높은 다른 프로세스가 실행되면 강제로 기존 프로세스를 중단시키고 새로운 프로세스를 실행시키는 방식이다. 우선순위 기반, 라운드 로빈..
목차 출처: https://bpicolor.com/raster-vs-vector-images-the-important-differences/ 래스터 이미지와 벡터 이미지는 둘 다 이미지를 표현하는 방식이다. 사용하며 몸으로는 느꼈지만, 생각난 김에 둘의 차이를 제대로 정리하고 가기. Raster Image 래스터 이미지는 정사각형의 픽셀로 이루어진 이미지이다. 일반적으로 각 픽셀의 위치와 색상정보를 함께 담은 맵, 혹은 배열로 표현할 수 있으며, 비트(Bit)로 이루어진 지도(Map of Bits)라는 의미에서 비트맵(Bitmap), 혹은 픽스맵(Pixmap)이라고 불리기도 한다. 여기서 비트는 정해진 크기의 정사각형이기 때문에 이미지를 확대하면 픽셀의 크기가 커지며 일종의 깨짐 현상이 발생한다. 예를 ..
목차 XSS, CSRF, SQL Injection은 웹 보안에서 가장 많이 발생하는 취약점들이다. 말을 바꾸면 좋지 않은 의도를 가진 사람이 해당 서비스나 서비스를 이용하는 사용자를 공격하는 방법들인데, 이 글에선 하나씩 개괄적으로 보고 그 방지책에 대해 알아본다. XSS(Cross-Site Scripting) XSS는 악성 스크립트를 삽입하여 해당 페이지를 요청하는 사용자의 브라우저에서 실행되도록 하는 방식이다. 이 공격은 주로 사용자의 개인정보가 담긴 쿠키나 세션을 하이재킹해 권한을 탈취하는 것을 목적으로 한다. 최악의 경우 탈취한 권한으로 사용자의 계좌에서 돈을 인출하는 상황도 발생할 수 있기 때문에, XSS는 최악의 보안 위협으로 간주되고 있다. 이를 방지하기 위해서는 입/출력 값의 스크립트 태그..
목차 객체 지향 프로그래밍과 함수형 프로그래밍은 둘 다 프로그래밍 패러다임의 한 종류이며, 여기서 패러다임이란 단순히 말하자면 프로그래밍을 무엇으로 정의할 것인가에 대한 관점이라고 정리할 수 있다. 이런 맥락에서, 본격적으로 두 패러다임에 관해 정리하기 전에 근본적인 차이를 말하자면 객체 지향 프로그래밍은 "프로그래밍은 상호작용하는 객체의 집합이다."라는 관점을 가진 패러다임이며 함수형 프로그래밍은 "프로그래밍은 연속된 함수의 집합이다."라는 관점을 가진 패러다임이라 정리할 수 있다. 추가로 객체 지향 프로그래밍은 일반적으로 명령형 프로그래밍으로, 함수형 프로그래밍은 일반적으로 선언형 프로그래밍으로 작성한다는 차이도 있다. 여기서 명령형/선언형 프로그래밍 역시 프로그래밍 패러다임의 한 종류이며, 대략 아..
- Total
- Today
- Yesterday
- 파이썬
- 면접 준비
- BOJ
- 세계일주
- 스프링
- 동적계획법
- 유럽여행
- 칼이사
- 여행
- 스트림
- RX100M5
- Backjoon
- 야경
- 유럽
- 세계여행
- 리스트
- 맛집
- 세모
- 남미
- 백준
- spring
- java
- 지지
- Algorithm
- a6000
- 알고리즘
- 중남미
- Python
- 자바
- 기술면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |