전체 글 76

카카오 소셜 로그인 간단 구현 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

CascadeType.REMOVE는 왜 위험할까?

1. cascade = CascadeType.REMOVE란?CascadeType.REMOVE는 JPA에서 사용되는 영속성 관리 옵션 중 하나로, 엔티티 간의 관계에서 부모 엔티티가 삭제될 때, 자식 엔티티도 자동으로 삭제되도록 설정하는 방식이다. 쉽게 말해서 부모-자식 관계가 있는 경우, 부모가 삭제되면 자식도 함께 삭제되는 효과를 주는 옵션이다. @Entitypublic class Order { @OneToMany(mappedBy = "order", cascade = CascadeType.REMOVE) private List orderItems; // getters, setters, etc.}부모 엔티티가 Order이고 자식 엔티티가 OrderItem이라고 하자. Order에 Casca..

SPRING&BOOT/JPA 2024.09.06

필터

스프링 부트에서 필터는 HTTP 요청과 응답을 가로채어 처리할 수 있는 기능이다. 필터를 사용하면 요청이 컨트롤러에 도달하기 전에 사전 처리하거나 응답이 클라이언트에 전달되기 전에 후처리할 수 있다. 필터는 주로 인증, 인가, 로깅, 캐싱 등 다양한 용도로 활용된다.필터란?인증 및 인가: 요청이 특정 리소스에 접근하기 전에 사용자 인증 정보를 확인하거나 권한을 검증하는 데 사용된다. 예를 들어, 로그인 여부를 확인하고, 특정 페이지에 접근 가능한지 검토할 수 있다.로깅: 요청과 응답에 대한 로그를 기록할 수 있다. 요청의 URL, 메소드, 응답 상태 코드 등을 로그로 남기면 문제를 추적하거나 시스템의 동작을 모니터링하는 데 유용하다.성능 최적화: 캐싱 기능을 통해 서버의 성능을 향상시킬 수 있다. 요청에..

SPRING&BOOT 2024.09.03

중간 테이블을 사용하는 이유

중간 테이블(또는 조인 테이블)은 데이터베이스 설계에서 다대다(Many-to-Many) 관계를 표현하기 위해 사용된다. 다대다 관계에서는 두 개의 테이블이 서로 여러 개의 레코드를 가질 수 있는데, 이를 직접적으로 표현하기 어렵기 때문에 중간 테이블을 사용하여 이러한 관계를 관리한다.중간 테이블을 사용하는 이유다대다 관계 표현: 두 테이블 사이의 다대다 관계를 적절하게 표현하기 위해 중간 테이블을 사용한다. 예를 들어, 학생과 수업이라는 두 테이블이 있을 때, 한 학생이 여러 수업에 등록될 수 있고, 하나의 수업에 여러 학생이 등록될 수 있다. 이를 다대다 관계라고 하며, 중간 테이블을 사용하여 이러한 관계를 효율적으로 관리할 수 있다.데이터의 중복 방지: 중간 테이블을 사용하지 않으면, 각 테이블에 중..

SPRING&BOOT/JPA 2024.09.02

JWT란?

JWT(Json Web Token)는 JSON 객체를 사용하여 두 개체 간에 정보를 안전하게 전송하기 위한 웹 표준(RFC 7519)이다. 주로 인증(authentication)과 권한 부여(authorization)에 사용되며, 클라이언트와 서버 간의 안전한 데이터 교환을 위해 설계되었다. JWT는 세션을 서버에 저장하지 않고도 상태를 유지할 수 있게 해주는 토큰 기반 인증 방식으로, RESTful API와 같은 무상태(stateless) 통신에서 널리 활용되고 있다.JWT의 구조JWT는 Header, Payload, Signature의 세 부분으로 구성된 문자열이다. 이 세 부분은 각각 Base64Url로 인코딩되어 마침내 .으로 구분된 하나의 문자열로 결합된다. 이 구조 덕분에 JWT는 가볍고, 웹..

SPRING&BOOT/JPA 2024.08.30

캡슐화(Encapsulation)

캡슐화(Encapsulation)는 객체지향 프로그래밍의 핵심 원칙 중 하나로, 객체의 데이터(필드)와 행위(메서드)를 결합하여 객체 내부에 감추고, 외부에는 필요한 부분만 노출하는 방식을 말한다. 이 포스트에서는 캡슐화가 무엇인지, 왜 중요한지, 그리고 실제 코드 예제를 통해 캡슐화를 어떻게 구현할 수 있는지 상세하게 살펴본다.캡슐화의 정의와 중요성캡슐화는 객체의 상세한 구현 내용을 숨기는 것을 목적으로 한다. 이를 통해 객체의 내부 데이터를 보호하고, 외부의 잘못된 사용으로부터 객체를 보호할 수 있다. 또한, 객체의 사용 방법만을 외부에 노출시키므로, 사용자는 객체가 '무엇'을 할 수 있는지만 알면 되고, 객체가 '어떻게' 그 일을 하는지는 알 필요가 없다. 이런 특성 때문에 캡슐화는 객체지향 설계의..

SPRING&BOOT 2024.08.28