백엔드☕
-
[스프링] Spring AOP 와 동작 원리
관련 용어Aspect : 공통 관심사 (로깅, 보안, 트랜잭션 처리 등)로서 애플리케이션 전반에 걸쳐 적용될 수 있는 모듈JoinPoint : AOP에서 Aspect를 적용할 수 있는 특정 지점Pointcut : JoinPoint를 선택하는 표현식Advice : Join Point에서 실제로 실행될 동작을 정의하는 코드 (Before, After Returing, After Throwing, Around, Introduction) AOP 동작 원리 1. 프록시 객체 생성Spring AOP는 실제 비즈니스 로직을 처리하는 객체(Target Object)를 감싸는 프록시 객체를 생성한다.이 프록시 객체는 대상 객체의 메소드 호출을 가로채고, 필요시 Aspect(부가적인 기능)를 실행한다.프록시는 JDK 동적..
2025.01.03 11:11 -
[JAVA] Random vs SecureRandom vs ThreadLocalRandom
난수난수는 무작위성, 예측 불가능성, 재현 불가능성 성질이 있다. 무작위성이란 수열의 비트 분포가 균등하고 0과 1이 등장하는 빈도가 비슷한 것을 의미한다. 예측 불가능성이란 수열의 일부를 보고 다음 비트를 예상할 수 없어야 함을 의미한다.재현 불가능성이란 같은 수열을 똑같이 재현할 수 없다는 성질이다. 이는 하드웨어도 동원되어야 한다. 무작위성만 가지는 난수를 약한 의사 난수, 예측 불가능성을 가지는 난수를 강한 의사 난수, 재현 불가능성을 가지는 난수를 진성 난수라고 한다. 진성 난수(True Random Number)와 의사 난수(유사난수; Pseudorandom Number)진성 난수란 자연적이고 예측 불가능한 물리적 현상(엔트로피 소스)에서 생성된 난수로 완전히 랜덤하고 재현이 불가능하다..
2024.12.26 12:42 -
[패키징및배포] Jar vs War
구분JAR (Java ARchive)WAR (Web ARchive)용도자바 애플리케이션 및 라이브러리 패키징자바 웹 애플리케이션 패키징주요 내용자바 클래스 파일, 리소스 파일 (이미지, 설정 파일 등)웹 애플리케이션의 모든 파일 (서블릿, JSP, HTML 등)실행 방법java -jar .jar 웹 서버에 배포하여 실행 (Tomcat)구조META-INF, 자바 클래스 파일 등WEB-INF(설정 파일 및 서블릿 매핑), 리소스 파일 등 WAR JSP, Thymeleaf 의 활용React 파일을 정적 파일로 만들어서 포함시켜 배포할 수 있음
2024.12.21 15:51
Git&Jira🛠️
프로젝트를 진행하며 생각을 했다
-
[AWS] EC2 삽질: AMI, 볼륨, 스냅샷 그리고 인스턴스 종료 방지
EC2 삽질 기록입니다.. 배경 설명 + 사건 발단 원인동일한 VPC 내에 EC2(A), EC2(B), EC2(C-모니터링) 가 존재하고 A, B는 서브넷(a)에 C는 서브넷(b)에 위치했었다 서브넷(a)는 AZ(1)에 위치했었고 서브넷(b)는 AZ(2)에 위치해있었다 즉, 서브넷(a)와 서브넷(b)는 인터 AZ 통신 요금이 발생했다 (1GB당 약 $0.01) 사실 원래 목적은 A, B 서버가 제대로 동작하고 있는지 C에서 확인해야 하는 것이기에 하나의 AZ가 장애가 나더라도 다른 AZ는 영향을 받지 않도록 하여 C에서 감지하고 문제있어요!! 라고 알림을 주는 것을 원했는데 I'm broke 의 이유로 서브넷(a) 에 를 두고 싶어졌다 ㅎ AZ를 직접 옮길 수가 없다 따라서, 아래와 같은 작업을 ..
2025.03.23 20:33 -
[쀼] 백엔드 서버, 데이터베이스 서버 분리 (MySQL 직접 운영)
동일한 서버 내에 백엔드, 데이터베이스가 위치하고 있었다 임시로 Docker로 올려놓고 사용하고 있었는데 ec2 분리하는 김에 AWS RDS는 비싸니 직접 설치하여 사용하기로 했다 백엔드- mysql에 접근할 때 사용할 유저이름, 패스워드 설정spring.datasource.url=jdbc:mysql://:3306/spring.datasource.username=spring.datasource.password= MySQL 설치 1. ec2 생성2. MySQL 설치 sudo apt updatesudo apt install mysql-clientmysql -h -u -p 3. MySQL 보안 설정 실행mysql_secure_installation VALIDATE PASSWORD COMPONENT 사용 ..
2025.02.21 12:05 -
[쀼] S3에 업로드한 사진 : 이미지 핫링크 방지 과정 (3)
자 어디가 문제인지 확인해보자 가설1. CloudFront-Policy, CloudFront-Signature, CloudFront-Key-Pair-Id 를 생성하는 로직이 잘못되었을 것이다. ⚠️ 쿠키를 설정하여 Postman으로 요청을 보내보는데 누락된 키 쌍 ID 쿼리 매개 변수 또는 쿠키 값 이라는 메시지가 리턴되었다 🧰 개인키를 로드하는 코드에서 외부 라이브러리(Bouncy Castle)를 사용하여 PEM파일을 읽어오도록 코드를 변경하였다 🧰 직접 구현하였으나 =을 _로 변경하는 등 요구사항이 많아 CloudFrontUtilities (getCookiesForCustomPolicy) 를 사용하기로 했다 API 래퍼런스 : CloudFrontUtiliteshttps://sdk.amazon..
2025.02.11 12:09 -
[쀼] S3에 업로드한 사진 : 이미지 핫링크 방지 과정 (2)
핫링크가 무엇이고 왜 방지하려고 하는가 핫링킹은 다른 호스팅된 서버에서 파일을 다운로드하지 않고 링크하는 행위이다해당 파일을 핫링킹하여 사용자의 서버에 호스팅하면서 출처를 제공하지 않는다 쀼에 설정이 필요한 이유 쀼는 추억이 담긴 개인 사진을 업로드할 수 있는 프로젝트이기 때문에 무엇보다 이미지에 대한 보안이 필요하다 어떻게 방지할 수 있는가 1. CloudFront Signed URL + 캐시 유효 시간 설정 혹은 CloudFront Signed Cookie 혹은 CloudFront WAF에서 Referer 헤더 검증 2. 오리진에서 직접 접근 차단 (CloudFront만 거치도록 제한) 3번은 저번 글에서 S3에 CloudFront만 접근할 수 있도록 하였다 2번은 1번을 진행한다면 개선이 되는 부..
2025.02.10 12:52 -
[쀼] S3에 업로드한 사진 : S3 퍼블릭 엑세스 차단 활성화(1)
기존 구현 상황에 대해 설명해보자면, 1. IAM 사용자에게 S3FullAccess 권한을 주었다 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "s3-object-lambda:*" ], "Resource": "*" } ]}2. 퍼블릭 액세스 차단을 푼 채 S3 버킷을 생성했다 3. 스프링 부트 애플리케이션에 아래와 같은 의존성을 추가하고 설정을 하였다 implementation group: 'com.amazonaws', name: ..
2025.01.12 17:23
프론트
-
[CSS] 직면하며 배우는 CSS (1) : overflow, position 속성
Overflowoverflow-x : 가로 영역이 넘칠 때 어떻게 할 것인가overflow-y : 세로 영역이 넘칠 때 어떻게 할 것인가 속성의 종류에는 5가지가 있다 1. visible블록 수준을 벗어난다 할지라도 다 보여준다스크롤 없음2.hidden블록 수준을 벗어나면 숨긴다스크롤 바 없음 3. clip클립과 숨김의 차이점은 클립 키워드가 프로그래밍 방식 스크롤을 포함한 모든 스크롤도 금지한다는 것이다. 4. scoll요소의 패딩 상자 내부에 가로로 맞도록 필요한 경우 오버플로 콘텐츠가 잘립니다. 브라우저는 콘텐츠가 실제로 잘리는지 여부에 관계없이 가로 방향으로 스크롤 막대를 표시합니다. (이렇게 하면 내용이 변경될 때 스크롤 막대가 나타나거나 사라지는 것을 방지할 수 있습니다.) 5. auto내용..
2024.09.02 18:29 -
[리액트] 공식문서 읽기 : useContext
- Props Drilling 피하기 위해 context를 사용해 데이터를 전달하는 과정이 필요하다 Context 사용 전에 먼저 고려해야 할 사항1. Props 전달2. 컴포넌트를 추출하여 JSX를 Children으로 전달 Context 적합한 사용 예시 1. 테마 지정 : 최상위에서 조정2. 현재 계정 정보3. 라우팅 정보4. reducer를 context와 함께 사용 문제 상황 예시)export default function Section({children}) { return ( {children} );} Context 사용 예시) - Heading 이Context에서 Level 정보를 알 수 있도록 함export default function Hea..
2024.07.15 09:16 -
Webpack ?
Webpack자바스크립트 애플리케이션의 모듈 번들러로 사용되는 도구 하나 이상의 진입점에서 내부적으로 종속성 그래프를 구축한 다음프로젝트에서 사용하는 모든 자바스크립트 파일을 하나 또는 여러 개의 번들 파일로 결합함 - entry내부 종속성 그래프를 시작하기 위해 웹팩이 사용해야 하는 모듈Webpack은 진입점이 의존하는 다른 모듈과 라이브러리를 파악함 기본값 : ./src/index.jsmodule.exports = { entry: './path/to/my/entry/file.js',}; - outputwebpack이 생성한 번들을 내보낼 위치와 이러한 파일의 이름을 지정하는 방법기본값 : ./dist/main.jsconst path = require('path');module.exports = {..
2024.07.03 17:51
CS
-
[운영체제] 운영체제에서 페이지 교체 알고리즘(Page Replacement Algorithm) 중 LRU (Least Recently Used
FIFO는 가장 오래된 페이지를 제거하지만, 최근에 자주 사용된 페이지일 수도 있습니다구현이 단순하여 빠르게 적용할 수 있습니다. 단점은 Belady's Anomaly 현상이 발생할 수 있습니다. 캐시 히트율이 낮아질 수 있습니다. LRU는 가장 오랫동안 사용되지 않은 페이지를 제거함으로써 캐시 효율성이 높습니다.매번 최근 사용 기록을 업데이트해야 하므로 페이지 교체 비용이 더 높습니다. 빠른 응답이 필요한 캐시 시스템에서는 LRU가 더 적합하고 제한된 메모리를 단순하게 관리해야 하는 경우 FIFO가 적절합니다.
2025.03.20 15:53 -
[운영체제] 멀티프로세싱과 멀티스레딩의 차이를 설명하고, 각각의 장단점을 말해주세요
멀티프로세싱은 독립적인 여러 프로세스를 생성하여 작업을 수행하는 방식으로 각 프로세스는 메모리를 따로 가지고 있어 안정성이 높지만, IPC가 필요하고 Context Switching 비용이 큽니다 반면에, 멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드가 실행되는 방식입니다. 스레드들은 같은 메모리 공간 (Code, Data, Stack, Heap)을 공유하므로 Context Switching 비용이 적고 자원 활용이 효율적입니다. 하지만, 동기화 문제와 하나의 스레드 오류가 전체 프로세스를 종료시킬 위험이 있습니다. Nginx 는 멀티프로세싱을 활용해 요청을 분배하며, Spring Boot 웹 애플리케이션은 멀티스레딩을 사용해 동시 요청을 처리합니다. 따라서, 높은 안정성이 필요한 경우 멀티 프로..
2025.03.20 15:45 -
[쀼] 아 그래서 CORS가 뭐에요 : 개념 + 설정예시
(개념과 동작 원리를 정확히 몰라서) 수많은 억까를 당했고구글링으로 Mdn 문서를 찾아 이해한 후 해결함 (역시 정식대로 가야 함)발견했던 cors 핵심 개념을 적어보고자 한다 CORSCORS는 브라우저가 자신의 출처가 아닌 다른 어떤 출처로부터 자원을 로딩하는 것을 허용하도록 서버가 허가 해주는 HTTP 헤더 기반 메커니즘이다. CORS가 동작하는 세가지 시나리오 1. Simple RequestPreflight Request 요청없이 서버에 직행으로 본 요청을 보낸 후, 서버가 이에 대한 응답의 헤더에 Access-Control-Allow-Origin 헤더를 보내주면 브라우저가 CORS 정책 위반 여부를 검사한다. 1) 요청의 메소드는 GET, HEAD, POST 중 하나다 2) Accept, Ac..
2025.02.14 11:49
ProblemSolving💯
-
[코드트리] 스승의 은혜2
아이디어 N명의 학생에게 B만큼의 예산으로 선물을 주려고 하는데 한 학생의 선물만 반값으로 할인받을 수 있다 반값 할인할 학생을 하나 선택한 다음에 가격이 낮은 순서대로 B 예산 전까지 확인하여 선물을 준다 소스코드 import java.io.*;import java.util.*;public class Main { static int[] price; public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new..
2025.02.07 17:31 -
[프로그래머스] 디스크 컨트롤러
문제 요약 - 문제https://school.programmers.co.kr/learn/courses/30/lessons/42627 아이디어 시간에 대한 처리? 소스코드 import java.util.*;class Solution { static int JOB_SIZE; public int solution(int[][] jobs) { // 요청_시각 작업_소요_시간 JOB_SIZE = jobs.length; List arr = new ArrayList(); for(int i = 0; i x.reqTime)); // 요청 빨리 온 순서대로 PriorityQ..
2025.02.04 18:11 -
[프로그래머스] 가장 큰 수
문제 요약 - 문제https://school.programmers.co.kr/learn/courses/30/lessons/42746# 아이디어 단순하게 A + B 랑 B + A 중 뭐가 더 큰지 확인해서 sort하면 되는 문제였다 소스코드 import java.util.*;public class Solution { public String solution(int[] numbers) { String[] arr = new String[numbers.length]; for (int i = 0; i (o2 + o1).compareTo(o1 + o2)); if (arr[0].eq..
2025.02.04 14:25
🎁에러 - 담에는 빠르게 헤어지자
-
[Grafana] prometheus 연동시 origin 에러
-
[프론트앤드] Vite : process not defined, env 파일 읽기
-
[백엔드 - 스프링부트] 2025-01-06 12:08:59.129 WARN 13000 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
-
[swagger] Failed to fetch. Possible Reasons: CORS, Network Failure, URL scheme must be "http" or "https" for CORS request