분류 전체보기 82

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

관계형 데이터베이스에서 중간 테이블의 중요성과 활용 방법

관계형 데이터베이스 설계에서 중요한 개념 중 하나는 다대다(Many-to-Many) 관계를 관리하는 방법입니다. 다대다 관계는 중간 테이블(또는 교차 테이블)을 통해 표현되며, 이를 올바르게 구현하지 않으면 데이터 관리가 어렵고 비효율적이 됩니다. 이번 포스트에서는 중간 테이블의 필요성과 구현 방법을 코드와 함께 설명하겠습니다.1. 중간 테이블을 사용하는 이유관계형 데이터베이스에서 다대다 관계를 직접적으로 표현할 수 없다. 예를 들어, 학생(Student)과 강의(Course) 간의 관계를 생각해보자. 한 학생이 여러 강의를 들을 수 있고, 한 강의에도 여러 학생이 참여할 수 있다. 이 경우, 다대다 관계를 제대로 관리하기 위해서는 Student와 Course 테이블 사이에 중간 테이블이 필요하다.중간 ..

SPRING&BOOT/JPA 2024.08.27