프로그래밍의 발전 기계어 : 초창기 기술, 0과 1 어셈블리어 : 어셈블러(인간의 언어)로 기계어 생성 - 그러나 기계(cpu)마다 서로 다른 어셈블리어 C : 하나의 소스 파일만 만들면 된다. - 기계별 컴파일러 필요 Java : 하나의 소스 파일, 하나의 컴파일러 - 각 기종 별로 JRE만 설치해주면 된다. Java : Write Once Use Anywhere ! CBD(Componenet Based Development) 컴포넌트 기반 개발 애플리케이션을 의미 있는 단위로 구분하고 그 단위를 하나하나씩 부품으로 개발하여 완성하는 방법 SOA(Service Oriented Architecture) 서비스 지향 구조 개발자 입장에서의 개발이 아니라 실제 현식의 업무를 기준으로 개발 그저 용어일 뿐, ..
인덱스 인덱스란? 인덱스는 데이터베이스 테이블의 하나 이상의 컬럼을 기반으로 생성된다. 인덱스는 컬럼의 값과 레코드 주소를 key - value로 가지고 있는 정보이다. 인덱스를 통해 데이터베이스의 레코드를 빠르게 조회할 수 있다. 인덱스는 빠른 조회를 위해 내부적으로 트리 구조(B-Tree, B+Tree)를 사용하여 키 값을 정렬된 상태로 유지한다. 새로운 레코드가 삽입되거나 기존 레코드가 수정될 경우 인덱스도 그에 맞춰 업데이트되어야한다. 이 과정에서 추가적인 연산이 발생하므로, 이로 인해 레코드의 삽입, 수정, 삭제 성능이 저하될 수 있다. 인덱스 동작 방식 B-Tree 인덱스를 기준으로, 인덱스가 걸린 컬럼이 조건으로 들어왔을 경우를 가정한다. 루트 노드 -> 브랜치 노드(내부 노드) -> 리프 ..
내장함수 SQL의 함수는 두가지로 나뉜다. DBMS가 제공하는 내장 함수와 사용자가 필요에 따라 직접 만드는 사용자 정의 함수다. SQL 내장 함수 SQL 내장 함수는 상수나 속성 이름을 입력 값으로 받아 단일 값을 결과로 반환한다. 모든 내장 함수는 최초에 선언될 때 유효한 입력값을 받아야한다. 만약 선언에 위배된 값이 입력되면 질의는 실행을 중지하고 에러 메세지를 출력한다. SQL 내장 함수는 SELECT, WHERE, UPDATE, SET 절 등에 모두 사용 가능하다. 수학 함수 예시 SELECT ROUND(4.875, 1) 답 4.900 문자 함수 날짜 함수 날짜형 데이터로 저장하면 날짜를 더하거나 차이를 구하는 등의 연산을 손쉽게 처리할 수 있다. NULL 값 처리 NULL값이란 아직 지정되지 ..
문제 문제 상황 @BeforeEach로 테스트 환경을 설정하는 메서드가 비즈니스 로직을 제대로 반영하지 못하는 문제가 발생한다. 예를 들어 회의 생성 로직에서는 단순히 회의 엔티티를 생성하는 것뿐만 아니라, 회의를 생성한 사람도 회의 참가자 리스트에 포함해야 한다. 하지만 이러한 로직이 테스트 환경 설정 메서드에 반영되지 않을 경우 실제 애플리케이션과 다른 상태에서 테스트가 진행되어 에러를 발생시킬 수 있다. 문제 분석 문제 발생 코드 - createTestMeeting @BeforeEach에서 호출되어 테스트 환경을 생성하는 메서드이다. public Long createTestMeeting(Member hostMember) { Meeting meeting = Meeting.builder() .hostM..
문제 상황 Lombok의 @Builder 패턴을 사용하여 Member 클래스의 인스턴스를 생성할때, 특정 필드에 대해 명시적으로 값이 설정되지 않으면 null 값으로 초기화된다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity @Table(name = "member") @Where(clause = "is_deleted=false") @AttributeOverride(name = "id", column = @Column(name = "member_id")) public class Member extends BaseEntity { @Enumerated(EnumType.STRING) @Column(length = 50, nullable =..
문제 문제 상황 데이터 의존성 테스트 시 데이터베이스의 데이터 상태에 따라 테스트 통과 여부가 달라진다. 즉, 테스트 결과가 데이터베이스의 테스트 데이터에 의존적이다. Spring Security 보안 컨텍스트 애플리케이션에서 Spring Security를 사용할 경우 테스트시 보안 컨텍스트를 설정하고 jwt 토큰에 넣을 테스트 사용자가 데이터베이스에 존재해야한다. CustomMockUser @Retention(RetentionPolicy.RUNTIME) @WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class) public @interface WithMockCustomUser { String username() defau..
SQL(Structured Query Language) IBM이 Sequel이라는 이름으로 개발한 관계형 데이터베이스 언어 ANSI에 의해 관계형 데이터베이스 표준 언어로 승인되었다. DBMS는 SQL을 해석하고 프로그램으로 변환하여 실행하고 결과를 알려준다. 데이터 부속어: 데이터베이스의 데이터와 메타 데이터를 생성하고 처리하는 문법만 가진다. SQL 종류 SQL은 기능에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL) 로 나뉜다. 데이터 정의어 : 테이블이나 관계의 구조를 생성하는데 사용 CREATE, ALTER, DROP 데이터 조작어: 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용 SELECT, INSERT, UPDATE, DELETE 데이터 제어어: 데이터..
관계 데이터 모델의 개념 수학의 집합이론에 근거하고 있어 타 모델에 비해 튼튼한 이론적 토대를 가지고 있다. 또한 관계 데이터 모델이 적용된 SQL 언어는 비절차적 언어로 원하는 데이터를 쉽게 표현하는 장점이 있다. 현재 많이 사용되는 관계 데이터 모델 DBMS로는 Oracle, SQL Server, MySQL, PostgreSQL과 모바일 용인 SQLite등이 있다. 릴레이션(relation) 수학의 집합에서 나온 개념으로, 테이블은 릴레이션의 시각적인 표현방법이다. relationship(관계)는 릴레이션 내에서 생성되는 관계와 릴레이션 간의 관계를 포함한다. 전자는 관련있는 실제 데이터의 집합, 후자는 릴레이션끼리 식별값을 이용하여 연결함을 뜻한다. 릴레이션과 테이블은 같은 의미로 사용된다. 릴레이..