F-Lab 66

오랜만에 F-LAB 스크립트들을 복습

4개 정도 분량의 스크립트를 들었는데 와 예전의 나랑 지금의 나랑 좀 많이 다른 것 같아서 많은 생각과 감정이 들었다. 멘토님도 보고 싶고 암튼 기술적으로도 내가 많이 배웠는데도 아직도 많이 배울 것이 남았구나 싶었다. 컨커런트 해시맵은 어떻게 동시성을 제어할 수 잇게 되었어? 컨커런트 해시맵(ConcurrentHashMap)은 자바의 `java.util.concurrent` 패키지에 포함된 자료구조로, 멀티스레드 환경에서의 동시성을 효율적으로 다루기 위해 설계되었습니다. 이 해시맵은 여러 스레드가 동시에 읽고 쓰기 작업을 할 수 있도록 동시성 제어를 구현하고 있어, 고성능을 유지하면서도 데이터의 일관성을 보장합니다. ### 동시성 제어 방법 #### 1. 세그먼트(segment)와 버킷(bucket) ..

JAVA에서 Thread 구현 방법

JAVA에서 Thread 구현 방법 JAVA에서 Thread 구현 방법 자바에서 스레드를 구현하고 실행하는 주요 방법은 크게 두 가지입니다: Thread 클래스 확장(Extending the Thread class): 자바에서 제공하는 Thread 클래스를 상속받아서 스레드를 구현하는 방법입니다. run 메서드를 오버라이드하여 스레드에서 실행될 로직을 정의합니다. class MyThread extends Thread { @Override public void run() { // 스레드에서 실행될 코드 } } // 스레드 사용 MyThread t = new MyThread(); t.start(); Runnable 인터페이스 구현(Implementing the Runnable interface): Runna..

[F-lab 페이백 모각코 66일차] Java 스레드와 Java 스레드 생명주기

Java 스레드와 Java 스레드 생명주기 Java 스레드와 Java 스레드 생명주기 1. Java 스레드란? 스레드(Thread)는 프로그램 내에서 실행되는 흐름의 단위입니다. 하나의 프로세스 안에서 여러 개의 스레드를 생성해 병렬로 작업을 수행할 수 있습니다. Java에서는 java.lang.Thread 클래스와 java.lang.Runnable 인터페이스를 통해 스레드를 생성하고 관리할 수 있습니다. 2. Java 스레드의 생명 주기 (Life Cycle) Java 스레드의 생명 주기는 다음과 같은 여러 단계로 나뉩니다: 새로 생성됨 (New): 스레드 객체가 생성되었지만 아직 start() 메서드가 호출되지 않은 상태입니다. 실행 가능 (Runnable): 스레드가 실행될 준비가 되어 있거나 현재..

[F-Lab 페이백 모각코 65일차] 객체 직렬화(Serialization)와 역직렬화(Deserialization)

객체 직렬화(Serialization)와 역직렬화(Deserialization) 객체 직렬화(Serialization)란? 객체 직렬화는 객체의 상태를 바이트 스트림으로 변환하는 프로세스를 의미합니다. 반대로, 이 바이트 스트림을 원래의 객체로 복구하는 것을 역직렬화(Deserialization)라고 합니다. 이 프로세스는 주로 네트워크 통신이나 파일 저장 등에서 객체의 상태를 유지하거나 전송할 필요가 있을 때 사용됩니다. 왜 객체 직렬화가 필요한가? 네트워크 전송: 객체를 다른 시스템에 전송하기 위해서는 객체를 바이트 스트림으로 변환해야 합니다. 직렬화를 통해 이를 수행하고, 받는 측에서는 역직렬화를 통해 객체로 복원합니다. 영속성: 객체의 상태를 파일이나 데이터베이스에 저장하고 나중에 복원해야 하는 ..

[F-Lab 페이백 모각코 64일차] 자바 컴파일 과정

자바 컴파일 과정 소스 작성 컴파일 문법검사 어휘 분석 토근 예약어 자바에서 미리 정의된 키워드들입니다 (예: class, if, while 등) 식별자 변수, 메소드, 클래스 등의 이름입니다. 리터럴 상수 값들입니다 (예: 정수, 실수, 문자열, 불린 값 등) 연산자 수학, 관계, 논리 등의 연산자입니다 (예: +, -, *, /, ==, !=, &&, || 등). 구분자 코드의 구조를 나타내는 문자들입니다 (예: 괄호, 중괄호, 세미콜론 등). 자바 코드 예제: java Copy code public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } 이 코드에서 추출되는 ..

[F-Lab 페이백 모각코 63일차] 클래스 로더 (Class Loader)

Class Loader 계층 구조 부트스트랩 클래스 로더 (Bootstrap Class Loader) 확장 클래스 로더 (Extension Class Loader) 애플리케이션 클래스 로더 (Application Class Loader) 로딩 클래스 로더가 해당 클래스의 바이트코드를 찾아 메모리에 로드합니다. 이 과정에서 클래스 로더 계층 구조를 따르며, 로드된 클래스는 메소드 영역에 저장됩니다. 로딩순서 애플리케이션 클래스 로더 (Application Class Loader) 확장 클래스 로더 (Extension Class Loader →Platform ClassLoader(Java9부터)) 부트스트랩 클래스 로더 (Bootstrap Class Loader) 연결 검증 형식 검사: 클래스 파일의 매직 ..

[F-Lab 페이백 모각코 62일차] SQL join 사용예제 (inner, left, right, outer,full)

Join 별 개념 이미지 아래는 CHATGTP4로 생성한 답안입니다. Q.join 사용 예제에 대해 알려줘 left right outer inner full 경우를 알려줘 ㅎ A. 데이터베이스의 JOIN에 대한 사용 예제를 아래에 작성하였습니다. 이 예제에서는 두 개의 테이블 Employees와 Departments를 사용하며, 각각은 아래와 같은 데이터를 포함하고 있습니다. Employees 테이블: EmployeeID Name DepartmentID 1 Kim 1 2 Lee 2 3 Park NULL 4 Choi 4 Departments 테이블: DepartmentID DepartmentName 1 Sales 2 Marketing 3 HR 5 Engineering INNER JOIN:위의 쿼리는 각 직..

[F-Lab 페이백 모각코 61일차] 소프트웨어 테스팅

소프트웨어 테스팅: 단위/통합/시스템/인수/회귀 1. 단위 테스트 (Unit Testing) 정의: 개별 코드 조각, 함수 또는 메서드와 같은 프로그램의 가장 작은 단위를 테스트합니다. 목적: 코드의 각 부분이 올바르게 작동하는지 확인합니다. 도구: JUnit, NUnit, TestNG 등 2. 통합 테스트 (Integration Testing) 정의: 개별 단위들이 통합될 때 올바르게 작동하는지 확인하는 테스팅입니다. 목적: 모듈 간의 상호작용 문제를 찾아내기 위함입니다. 도구: JUnit, TestNG, Postman (API 테스팅) 등 3. 시스템 테스트 (System Testing) 정의: 완성된 소프트웨어 시스템의 전체 기능과 비기능을 테스트합니다. 목적: 소프트웨어가 전체적으로 요구 사항을 ..

[F-Lab 페이백 모각코 60일차] 토큰 기반 인증: JWT

JWT (JSON Web Token)란? JWT는 JSON Web Token의 약자로, 두 개체 사이에서 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 방법을 제공하는 표준입니다 (RFC 7519). 주로 인증 및 정보 교환에 사용됩니다. JWT의 구성 JWT는 세 부분으로 구성됩니다: Header (헤더): 토큰의 유형 (JWT) 및 사용된 해싱 알고리즘 (예: HMAC SHA256 또는 RSA)을 포함하는 메타데이터를 담고 있습니다. Payload (페이로드): 실제 토큰의 내용을 포함합니다. 이 부분에는 클레임(claim)이라는 정보 단위가 포함되며, 사용자의 정보나 권한과 같은 것들을 나타냅니다. Signature (서명): 서명은 헤더와 페이로드를 암호화하는데 사용됩니다. 이 서명을 통해 토..

[F-Lab 페이백 모각코 59일차] OAuth2 인증 절차

OAuth 2.0 "OAuth 2.0"은 "Open Authorization 2.0"의 줄임말입니다. Open: 이는 프로토콜이 공개적으로 사용할 수 있다는 것을 의미합니다. 즉, 누구나 이 프로토콜을 사용하여 자신의 서비스나 애플리케이션에 적용할 수 있습니다. Authorization: 인증이 아닌 권한 부여를 의미합니다. OAuth는 사용자 대신 클라이언트가 리소스에 접근할 수 있도록 권한을 부여하는 방식으로 작동합니다. 인증(Authentication)은 사용자의 정체성을 확인하는 과정이며, 권한 부여(Authorization)는 특정 작업을 수행할 수 있는 권한을 부여하는 과정입니다. 2.0: 이는 OAuth 프로토콜의 두 번째 주요 버전임을 나타냅니다. 처음에는 OAuth 1.0이 있었으나 여러..