전체 글

5%라도 남기자
스프링

[Spring] Spring Security이용한 JWT 로그인 구현기

프로젝트에서 사용한 Spring Secutiry이용한 JWT 로그인 API를 정리하고자 글을 씁니다 목차 Spring Secutiry란 무엇인가 JWT란 무엇이고 RefreshToken 저장 방법 Spring Secutiry + JWT 구현하기 Spring Secutiry 가장 중요한 흐름도입니다 이것만 이해하면 구현은 쉽게 할 수 있습니다 듀얼 모니터라면 다른 모니터에 띄우고 계속 보시면서 구현하면 구조를 파악하기 수월하실 겁니다 하나 하나 알아봅시다 사용자가 어떤 정보를 서버에 요청합니다 여기서 정보는 어떤 정보든 상관없습니다 새로고침, Url검색등등을 통해 요청(Request)이 발생합니다 그러면 AuthenticationFilter가 그 요청을 가로챕니다 ex) PostMapping -> memb..

스프링

[Spring] JWT Refresh Token 어디에 저장해야 할까? 그리고 꼭 저장해야 할까?

들어가기에 앞서 Refresh Token을 Cookie로 처리할까 고민 하던 도중 막상 왜 그렇게 저장하는지 자세히 모르고 사용했던 것 같다. 그래서 Jwt의 문제점들을 파악한 후에 써야 후에 고생하지 않을 거 같아서 문제점들을 알아보기로 했다 JWT의 문제점들 XSS(Cross Site Scripting) 웹 해킹 중 하나인 XSS는 게시판이나 웹 등에 JS와 같은 스크립트 코드를 삽입 해 개발자가 생각하지 못한 기능이 작동하도록 하는 공격 대부분의 웹 해킹 공격 기법과는 다르게 사용자-> 클라이언트를 대상으로한 공격이다 ex) 해커가 원하는 링크를 클릭하면 사용자가 가지고 있는 Cookie등을 사용하고 있는 서버로 Request를 보낸다 그러면 서버는 Response로 응답하기 때문에 해커가 원하는 ..

스프링/JPA

[Spring] JPA Save메소드를 이용한 양방향 매핑 (Gradle)

양방향 연관관계에서 중요한 것 알고 가야할 것 1. DB는 FK(외래키)하나로 관계를 맺은 Table을 탐색할 수 있다 2. DB랑은 다르게 객체는 객체안에 탐색하고 싶은 객체와 참조를 맺어놔야 탐색이 가능하다 3. 양방향 매핑은 단방향 매핑과 다르게 주인을 정해줘야 한다 (주인이 아니라면 조회밖에 하지 못한다) 코드를 보면 Member @Entity @Table(name = "member") @Getter @Setter @Data @NoArgsConstructor @AllArgsConstructor public class Member { @Id @Column(name = "member_id") private Long member_id; @Column(name = "id") private String i..

스프링/JPA

[Spring] JPA란 무엇인가

현 시대는 객체를 관계형 DB에 저장해서 관리를 합니다 그렇다면 관계형 DB안에 객체를 저장하려면 SQL을 이용하여 저장해야 합니다 SQL 중심의 개발이죠 Insert, Update, Select, Delete , Create..등등 1. 무한 반복, 지루한 코드 public class Member { private String memberId; private String name; ... } INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES SELECT MEMBER_ID, NAME FROM MEMBER M UPDATE MEMBER SET ... 위 객체를 RDB(Relational Database, 관계형 데이터베이스) SQL을 이용하여 저장한 코드입니다 그런데 만약 DB구성..

Flutter

[Flutter] 20시간만에 Flutter 이해하기

백엔드를 계속 공부하다가 프론트랑 백엔드를 연결해서 공부하면 더 재밌겠는데라는 생각으로 그냥 바로 Dart 언어 & Flutter강의를 들으면서 시작했다 . 따라하고 조금의 이해를 하기까지 한 5일 정도 걸린 거 같다 https://github.com/sleeg00/toonflix GitHub - sleeg00/toonflix Contribute to sleeg00/toonflix development by creating an account on GitHub. github.com 나름 재밌었다 솔직히 말하면 프론트엔드를 거의 처음 접해보는 것인데 물론 HTML, CSS ,JS등 한번 씩은 다 보았다 이런 프레임워크를 내가 사용할 줄은 몰랐다 그래서 많은 고민을 했다 Vue를 사용할까 React를 사용할..

Go

[Go] struct를 생성하고 error코드 작성하기

오늘은 Go에 있는 strcut 키워드를 사용해보겠습니다 구조체를 만드는데 C랑 크게 다르지 않습니다 package main import "fmt" type person struct { name string age int food []string } func main() { food := []string{"burger", "king"} sleeg := person{"sleeg", 15, food} sleeg = person{name: "sleeg", age: 18, food: food} //sleeg := person{name: "nico", age: 18, food: food} 불가! //이런식으로 코딩할 경우 person{name : "nico", 18, food}는 불가 name: ,age: ,fo..

Go

[Go] append와 가비지 컬렉터의 관계 & if, switch문 알아보기

오늘은 Go의 배열, if문, Switch문을 알아봅시다! 배열 package main import "fmt" func main() { names := []string{"nico", "lyn", "dal"} names = append(names, "flynn") fmt.Println(names[2]) } 배열 선언 방식은 다음과 같습니다 names := []string{~}을 통해 문자열 배열을 만들어 줬습니다 그리고 ppend를 통해 "flynn"을 배열에 추가해주었구요 그런데 여기서 append("flynn)만 적는다면 오류가 됩니다 names = append(어디에 append(추가)할 것인가, "무엇을 추가할 것인가?") (참고 append는 맨 뒤에 값을 넣어준다) 또 여기서 중요한 점은 app..

Go

[Go] $GOPATH/go.mod exists but should not 오류

Go언어 공부를 하다가 이런 오류를 만났다.. 분명 직전 코드까지 잘 실행되다가 어찌저찌 검색하다 go mode tidy라고 입력하면 된다고해서 했는데 계속 저런다. 이유는 GOPATH (터미널에 "go env" 라고 타이핑할시 GOPATHE등 많은 정보가 나옵니다) 로 지정한 곳에 go.mod 파일이 있으면 안되는다는 것! 해결한 방법은 GOPATH로 등록된 폴더에 go.mod가 있길래 rm go.mod로 go.mod파일을 지우고 src안에 현재 작업할 or 분기하지 않은 폴더 즉 main 폴더에 go mod init으로 go.mod를 만들어줬더니 해결이 됐다 나는 이렇게 넣어다. 다행이 참고할 자료가 하나 있어서 금방해결했다.. 참고한 자료 https://velog.io/@artelee/%EC%98%..

Sleeg
5% 남기기