본문 바로가기

분류 전체보기

(14)
🧱 프론트와 백엔드, Nginx, 톰캣의 실제 배포 구조 이해하기 프론트엔드(React)와 백엔드(Spring Boot)를 로컬에서 잘 개발하고 있지만,"실제로 사용자들이 접속하는 웹서비스는 어떻게 배포되고 동작할까?""왜 Nginx를 쓰고, 톰캣은 뭔데, Apache는 또 뭐지?"이런 궁금증이 한 번쯤 생기셨다면, 이 글을 읽어보는걸 추천합니다. ✅ 1. 로컬 개발 환경의 요청 흐름개발 중일 때는 프론트와 백엔드를 따로 띄워서 작업하죠.[브라우저] ↓ (http://localhost:3000)[프론트 서버 (React 개발 서버)] ↓ API 요청 (fetch('/api/users'))[백엔드 서버 (Spring Boot - http://localhost:8080)]프록시 설정을 통해 프론트가 백엔드로 API 요청을 넘깁니다.개발자에게는 빠르고 편리하지만, 실..
CORS 오류 🧭 개발자 모드(F12)에 뜨는 CORS 오류, 도대체 왜?개발을 하다 보면 갑자기 요청이 실패하면서 콘솔에 빨간 오류가 뜨는 경험, 한 번쯤은 하게 됩니다.Access to fetch at 'http://localhost:8080/api/data' from origin 'http://localhost:3000' has been blocked by CORS policy...처음엔 서버가 죽었나? 싶지만, 서버는 잘 살아 있고 응답도 정상입니다.그런데 브라우저는 응답을 받았음에도 그걸 거부해버립니다.이 정체불명의 메시지의 주인공은 바로 CORS입니다.🔍 CORS란 무엇인가?CORS는 Cross-Origin Resource Sharing의 약자로,다른 출처(origin)의 리소스를 허용해줄지 말지를 브라..
[Java] BAEKJOON 1074번 Z [실버1] 문제설명 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.   N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다.다음 예는 22 × 22 크기의 배열을 방문한 순서이다.    N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.다음은 N=3일 때의 예이다.     입력 첫째 줄에 정수 N, r, c가 주어진다.  출력r행 c열을 몇 번째로 방문했는지 출력한다.  제한1 ≤ N ≤ 150 ≤ r, c 예제 입력 12 3 1예제 출력 111예제 입력 23 7 7예제 출력 263예제 입력 31 ..
(SWEA) 20728. 공평한 분배 2 [D3] Java SWEA 문제 주소:https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AY6cg0MKeVkDFAXt&categoryId=AY6cg0MKeVkDFAXt&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1[문제 설명]사탕이 담긴 N개의 주머니가 있다. 이 중 i (1≤i≤N) 번째 주머니에는 사탕이 ai개 들어 있다. 당신은 이 주머니 중 정확히 K개를 선택하여 어린이들에게 나누어 주려고 한다.공정성을 위해, 당신은 나눠 준 주머니 가운데 사탕의 개수가 가장 많은 것과 가장 ..
[Java] 백엔드 신입 개발자가 쌓아야 하는 역량 (feat. 자료구조, 알고리즘, 코딩테스트) 자료구조와 알고리즘, 신입개발자의 필수 지식 저는 처음에 자료구조와 알고리즘을 단순히 코딩 테스트를 통과하고 면접까지 가는 과정의 하나로만 여겼습니다. 하지만, 이 분야를 깊게 파고들면서 느낀 바는, 이것이 바로 개발자가 되기 위한 기본 중의 기본이며, 어떤 개발자든지 자신을 개발자라고 칭한다면 반드시 알아야 하는 핵심 내용임을 깨달았습니다. 😄📚 ❓자료구조와 알고리즘 배우는 이유 자료구조와 알고리즘은 프로그래밍의 기본이자 핵심입니다. 복잡한 문제를 해결하고, 효율적인 소프트웨어를 개발하기 위한 필수 도구라고 생각합니다. 🛠️ 효율적인 데이터 관리: 자료구조는 데이터를 효율적으로 저장하고 관리하는 방법을 입니다. 올바른 자료구조에 대한 선택은 프로그램의 성능을 크게 향상시킬 수 있습니다. 문제 해결 능력..
앞으로의 백엔드 공부 계획 (feat. 백엔드 공부법) 백엔드 개발자로 성장하기 위한 나만의 공부 계획 🚀 안녕하세요! 오늘은 백엔드 개발자로 성장하기 위한 제 개인적인 공부 계획에 대해 이야기해보려고 합니다. 😊 1️⃣알고리즘 문제 풀이에 집중하기 현재 상황: 지금 현재 백준티어로 실버1이고 중간중간 많이 빼먹었지만 1년을 꽉채우려고 매일 백준 사이트에서 문제를 최소 한 개 이상 풀려고 노력 중입니다. 앞으로의 계획: 대기업 코딩 테스트 수준이 골드~플래티넘 정도라고 들었습니다. 저는 플래티넘 티어에 도달할 때까지 알고리즘 문제를 꾸준히 풀어나가며 실력을 키울 예정입니다. 2️⃣CS 지식 습득하기 CS지식: 코딩 테스트를 통과하더라도 기술 면접에서 CS 지식이 없다면 탈락할 수 있다는 것을 알고 있습니다. 그래서 자료구조, 운영체제, 네트워크, 데이터베이스..
[Java Heap] 자바 힙 개념 정리 (feat. 시간복잡도) 자바 힙(Heap)에 대한 자세한 설명: 자바에서 힙(Heap)은 동적으로 생성된 객체들이 저장되는 메모리 영역으로, 가비지 컬렉터에 의해 관리되는 중요한 부분입니다. 📚 힙이란? 정의: 힙은 동적으로 할당된 객체들이 저장되는 메모리 영역으로, 자바 가상 머신(JVM)에서 관리됩니다. 힙 영역은 가비지 컬렉터에 의해 관리되며, 더 이상 사용되지 않는 객체들을 자동으로 정리합니다. 특징: 힙은 모든 객체와 배열이 생성될 때 사용되는 공간입니다. 이 영역은 실행 시간에 크기가 동적으로 변할 수 있으며, 힙의 크기는 JVM 옵션에 의해 조절될 수 있습니다. 그리고 중복 값이 허용 됩니다. 힙의 특징 완전 이진 트리: 힙은 완전 이진 트리의 형태를 가지며, 이로 인해 배열을 사용하여 효율적으로 구현할 수 있습니..
[Java Linked List] 자바 링크드 리스트 개념 정리 (feat. 시간복잡도) 자바의 LinkedList 개념📚 LinkedList는 자바에서 제공하는 기본적인 자료구조 중 하나로, 데이터를 순차적으로 연결한 형태의 컬렉션입니다. 각 요소(노드)는 데이터와 다음 노드를 가리키는 포인터로 구성되어 있어요. LinkedList의 기본 구조 노드(Node): 데이터를 저장하는 필드와 다음 노드를 가리키는 포인터 필드로 구성됩니다. 헤드(Head): 리스트의 가장 앞에 위치한 노드를 가리키는 포인터로, 보통 더미 노드(dummy node)로 사용됩니다. 즉, 실제 데이터를 저장하지 않고 시작점 역할만 합니다. 테일(Tail): 리스트의 가장 뒤에 위치한 노드를 가리키는 포인터로, 다음 노드가 없기 때문에 포인터는 null입니다. LinkedList의 장단점 장점: 동적으로 메모리를 할당하..