전체 글 88

본캠프 : 동시성 제어(Concurrency Control)

동시성 제어는 다수의 프로세스나 스레드가 동시에 동일한 자원에 접근할 때, 데이터 무결성을 보장하기 위해 사용한다.-프로세스란? 하나의 프로그램이다. 스프링 서버단으로 생각하자면 하나의 컴퓨터(서버)라고 봐도 무방하다. 하나의 서버에 여러 프로세스를 띄울 수 있다. 멀티프로세스이다.보통은 여러개의 서버에 하나의 프로세스가 각각 있는 것과 동일하다. -스레드란? 하나의 프로세스 안에서의 작업 단위이다. 일꾼!Spring으로 말하자면 하나의 request에 하나의 스레드가 할당된다. -StatelessHTTP Stateless : HTTP 요청 간의 상태 공유가 안된다.JWT Stateless : 서버가 상태를 갖고 있지 않다.(JWT가 가지고 있다.)Server Stateless : 서버는 상태를 가지면 ..

개발/부트캠프 2025.04.03

본캠프 : Redis 기초

Redis는 데이터 처리 속도가 엄청 빠른 NoSQL(키 밸류를 저장하는) 데이터베이스이다.-최대 장점은Redis는 인메모리에 모든 데이터를 저장한다. 그래서 데이터의 처리 성능이 굉장히 빠르다. -주요 사용 사례 중 우선 캐싱(데이터 조회 성능 향상)에 대해서 알아보자. set 키 밸류set 키 밸류 ex 만료시간(초)get  키keys *del  키ttl  키flushall users:100:profile -캐시란? 원본 저장소보다 빠르게 정보를 가져올 수 있는 임시 데이터 저장소이다. -캐싱이란? 캐시(임시 데이터 저장소)에 접근해서 데이터를 빠르게 가져오는 방식이다. “이 API는 응답 속도가 너무 느린데, 캐싱을 해두고 쓰는 게 어때?” -데이터를 캐싱할 때 사용하는 전략▶ 대표 전략 2가지1...

개발/부트캠프 2025.04.02

본캠프 : 어노테이션 정리_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