분류 전체보기 262

환경 변수 관리 (@Value, @ConfigurationProperties)

🔍 1. 환경 변수란? YAML 변수, 프로퍼티 변수, 설정 변수 라고도 부른다.환경 변수는 애플리케이션 실행 시 필요한 설정 값을 의미한다.이를 통해 코드 수정 없이 환경을 변경할 수 있고, 유지보수도 쉬워진다! 📌 2. 환경 변수 설정하기Spring Boot에서는 환경 변수를 application.yml 또는 application.properties에 저장한다. ➡️ 이 값들은 @Value나 @ConfigurationProperties를 사용해서 코드에서 가져올 수 있다!   📖 YAML 사용 (application.yml)atchfile: upload: path: /upload/files  📖 Properties 사용 (application.properties)atchfile.uplo..

Backend/spring 2025.02.26

[JAVA] 데이터 타입 Primitive Type vs Wrapped Type

📌 1. 자바의 데이터 타입 분류Wrapped Type을 알기 전에 Reference Type에 대해 먼저 알아보자.자바에서 데이터 타입은 크게 두 가지로 나뉜다! 1️⃣ 기본형(Primitive Type) → 값 자체를 저장2️⃣ 참조형(Reference Type) → 객체를 가리키는 참조값을 저장 ✅ 1. 기본형 (Primitive Type)boolean, char, byte, short, int, long, float, double객체가 아니며, 메모리에서 직접 값을 저장연산 속도가 빠르고 메모리 사용이 효율적✅ 2. 참조형 (Reference Type)배열(int[]), 클래스(String, Integer, Double 등), 인터페이스, 열거형(Enum)객체의 주소(참조값)를 저장메서드를 사용..

Backend/JAVA 2025.02.26

static 키워드

📌 1. static 키워드의 의미static은 "정적인"이라는 의미로,  static을 붙이면 객체(instance)와 관계없이 클래스(class) 단위로 관리된다는 뜻이다! 즉, 클래스가 메모리에 로드될 때 한 번만 생성되며, 모든 객체가 공유한다. ✅ 2. static 키워드의 사용1️⃣ static 변수 (클래스 변수)모든 객체가 공유하는 변수! (인스턴스와 관계 없음)클래스명.변수명으로 접근 가능객체를 생성하지 않아도 사용 가능📖 예제class Counter { static int count = 0; // 모든 객체가 공유하는 변수 Counter() { count++; // 생성될 때마다 count 증가 }}public class Main { public s..

Backend/JAVA 2025.02.26

JNDI란?

🔍 JNDI란? (Java Naming and Directory Interface) Java EE에서 사용되는 네이밍 서비스로, 리소스 (DataSource, JMS 등)를 애플리케이션에서 쉽게 찾고 사용할 수 있도록 도와줌.✅ 1. 기본 개념DataSource데이터베이스 연결을 관리하는 객체로, 직접 DriverManager.getConnection()을 사용하는 대신 JNDI를 통해 제공됨.Connection pool을 어플리케이션단에서 어떻게 관리할지를 구현하는 인터페이스  ⭐DriverManager.getConnection():실제 자바 프로그램과 데이터베이스를 네트워크상에서 연결해주는 메소드이다. Connection: 네트워크 상의 연결 자체를 의미 Connection Pool (커넥션 풀):..

Backend/JAVA 2025.02.26

[error] java.lang.IllegalArgumentException: Name for argument of type [int] not specified

🚨 Name for argument of type [int] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag. java.lang.IllegalArgumentException: Name for argument of type [int] not specified Ensure that the compiler uses the '-parameters' flag. This application has no explicit mapping for /error, so you are seeing this as a fallback.Wed Fe..

Backend/spring 2025.02.23

[error] getOutputStream() has already been called for this response

🚨 Could not write JSON: getOutputStream() has already been called for this response  🔥 오류 원인HttpServletResponse의 getOutputStream() 또는 getWriter()가 여러 번 호출되었을 때 발생하는 문제!즉, 응답을 한 번 보낸 후에 또 응답을 보내려고 할 때 발생한다.  📖 에러 코드 (수정 전) ➡️ 쿠키를 response.addCookie()로 설정한 후, ResponseEntity로 JSON 응답을 반환. ➡️ 하지만 ResponseEntity가 HTTP 응답을 설정하는 과정에서 response.getOutputStream()을 다시 호출하기 때문에 충돌이 발생. @PostMapping("/l..

Backend/spring 2025.02.23

[JAVA] 쿠키(Cookie) 설정 방법

쿠키 설정 방법에 대해 알아보기전에 쿠키에 대해 간단히 알아보자!!🔍 쿠키(Cookie)란? 쿠키는 웹 브라우저에 저장되는 작은 데이터 조각!!서버가 클라이언트(브라우저)에 정보를 저장하고, 이후 요청에서 다시 전송하도록 도와주는 역할➡️ 쿠키는 웹에서 사용자 상태를 유지하는 중요한 메커니즘! 🍪 🚀 특징세션 유지: 로그인 상태 유지, 장바구니 정보 저장클라이언트 저장: 브라우저에 텍스트 형태로 저장됨자동 전송: 동일한 도메인에 대한 요청마다 자동 포함🎯 쿠키 설정 시 추가할 내용✅ HttpOnly → 자바스크립트에서 접근 불가능하게 해서 보안 강화✅ Secure → HTTPS에서만 쿠키 전송 (HTTPS 환경이라면 꼭 설정!)✅ Path=/ → 모든 경로에서 쿠키 사용 가능✅ Max-Age / ..

Backend/spring 2025.02.23

실시간 데이터 전송

HTTP 프로토콜은 비연결성(stateless) 구조라서 서버가 클라이언트와 지속적으로 연결될 수 없음. 그래서 서버가 데이터를 실시간으로 클라이언트에게 푸시(Push)하는 것이 어려움. 이를 해결하는 방법으로 Polling, Long Polling, WebSocket, SSE가 있음! 📌 1. Polling (폴링) 방식클라이언트가 일정 주기로 서버에 요청을 보내 데이터를 갱신하는 방식.서버는 새로운 데이터가 있으면 응답하고, 없으면 빈 응답을 보냄. ✔️ 장점 구현이 단순함 (HTTP 요청/응답 패턴 그대로 활용 가능) 요청 주기를 길게 설정하면 서버 부하를 줄일 수 있음 ❌ 단점변경 사항이 없을 때도 요청을 계속 보내야 하므로 리소스 낭비 발생실시간성이 떨어짐 (요청 주기에 따라 데이터 갱신이 지..

[Kafka] 고급 설정

📌 Kafka 운영 환경에서 필요한 고급 설정기본 개념만으로도 Kafka를 사용할 수는 있지만, 실제 운영 환경에서는 더 많은 걸 알아야 한다!🔗 기본 개념(필수!)토픽, 파티션, 브로커, 컨슈머 그룹, 오프셋 이해Producer & Consumer 동작 방식기본적인 명령어 (토픽 생성, 메시지 생산/소비, 오프셋 관리)➡️ 이 정도만 알아도 로컬 환경에서 테스트하고 간단한 서비스에 적용할 수 있다!! 🚀 📌 1. 파티션 할당 전략 (Partition Assignment Strategy) ✅ 컨슈머 그룹 최적화Kafka는 여러 개의 컨슈머가 동일한 토픽을 소비할 때, 파티션을 컨슈머들에게 자동으로 할당한다. 이때 파티션 할당 전략이 중요한 역할을 한다. ➡️ 운영 환경에서는 컨슈머 그룹의 부하 분..

Kafka란?

🔍1. 이벤트 기반 아키텍처(Event-Driven Architecture)란?분산된 애플리케이션 서비스들이 이벤트를 기반으로 통신하고 서로의 동작을 야기하는 패턴을 이벤트 기반 아키텍처라고 한다.서비스들이 이벤트를 발행(publish)하고, 다른 서비스가 이를 구독(subscribe)하여 처리.Kafka, RabbitMQ, SQS, EventBridge 등과 같은 메시징 시스템을 통해 구현.⭐ 이벤트 기반 아키텍처를 사용하는 이유1️⃣ 서비스 간 결합도↓ → 각 서비스가 독립적으로 동작 가능 (확장성↑)2️⃣ 비동기 처리 → 빠른 응답 가능, 대량 트래픽 처리에 유리3️⃣ 확장성 & 유연성 → 새로운 기능 추가 시 기존 시스템에 영향 최소화  📌 2. Kafka란?Kafka는 대규모 데이터를 실시간..