전체 글 126

SQL DDL

CREATE TABLE CREATE TABLE 테이블_이름 ( 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값] ... [PRIMARY KEY (속성1, 속성2, ...)] [UNIQUE (속성1, 속성2, ...)] [FOREIGN KEY (속성1, 속성2, ...) REFERENCES 테이블_이름(속성1, 속성2, ...)] [ON DELETE 옵션] [ON UPDATE 옵션] ... [CONSTRAINT 이름] [CHECK(조건)] ... ); ALTER TABLE 새로운 속성 추가 ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]; 기존 속성 삭제 ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름; 새..

선택 정렬(Selection Sort)

소개 가장 작은 요소부터 선택하여 순서대로 정렬하는 알고리즘입니다. 선택 --> 교환 --> 정렬이 반복됩니다. 정렬은 배열의 앞쪽부터 이뤄집니다. 선택할 요소를 고르는 구간은 뒤쪽으로 점점 좁아집니다. 배열의 요소가 n개 있을 때 시간복잡도는 O(n^2) 구현 public class SelectionSort { static void selectionSort(int[] arr) { // 앞쪽부터 순서대로 정렬합니다. for (int i = 0; i < arr.length; i++) { // 가장 작은 값의 인덱스를 찾기 위해 초기화합니다. int min = i; for (int j = i + 1; j < arr.length; j++) { // 탐색 과정에서 더 작은 값이 있다면 해당 값의 인덱스를 저장합..

버블 정렬(Bubble Sort)

소개 이웃한 두 수의 크기를 비교하여 교환을 반복합니다. 매 라운드마다 1개씩 요소가 앞쪽부터 정렬됩니다. 정렬은 앞쪽부터 이뤄지고, 라운드 별 수의 크기 비교는 뒤쪽부터 시작됩니다. 배열의 요소가 n개 있을 때 시간복잡도는 O(n^2) 구현 public class BubbleSort { static void bubbleSort(int[] arr) { // 배열 앞쪽부터 정렬해간다. for (int i = 0; i i; j--) { if (arr[j - 1] > arr[j]) { swap(arr, j - 1, j); } } }..

Spring Triangle : 스프링을 지탱하는 원리

Dependency Injection Inversion of Control Portable Service Abstraction Dependency Injection 소개 의존성은 쉽게 이야기하면 new입니다. DI는 new를 사용하여 어떤 컴포넌트에 의존성을 주입하는 것입니다. DI 방법 의존성은 크게 2가지 방법으로 주입할 수 있습니다. Constructor Injection 컴포넌트를 생성할 때 컨테이너에 있는 의존성을 주입합니다. DI 시점을 파악할 수 있습니다. 권장되는 DI 방법입니다. Setter Injection 생성된 컴포넌트에 임의의 시점에 의존성을 주입합니다. DI 시점을 파악하기 어렵습니다. @Autowired와 @Resource Autowired 스프링 프레임워크 에너테이션 Type..

Java의 스레드(Thread) 알아보기

개요 여러 가지 일을 병행하는 멀티태스킹은 프로세스 기반, 스레드 기반으로 구현할 수 있습니다. 프로세스 기반 여러 프로그램이 병행으로 실행되는 것 프로세스가 생성될 때마다 새로운 메모리 영역을 할당받음 프로세스 실행에 필요한 새로운 시스템 자원을 할당받음 스레드 기반 프로그램 내부에서 여러 작업이 병행으로 실행되는 것 프로그램의 프로세스에서 사용하는 자원과 메모리를 공유 스레드를 실행하기 위한 자원만 필요 스레드 == 경량 프로세스 멀티 스레드 환경에서는 모든 스레드가 종료되어야 프로그램이 종료됨 스레드의 목적 멀티 스레드를 구현해야 하는 상황 여러 사용자의 동시 요청 처리 외부 데이터 IO 작업 스레드 활용 스레드 생성 java.lang.Thread 클래스를 상속 Runnable 인터페이스를 구현해서..

OOP(Object Oriented Programming)

개요 인간 지향적 프로그래밍 OOP의 4대 특성 캡슐화 : 정보은닉 접근 제한자 public, protected, default, private 상속 : 재사용 + 확장 is a kind of 관계 자바는 클래스 간 다중 상속 불가능 자바는 인터페이스를 이용한 다중 상속의 이점을 취했음 추상화 : 모델링 구체적인 것을 분해하여 관심 영역(애플리케이션)에 있는 특성만을 가지고 재조합하는 것 다형성 : 사용 편의 overriding : 상하로 쌓임 overloading : 좌우로 쌓임 OOP 설계 5대 원칙 결합도와 응집도 결합도 : 모듈 간 상호 의존도 응집도 : 모듈 내부 요소의 기능적 관련성 SRP(Single Responsibility Principle) : 단일 책임 원칙 어떤 클래스를 변경해야 하..

컴퓨터공학 2021.06.01

HTTP 메시지

개요 HTTP 메시지는 HTTP 애플리케이션 간 주고받는 데이터, 블록입니다. HTTP 메시지는 클라이언트, 서버, 프록시 사이를 흐릅니다. 메시지 방향 인바운드 : 트랜잭션 방향. 메시지가 서버로 향하는 것 아웃바운드 : 트랜잭션 방향. 메시지가 서버에서 처리되고 사용자 에이전트로 돌아오는 것 모든 메시지는 다운스트림으로 흐름. 절대 업스트림으로 흐르지 않음. 메시지 구조 시작줄(메시지 형태), 헤더(메시지의 속성), 엔티티 본문(데이터) 엔티티는 텍스트, Binary를 가지고 있거나 비어있을 수 있습니다. 메시지 문법 Request(요청) 시작줄 : 메서드 요청 URL 버전 헤더 엔티티 본문 Response(응답) 시작줄 : 버전 상태 코드 사유 구절 헤더 엔티티 본문 메서드 GET 서버에서 리소스를..

URL과 리소스

개요 URL은 인터넷의 리소스를 가리키는 표준 이름입니다. URL은 리소스가 어디에 있고, 어떻게 접근할 수 있는지 알려줍니다. URL 문법 대부분의 URL 스킴의 문법은 일반적으로 9개 부분으로 나누어져 있습니다. 스킴://사용자 이름:비밀번호@호스트:포트/경로;파라미터?질의#프래그먼트 URL의 가장 중요한 3가지 컴포넌트는 스킴, 호스트, 경로입니다. 컴포넌트 스킴 리소스 접근 시 사용할 프로토콜을 나타냄 기본값 X 사용자 이름 몇몇 스킴은 리소스 접근 시 사용자 이름을 요구함 기본값 anonymous 비밀번호 사용자 비밀번호 사용자 이름에 :을 붙여서 기술함 기본값 이메일 주소 호스트 리소스를 호스팅하는 서버의 호스트명/주소 기본값 X 포트 호스트가 열어놓은 포트번호 많은 스킴(프로토콜)이 기본 포..

서블릿(Servlet)이란

개요 클라이언트의 요청에 응답하는 자바 객체입니다. 동적으로 컨텐츠를 생성합니다. HTTP를 지원합니다. 관련 API를 사용할 수 있습니다. 웹서버에서 서비스되는 페이지입니다. MVC 패턴에서 Controller 역할을 담당합니다. 서버가 실행할 수 있는 자바 프로그램은 오직 서블릿뿐입니다. 환경설정 파일 : web.xml 웹 앱의 서비스 처리에 관한 내용이 정의되어 있는 파일입니다. 웹 서버는 web.xml의 내용대로 웹 앱 실행을 위한 설정을 완료합니다. 서블릿 디렉터리 서블릿이 공식적으로 존재하는 디렉터리입니다. 모든 Web Application Server의 구조가 동일합니다. 서블릿 디렉터리는 WEB-INF/classes입니다. 서블릿 클래스 간 관계 서블릿을 구현하려면 HttpServlet을 ..

Java의 Garbage Collection

개요 자바의 메모리 관리 방법입니다. 자바의 객체는 Runtime Data Areas의 Heap에 할당됩니다. JVM의 Heap Area 자바는 개발자가 메모리를 관리하지 않습니다. Garbage Collector가 객체의 메모리를 해제합니다. GC가 수행될 때, GC를 위한 스레드를 제외하고 모든 스레드의 작업이 중지됩니다(Stop the World). GC 튜닝은 Stop the World의 시간을 줄이는 것입니다. 가설 : Weak Generational Hypothesis 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 됩니다. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재합니다. GC 대부분의 객체는 Young 영역에서 GC(Minor GC)됩니다. Young 영역의 GC..