반응형

Spring 27

Spring Security 기반 CSRF 공격 실습 및 방어 방법 정리

유튜브 영상도 촬영하였습니다. 아래 영상을 참고하면서 블로그글을 참고해주세요. CSRF (Cross-Site Request Forgery)란? CSRF (Cross-Site Request Forgery) 사이트 간 요청 위조는 웹 애플리케이션의 취약점을 악용하는 공격 방식 중 하나로, 사용자가 의도하지 않은 요청을 수행하게 만드는 공격입니다. CSRF 공격의 목적은 사용자가 웹 애플리케이션에서 인증된 세션을 가지고 있는 상태에서, 공격자가 의도한 행동을 사용자로 하여금 실행하게 하는 것입니다. 이는 사용자가 현재 로그인한 세션을 이용하여 악의적인 요청이 서버에 전달되도록 하여, 사용자의 의도와 무관하게 데이터 변경, 거래 발생 등의 작업이 수행되게 만듭니다. CSRF(Cross-Site Requ..

Spring 2025.05.04

[QueryDSL 오류]Springboot 3.0이상에서 QueryDslConfig Cannot resolve constructor 'JPAQueryFactory(EntityManager)'

발생 상황Springboot 3.0 에서 QueryDSL을 위해 build.gradle과 queryDsl configuration을 다음과 같이 설정했을 때 `JPAQueryFactory` 생성자를 찾을 수 없는 에러가 발생합니다.dependencies { implementation "com.querydsl:querydsl-jpa:5.0.0" annotationProcessor( "javax.persistence:javax.persistence-api", "javax.annotation:javax.annotation-api", "com.querydsl:querydsl-apt:5.0.0:jpa" )}import com.querydsl...

Spring 2025.02.21

[JPA] queryDSL 구조를 알아보자. (repository, repositoryCustom, repositoryImpl)

jpa 공식 같은 repository, repositoryCustom, repositoryImpl 구조repository, repositoryCustom, repositoryImpl 구조 해당 포스팅에서는 하나의 Repository를 통해 JpaRepository의 기능과 Querydsl의 기능을 사용하는 CustomRepository를 모두 사용할 수 있는, 일종의 공식처럼 쓰이는 'repository, repositoryCustom, repositoryImpl 구조'에 대해서 살펴보겠습니다. repository 상속 구조repository 상속 구조해당 구조를 코드로 보면 아래와 같은데요.크게 JpaRepository를 extends 하는 Repository 인터페이스에 CustomRepository..

Spring 2025.02.21

[JPA] 현업에서 복잡한 쿼리를 사용할때 JPQL,Native Query,MyBatis,QueryDSL 무엇을 써야할까?

1. JPA + JPQL 사용 (현재 코드 방식)장점JPA의 객체 매핑을 그대로 활용 가능 → 유지보수가 쉬움.JPQL이므로 DBMS 독립적 → 다른 DB로 변경 시 대응이 쉬움.DTO 변환을 자동으로 해줌 (new DTO()).단점복잡한 SQL을 JPQL로 작성하기 어려움 → 특히, CASE, GROUP BY, SUM(), UNION, JOIN이 많을 때 불편.특정 DB 함수 (DATE_FORMAT, IFNULL) 등은 JPQL에서 지원이 제한적.언제 쓰면 좋을까?복잡한 SQL이 필요 없고, 유지보수성과 JPA의 장점을 활용하고 싶을 때. 2. Native Query 사용 (JPQL 대신)장점SQL 최적화 가능 → 실행 계획 튜닝, INDEX 최적화, DBMS별 최적 SQL 작성 가능.복잡한 JOIN,..

Spring 2025.02.21

[스프링] 다형성 SOLID , DI, IoC 란? - 스프링 프레임워크 강의 1강

▶ 다형성이란? 자바에서 **다형성(Polymorphism)**은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 하나의 객체가 여러 가지 형태를 가질 수 있는 능력을 의미합니다. 다형성은 코드의 재사용성과 유연성을 높이는 데 기여하며, 크게 두 가지로 구분됩니다: **컴파일 시간 다형성(Compile-time Polymorphism)**과 런타임 다형성(Runtime Polymorphism). 각각의 의미와 예시는 다음과 같습니다.1. 컴파일 시간 다형성 (Compile-time Polymorphism)이 유형의 다형성은 **오버로딩(Overloading)**을 통해 구현됩니다. 동일한 메서드 이름을 사용하되, 매개변수의 타입이나 개수를 다르게 정의함으로써 다형성을 실현합니다. 컴파일 시점에 어떤 메서..

Spring 2024.10.08

[스프링부트] WebConfig사용안하고 파일다운로드 API로 변경하였더니 계속 200 OK나오는 현상 (304가 왜 안나오는것일까?)

나는 기존에 webConfig에서 설정하여 정적 리소스를 직접 가져오게 하였다가 S3 스토리지(NCP Object 스토리지로) 변경작업을 해야했기에 파일 다운로드형식의 api로 변경하였음. 변경한 소스는 아래와 같다.  // ETag와 Last-Modified 값 가져오기String eTag = s3Object.getObjectMetadata().getETag();long lastModified = s3Object.getObjectMetadata().getLastModified().getTime();return ResponseEntity.ok() .contentType(MediaType.APPLICATION_OCTET_STREAM) .header(HttpHeaders.CONTEN..

Spring 2024.08.22

[스프링부트] 멀티인증 AuthenticationManager + Stackoverflow feat. UserDetailsService 무한재귀오류 해결

나는 REST-API용 로그인을 구축해놓은 상태에서 어드민 페이지를 추가로 만들어야 하는 상황이였다.보통 admin과 rest-api용 서버는 따로 나누지만 나같은경우 서버비용 절약 및 규모가 작은 프로젝트였기에 한곳에서 진행하려 하였다.문제는 스프링부트에서 jwt+security로 rest-api용 (회원로그인) 기능을 구현해 놓은 상태에서 추가로 form-login 어드민을 시큐리티로 기능을 같이 넣어야 되는 상황이 온것이다. 그렇기에 userDetailsService를 2개를 구축해야 하는 상황이였다. ( userDetailsService를 구체화하여 로그인을 커스텀함) 어드민로그인같은경우 admin테이블에서 조회를 해야했으며 일반 로그인은 user테이블에서 조회를했어야했다. 에초에 작용해야하는 m..

Spring 2024.08.07

[swagger Failed to fetch 오류] 운영서버 URL scheme must be "http" or "https" for CORS request

회사에서 spring boot와 open-api swagger를 사용하고 있다.이번에 새로운 프로젝트에 1.6.8 버전의 open-api를 추가했는데 api 실행 시 아래와 같은 오류가 발생했다.로컬에서는 정상 작동하는데 aws에 올린 서버에서 문제가 되었다. (local - http / aws 서버 - https)Failed to fetch.Possible Reasons:CORSNetwork FailureURL scheme must be "http" or "https" for CORS request.swagger cors 오류확인해보니 요청 URL이 http 다. 내가 실행한서버는 https인데아래를 보면 서버 url과 swagger 요청 url 이 다른걸 확인할 수 있다swagger 요청 url이 h..

Spring 2024.08.05

[Spring Boot] 외장 톰캣에 WAR 배포하는 오류 톰캣을 돌아가는데 스프링실행안됨 오류 해결

Spring Boot 외장 톰캣에 WAR 배포하는 방법(+ 404 발생하는 원인)Jan92 2024. 6. 26. 23:30 Spring Boot 외장 톰캣에 WAR 배포하는 방법(+ 404 발생하는 원인) 스프링부트 프로젝트의 경우 일반적으로 내장된 톰캣 서버를 통해 독립 실행형 애플리케이션을 생성하여 편리하게 배포하고 운영할 수 있다는 장점이 있습니다.하지만 특수한 경우 jar 파일이 아닌 war 파일로 빌드하여 외장 톰캣에 직접 애플리케이션을 배포해야 하는 경우도 있는데요. 해당 포스팅에서는 Spring Boot 애플리케이션을 war 파일로 빌드하고 이를 외장 톰캣에 배포하는 과정을 정리하였습니다.+ 추가적으로 배포 과정에서 404 에러가 계속해서 발생하였는데 그 원인도 함께 살펴보겠습니다. ***..

Spring 2024.08.01

[IntelliJ] No data sources are configured to run this SQL and provide advanced code assistance. (MyBatis 인텔리제이 인식)

IntelliJ에서 MyBatis같은 SQL mapper 기반의 framework를 사용할때 SQL mapper xml 파일에서 'No data source are configured to run this SQL and provide advanced code assistance.' 이나 'SQL dialect is not configured.' 라는 warning이 검출될 수 있다. Warning(경고) 이므로 무시해도 개발하고 실행하는데 문제는 없다.하지만 IntelliJ에 SQL dialect와 data source를 설정해주면 해당 database에 대한 코드 검증, SQL 문법 검사와 자동 완성 등의 기능이 지원된다. 별도 설정 없이 경고만 끄는 방법부터 SQL dialect, data sourc..

Spring 2024.06.04
반응형