일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- BFS
- 누적합
- 셀러리
- JPA
- langgraph
- gRPC
- spring event
- 백준
- 몽고 인덱스
- 레디스 동시성
- 추천 검색 기능
- 프로그래머스
- 트랜잭샨
- 쿠키
- ai agent
- 결제서비스
- next-stock
- 아키텍쳐 개선
- 이분탐색
- 크롤링
- 구현
- ipo 매매자동화
- 완전탐색
- AWS
- 디버깅
- piplining
- 카카오
- docker
- jwt 표준
- 검색어 추천
- Today
- Total
목록분류 전체보기 (184)
코딩관계론

HTTP 특징HTTP는 기본적으로 무상태, 비연결성 프로토콜이다. 따라서 사용자가 로그인을 하거나, 장바구니에 물건을 담았더라도 다음 요청에는 어떤 로그인을 진행했는지, 장바구니에 어떤 물건을 담았는지 서버는 알 수가 없다. 이러한 제약을 극복하기 위해 쿠키와 세션이 사용된다. 비열결성과 무상태성이란더보기서버와 client가 요청과 응답을 주고받으면 연결이 끊어지게(connectionless) 되기 때문에 서버에서는 요청자의 이전 상태를 기억하지 못하게 되는데 이를 무상태라고 합니다. 이러한 장점은 서버에서 자원 낭비를 하지 않기 때문에 대규모 처리에 유용하게 됩니다.쿠키쿠키는 Client의 상태를 기억하기 위해서 사용된다. 쿠키는 Client에서 정보가 관리되기 때문에 보안에 취약하다. 이 쿠키에 값을..

HTTP Method 종류GETGET은 데이터를 조회하기 위해 사용됩니다. 추가적으로 서버에 전달하고 싶은 데이터를 쿼리스트링을 통해서 전달할 수 있습니다. Body로도 전달할 수 있지만 지원하는 서버가 많이 없어 권장되지 않는다.POST와 Get의 가장 큰 차이점은 *멱등성이다(idempotent). POSTPOST 요청은 주로 데이터를 신규 리소스로 등록하거나, 프로세스의 처리에 사용한다. 예시로는 주문 전송을 생각하면 될 것이다. PUT과 POST의 가장 큰 차이점은 PUT은 Client가 자원의 디렉터리를 지정할 수 있을 때 사용하고, Post는 Client가 자원의 디렉터리를 저장할 수 없을 때 사용된다. form을 통해서 보내면 쿼리 파람 형식으로 서버에게 전송됨 대신 바디에 들어감 con..
먼저 자바의 Map Obejct에 대해서 간단히 설명하자면 특정 key를 넣었을 때 저장된 value를 돌려주는 자료구조이다. 상속관계는 아래와 같다.HashMap 구조도HashMap 클래스에는 버킷이라고 불리는 배열이 존제하고, 해당 버킷에 노드가 들어가는 형식이 된다. 이 노드는 연결리스트로 구현되어 있지만 노드가 일정 개수(기본:8)이상이 되면 tree 노드로 변환된다HashMap의 put()기본적으로 구현된 코드는 아래와 같다. 먼저 key 오브젝트의 hascode를 호출해서 버켓 배열의 인덱스를 정하게 된다. 그 후 해당 버켓에 노드가 없으면 지금의 key, value로 하는 노드를 생성해서 배열에 저장해준다. 만약 노드가 있다면 hashcode와 equals함수를 통해서 값 비교를 진행하고 완..

Synchronized CollectionSynchronized Collection은 멀티스레드 환경에서 컬렉션을 안전하게 사용할 수 있도록 동기화된 메서드나 블록을 사용하여 구현됩니다. 주로 Collections.synchronizedXXX() 메서드를 사용하여 기존 컬렉션을 동기화된 버전으로 감싸서 반환합니다. Synchronized Collection의 클래스 코드를 보시면 인스턴스 변수로 락을 위한 Object mutext가 존제합니다. static class SynchronizedCollection implements Collection, Serializable { @java.io.Serial private static final long serialVersionU..

제네릭 타입을 이해하기 위해선 먼저 공변과 불공변의 개념을 알아야 한다.공변공변이란 자기의 타입과 자신의 하위 타입까지 같다고 인식합니다. 아래의 코드를 보면 Anmain배열에 cats를 할당하고 있는데 Animal배열에서 Cat타입이 같다고 인식해 컴파일 오류가 발생하지 않는 경우입니다.class Animal {}class Cat extends Animal {}public class Main { public static void main(String[] args) { Animal[] animals = new Cat[10]; // 공변성 허용 animals[0] = new Cat(); // 유효 animals[1] = new Animal(); ..

자바에는 Error와 Exception이 존재하는데 이 두 클래스는 모두 Throwable 클래스를 상속 받습니다.그럼 java.lang.Error는 무엇일까?java.lang.Error는 시스템 수준에서 발생한 심각한 문제로 어플리케이션이 복구가 불가능한 상태가 됩니다. Error 클래스의 예로는 VirtualMachineError, OutOfMemoryError, StackOverflowError, AssertionError 등이 있습니다.그럼 java.lang.Exception는 무엇일까?java.lang.Exception는 어플리케이션 실행 중 복구 가능한 문제를 나타냅니다. 보통 프로그래머의 논리적 오류가 예외를 뜻합니다. Exception예제는 java.lang.RuntimeException,..

우리는 앞서 JVM의 메모리 구조를 살펴봤다 - 2024.06.08 - [개발/Java] - JVM 메모리 구조 JVM 메모리 구조이전 시간에는 JVM이 코드를 어떤 방식으로 실행하는지 알아봤다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?)지금부터는 JVM의 데이터 영역에 대해서 집중적으로 탐구해보겠다.JVM의 Run time datbjwan-career.tistory.com그 중에 heap을 설명하면서 heap 메모리를 정리하기 위해서 Garbage Collection이 작동한다고 배웠다. 그럼 프로그래머는 자신의 application에 맞는 GC를 선택해야 한다고 한다. 그게 좋은 자바 개발자라고 네이버가 소개함 그럼 이 Garbage Collection이 어떻게 작동될까? ..

Thread Safety여러 스레드가 한 함수를 동시에 호출해도 올바른 정답을 돌려준다면 thread-safe하다고 이야기합니다. 객체지향 패러다임에서는 객체를 기본 단위로 하여 상호작용하는 것입니다. Thread-safe하게 구현하기 위해서 지역변수만 사용하라, final값을 사용하라 등의 지침이 있지만 이는 우리가 알고 있는 객체의 모습이라고 보기 힘듭니다. 따라서 멤버 변수에서 어떻게 thread-safe를 구현하는지에 대해 집중하겠습니다. Race conditionRace condition (경쟁 조건)은 다수의 스레드가 공유 자원에 접근하여 예상치 못한 결과를 초래할 수 있는 상황을 가리킵니다. 주로 다음과 같은 상황에서 발생할 수 있습니다:경쟁조건이랑 다수의 쓰레드가 공유자원에 접근해 예상치 ..

자바 언어를 배우다보면 static, final 변수가 중요하다고는 배우지만 왜 중요한지 어떤 특성으로 인해서 공유가 가능한지, 수정이 불변한지는 배우지 않는다.Static 변수Static 변수는 모든 클래스 인스턴스에서 하나의 변수를 공유하기 위해서 사용됩니다. 하지만 어떻게 모든 인스턴스에서 하나의 변수 값을 참조할 수 있을까요? 컴파일 과정과 JVM의 메모리 영역을 생각해보면 답이 있다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?) 클래스 로더가 JVM의 바이트코드 파일을 읽어 메모리에 할당하면서 링킹 과정이 수행됩니다. 이때 static 변수가 초기화되며, 이후 초기화 과정을 통해 static 변수에 실제 값이 할당된다. 이 과정을 거치게 되면 static 변수는 메모리에..

이전 시간에는 JVM이 코드를 어떤 방식으로 실행하는지 알아봤다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?)지금부터는 JVM의 데이터 영역에 대해서 집중적으로 탐구해보겠다.JVM의 Run time data area 영역의 실행주기는 JVM의 시작과 종료, 각각의 thread 시작과 종료에 따라 나눌 수 있다.thread의 생명 주기에 따라 생성과 소멸하는 데이터 영역을 먼저 확인해보자.PC RegistersJVM은 여러 개의 쓰레드가 생성될 수 있고, 해당 쓰레드는 명령어를 실행중인데, 해당 명령어의 주소를 저장하는 영역입니다. 자바의 가상 머신은 여러개의 thread를 생성할 수 있고, 동시에 실행할 수 있기 때문에 각 thread는 고유한 프로그램 카운터 레지스터를 가지고 ..

개요프로그램을 실행하기 위해선 사람이 읽을 수 있는 언어(코드)에서 기계(바이너리)로 번역하는 과정을 거쳐야 한다. "이 과정을 컴파일 한다".라고 말한다. 그럼 자바에서는 어떤 방식으로 이 과정이 수행되는지 알아보자 자바가 실행되기 위해선 아래의 과정을 수행해야만 한다.자바 언어로 된 자바 파일을 작성한다javac 명령어로 해당 파일을 컴파일하여 바이트 파일로 변환한다바이트 파일을 JVM에서 로드한 후 컴퓨터가 읽을 수 있도록 기계어로 변환한다실행 Java 컴파일컴파일이라는 사전적 의미는 엮다라는 의미를 가지고 있다. 즉 내가 .java파일을 바이트 파일로 엮는 작업을 컴파일한다 라고 부른다. 그럼 이 컴파일이라는 작업을 수행하는 녀석이 바로 컴파일러다. 자바에서는 javac가 컴파일러가 되는데 여러분..

객체지향이란객체지향 프로그래밍은 프로그램을 구성하는 기본 단위인 '객체'를 중심으로 하는 프로그래밍 패러다임입니다.객체는 데이터와 그 데이터를 처리하기 위한 메서드를 함께 묶은 것으로, 이러한 객체들은 메시지를 주고받고, 상호작용하여 프로그램의 기능을 수행합니다. 특징객체지향에는 아래의 기능들을 제공하여 코드를 구조화하고, 관리할 수 있으며, 유연하고 확장 가능한 소프트웨어를 개발할 수 있습니다.캡슐화 (Encapsulation): 객체는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어서 외부로부터의 접근을 제한합니다. 이는 객체의 내부 상태를 숨기고, 외부에서의 직접적인 접근을 제한하여 데이터의 무결성과 보안을 보장합니다.상속 (Inheritance): 상속은 기존 클래스(부모 클래스)의 ..