Springboot 20

[Spring] Spring AOP(Aspect-Oriented Programming)

핵심 기능(주관심사)과 공통 기능(보조 관심사, 부가기능)을 분리하여 코드의 재사용성, 유지보수성, 가독성을 향상시키는 방법 주 관심사 : 실제 로직 (ADD 함수 등)보조 관심사 : 보안, 로그, 트랜잭션 등 중간에 'Proxy' 객체를 두어, 보조관심사를 자동으로 끼워 넣는다. AOP 동작 흐름 (Spring AOP 기준)클라이언트가 메서드 호출 (예: ADD(x, y))Proxy 객체가 대신 호출을 가로챔보조관심사 로직 실행 (예: 로그 찍기, 트랜잭션 시작 등)실제 핵심 로직(ADD()) 실행결과를 기반으로 보조관심사 마무리 작업 (예: 트랜잭션 커밋, 로그 종료 등)클라이언트에게 결과 반환 주 사용 목적로깅 (Logging)메서드 실행 시점, 매개변수, 리턴 값 등을 기록보안 (Security..

Springboot 2025.04.16

[Spring] Filter, Interceptor, AOP의 차이점

1. Filter (javax.servlet.Filter)어디서?서블릿 이전, 가장 바깥단 (DispatcherServlet 도달 전)언제?요청이 WAS(서버)에 도달하자마자 실행됨 (ServletContainer 수준)예시인코딩 설정, XSS 방지, 인증 체크 등설정 방법web.xml 또는 @WebFilter단점스프링 외부에서 동작, 스프링 빈 접근 어려움 public class MyFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletE..

Springboot 2025.04.16

[Security] Spring Security의 흐름

앱 실행 시 Spring Boot가 @Configuration, @EnableWebSecurity에 의해 WebSecurityConfig 를 자동 실행1. corsConfigurationSource()CORS(Cross-Origin Resource Sharing) 설정 도메인, 포트, 프로토콜 을 기준으로 HTTP 요청을 보내는 것을 허용할지 제어하는 보안 메커니즘CSRF, XSS 같은 공격을 막기 위해 반드시 구현하여야 한다 2-1. authenticationManager()인증을 처리하는 매니저내부적으로 UserDetailsService를 통해 사용자 정보를 불러옴로그인 시 JwtAuthenticationFilter에서 authenticationManager를 사용해서 인증 처리함 JwtAuthor..

Springboot 2025.04.02

[Springboot] Client-Server 구조 정리

Client (사용자)URL 입력, 링크 클릭 등 다양한 이벤트를 통해 HTTPS(443) 요청 발생브라우저는 요청을 도메인 기반으로 DNS 조회 → IP 주소로 전환443 포트를 리스닝 중인 Apache HTTP Server로 전달 Apache HTTP Server (httpd) HTTPS 요청을 수신 (443 포트)SSL 처리 (HTTPS 복호화 → 평문 HTTP)정적 리소스 제공 (HTML, JS, 이미지 등 직접 응답 가능)동적 요청은 리버스 프록시로 Tomcat에 전달(보통 ProxyPass, ProxyPassReverse 사용) Apache Tomcat (WAS)Apache로부터 들어온 요청을 Tomcat의 Connector가 수신 (8080, 8009 등)Connector는 요청을 서블릿 컨..

Springboot 2025.03.26

[Springboot] JWT 0.15.2

이번 프로젝트에서는 최신 기술스택을 사용하기로 하였기에,이전에는 jwt 0.11.5 버전을 사용하였으나 이번에는 2024년 기준 최신 버전인 0.15.2 버전을 사용하기로 했다. maven Repository: https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api gradle implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.12.5' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.12.5' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-ja..

Springboot 2024.06.22

[Springboot] QueryDSL을 활용한 물물교환 경매 시스템 개발기

프로젝트 배경물물교환 프로젝트를 진행하면서 경매 시스템을 추가하게 되었다.경매 시스템에서는 하한가 설정이 필수적인데, 팀원들과 많은 고민 끝에 등록된 물건의 가격을 랜덤한 유저들이 평가하게 하여 그 평균값을 하한가로 적용하는 방식을 선택하였다.이 과정에서 복잡한 쿼리가 필요했고, 처음으로 QueryDSL을 도입하게 되었다.QueryDSL이란?QueryDSL은 Java 기반의 타입 안전한 쿼리 작성을 위한 프레임워크이다.기존 JPQL이나 Native Query의 단점을 보완하여 다음과 같은 장점을 제공한다.QueryDSL의 주요 장점타입 안전성: 컴파일 타임에 쿼리 오류를 잡아낼 수 있다가독성: SQL과 유사한 문법으로 직관적인 쿼리 작성이 가능하다IDE 지원: 자동 완성과 리팩토링 기능을 완벽하게 지원한..

Springboot 2023.08.08

[Springboot] S3에 이미지 올리기

S3에서 버킷 생성 및 IAM 설정을 완료한 후 작성해야 한다. gradle.build implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' application-security.properties # mySql spring.datasource.url=jdbc:mysql://localhost:3306/{DB명} spring.datasource.username={유저이름} spring.datasource.password={패스워드} #AWS S3 cloud.aws.credentials.accessKey={엑세스키 입력} cloud.aws.credentials.secretKey={시크릿키 입력} cloud.aws.s..

Springboot 2023.08.01

[Springboot] UnsatisfiedDependencyException

처음보는 에러가 발생해서 찾아봤다. UnsatisfiedDependencyException은 빈 객체 생성 과정에서 의존주입을 하게 되는데, 필드에 해당하는 의존관계를 만족시킬 수 없을때 발생하는 예외였다. 에러코드를 읽어보니 imageRepository가 JPA의 관리 대상이 아니라서 발생한다고 했다. JpaRepository의 제네릭 타입은 Entity 클래스와 해당 Entity의 기본키(PK) 타입이어야 한다. (ex: JpaRepository) 하지만 자세히 몰랐었기에 여러 이미지를 리스트에 넣은 후 저장하고 싶어서 JpaRepository 로 생성했기에 발생했던 에러였다. 이후에 추가적으로 수정하여 무사히 작동하였다.

Springboot 2023.08.01

[Springboot] OneToMany VS ManyToOne

Springboot에서 관계는 1:1, 1:N, N:1, N:M 관계가 있다. 이 중 OneToMany는 1:N을, ManyToOne은 N:1을 표현하는 어노테이션이다. 이 두개는 외래키의 위치가 다르며 게시글과 댓글로 예를 들자면 OneToMany는 게시글 안에 댓글을 포함시키는 것이고 외래키는 댓글이 가지게 된다. ManyToOne은 댓글이 하나의 게시글을 참조하는 것(가리키는 것)이며 외래키는 게시글이 가진다. OneToMany 외래키를 N에서 관리하지만 1에서 N쪽을 제어(CRUD)할 수 있기에 헷갈릴 수 있다. 테이블의 특정 레코드 삭제 및 업데이트시 모든 레코드를 확인해야 하는 문제가 발생할 수 있다. 연관관계 관리를 위해 추가로 UPDATE SQL이 실행된다 OneToMany 외래키를 1에서..

Springboot 2023.07.30