CORS(Cross-Origin Resource Sharing) 교차 출처 리소스 공유라는 뜻이다. 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 한다. 출처(Origin) 동일 출처란 프로토콜 + host + port가 같은 것이다. path가 다른 것은 상관이 없다. 동일 출처 http://m1.com:80 http://m1.com/login http://m1.com 모두 같은 출처이다. 다른 출처 기준 : http://m1.com 프로토콜이 다르다 : https://m1.com host가 다르다 : http://www.m1.com 포트가 다르다 : http://m1.com:8080 다른 출처 요청의 위험성 , , 등이 웹에 등장하면서, 페이지 로딩 이후에 다른 출처로부터의 요청을 가져..
Java가 확장한 객체 지향 java가 객체 지향을 확장하기 위해 사용하는 키워드와 개념을 알아보자. abstract 키워드 - 추상 메서드와 추상 클래스 추상 메서드(Abstract Method) 선언부는 있는데 구현부가 없는 메서드 추상 클래스(Abstract Class) 추상 메서드를 하나라도 갖고 있는 클래스 추상 메서드가 필요한 이유 package abstractMethod01; public class Driver{ public static void main(String[] args){ 동물[] 동물들 = new 동물[3]; 동물들[0] = new 쥐(); 동물들[1] = new 고양이(); 동물들[2] = new 강아지(); for (int i=0;i 메서드 선언은 있되 몸체는 없는 abstr..
static 초기화 블록 클래스가 JVM에 처음 로드될 때 한번 실행되며, 클래스 레벨에서 공유되는 정적 자원이나 설정 초기화시 사용된다. static 블록 내에서 예외가 발생하면 JUnit과 같은 테스트 프레임워크가 처리하는 것에 어려움이 있다. static 블록의 실행 시점이 명확하지 않다. public class StaticInitializationExample { private static final int SIZE; private static final List NAMES = new ArrayList(); static { SIZE = getIntFromConfigFile("config.txt"); NAMES.add("Alice"); NAMES.add("Bob"); } } @BeforeClass ..
자바와 객체 지향 객체 지향은 인간 지향이다. 절차적/구조적 프로그래밍까지의 과정은 기계 종속적인 개발이었다. 구조적 프로그래밍에서 제일 중요한 것은 함수이다. 복잡한 문제를 작은 문제로 분할하여 정복하는 방법이다. 그러나 몇 천, 몇 만 라인의 명령어를 논리적인 단위로 나누어 블록화하여 작성해야한다. 그 후 객체 지향 프로그래밍이 등장했다. 객체 지향의 출발은 "우리가 주변에서 사물을 인식하는 방식대로 프로그래밍할 수 있지 않겠는가?"라는 물음에서 시작되었다. 0,1로 대변하는 기계(컴퓨터)에 맞춰 사고하던 방식을 버리고 현실세계를 인지하는 방식으로 프로그램을 만들자는 것이다. 그래서 객체 지향은 직관적이다. 객체 지향 이해하기 세상에 존재하는 모든 것은 사물, 즉 객체(Object)이다. 각각의 사물..
프로그래밍의 발전 기계어 : 초창기 기술, 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..