CS 58

[CS] REST, RESTful API란?

REST는 "Representational State Transfer"의 약자로, 웹의 장점을 최대한 활용하면서 분산 시스템을 설계하기 위한 원칙과 패턴을 제시한다.  REST의 주요 개념1. 자원(Resource)   - REST에서는 해당 소프트웨어가 관리하는 모든 것이 자원이다. 자원은 URI(Uniform Resource Identifier)로 식별한다.    - 예를 들어, 사용자를 나타내는 자원은 `/users`와 같이 표현할 수 있다. 2. 표현(Representation)   - 자원은 다양한 형태로 표현할 수 있다. 일반적으로 JSON, XML, HTML 등을 사용한다.    - 클라이언트는 서버에서 자원의 표현을 받아 상태를 전송받는다. 3. 상태 전이(State Transfer)   ..

CS 2024.05.24

[Network] 실시간 통신 - webSocket

webSocket 서버 - 클라이언트 간 언제든 양방향 통신 및 데이터 전송이 가능하도록 Socket Connection을 유지하는 기술이다. SNS, LoL같은 멀티플레이어 게임, 구글 Doc, 증권거래, 화상채팅 등 Real-time web application구현을 위해 널리 사용되고 있다. 연결단계 1. HTTP 통신을 통해 서버에 연결한다. (일반 웹 브라우저에서 서버로의 일반적인 HTTP 요청과 응답과 동일) 2. 연결 후, webSocket을 사용하여 실제 양방향 통신을 위한 Socket Connection을 설정한다. HTTP Upgrade header를 사용하여 HTTP 프로토콜에서 WebSocket 프로토콜로 전환(WebSocket HandShake) 3. webSocket연결 후, H..

CS 2024.01.31

[Network] 실시간 통신 - AJAX(polling, long polling, streaming)

통신을 하기 위해서는 3-way handshake를 통해 연결하는 과정을 거치고, 데이터 전송 후, 4-way handshake를 통해 연결을 끊는 과정을 거친다. 이 3-way handshake와 4-way handshake과정은 4계층의 TCP통신을 통해 이루어지고, HTTP통신은 7계층에서 데이터를 전송하는 부분만 담당한다. 즉, OSI 4계층에서 3-way-handshake로 연결과정을 거치고 7계층에서 HTTP 기반으로 데이터 전송을 하고 다시 4계층에서 4-way-handshake로 연결을 끊는 과정을 거친다. HTTP통신은 TCP통신과는 다르게 일반적으로 클라이언트가 서버에게 요청을 보내고, 서버가 클라이언트에게 응답을 보내는 단방향 통신이다. 오늘은 실시간 양방향 통신에 대한 기술들을 정리..

CS 2024.01.31

[Network] Load Balancing, Clustering (로드밸런싱, 클러스터링)

로드밸런싱 서버에 들어오는 요청을 여러 대의 서버로 분산하여 부하를 고르게 분담하는 것을 말한다. 이를 통해 단일 서버에 부하가 집중되는 것을 방지하고, 전체 시스템의 안정성과 성능을 향상시킬 수 있다. 로드 밸런서를 통해 요청을 전달할 서버를 선택하는 여러 가지 알고리즘을 사용할 수 있으며, 균등하게 분산하는 것이 일반적인 방식이다.(로드밸런서는 소프트웨어로도 구현이 가능하다.) 이외에도 한 서버가 다운되더라도 다른 서버에서 서비스를 지속하여, 사용자들은 불편함 없이 서비스를 이용할 수 있다. 오픈소스 로드밸런서 중 많이 사용되고 있는 것은 HAProxy이다. 하지만 클라이언트의 연결 정보를 저장하는 세션이 로드밸런싱을 통해 하나의 서버 장비에 저장이 되는 경우, 추후 다른 서버로 접속하게 되면, 해당..

CS 2024.01.30

메시지 큐(MQ; Message Queue)

메시지 큐(MQ; Message Queue) 프로세스 혹은 프로그램 간에 데이터를 교환할 때 사용되는 통신 방법 중 하나. 메시지 지향 미들웨어(MOM; Message-Oriented middleware)를 구현한 서비스를 메시지 큐(MQ)라고 한다. 간단하게는 메시지를 임시로 저장하는 간단한 버퍼라고 생각할 수 있다. 메시지 브로커를 구현할 때 사용하는 기술이다. 메시지 지향 미들웨어(MOM; Message-Oriented middleware) 비동기 메세지를 사용하는 프로그램 간 데이터 송수신을 의미한다. (이후로는 MOM으로 칭함) AMQP(Advanced Message Queuing Protocol) MOM을 위한 개방형 표준 통신 프로토콜. 응용 계층의 MOM 표준이며 메시지 브로커를 통해 메시..

CS 2024.01.30

[Spring] Batch

Spring Batch 대용량 데이터를 일괄(batch) 처리를 위한 프레임워크. 1. 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수 기능 제공 2. 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능 제공 3. 작업 실패시 작업 재시작을 하게 된다면 실패지점부터 실행한다. 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생한다. 주요 구성 요소 JobLauncher Job과 Job Parameters를 사용하여 Job을 실행하는 객체 Job 배치 처리 과정의 전체를 하나의 단위로 만들어 놓은 객체. 하나 이상의 Step..

CS 2023.12.07

[DB] Transactional 전파단계

트랜잭션 전파(Transaction propagation) 상위 메서드의 트랜잭션이 동작중인 과정에서 트랜잭션이 적용된 하위 메서드를 실행할 경우 어떻게 처리하는 가에 대한 개념이다. 주로 사용되는 값은 default값인 REQUIRED 이며, 이외에도 여러 전파단계가 존재한다. REQUIRED 따로 지정해주지 않으면 사용되는 기본값. 진행중인 Transaction이 있으면 해당 Transaction을 사용, 없다면 새로운 Transaction을 생성한다. MANDATORY 진행중인 Transaction이 없을경우 exception 발생 REQUIRES_NEW 항상 새로운 Transaction을 생성 한다. 진행중인 Transaction이 있다면 중지하고 새로운 Transaction를 시작한다. 새로운 ..

CS 2023.12.04

[Java] 강한 결합과 느슨한 결합

강한 결합 (Tight Coupling) 코드나 모듈간의 의존성이 높은 상태 하나의 모듈이 다른 모듈에 너무 의존적이며, 변경 발생 시 여러 부분에 영향을 줄 수 있는 상황 하나를 수정하면 다른 것들도 함께 수정해야 할 수 있다. 코드의 재사용성과 확장성이 떨어지게 된다. 느슨한 결합 (Loose Coupling) 모듈이 서로 독립적이며, 하나의 모듈이 다른 모듈과 상대적으로 낮은 수준의 의존성을 가지는 상태 각 모듈이 자신의 역할을 수행하면서 다른 모듈과의 상호 작용을 최소화하는 것을 의미한다. 변경 발생 시 해당 모듈만 수정하면 되며, 다른 모듈에 영향을 덜 주고 독립적으로 변경할 수 있는 유연성을 제공한다. 코드의 유지보수성과 확장성을 향상시킬 수 있다. 느슨한 결합을 구현하기 위한 방법 1. 인터..

CS 2023.11.29

[java] Error, Checked Exception, Unchecked Exception

java 실행 시(runtime) 발생할 수 있는 프로그램 오류는 크게 Exception, Error 이 두가지로 나눌 수 있다. 이 중, 개발자가 다뤄야 하는 Exception은 Checked Exception, Unchecked Exception로 나뉘게 된다. Error 메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 복구할 수 없는 시스템에 비정상적인 상황이 발생했을 경우에 발생한다. 개발자가 예측하기도 어렵고, 딱히 처리할 수 있는 방법도 없다. Exception 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 때 발생한다. ArrayIndexOutOfBoundsException, NPE 등이 대표적인 예이다. 앞서 얘기한..

CS 2023.11.24

[java] String, StringBuilder, StringBuffer

String - 불변(immutable) 클래스. 한 번 생성된 내용은 변경할 수 없다. - 수정이 발생할 때마다 새로운 String 객체가 생성되며, 문자열을 수정하는 게 아닌 새로운 문자열을 반환한다. - 수정이 빈번하게 발생하는 경우에는 메모리 공간을 많이 차지하고 성능에 영향을 줄 수 있다. StringBuilder - 가변(mutable) 클래스. 문자열을 수정할 수 있다. - 수정이 발생할 때마다 기존의 버퍼를 수정하여 성능 향상을 제공한다. - 단일 스레드 환경에서 안전하며, 대부분의 문자열 연산에 효율적이다. StringBuffer - 가변(mutable) 클래스. 문자열을 수정할 수 있다. - thread-safe하도록 설계되어 있다. - 멀티 스레드 환경에서 동기화(synchroniza..

CS 2023.11.24