Stack vs Heap
·
[Spring] - Study/CS
자바에서 Stack 과 Heap ✅ 스택(Stack)과 힙(Heap)은 뭐고, 왜 나뉘는가?자바 프로그램 실행 -> 필요한 데이터를 JVM 에 저장합니다.이때 저장되는 데이터의 성격은 다름 -> JVM 은 크게 Stack 과 Heap으로 나눠서 메모리 관리합니다. 🧮스택(Stack)📌 정의메서드 호출 정보와 지역 변수를 저장하는 공간 → 스레드마다 하나씩 존재합니다.public int add(int a, int b) { int sum = a + b; return sum;}a, b, sum: 모두 지역 변수 → Stack에 저장add() 메서드 호출 정보 (파라미터, 복귀 주소 등) → Stack에 저장⚙️ 작동 방식: LIFO메서드가 호출될 때 → Stack에 쌓임 (Push)메서드가 끝날 때 →..
DB 트랜잭션 제대로 이해하기: ACID, 회복기법, 병행제어, 격리수준
·
[Spring] - Study/CS
트랜잭션의 개념 - DB의 상태를 변화시키는 하나의 논리적인 작업 단위입니다.트랜잭션의 특성 (ACID) Atomicity트랜잭션 연산은 모두 정상적으로 실행되거나 실행되지 말아야 한다.Consistency트랜잭션 연산 전/후 DB 상태는 일관된 상태여야 한다.Isolation동시에 실행되는 트랜잭션은 서로 간섭하지 말아야 한다.Durability커밋된 트랜잭션 결과는 영구적으로 저장되어야 한다.트랜잭션 상태 트랜잭션 수행 시작 | | 활동 / \ / \ 부분 완료 --- 실패 | | commit---| |..
[1개월 차] F-lap 솔직 후기
·
💬 생각생각/F-lap
에프랩(F-Lab) 백엔드 집중 코스 1개월 후기 에프랩(F-Lab) 백엔드 집중 코스를 시작한 지 어느덧 한 달이 지났습니다. 이 후기는 앞으로 지원하실 분들에게 현실적인 인사이트를 줄 수 있도록, 솔직하게 작성해보려 합니다.왜 F-Lab을 신청했는가? F-Lab 지원 전 저의 상태를 설명드리자면 ...1. 어느 정도 스프링을 다룰줄 알지만 CS 매우 부족(어디서부터 시작해야 할 지도 잘 모르겠는 느낌?)2. 주변 네트워크 부족(=정보 부족)(ICT 연관 전공이긴 하지만 개발자를 희망하는 학우들이 없음 ㅠ)3. 체계적인 프로젝트 경험X4. 멘토링 경험 있음(자바도 모르는 상태에서 단시간에 많이 발전) 위에 나열한 상태가 F-lap 신청 전 제 상태였습니다.요약해보면 스프링 대충 빨리 배워서 프로젝트 ..
스레드와 멀티스레드
·
[Spring] - Study/CS
스레드는 왜 필요한가? 과거 CPU는 한 번에 하나의 동작만 처리할 수 있었습니다.그러나 사용자는 음악을 들으면서 웹 검색을 하거나, 영상 통화 중에 사진을 전송하는 등 여러 작업을 동시에 실행하기를 원합니다.이를 실현하기 위한 방법이 바로 멀티스레드입니다.멀티스레드는 하나의 프로그램에서 여러 작업을 동시에 처리할 수 있도록 해주는 기술로, 자바를 포함한 현대의 언어 대부분에서 기본적으로 지원됩니다.프로세스와 스레드 프로세스(Process): 실행 중인 하나의 프로그램입니다.스레드(Thread): 프로세스 내에서 실제로 작업을 수행하는 실행 흐름입니다.하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 여러 작업을 동시에 처리하기 위해 스레드를 사용합니다. 예를 들어, 음악 앱에서 한 스레드는 노래 ..
JMM
·
[Spring] - Study/CS
📌 1. JMM이란?JMM은 자바 프로그램에서 스레드 간에 메모리를 어떻게 읽고 쓰는지, 즉 공유 변수의 일관성(Consistency)과 동기화 규칙을 정의한 이론적 스펙입니다.🚨 2. 왜 필요한가?❗ 문제: 멀티스레딩에서는 CPU가 성능 최적화를 위해 아래와 같은 동작을 함CPU 명령어 재정렬(Instruction Reordering)캐시 계층 사용 (레지스터/코어 캐시 ↔ 메인 메모리)컴파일러 최적화 (중간 코드 생략, 변수 순서 변경 등)이로 인해 스레드마다 변수의 최신 상태가 다르게 보이는 가시성 문제, 또는 예상하지 못한 실행 순서(Race Condition)가 발생함🎯 그래서 등장한 게 JMM스레드 간에 공유 변수의 읽기/쓰기 순서를 일관성 있게 유지하도록 명확한 규칙(happens-be..
JIT(Just-In-TIme) Complination
·
[Spring] - Study/CS
📌 1. 개요 – JIT 컴파일러란?Java는 "한 번 작성하면 어디서나 실행"을 목표로 하기 때문에, Java 코드는 .java → .class로 변환되어 바이트코드로 실행됩니다. JVM은 이 바이트코드를 인터프리팅하면서 실행하지만, 이 방식은 속도가 느립니다. 그래서 등장한 것이 JIT(Just-In-Time) 컴파일러입니다. JIT 컴파일러는 실행 중 자주 호출되는 메서드(Hot Method)를 감지하여, 해당 바이트코드를 Native Code(기계어)로 변환하여 성능을 극적으로 향상시킵니다.⚙️ 2. JIT 컴파일 동작 흐름.java → javac → .class (Bytecode) ↓ JVM이 실행 중 분석 ..
Swagger(SpringDoc OpenAPI 3) 세팅!
·
[Spring] - 멘토링
OpenAPI 3 라이브러리 선택 이유Spring Boot 3.x부터는 Springfox가 더 이상 공식적으로 지원되지 않아서, 새로운 프로젝트에서는 SpringDoc을 사용하는 게 훨씬 유리하다고 합니다.또한, SpringDoc은 의존성 추가만 하면 자동으로 문서 생성되며, Spring WebFlux도 지원합니다. 의존성 추가(Maven 사용 시) org.springdoc springdoc-openapi-starter-webmvc-ui 2.5.0(Gradle 사용 시)dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'}  OpenAPI 문서 기본 경로Spring Boot 애플리..
플로이드-워셜
·
알고리즘
플로이드-워셜 알고리즘최단 거리를 구하는 알고리즘입니다.모든 노드 간의 최단 거리를 탐색 - 매우 중요, 출발 노드가 따로 정해진 것이 없습니다. 특징음수 가중치가 있어도 수행할 수 있습니다.동적 계획법의 원리를 사용합니다.O(NNN) - 노드의 세제곱, 꽤 느립니다. 핵심 이론전체의 최단 경로는, 각 부분의 최단 경로가 합쳐져서 만들어집니다.플로이드 워셜 점화식D[S][E] = Math.min(D[S][E], D[S][K] + D[K][E])리스트를 선언하고 초기화 해줍니다.최단 거리 리스트에 그래프 데이터를 저장합니다.점화식으로 리스트 업데이트합니다.(3중 for 문) for 경유지 K에 관해(1~N):for 출발 노드 S에 관해(1~N): for 도착 노드 E에 관해(1~N): D[S][E] =..
밸만-포드 알고리즘
·
알고리즘
밸만-포드최단 거리를 구하는 알고리즘입니다. 특징음수 가중치 에지가 있어도 수행할 수 있습니다.전체 그래프에서 음수 사이클의 존재 여부를 파악할 수 있습니다.O(nm) 시간 복잡도 가집니다. 핵심 이론에지 리스트로 그래프를 구현하고 경로 리스트 초기화하기모든 에지를 확인해 정답 리스트 업데이트하기업데이트 반복 횟수 = 노드 수 - 1 음수 사이클이 없을 경우, N-1 에지 사용 횟수를 사용하고 나면, 정답 리스트가 완성된다. 그리고 이렇게 완성된 후, 마지막으로 음수 사이클이 존재하는지 확인한다. 음수 사이클 유무 확인하기모든 에지를 한 번씩 다시 사용해, 업데이트 되는 노드가 발생하는지 확인합니다.업데이트 되는 노드가 있다면, 음수 사이클이 있다는 뜻이 되고, 최단 거리를 찾을 수 없다는 뜻입니다.  ..
[4주 차] 회고
·
우아한테크코스[프리코스]
4주 차 미션이 끝났습니다!!!!!!!!!!!!! 프리코스 끝나면 후련할 줄 알았는데, 마지막 미션에서 테스트 케이스 하나도 통과 못한게 너무 아쉬워서 미련만 남습니다.   솔직히 모든 테스트 통과 할 줄 알았는데, 통과 못한게 너무 충격적이었습니다.  진짜 통과 못한 것만 기억에 남아서, 제출 하고도 계속해서 분석했고 답을 찾아냈습니다. 테스트 통과하지 못한 이유 분석  이번 요구사항 중에, resourse 패키지 안에 들어있는 products.md , promotions.md 파일의 정보를 읽어와 데이터를 읽어들이는 요구사항이 있었습니다. 그래서 저는 해당 파일이 들어있는 경로를 복사하여 객체에 주입함으로서, 데이터를 받도록 하였습니다. 하지만 파일 경로를 제 컴퓨터 경로가 포함된 절대 경로로 설정한..