2025/03 17

본캠프 : 어노테이션 정리_freship project

1. Spring  Boot  관련 어노테이션@SpringBootApplicationSpring Boot 애플리케이션의 진입점. 자동 설정, 컴포넌트 스캔을 포함@ComponentSpring이 관리하는 빈(Bean)으로 등록하는 기본 어노테이션@Service, @Repository, @Controller의 부모 개념@ComponentScan특정 패키지를 스캔하여 Bean으로 등록@Bean개발자가 직접 Bean을 생성할 때 사용@Configuration 클래스 내에서 선언하여 객체를 관리 가능@Configuration해당 클래스를 설정(Configuration) 클래스로 지정@Bean 메서드를 포함하여 Bean을 등록할 때 사용@Value("${jwt.secret.key}")설정 파일(application..

개발/부트캠프 2025.03.28

본캠프 : @EnableJpaAuditing

[ @EnableJpaAuditing을 Application 클래스 vs PersistenceConfig 클래스에 적용하는 차이 ] 1. @EnableJpaAuditing이 하는 역할@EnableJpaAuditing은 JPA Auditing 기능을 활성화하는 어노테이션으로,@CreatedDate, @LastModifiedDate 같은 자동 날짜 관리 기능을 사용할 수 있도록 해줍니다.이 어노테이션을 어디에 선언하느냐에 따라 Spring의 실행 방식에 차이가 생길 수 있습니다. 2. @EnableJpaAuditing을 Application 클래스에 선언할 때✔ 특징Spring Boot 애플리케이션이 실행될 때 JPA Auditing이 함께 활성화됨@SpringBootApplication이 위치한 곳에서 모..

개발/부트캠프 2025.03.27

본캠프 : 개인 과제(플러스 심화) 트러블 슈팅

1. 개요: 플러스 심화 주차 과제를 진행하며, 겪은 이슈에 대한 정리 및 회고 2. 트러블 슈팅: AOP User ID null● 배경AdminAccessLoggingAspect - logBeforeChangeUserRole 메서드 실행 시 로그에 User ID : null 발생 ● 원인Spring Security 설정 후 HttpServletRequest에서 getAttribute("userId")로 정보를 가져오지 못함 ● 해결방안 1SecurityContextHolder를 활용하여 userId를 로그에 반환하도록 수정한다.AdminAccessLoggingAspect에서 HttpServletRequest request.getAttribute("userId")를 사용하여 userId를 가져오고 있지만..

개발/부트캠프 2025.03.20

본캠프 : JWT Stateless Spring Security

기존 JWT>JwtUtil(토큰 발급) 이후에 JwtFilter & FilterConfig(JWT 유저데이터추출/ request.setAttribute) ->ArgumentResolver & WebConfig & Auth(어노테이션) & AuthUser(dto) 클래스(AuthUser 객체 생성/ request.getAttribute) ->Controller로의 전달 과정이 필요하다. 📌 의존성 추가(build.gradle - dependencies)dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:sp..

개발/부트캠프 2025.03.17

본캠프 : JwtFilter - ArgumentResolver 실습 2(OncePerRequestFilter)

[ JwtFilter - ArgumentResolver 실습 ] (1) JWT 의존성 추가(build.gradle)// jwtcompileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5' (2) jwt.secret.key 추가(application.properties)jwt.secret.key=OFJSU3pod0t2WUxmaXY2Z2ZncjhJQmVtdlo1UWJId3E..

개발/부트캠프 2025.03.14

본캠프 : QueryDSL

QueryDSL 사용법 : QueryDSL은 자바 기반 오픈 소스 프레임워크로, SQL 쿼리를 더욱 쉽고 편리하게 작성할 수 있도록 도와주는 라이브러리  1.의존성 추가(build.gradle - dependencies)이후 코끼리 클릭!implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api" 이후에 한번 더 build! Q클래..

개발/부트캠프 2025.03.13

본캠프 : 테이블 객체끼리 관계만들기 2

💡 @ManyToOne, @OneToMany 어떻게 해야될까?@OneToMany는 @ManyToOne(fetch = FetchType.LAZY)이 없으면 존재할 수 없다. (이건 필수 규칙이므로) → ManyToOne부터 일단 넣고 생각하기@ManyToOne(fetch = FetchType.LAZY) 더 개수가 많은 엔티티에 건다.ex) 댓글 vs 게시글 → 댓글에 달아야합니다.N:M은 중간테이블 필요하다. (리스트를 필드에 선언할 수 없기 때문에)중간테이블에 @ManyToOne(fetch = FetchType.LAZY) 2개 선언.일단은 어려우므로 다음에 추가 설명 @ManyToOne에게 무조건 해야되는거@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = “..

개발/부트캠프 2025.03.12

본캠프 : 테이블 객체끼리 관계만들기 1

Entity 간의 관계(일대일, 일대다, 다대다)를 정의하고 매핑하는 방법,연관관계 매핑을 통해 복잡한 데이터 구조를 효과적으로 관리하는 방법에 대해 알아봅시다. @OneToOne일대일 관계를 나타내는 매핑 정보1:1 관계를 지정하기에 앞서 이것이 꼭 물리적으로 테이블이 분리되어야 하는지에 대해 생각해 봐야 한다.1:1 관계로 구성 한다는 것은 결국 하나의 목적에 부합되는 공통된 데이터를 관리한다고 볼 수 있으며 이것은 하나의 테이블에서 관리 할 수 있는 데이터일 가능성이 높다는 의미이다.즉, 의도적 중복이 아니라면 사용할 일이 없다는 말입니다.의도적 중복 예시) 버블 구독 상품을 사서 채팅방이 생길 경우. 구독 상품과 채팅방은 1:1 관계   @OneToMany일대다 관계를 나타내는 매핑 정보@OneT..

개발/부트캠프 2025.03.12

본캠프 : AOP(Aspect-Oriented Programming)

공통 관심사를 한 곳에서 관리할 수 없을까요…?공통 관심사 : 공통적이긴 한데, ‘공통’적이기 때문에 해당 로직에서 ‘핵심’ 로직은 아닐 가능성이 높습니다.따라서 AOP를 사용한다면 코드에서는 핵심 로직에만 집중할 수 있는 장점이 있습니다! AOP(Aspect-Oriented Programming)란?AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 프로그램의 핵심 로직(Core Concern)과 부가적인 기능(Cross-Cutting Concern, 예: 로깅, 보안, 트랜잭션 등)을 분리하여 관리하는 프로그래밍 패러다임입니다.📌 AOP 주요 개념Aspect(애스펙트): 공통적으로 적용할 기능(예: 로깅, 보안, 트랜잭션)JoinPoint(조인포인트): AOP 기능이..

개발/부트캠프 2025.03.12