전체 글 74

프레임워크와 라이브러리 비교 (Framework vs Library)

간단한 정의 프레임워크 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미한다. 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발한다. 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드들을 구현하면 된다. 프레임워크의 예시) Java 서버 개발에 사용되는 Spring Python 서버 개발에 사용되는 Django, Flask 안드로이드 앱 개발에 사용되는 Android 아이폰 앱 개발에 사용되는 Cocoa Touch 웹 개발에 사..

기타 2022.11.03

[Java] Java Bean

Java Bean 이란? 특정한 정보 (id, password, name, job...)등을 가지고 있는 클래스를 표현하는 하나의 규칙이고, 데이터를 표현하기 위한 목적을 지니고 있음. 이 규칙(규약)을 지닌 클래스를 Java Bean 이라고 함. Java Bean의 규약 반드시 클래스는 패키지화 되어야 함 멤버변수는 property(프로퍼티)라고 함 멤버변수는 private로 지정하고, 외부접근을 위한 get, set 메소드를 정의해야 함 get, set 메소드는 public으로 지정 JavaBean JavaBean은 데이터를 표현하는 것을 목적으로 하는 자바 클래스로서 아래와 같은 형태. JavaBean 규약에 따르는 클래스를 자바 빈 이라고 부르며, jsp에서 사용되는 자바 빈은 아래와 같은 형태...

Java 2022.11.03

[Java/Spring] 서블릿과 디스패처 서블릿 (Servlet & Dispatcher Servlet)

Servlet 이란? - JAVA를 사용하여 웹을 만들기 위해 필요한 프로그래밍 기술이다. (Servlet 클래스의 구현 규칙을 지켜야합니다.) - 또한, 이러한 웹 기반의 요청에 대해 동적으로 처리해주는 역할로서 Server Side에서 작동(WAS)한다. - 웹 페이지 개발 시, 웹 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현하여 조화롭게 사용한다. - 클라이언트가 요청을 하면 그 결과를 다시 전송해주는 프로그램이다. - HttpServlet이라는 Java의 클래스를 상속받는다. Servlet Life Cycle 1. Servlet 객체 생성 (1회) 2. init() 호출 (1회) 3. service(), doGet(), doPost() 호출 (요청시 매번) 4. des..

Java 2022.11.03

[데이터베이스] 트랜잭션의 ACID 성질

트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다. 트랜잭션(Transaction) 트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 각 트랜잭션은 하나의 특정 작업으로 시작을 해서 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료한다. 만약 하나의 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 이 트랜잭션에 속한 모든 작업을 실패한 것으로 판단한다. 작업이 하나라도 실패를 하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공이다. 성공 또는 실패 라는 ..

기타 2022.11.02

스케일업과 스케일아웃 (Scale-Up & Scale-Out)

Scale-Up / Scale-Out 이란? 스케일 업(Scale-Up)이란 단일 서버(하드웨어)의 성능을 증가시켜서 더 많은 요청을 처리하는 방법을 의미한다. 즉, 단일 하드웨어의 성능을 높이기 위해 CPU, 메모리, 하드디스크 등을 업그레이드하거나 추가하는 것을 의미한다. 반면, 스케일 아웃(Scale-Out)은 동일한 사양의 새로운 서버를 추가하여 성능을 증가시키는 방법을 말한다. 서버가 증설됨에 따라 여러 대의 서버가 트래픽을 나누어 갖게 되고, 각각의 서버가 이를 처리하게 된다. 두 방법 모두 다수의 트래픽을 처리하는데 좋은 방법임에는 분명하다. 그렇다면 두 방법 중 어떤 방법을 선택해야 할까? 스케일 업(Scale-Up) 스케일 업(Scale-Up)이란 단일 서버(하드웨어)의 성능을 증가시켜서..

기타 2022.11.02

쿠키와 세션 (Cookie & Session)

쿠키와 세션을 이용한 로그인 처리 쿠키와 세션을 이해하기 위해서는 HTTP 프로토콜에 대한 이해가 필요하다. HTTP의 비연결성(Connectionless), 무상태성(Statelss) 한 특징 때문에 Server가 Client를 식별할 수 있는 방법이 필요했고, 이 때문에 쿠키(Cookie)와 세션(Session)을 사용하게 되었다. 쿠키(Cookie) 쿠키는 웹 브라우저가 보관하는 데이터이다. 웹 서버는 쿠키를 생성하여 웹 브라우저에 정보를 전송할 수 있다. 쿠키는 'key-value' 형태로 웹 브라우저의 쿠키 저장소에 저장된다. 서버로부터 쿠키를 전달받은 웹 브라우저는 이후 웹 서버에 요청을 보낼 때 쿠키를 헤더에 실어서 함께 전송한다. 이를 이용하면 웹 서버와 클라이언트는 필요한 값을 공유하고 ..

기타 2022.11.01

HTTP (HyperText Transfer Protocol)

HTTP HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. HTTP 는 클라이언트(브라우저)와 서버 사이의 의사소통 방식을 말한다. 이러한 HTTP 는 비연결성(Connectionless)과 무상태(Stateless)라는 특성을 갖는다. 비연결성(Connectionless) 비연결성이란 클라이언트가 요청(request)을 하고, 서버가 해당 요청에 적합한 응답(response)를 하게 되면 바로 연결을 끊는 성질을 의미한다. 무상태(Stateless) 비연결적인 특성으로 연결이 ..

기타 2022.11.01

Redis (Remote Dictionary Server)

Redis(Remote Dictionary Server) Key-Value 형태의 NoSQL 인메모리(In-memory)데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용한다. 인메모리(In-memory)란? 컴퓨터의 메인 메모리 RAM에 데이터를 올려서 사용하는 방법을 말한다. 왜 메모리에 데이터를 올릴까? 이유는 명확하게도 속도 때문이다. SSD,HDD 같은 저장공간에서 데이터를 가져오는 것보다 RAM에 올려진 데이터를 가져오는데 걸리는 속도가 수백배(HDD 기준) 이상 빠르다. 때문에 Redis는 빠른 속도가 큰 장점이다. 예를 들어, 게임의 랭킹 상위 100위를 보여주는 기능이 있다고 해보자. 랭킹 정보를 사용자에게 제공하기 위해 오라클같은 관계형 데이터베이스에 랭킹 정보를 저장을 ..

기타 2022.10.25

[Java] String StringBuffer StringBuilder 비교

Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, StringBuilder 가 있다. 연산이 많지 않을 때는 어떤 것을 사용하더라도 이슈가 발생할 가능성은 거의 없으나, 연산횟수가 많아지거나 멀티쓰레드, Race condition 등의 상황이 자주 발생하는 경우, 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다. String vs StringBuffer, StringBuilder String과 StringBuffer, StringBuilder 의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다. String str = "hello"; // ① str = str + " world"; // ② ①에서 "hello"..

Java 2022.10.15

문제1

문제 설명 - 각 섬(=노드) 사이를 자전거 타고 활보한다. k 시간에 정차 할 수 있는 섬들은? - 간선의 값은 이동거리를 의미한다. - 섬은 중복해서 이동할 수 있다. - 시작 노드는 0 이다. 입출력 정보 Input - int n(노드의 수): 0~n-1까지 노드가 존재 - int k(도착시간) - int[][] roads(간선 정보) Output - int[] answer(k 시간에 도착할 수 있는 노드들의 집합) Code import java.util.*; class Solution { public int[] solution(int n, int k, int[][] roads) { int[] answer = {}; int[][] graph = new int[n][n]; int[][] visited..

알고리즘 2022.09.28