2024/09 13

Hibernate의 @DynamicInsert와 @DynamicUpdate 정리

데이터베이스와의 효율적인 상호 작용은 현대 애플리케이션 개발에서 중요한 요소입니다. Hibernate는 ORM(Object-Relational Mapping) 프레임워크로, 자바 객체와 데이터베이스 간의 매핑을 간편하게 처리해줍니다. 이 과정에서 Hibernate는 다양한 최적화 기능을 제공하며, 그 중 @DynamicInsert와 @DynamicUpdate는 특히 유용한 어노테이션입니다. 이번 블로그에서는 이 두 어노테이션의 기능과 사용 방법, 언제 사용해야 하는지, 그리고 사용 시 생성되는 SQL 쿼리의 차이점을 상세히 알아보겠습니다. 1. @DynamicInsert는 INSERT 시 동적으로 SQL을 생성하는 기능이다.설명: @DynamicInsert는 엔티티를 저장할 때, null이 아닌 필드만 ..

SPRING&BOOT 2024.09.30

PUT과 PATCH 메서드

웹 개발에서 HTTP 메서드는 클라이언트와 서버 간의 통신을 정의하는 중요한 요소입니다. 그중에서도 PUT과 PATCH는 모두 리소스를 업데이트하는 데 사용되지만, 그 목적과 동작 방식에는 분명한 차이점이 있습니다. 이번 블로그에서는 Spring Boot를 활용하여 PUT과 PATCH의 차이점을 이해하고, 각 메서드를 어떻게 사용해야 하는지 코드 예제와 함께 살펴보겠습니다.1. PUT은 전체 리소스를 대체하는 메서드이다.설명: PUT 메서드는 지정된 리소스를 새로운 데이터로 완전히 대체합니다. 즉, 요청에서 제공된 데이터로 기존 리소스의 모든 내용을 덮어씁니다.사용 상황:리소스의 모든 필드를 업데이트해야 할 때클라이언트가 리소스의 전체 상태를 알고 있으며, 이를 서버에 전달할 때코드 예제:@RestCon..

SPRING&BOOT 2024.09.27

자바 스트림(Stream)

스트림이란 무엇인가?스트림(Stream)은 자바 8에서 도입된 기능으로, 데이터를 처리하는 일련의 연산들을 하나의 흐름으로 연결하여 수행할 수 있게 해주는 추상화된 데이터 처리 방식이다. 주로 컬렉션이나 배열 같은 데이터 소스를 기반으로 데이터를 필터링, 변환, 집계하는 작업을 효율적으로 수행할 수 있도록 도와준다.스트림의 핵심 특징스트림을 이해하기 위해 몇 가지 중요한 특징을 알아두자.데이터 소스 불변성스트림은 데이터 소스를 변경하지 않는다. 스트림의 모든 연산은 새로운 스트림을 반환하며, 원본 데이터는 그대로 유지된다.지연 처리(Lazy Evaluation)스트림의 중간 연산(필터링, 매핑 등)은 실제로 즉시 실행되지 않는다. 최종 연산(forEach, collect 등)이 호출될 때 한꺼번에 처리된..

JAVA 2024.09.26

자바 람다식 쉽게 이해하기

최근 팀 프로젝트를 하는데, 다른 팀원분이 람다식으로 코드를 작성했다. 아직 람다식을 완전히 알지 못하는 나는, 아직 최종 프로젝트도 아닌데 다른 사람이 작성한 코드가 어렵게 보이는 것이 옳지 않다고 판단되어 람다식을 공부할 계획이다. 우선, 람다식은 자바 8부터 추가된 기능으로 복잡한 코드를 간단하게 표현할 수 있는 아주 유용한 도구이다. 이 글에서는 람다식이 무엇인지, 어떻게 사용하는지, 그리고 인터페이스와 함께 사용하는 방법을 예제를 통해 알아보겠다.1. 람다식이란 무엇인가요?람다식은 간단하게 말해 함수를 한 줄로 표현하는 방법입니다. 복잡한 코드를 단순하게 만들어서 프로그래밍을 더 쉽게 해줍니다.비유를 하자면, 긴 문장을 짧게 줄여서 말하는 약어나 줄임말과 비슷하다.예를 들어:긴 문장: "저는 오..

JAVA 2024.09.25

Spring Boot에서 JWT 인증 필터와 ArgumentResolver 활용하기

이번 포스팅에서는 JWT 인증 필터를 설정하고, 이를 통해 인증된 사용자 정보를 컨트롤러로 전달하기 위한 HandlerMethodArgumentResolver 구현 방법을 소개하겠다. Spring Security 없이 커스텀 JWT 필터를 통해 권한과 사용자를 처리하는 구조를 간단하게 설명할 것이다. 1. JWT 인증 필터 (JwtFilter)먼저, 사용자의 요청을 처리하기 전에 JWT 토큰을 검증하는 JwtFilter를 작성하겠다.코드 분석@Slf4j@RequiredArgsConstructorpublic class JwtFilter implements Filter { private final JwtUtil jwtUtil; @Override public void init(FilterCon..

SPRING&BOOT 2024.09.20

카카오 소셜 로그인 간단 구현 2장

스프링 부트를 이용한 소셜 로그인 엄청 간단하게 구현 설명은 주석으로 대체! dependencies 설정dependencies { // Spring Data JPA를 사용하기 위한 의존성 (데이터베이스와 상호작용) implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // Spring Web 애플리케이션을 개발하기 위한 의존성 (웹 서비스 및 REST API 개발) implementation 'org.springframework.boot:spring-boot-starter-web' // Lombok 라이브러리를 사용하여 코드에서 Getter, Setter, 생성자 등을 자동 생성 (빌드 시 포함되지 않음)..

AVATAR 2024.09.13

카카오 소셜 로그인 간단 구현 1장

1. ( https://developers.kakao.com/) 로그인 후 내 애플리케이션 클릭!   2. 애플리케이션 추가 클릭! 3. 그림, 앱 이름, 회사명, 카테고리 설정 후 체크하고 저장! 4. 만들어진 애플리케이션 클릭! 5. 왼쪽에 보면 플랫폼을 클릭 하면 이런 화면이 나온다! 6. Web 플랫폼 등록 클릭 후 플랫폼을 등록 해준다(주의 : 혹시 8080 포트가 아니라면 확인 해야 한다. ) 7. 다시 화면 하단을 보면 사이트 도메인이 등록된 것을 볼 수 있다. 8. Redirect URI를 등록해야 합니다. 등록하러 가기  9. Redirect URI등록 클릭 한다 (나중에 로그인 후 등록한 uri로 리다이렉트 되고 code라는 것도 함께 보내준다.. 이건 나중에 알 수 있다..) 10. ..

AVATAR 2024.09.13

GIT자주 쓰일것 같은 명령어(지속적으로 업데이트)

1. 가장 최근 커밋을 취소하고 변경 사항 유지 (--soft)더보기$ git reset --soft HEAD~1 HEAD~1은 바로 이전 커밋을 가리킵니다.변경 사항은 스테이징된 상태로 남아 있으며, 커밋만 취소됩니다.이후 커밋 메시지를 수정하거나 다른 작업을 할 수 있습니다.2. 원격 저장소를 새로 추가하기(fork를 받은것을 추가한 Repository에 저장하고 싶을때)더보기$ git remote add upstream [새로만든 깃 저장소 주소]이렇게 하면, **origin**은 포크한 저장소를 가리키고, **upstream**은 새로 추가한 저장소를 가리킵니다.$ git push upstream main이렇게 하면, upstream 원격 저장소로 코드를 푸시할 수 있습니다.$ git remote..

GIT 2024.09.11

JWT 인증과 권한 처리 중 403 Forbidden 오류 해결 사례

JWT(JSON Web Token) 인증을 사용하는 애플리케이션에서 Spring Security로 보안 처리를 하던 중 403 Forbidden 오류가 발생했다. 이 오류는 사용자 인증은 성공했지만, 권한(authorization)이 부족해서 발생하는 문제이다. 이 글에서는 실제로 발생했던 403 Forbidden 오류의 원인과 해결 과정을 설명한다.문제 상황Spring Boot와 Spring Security를 사용해 JWT 인증 기반 보안 시스템을 구축한 후, ADMIN 권한을 가진 사용자가 /admin 경로에 접근할 때 403 Forbidden 오류가 발생했다. 로그를 확인한 결과, JWT 토큰은 정상적으로 처리되고 있었지만, 여전히 403 Forbidden 상태가 반환되고 있었다. 이는 인증은 성공..

ERRORHiSTORY 2024.09.11

AOP(Aspect-Oriented Programming) 개념 및 실습

1. AOP란? **AOP(Aspect-Oriented Programming)**는 코드에서 공통적으로 반복되는 횡단 관심사를 핵심 비즈니스 로직에서 분리하는 프로그래밍 기법이다. AOP를 사용하면 로깅, 트랜잭션 관리, 메서드 실행 시간 측정 등 여러 곳에서 사용되는 부가기능을 한 곳에 모아 관리할 수 있다.2. AOP 용어 정리Aspect(애스팩트): 프로그램에서 반복적으로 필요하지만, 모든 코드에 일일이 넣기 귀찮은 기능들을 한데 묶은 모듈이다. 예를 들어, 로그를 남기거나 보안 처리를 한 곳에 모아서 관리하는 것이라고 보면 된다.Advice(어드바이스): 실제로 실행될 부가기능이다. 예를 들어, 어떤 메소드가 실행될 때 로그를 남기는 구체적인 코드가 어드바이스이다.Pointcut(포인트컷): 어드..

SPRING&BOOT 2024.09.10