JDBC란
·
Java
JDBC(Java DataBase Connectivity)는 자바 프로그램이 데이터베이스와 연결하고 작업을 진행하기 위한 자바 표준 API로 응용프로그램과 데이터베이스 사이의 연결을 관리하고 쿼리를 실행하며 결과를 처리할 수 있도록 표준 인터페이스를 제공한다 장점데이터베이스 독립성JDBC API를 사용하면 데이터베이스의 종류에 상관없이 동일한 방식으로 데이터베이스 작업을 수행할 수 있다이식성JDBC를 사용하는 자바 애플리케이션은 다양한 플랫폼에서 실행될 수 있다표준화JDBC는 자바 표준 API로 일관된 인터페이스를 제공한다 자바 진영에서 추상화된 Driver 인터페이스를 제공함으로 다양한 DB 환경에서 접근을 용이하게 만든다Driver를 관리하는 DriverManager는 각 DB사가 구현한 JDBC D..
[백준/Java] 11403 - [Silver I] 경로 찾기
·
코딩테스트/백준
[Silver I] 경로 찾기 - 11403문제 링크성능 요약메모리: 16216 KB, 시간: 164 ms분류플로이드–워셜, 그래프 이론, 그래프 탐색, 최단 경로제출 일자2024년 12월 30일 22:07:57문제 설명가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 길이가 양수인 경로가 있는지 없는지 구하는 프로그램을 작성하시오.입력첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다.출력총 N개의 줄에 걸쳐서 문제의 정답을 인접행렬 형..
의존관계 자동 주입
·
Spring
의존관계 주입이란 ?객체를 직접 생성하는 것이 아닌 스프링 컨테이너에서 빈을 찾아 주입하는 방식으로특정 구현 클래스에 의존하지 않고 인터페이스를 통해 의존성을 주입받기에클래스 간의 결합도가 낮아지고 유연성이 높아지게 된다 의존관계 주입 방법은 크게 네가지로 나누어진다수정자 주입일반 메서드 주입필드 주입생성자 주입일반적으로 의존관계 주입 시생성자 주입을 지향하고필드 주입은 지양하여야 한다 이유는 예제의 주문 서비스 구현체를 구현하며 알아보자의존관계 주입은 @Autowired 애노테이션을 통해 이루어진다  1. 수정자 주입setter 메서드를 통해 의존관계를 주입하는 방법선택 및 변경 가능성이 있는 의존관계에 사용한다@Componentpublic class OrderServiceImpl implements ..
데이터베이스 인덱스
·
Computer Science/Database
인덱스란?데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지한다 (MySql InnoDB 기준) 값을 항상 정렬된 상태로 유지하는 이유는 B-Tree의 변형 구조인 B+Tree 자료구조를 통해 인덱스를 구현하기 때문이다 먼저 B-Tree의 구조를 알아보자 B-Tree B-Tree는 균형 잡힌 트리 구조를 가지며, 데이터를 정렬된 상태로 유지하는 특징을 갖고 있다 B-Tree에서는 크게 3가지의 노드가 존재한다루트 노드 (최상위)리프 노드 (최하위)브랜치 노드 (중간) B-Tree는 모든 데이터를 순회하기 위해서 트리의 모든 노드를 방문해야 한다는 단점이 존재하다 그렇기에 이를 개선한 B+Tree가 인덱스의 자료구조로 채택되었다 B+Tree ..
Spring Security - 인증 및 권한 부여
·
Spring
Spring Security란?스프링 시큐리티는 스프링 기반의 애플리케이션에서 보안을 관리하는데 사용되는 하위 프레임워크이다 스프링 시큐리티는 Filter 형태로 동작한다Dispatcher Servlet이 어플리케이션으로 요청을 핸들링 하기 전 필터를 통해 여러 검증을 진행하는데이 과정에서 인증, 인가 및 보호 기능을 제공하여 보안 관련 작업을 쉽게 수행할 수 있도록 도와준다(HTTP 요청 → WAS → 필터1 → 필터2 → ...  →  서블릿 → 컨트롤러) 필터의 내부 동작은 다음과 같이 진행된다 동작 흐름클라이언트 요청사용자가 로그인 요청을 보냄DelegatingFilterProxy요청을 FilterChainProxy에 위임SecurityContextPersistenceFilterSecurityCo..
[백준/Java] 9465 - [Silver I] 스티커
·
코딩테스트/백준
문제 링크문제 설명상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다.상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다.모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점수를 매기고, 점수의 합이 최대가 되게 스티커를 떼어내려고 한다. 먼저, 그림 (b)와 같이 각 스티커에 점수를 매겼다. 상냥이가 뗄 수 있는 스티커의 점수의 최댓값을 구하는 프로그램을 작성하시오. 즉, 2n개의 스티커 중에서 점수의 합이 최대가..
[백준/Java] 11053 - [Silver II] 가장 긴 증가하는 부분 수열
·
코딩테스트/백준
문제 링크문제 설명수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)출력첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 처음엔 백트래킹 문제인줄 알았는데 시간 초과가 나서 제한사항을 살펴보니 dp 문제였다 . . . import java.io.*;import java.util.*;public class Main { ..
[백준/Java] 15663 - [Silver II] N과 M (9)
·
코딩테스트/백준
문제 링크문제 설명N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.N개의 자연수 중에서 M개를 고른 수열입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.   처음에는 단순히 TreeSet으로 정렬된 수열을 출력하는 방법으로 접근했다 하지만 선언했던 TreeSet 구조는 String 타입의 제네릭을 갖고 있기에 자연 정렬될 때 다음과 ..
record
·
Java
record란2020년 초에 Java 14 버전에서 프리뷰 기능으로 제공되어Java 16 버전에서 정식 스펙으로 채택된 새로운 클래스 타입이다 데이터 중심의 클래스를 정의하기 위한 간결한 방법으로 주요 특징은 다음과 같다 간결한 데이터 클래스 정의자동으로 메서드 생성 (toString(), equals(), hashCode(), getter)불변성 보장생성자 및 검증 로직 추가 가능추가 메서드 정의 가능record는 DTO, 불변 데이터 모델, 값 객체 등을 만들 때 유용하게 사용할 수 있다 예제 코드를 살펴보자 // 소괄호 안에 필드 변수를 정의하며 자동으로 private final로 선언public record Student( String name, int age, String maj..
직렬화(Serialization)
·
Java
각자 PC OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에 참조형 데이터들은 인스턴스를 직접 전달할 수 없다참조형 데이터를 외부로 전달하기 위해서는 직렬화 과정을 거쳐야한다 직렬화란? 자바 직렬화(Serialization)는 객체 인스턴스의 데이터를 I/O 스트림에 적합한 일련의 데이터로 변환하는 과정이다구체적으로, 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술이다 이 과정을 통해 객체를 파일로 저장하거나, 네트워크를 통해 전송하거나, 다른 컴퓨터 환경에서 객체를 재구성할 수 있다직렬화된 데이터는 나중에 역직렬화(Deserialization) 과정을 통해 다시 객체로 변환할 수 있다 자바에서 직렬화를 ..