
저번 글에서는 세션 기반 인증 VS 토큰 기반 인증에 대해서 알아보았는데 이제 토큰 기반 인증 기술인 JWT 에 대해서 한 발짝 더 다가가보겠습니다. 토큰이 하나만 있는 것이 아닙니다. 서버가 토큰의 유효성을 계속 검사하려면 무슨 요청이 올 때마다 혹은 토큰 만료 시간마다 클라이언트는 계속 로그인을 해야해야 합니다. 그러면 이 사용자는 정말정말정말 귀찮겠죠 뭐 할 때마다 로그인하라고 하면 그 서비스는 분명 언젠가는 죽을 거에용 그것을 보완하기 위한 방법이 리프레시 토큰입니다. 서버측에서 클라이언트가 로그인하면 액세스 토큰과 리프레시 토큰 총 2개 줍니다. 액세스 토큰 만료 시간을 5분이라고 두고 리프레시 토큰 만료 시간이 1년이라고 치면, 액세스 토큰이 만료되어도 리프레시 토큰이 인증을 해주어 서버가..
사용자가 웹사이트에 접속할 때, 어떠한 입장권 없이 아무 사이트에 들어가 정보를 본다면? 사용자 입장에서는 매우 좋지만, 어떤 중요한 정보가 담긴 사이트에 들어간다면 관리자나 일부 사용자들의 입장은 난감해지겠죠 그래서 사용자에게 입장권을 쥐어줄 지 말 지를 결정하는 인증 기술이 있습니다. 대표적으로 세션을 통한 인증과 토큰을 통한 인증이 있습니다. 세션을 통한 인증은 사용자마다 사용자의 정보를 담은 세션을 만들고 저장하여 인증하는 기술입니다. 대표적으로 Spring Security 가 있어요. 토큰을 통한 인증은 서버에서 클라이언트를 구분하기 위해 유일한 값을 만들어 클라이언트에게 제공하면 클라이언트는 이 토큰을 가져서 여러 요청을 이 토큰과 함께 보냅니다. 그럼 서버는 토큰을 통해 사용자를 인증할..
문제 상황 Article 목록을 뷰에다가 전달해주려는 그런 상황 문제 요약 @RequiredArgsConstructor@Controllerpublic class BlogViewController { private final BlogService blogService; @GetMapping("/articles") public String getArticls(Model model) { List articles = blogService.findAll().stream() .map(ArticleListViewResponse::new) .toList(); model.addAttribute("articles", a..

에러 해결하기 위해 4-50분 소요//// @ Article.java package command.pyramid.Domain;import jakarta.persistence.*;import lombok.AccessLevel;import lombok.Builder;import lombok.Getter;import lombok.NoArgsConstructor;@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Entitypublic class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true,updatable..

나의 상황 H2 를 연동해야 하는 그런 상황 문제 요약 H2 연동을 위해서는 application.yml 파일을 수정해야 줘야 한다. 구글링 하면 자료가 정말 많지만 나는 영상을 보고 싶었다 그래서 찾아본 어느 24명의 구독자를 지닌 해외 개발자 아저씨.. https://youtu.be/p6gzDZoBIL0?si=2PXFElyMRN2i9eY4 뭔가 앞으로 참고를 많이 할 것 같다 소스코드 spring: sql: init: mode: never datasource: url: jdbc:h2:mem:testdb driver-class-name: org.h2.Driver username: password: h2: console: e..

테스트 코드 배우다가 정신 나간 저입니다 Mock 이니 (모기..) IsOk accpet param get(url) andExcept statusResultActions 으어 으어으어 하지만 이거 내가 볼 때 반의 반도 안 본 것 같은데.... 쨋든 JUnit5 총정리를 기획해야겠다는 생각에 정리해보았습니다. *본 소스코드는 스프링부트3 백엔드 개발자 되기 신선영 저자의 소스의 일부입니다. package command.rank.Controller;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation..

스프링 부트 백엔드 개발자 되기 책을 참고하며 클론코딩을 하다가 발견한 문제였습니다. 주어진 상황- 템플릿 엔진도 build 에 추가 안하고 resource 도 index 밖에 없던 상황이었습니다. Controller 파일을 만들어 GetMapping 으로 /test 로 리턴값 "test" 를 전달해줘야 했습니다. 문제 상황- Controller 파일을 생성하고 @Controller 애노테이션을 붙여 localhost/test 로 보내려는 찰나에Whitelabel Error Page 가 떴습니다. 고민- 일단 @Controller 로 실행을 시키기 위해서는 어떻게 해야할까 생각하다가 test.html 파일을 만들어야 한다는 사실을 알고 있었습니다. 뷰로 보내기 때문이죠 그래서 파일을 만들고 실행을..

[참고문헌 : 스프링부트3 백엔드 개발자 되기 저자: 신선영] 타임리프는 템플릿 엔진이다. 템플린 엔진이라 함은 웹페이지다. HTML 문법과 엔진을 위한 문법을 섞어야 한다. 타임리프 표현식을 보자 표현식설명${...}변수의 값 표현식#{...}속성 파일 값 표현식@{...}URL 표현식*{...}선택한 변수 표현식, th:object 에서 선택한 객체에 접근 타임리프 문법을 보자 표현식설명예제th:text텍스트를 표현할 때 사용th:text=${person.name}th:each컬렉션을 반복할 때 사용th:each="person:${person}"th:if조건이 True 일 때만 표시th:if="${person.age}>=20"th:unless조건이 false 인 때만 표시if:unless="..