목록전체 글 (33)
채채
보호되어 있는 글입니다.
4.2.3 정규화 과정삽입/삭제/갱신 이상을 제거하기 위해 릴레이션을 여러 개로 분리하는 과정 제 1정규형릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자값으로 구성되어야한다.위의 사진에서 수정되기 전에는 수강명과 성취도에 {C++코딩테스트, 프런트 특강}과 같이 집합이 적재되어있다.이를 각각 다른 행으로 나누어 수정하면 제 1정규형을 만족하게 된다. 제 2정규형릴레이션이 제 1정규형이며 부분 함수의 종속성을 제거한 형태이다.즉 모든 속성이 기본키에 완전 함수 종속적인 것을 의미한다.예시 사진에서 유저번호를 통해 유저ID를 알 수 있고, 유저ID와 수강명을 통해 성취도를 알 수 있다. 이러한 부분 함수 종속을 완전 함수 종속을 만족하도록 각각의 릴레이션을 분해한다. 제 3정규형 제2정규형이고 이행..
4.1 데이터베이스의 기본데이터베이스란?데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음입니다. 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있습니다. 또한 데이터베이스는 실시간 접근과 동시 공유가 가능합니다.엔터티란?엔터티(Entity)란 여러개의 속성을 가진 명사를 의미한다.예를 들어 회원이라는 entity는 회원명, 전화번호, 가입 일자 등의 속성을 가질 수 있다. 약한 엔터티와 강한 엔터티종속적이라면 약한 엔터티이고 독립적으로 존재할 수 있다면 강한 엔터티이다.예를 들어 방은 건물 안에만 존재하므로 약한 엔터티이지만, 건물은..
보호되어 있는 글입니다.
compileClasspath과 runtimeClasspath의 차이점을 알아보자. 먼저 둘의 이름을 보면 대략 compileClasspath는 compile할 때 필요한 class들의 path이고, runtimeClasspath는 runtime에 필요한 class들의 path인가? 라는 생각이 들었다. 그러나 classpath가 무엇인지 개념적인 설명을 깊이 할 수 없었다. 1. classPath란? 우리가 java로 코드를 작성한 .java파일(소스 코드)을 compile하면 .class파일(바이트 코드의 실행 파일)이 생성된다. 만약 우리가 program.java파일의 소스코드 맨 윗단에 외부 패키지를 import했다고 하자. 그럼 자바 컴파일러는 해당 패키지를 찾으려고 import한 경로를 따라 ..
1. DAO(Data Access Object) public class UserDao { private Connection connection; public void saveUser(User user) { String query = "INSERT INTO users (username, email) VALUES (?, ?)"; try (PreparedStatement preparedStatement = connection.prepareStatement(query)) { preparedStatement.setString(1, user.getUsername()); preparedStatement.setString(2, user.getEmail()); preparedStatement.executeUpdate()..
@Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //... } Entity를 생성할 때 Id의 자료형은 왜 int나 long이 아니라 Long일까? 1. int에 비해 long은 숫자 범위가 넓다. Id값은 주로 사용자를 식별할 때 쓰이므로 전 세계 인구로 예를 들어보자. 2024년 1월 6일을 기준으로 현재 세계 인구는 80억명이 넘는다. int형은 전세계 사람들의 정보를 담지 못하지만, long형은 담을 수 있다. 2. nullable int와 long과 같은 기본 타입(primitive type)은 기본값이 0이다. 만약 id가 nullable하고, id값이 입력되..
자바로 백엔드를 개발할 때 주로 Spring Boot와 Spring Data JPA를 같이 사용한다. 그러나 JPA를 사용하다보면 N+1문제를 직면하기도 하며, 이를 해결하기 위해 다양한 조인 조건과 Fetch Join 등의 복잡한 쿼리를 작성할 때 JPA로 작성하기엔 메소드명이 길어짐에 따라 가독성이 떨어지게 된다. 또한 동적쿼리를 작성하는 것에 있어서 JPA는 제약이 존재한다. public interface MyEntityRepository extends JpaRepository { // age가 주어진 값보다 크고, city가 주어진 문자열을 포함하며, name이 주어진 접두사로 시작하는 엔터티들을 찾는다. List findByAgeGreaterThanAndCityContainingAndNameSt..
정렬(Sorting)이란 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 말한다. 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘이 공식처럼 사용된다. 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 => 이중 반복문 사용, O(N²) array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], arra..
트래픽이란? 서버에 발생하는 Request이다. 사용자가 많아지면 서버에는 많은 HTTP request가 발생하고, 이에따라 Request가 많아졌다는 것은 트래픽이 높아졌다는 의미이다. 그럼 서버는 어떻게 터지나? 서버라는 것은 외부로부터 들어오는 요청을 받아 처리해주고 응답을 주는 프로그램이 돌아가고있는 컴퓨터다. 즉, 서버 또한 처리 속도와 한계가 CPU, 메모리, 저장장치에 영향을 받아 한계가 있다는 것이다. request는 queue를 통해 thread pool에 할당되는데, maxThreads(Thread pool size)를 초과하는 요청은 queue에서 대기한다. 이는 문제 상황이 발생했을 확률이 높다는 뜻으로 운영체제에서 요청을 거부하고 대기하는데, 언제까지고 기다릴 수는 없으므로 일정 ..