Spring (core, boot, cloud, batch) 🌱
-
[스프링] 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 -
[패키징및배포] 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 -
[Spring] @Transactional
트랜잭션 격리 수준 (Isolation Level)DEFAULT : 기본 격리 수준READ_UNCOMMITED : 아직 커밋되지 않은 데이터를 읽을 수 있음READ_COMMITED : Dirty Read를 방지하기 위해 Commit된 데이터만 읽을 수 있음REPEATABLE READ : 트랜잭션이 완료될 때까지 조회한 모든 데이터에 shared lock이 걸리므로 트랜잭션이 종료될 때까지 다른 트랜잭션은 그 영역에 해당하는 데이터를 수정할 수 없음SERIALIZABLE : 엄격한 트랜잭션 격리수준, 완벽한 읽기 일관성 모드 제공, PHANTOM READ 상태가 발생하지 않지만 동시성 처리 성능이 급격히 떨어질 수 있음 트랜잭션 전파 옵션 (Propagation)어떤 트랜잭션이 동작중인 과정에서 다른 트랜..
2024.12.13 17:35
Git&Jira🛠️
ETC이지만 중요합니다 : )
-
[Nexus Repository] 로컬에서 사용해보기
nexus 서버에 만든 라이브러리 배포해보려고 한다 1. nexus 서버 도커로 설치 2. localhost:8081 접근후 admin 로그인 3. 필요한 Repository 세팅이 되어 있는지 확인한다 - 메뉴 : Settings > Repositories -> Create Repository 4. 개발한 라이브러리 배포 방법 1. Nexus 인증 설정 - 방법1) `~/.m2/settings.xml` 파일에 Nexus 자격증명 추가 - 방법2) 프로젝트 내 `settings.xml` 파일에 Nexus 자격증명 설정 => 프로젝트 내 `settings.xml` 참고2. 코드 수정 3. 버전 업데이트 - `pom.xml`의 `` 값 증가 4. 빌드 및 Nexus 배포 `..
2025.08.02 23:43 -
[maven] pom.xml 파일 컨벤션이 있는가
공식문서 : 태그 간 순서 컨벤션은 정해져 있다고 한다 https://maven.apache.org/developers/conventions/code.html Maven Code Style And Code Conventions – MavenMaven Code Style And Code Conventions This document describes the rules for how the sources should be formatted in order to improve consistency, readability and maintainability. Generic Code Style And Convention All working files (java, xml, others) shouldmaven.a..
2025.08.02 16:53 -
빌드/의존성관리도구 : maven, gradle
의존성 관리- 프로젝트가 사용하는 외부 라이브러리의 버전, 위치, 스코프를 관리하는 것- 빌드 도구가 의존성 트리를 계산해 필요한 라이브러리들을 자동으로 다운로드하고 클래스패스에 추가 용어- 저장소 (Repository) : Maven Central, JCenter, 회사 사내 Nexus/Articatory- 좌표 (Coordinates) : groupId:artifactId:version 형태의 의존성 식별- 스코프 (Scope) : compile, test, runtime 등 사용 범위 지정- 의존성 트리 (Dependency Tree) : 직접 추가한 라이브러리 + 전이(Transitive)의존성 포함한 계층 구조 BOM(Bill of Materials) 관리- 여러 라이브러리를 한 번에 버전 ..
2025.08.02 15:16
프로젝트를 진행하며 생각을 했다
-
[쀼] Spring Boot 2.x -> Spring Boot 3.x 마이그레이션 여정
스프링 부트 3.0 마이그레이션 가이드 (번역)https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide Spring Boot 3.0 Migration GuideSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-bootgithub.com1) Java 버전 17 이상으로 업그레이드 하기 - Spring Boot 3.x 은 더이상 Java8을 지원하지 않는다 2) 스프링 부트를 사용 가능한 최신 버전으로 업그레이..
2025.08.02 14:01 -
[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-servermysql -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
CS
-
[네트워크] 쿠키 방식과 세션 방식을 고민하는 이유 + 브라우저 간 쿠키 공유
쿠키 방식과 세션 방식을 고민하는 이유 쿠키 방식- 클라이언트에 저장되므로 상대적으로 취약함- 저장 위치 : 클라이언트 (브라우저)- 용량 제한 : 약 4KB- 확장성 : 서버 무관(클라이언트 저장) -> 확장성 좋음- 속도 : 서버 부담 적고, 빠름 - 세션 유지 : 브라우저에 저장되므로 오래 유지 가능- 실제 활용 : JWT 기반 토큰 인증 등 세션 방식 - 서버에 저장되어 보안성이 높음- 저장위치 : 서버 - 용량 제한 : 서버 메모리나 저장소 용량만큼- 확장성 : 서버 저장 -> 서버 간 세션 공유 필요 - 속도 : 서버 리소스 사용, 느릴 수 있음 - 세션 유지 : 일반적으로 일정 시간 후 만료됨- 실제 활용 : 로그인 상태 유지 등 진짜 중요하게 고려해야 하는 부분은 1. 로그인 상태를 유지..
2025.07.19 11:25 -
[쀼] 아 그래서 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 -
[쿠키🍪] 서드파티쿠키, 공격유형(중간자공격, XSS, CSRF)
Thrid-Party Cookie- 도메인과 스키마가 다르면, 같은 사이트에서 오지 않은 것으로 간주하고 이를 타사 쿠키라고 한다. - 도메인과 스키마가 사용자가 현재 보고 있는 브라우저 주소창에 표시된 URL과 일치하면, 쿠키는 페이지와 동일한 사이트에서 온 것으로 간주되며 이를 First-Party Cookie 라고 한다. Thrid Party Cookie 전송 예시- 한 사이트의 링크를 클릭하여 다른 사이트로 이동하는 경우- 페이지가 다른 사이트의 구성 요소를 임베드하는 경우 중간자 공격요청을 중간에서 가로채셔 변조하여 전달하는 공격 https://developer.mozilla.org/en-US/docs/Glossary/MitM MitM - MDN Web Docs Glossary: Definiti..
2025.02.14 09:41 -
[쿠키🍪] SameSite, Path, Domain 와 Request.credentials
쿠키HTTP 프로토콜이 무상태인 것을 보완하여 세션 관리, 개인화, 추적의 목적으로 사용되는 작은 데이터이다도메인당 최대 쿠키 수와 쿠키당 최대 크기를 제한하고 있다 쿠키 생성Set-Cookie : =Set-Cookie : =... 쿠키 제거- 영구쿠키 : Expires, Max-Age 속성 설정에 따라 만료일이 결정된다 - 세션쿠키 : Expires, Max-Age 는 현재 세션이 종료되면 삭제된다 쿠키 보안과 정책보안적인 이유로 브라우저는 쿠키를 어떻게 저장하고, 언제 전송할지에 대한 정책을 엄격하게 관리한다.교차 사이트 요청이 있을 때 쿠키가 자동으로 전송되지 않도록 제한을 두는 방식으로 보안을 강화한다.SameSite, Secure, Path, Domain 등의 쿠키 속성은 교차 사이트 요청에서 ..
2025.02.11 17:12 -
멀티스레딩 vs 비동기
멀티스레딩과 비동기는 모두 병렬성과 동시성을 처리하기 위한 개념이다.작동 방식, 사용하는 환경에서 차이가 있다.멀티스레딩 (Multithreading)멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 생성하여 병렬로 작업을 처리하는 방식이다.각 스레드는 독립적으로 실행되며, 서로 메모리를 공유한다.작동 방식CPU의 코어가 여러 스레드를 번갈아 실행하거나, 여러 코어에서 동시에 스레드를 실행하여 병렬 작업을 수행한다.스레드 간의 컨텍스트 스위칭(작업 전환)이 발생하므로 일부 오버헤드가 존재한다.주로 CPU 바운드 작업(계산량이 많은 작업)에 적합하다. 사용 예시대용량 데이터 처리 (예: 데이터 분석, 이미지 렌더링).서버에서 동시에 여러 요청을 처리할 때(스레드 풀 방식). 장점CPU 코어를 최대한 활용하..
2024.12.26 10:39
Insight💡
🎁에러 - 담에는 빠르게 헤어지자
-
[maven] Maven Shade Plugin 로 fat jar 만들때 rewrite, transformers, filters 작업을 수행한다
-
[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]