전체 글 268

데이터 통합 조회 방법 설계

📌 문제MSA에서는 각 서비스가 독립적으로 DB를 관리하기 때문에, 한 서비스에서 다른 서비스의 데이터를 직접적으로 조회할 수 없다.예를 들어, 주문 목록을 조회할 때, 주문 아이템정보 제공을 위해 상품 정보를 JOIN으로 가져오지 못 하고 주문 아이템 마다 상품 서비스에 요청을 보내야 한다.이 과정에서 여러 번의 API 호출이 발생하기에 성능 저하 우려가 있었다. 📌 방법 비교✅ 1. 주문 아이템마다 상품 API 호출주문 1개 → 주문 아이템1개 마다 상품 서비스 API를 호출하여 상품 정보를 받아오고 이를 합친다.✔ 장점간단하고 직관적인 방식❌ 단점주문마다 상품 정보를 별도로 API 호출하기 때문에 네트워크 요청이 많아져 성능이 저하될 수 있음. ✅ 2. 캐시(redis)를 이용해 주문 정보 저장..

MSA 환경에서 인증/토큰 재요청

📌 문제JWT 토큰이 만료되었을 때 다시 요청을 처리하는 방법은 Refresh Token을 활용한 재발급 방식이 일반적이다.예를 들어, 게시글 작성 중 토큰이 만료 되었을 때는 사용자가 재로그인/수동 로그인 시간 연장 하지 않고 refresh 처리가 되어야 한다!!✅ 1. MSA 환경에서 JWT 인증 흐름1️⃣ 사용자 로그인 → 인증 서버(Auth Service)에서 JWT 액세스 토큰과 리프레시 토큰 발급액세스 토큰: 비교적 짧은 만료 시간 (예: 30분~1시간)리프레시 토큰: 비교적 긴 만료 시간 (예: 7일~30일)클라이언트는 액세스 토큰을 HTTP 헤더에 포함하여 API 요청2️⃣ 게이트웨이(API Gateway)에서 JWT 토큰 검증 후 해당 마이크로서비스(Post Service 등)로 요청 ..

JSP에서 JavaScript 모듈 사용하기

📌 JSP에서 JavaScript 모듈 사용하기JSP에서 JavaScript 모듈을 사용하려면 몇 가지 주의해야 할 점이 있다. 특히, 를 사용하면 된다.common.js 파일이 로드되며, 전역 스코프에서 사용 가능. 하지만 ES6 모듈을 사용하면 이렇게 로드할 수 없다. 📌 2. ES6 모듈(export / import) 사용 방법ES6 모듈을 사용하려면 ✔️ 모듈을 사용하면 import 키워드를 통해 특정 함수만 가져올 수 있다. ❌ 이클립스에서는 ✔️ JSP에서 없이도 ES6 모듈처럼 활용할 수 있다. ✔️ 이클립스에서도 코드 색상이 정상적으로 표시됐다.

JavaScript 코드 실행 순서 & 실행 타이밍 제어

📌 JavaScript 코드 실행 순서 & 실행 타이밍 제어 방법JavaScript는 브라우저에서 HTML을 해석하면서 실행된다! 그런데 코드의 실행 순서를 잘못 이해하면 예상과 다르게 동작하거나 오류가 발생할 수도 있다. 😵그래서 JavaScript의 실행 순서와 실행 타이밍을 제어하는 방법을 정리해보았다.✅ 1. JavaScript 코드 실행 순서JavaScript는 HTML을 위에서 아래로 해석하면서 실행된다.   🔹 기본적인 실행 흐름1️⃣ HTML(DOM) 위에서 아래로 해석2️⃣  🔹 실행 결과1️⃣ head 내부 스크립트 실행2️⃣ body 내부 script 실행3️⃣ document ready 실행 (DOM 완성 후)4️⃣ window.onload 실행 (이미지..

조회 속도 개선 (쿼리최적화)

🎯 문제쪽지함 기능 개발 후 쪽지 목록을 조회 할 때 데이터가 적을 땐 문제를 느끼지 못 했는데, 10만건 이상 데이터 삽입 후 테스트 했을 때 조회 속도가 느려졌다. 조회 속도를 개선해보자!! 😊전체 조회 개선, 검색 개선 -> 페이징 개선 으로 진행함.급하면 결론만 보기!!📌 화면 (보낸 쪽지 목록)✔ 페이지 진입 시 최신순으로 조회.✔ 검색(필터)조건에 따라 조회.✔ 페이지 이동 시 한 페이지 개수 설정만큼 가져옴. 📌 속도 측정 방법✅ 애플리케이션 개발자 도구 네트워크 응답을 측정조회 개수, 검색 조건을 설정할 수 있는데, 조회 개수 10개 고정하고 전체 조회와 수신자(받은 사람) 검색 시간을 측정했다.내가 보낸 쪽지 10만건 + 다른 쪽지 x내가 보낸 쪽지 20만건 + 다른 쪽지 10만건..

트러블슈팅 21:30:35

SSL이란? (Secure Sockets Layer)

🔍 SSL이란? (Secure Sockets Layer)SSL(Secure Sockets Layer)은 인터넷에서 데이터를 암호화하여 안전하게 전송하기 위한 보안 프로토콜이다! 🔒 ✅ 기본 개념클라이언트(웹 브라우저)와 서버 간의 데이터 전송을 암호화하여 해커가 중간에서 정보를 훔쳐보는 걸 방지하는 기술현재는 SSL의 후속 버전인 TLS(Transport Layer Security)가 사용되고 있지만, 관행적으로 SSL이라는 용어를 계속 사용📌 1. SSL의 핵심 기능✅ 1-1. 데이터 암호화 (Encryption)서버와 클라이언트 간 주고받는 데이터를 암호화해서 제3자가 내용을 볼 수 없도록 보호✅ 1-2. 데이터 무결성 (Integrity)데이터가 전송 중 변경되지 않도록 보호 (해커가 데이터를..

study/보안 2025.03.24

환경 변수 관리 (@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