전체 글

Languages/Java

[Java] Stream API

Stream이란? Stream은 자바 8에서 추가된 새로운 데이터 처리 추상화 개념으로, 함수형 프로그래밍을 지원한다. Stream vs Collection Collection 현재 자료구조가 포함하는 모든 값을 메모리에 저장하는 자료구조이다. 따라서 컬렉션 안의 모든 요소는 컬렉션에 추가하기 전에 계산되어야 한다. 외부 반복을 통해 사용자가 직접 반복 작업을 수행하여 요소를 가져온다. 즉, 개발자는 명시적으로 요소를 가져오기 위해 Iterator 또는 인덱스로 컬렉션을 순회해야 한다. Stream 요청할 때만 요소를 계산하는 고정된 자료구조이다. 스트림에 요소를 추가하거나 삭제할 수 없으며, 사용자가 요청할 때만 스트림에서 요소를 추출한다. 내부 반복을 사용하므로, 사용자는 추출되는 요소만 선언하면 된..

Computer Science/Web

[Web] 네이티브 앱 & 웹 앱 & 하이브리드 앱

네이티브 앱(Native App) 네이티브 앱은 각 모바일 운영체제(Android 및 iOS)에 최적화된 방식으로 개발된다. 안드로이드 앱을 Java 또는 Kotlin으로, iOS 앱은 Swift 또는 Objective-C로 개발된다. 장점 구동 속도가 빠르고 안정적이다. 기기의 모든 기능(카메라, GPS 등)에 쉽게 접근할 수 있다. 높은 그래픽 품질과 사용자 정의 디자인을 구현할 수 있다. 단점 두 가지 운영체제용 앱을 별도로 개발해야 하기 때문에 개발 비용과 시간이 많이 들 수 있다. 앱 업데이트시 앱 스토어의 심사를 거쳐야 한다. 모바일 웹 앱(Mobile Web App) 모바일 웹 앱은 HTML, CSS, JavaScript를 사용하여 웹 기술로 개발된다. 웹 브라우저를 통해 접근하므로 앱을 설..

Computer Science/Web

[Web] CSR & SSR

CSR과 SSR은 웸 애플리케이션의 프론트엔드 렌더링 방식에 대한 두 가지 주요 접근 방식이다. SSR(Server Side Rendering) SSR은 서버 측에서 웹 애플리케이션의 초기 렌더링을 담당하는 방식이다. 클라이언트에서 요청이 들어올 때마다 서버에서 view 를 만들어서 제공한다. 장점 검색 엔진 최적화(SEO) : 서버에서 초기 렌더링을 수행하므로 검색 엔진 크롤러에게 콘텐츠를 쉽게 이해할 수 있는 HTML을 제공할 수 있다. 초기 로딩 성능 개선 : 첫 번째 페이지 로딩 시 서버에서 렌더링된 HTML을 클라이언트로 전달하므로 초기 로딩 성능이 개선된다. 단점 프로젝트 복잡도 : 라우터를 사용하다보면 복잡도가 높아질 수 있다. 성능 악화 가능성 : 매번 서버에서 렌더링을 수행하면 서버 자원..

Languages/Java

[Java] Error & Exception

Error Error는 주로 시스템 레벨에서 발생하며, 개발자가 직접 제어할 수 없는 문제를 나타낸다. 주로 런타임 시 발생하며, 프로세스에 심각한 문제를 야기할 수 있어 프로세스를 종료시킬 수 있다. 대표적인 예로 'OutOfMemoryError'가 있으며, 이는 JVM 메모리 한계를 초과하거나, 너무 많은 클래스를 로드하거나, 메모리 부족 등과 관련된다. 시스템 관리자나 개발자가 개입하여 해결해야 하며, 프로그램 코드 내에서 예방하거나 처리하기 어렵다. Exception Exception은 주로 개발자가 작성한 프로그램 코드에서 발생하는 예상하지 못한 상황 또는 오류를 나타낸다. 프로그램의 실행 중에 발생할 수 있으며, 프로세스를 강제로 종료하지는 않지만 프로그램의 정상적인 흐름을 방해할 수 있다. ..

Languages/Java

[Java] Garbage Collection

Garbage Collection C/C++ 프로그래밍에서는 메모리 누수(Memory Leak)를 막기 위해 개발자가 직접 명시적으로 메모리 관리를 해야한다. 그러나 자바에서는 JVM이 구성된 JRE(Java Runtime Environment)가 제공되며, 그 구성요소 중 하나인 Garbage Collection(GC)이 자동으로 사용하지 않는 객체를 메모리에서 제거해준다. Stop-the-World 현상 GC가 사용하지 않는 객체를 메모리에서 해제하는 작업을 수행할 때, JVM이 애플리케이션 실행을 일시적으로 멈추는 것 stop-the-world 현상이 발생하는 시간을 최소화 하는 것이 성능 개선을 위한 주요 과제 중 하나이다. GC를 수행하지 않거나 GC를 해도 더 이상 사용 가능한 메모리 영역이 ..

Languages/Java

[Java] JVM (Java Virtual Machine)

JVM(Java Virtual Machine) 자바 프로그램 실행환경을 만들어 주는 소프트웨어이다. 모든 자바 애플리케이션은 JVM 위에서 실행되며, 이러한 특성은 자바가 "Write Once, Run Anywhere(WORA)"라고 불리는 특징을 구현하는 데 기여한다. 자바 언어와 JVM의 관계 : 자바 언어로 작성된 프로그램은 컴파일러를 통해 바이트 코드(bytecode)라는 중간 형식으로 변환된다. 이 바이트 코드는 특정 운영 체제나 아키텍처에 의존하지 않으며, 이로써 자바 프로그램은 어떤 환경에서도 실행될 수 있다. 운영 체제 독립성 : JVM은 특정 OS에 맞게 자바 바이트 코드를 해석하고 실행한다. 따라서 자바 프로그램은 운영 체제에 독립적이며, 자바 개발자는 프로그램을 한 번 작성하면 다양한..

Languages/Java

[Java] 고유 락 (Intrinsic Lock)

고유 락(Intrinsic Lock) 고유 락은 자바의 동기화 방법 중 하나로, 객체 단위로 동기화를 제어하는 데 사용된다. 모든 자바 객체는 내부적으로 고유한 락을 가지고 있다. 이 락은 synchronized 키워드를 사용하여 블록 또는 메서드 단위로 획득하고 해제할 수 있다. 이를 통해 한 번에 하나의 스레드 만이 해당 락을 획득하여 블록 내의 코드를 실행할 수 있다. synchronized 'synchronized' 키워드는 고유 락을 이용하여 스레드 간의 동기화와 상호 배제를 구현 public class SynchronizedExample { private int count = 0; // 1. public synchronized int increase() { return ++count; } //..

Languages/Java

[Java] 스레드 (Thread)

요즘 OS는 모두 멀티태스킹을 지원하는데 멀티태스킹을 가능하게 하는 요소 중 하나가 바로 '멀티스레딩'이다. 멀티스레딩은 하나의 프로세스 안에서 여러 개의 스레드가 동시에 작업을 수행하는 것을 의미한ㄷ. 스레드 구현 자바에서 스레드를 구현하는 방법은 크게 두 가지이다. 하나는 'Runnable' 인터페이스를 구현하는 방법이고, 다른 하나는 'Thread' 클래스를 상속하는 방법이다. 1. Runnable 인터페이스 구현 public class MyRunnable implements Runnable { @Override public void run() { // 스레드가 수행할 작업 내용 } } 2. Thread 클래스 상속 public class MyThread extends Thread { @Overri..

Computer Science/Web

[Web] Logging Level

Logging Level 로깅 레벨은 로그 메시지의 중요도를 정의하는 기준이다. 소프트웨어나 애플리케이션에서 발생하는 로그는 각각 다른 중요도와 의미를 가지며, 이를 구분하여 적절하게 다루기 위해 로깅 레벨을 사용한다. 총 8단계로 구성되며 ALL과 OFF는 거의 쓰지 않고 6단계를 사용하고 있다. Logging Level의 종류 1. TRACE 가장 상세한 로그 레벨로, 주로 디버깅 목적으로 사용된다. 코드의 특정 부분이 실행될 때마다 세부 정보를 로그로 남기며 일반적으로 배포 환경에서는 사용하지 않는다. 2. DEBUG 디버그 목적으로 사용되며, 프로그램 실행 중 발생하는 중간 결과나 변수 값을 확인할 수 있는 정보를 로그로 남긴다. 배포 환경에서는 일반적으로 사용하지 않는다. 3. INFO 일반적인..

Computer Science/Web

[Web] 인증 방식

API Key API Key는 다양한 서비스 간의 통신을 보장하고 보안을 유지하기 위한 인증 수단 중 하나이다. API Key는 사용자가 해당 서비스를 사용할 권한을 부여받을 수 있는 키로, 사용자 식별 및 권한 관리에 사용된다. 동작 방식 사용자는 서비스에서 API Key를 발급받는다. API를 호출할 때, API Key를 함께 요청에 포함시켜 서버로 전송한다. 서버는 API Key를 검증하여 사용자 식별 및 권한을 확인한 후 응답한다. 문제점 키 유출 시 보안상의 문제가 발생할 수 있다. 따라서, 주기적인 업데이트와 관리가 필요하며 이때 한 쪽만 업데이트 되는 예외상황이 발생할 수 있다. 키 하나로 암복호화하므로 보안 문제가 발생하기 쉽다. OAuth2 API Key의 한계를 극복하고 사용자 경험을 ..

dbssk
K.Back-end