Spring Boot 28

[Spring boot] JWT Accesstoken 및 Refresh 검사 흐름?

Accesstoken 만료검사를 위해 만료된 accesstoken을 서버에 날려서 내가 만든 Error Handler가 잘 동작하는지 보기 위해서 Postman으로 던져보았다.Exception은 다음과 같이 정의했다@Getter@AllArgsConstructorpublic class UnauthorizedException extends RuntimeException { public UnauthorizedException(String message){ super(message); } public static UnauthorizedException of(String message){ return new UnauthorizedException(message); ..

[Spring boot] JWT 관리 코드 분석

build.gradlejjwt-api: JWT 기능을 사용하는 데 필요한 API.jjwt-impl: JWT 서명 및 파싱 등의 구현체.jjwt-jackson: JSON 파싱을 위한 Jackson 연동.implementation("io.jsonwebtoken:jjwt-api:0.11.5")runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5") JWT밑은 JWT 관리 클래스이다. 한 번 다시 공부해보자import io.jsonwebtoken.*;import io.jsonwebtoken.security.Keys;import org.springframework.beans.factory.anno..

URL 메타데이터 추출 기능 문서

kkrap 프로젝트에서 url을 저장하는 기능이 필요했다. url을 저장 후 사용자를 위해 제목, 파비콘, 썸네일을 추출하는 기능이 추가적으로 필요하였는데 이 부분의 개발 과정에 대해서 기술한다. 기능 개요해당 기능은 사용자가 링크를 저장할 때, 해당 URL의 제목, 썸네일 이미지, 파비콘 정보를 자동으로 추출하여 저장하는 기능이다. 서비스에서 링크들을 수집하는 기능이 필요하고 거기에 대한 정보를 보여줄 기능이 필요하여 이 메타데이터를 추출하게 되었다. 기능 목적 및 배경사용자가 링크를 저장할 때 단순한 URL 텍스트만 보여줄 경우, 시각적 정보 부족으로 인해 UX가 떨어짐메타데이터를 자동 추출하면 링크의 내용을 직관적으로 파악할 수 있음특히 SNS, 뉴스, 유튜브 등에서 제목과 썸네일, 파비콘의 정보가..

[Spring boot] REST API

REST API대중적으로 가장 많이 사용된 애플리케이션 인터페이스이 인터페이슬르 통해 클라잉너트는 서버에 접근하고 자원을 조작할 수 있다.REST란?Representational State Transfer의 약자로 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식주고 받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고 받는 것을 의미REST API란?API는 Application Programming Interface의 약자로 애플리케이션에서 제공하는 인터페이스를 의미API를 통해 서버 또는 프로그램 사이를 연결할 수 있다.REST API는 REST 아키텍처를 따르는 시스템/애..

[Spring boot] 디자인 패턴

소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위해 고안된 해결책이다.디자인 패턴에서 ‘패턴’이라는 단어는 애플리케이션 개발에서 발생하는 문제는 유사한 경우가 많고 해결책도 동일하게 적용할 수 있다는 의미를 내표한다.but 디자인 패턴이 모든 문제의 정답은 아니며, 상황에 맞는 최적 패턴을 결정해서 사용디자인 패턴의 종류대표적 분류 방식인 ‘GoF 디장니 패턴’ == ‘Gang for Four’의 줄임말구체화하고 체계화해서 분류한 4명의 인물 의미Gof 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴의 총 3가지로 구분됨생성 패턴 → 객체 생성에 사용되는 패턴, 객체를 수정해도 호출부가 영향 받지 않는다.구조 패턴 → 객체를 조합해서 더 큰 구조를 만드는 패턴행위 패턴 → 객체 간의 알고리즘이..

[Spring boot] 레이어드 아키텍처

레이어드 아키텍처애플리케이션의 컴포넌트르 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다.여러 방면에서 쓰이는 개념이며, 어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다3 계층 또는 4계층 구성을 의미한다.이 차이는 인프라(DB)레이어의 추가 여부로 결정된다. 프레젠테이션 계층애플리케이션의 최상단 계층이며 HTTP 요청/응답을 처리사용자 입력 받기, API 라우팅 역할별도의 비즈니스 로직을 포함하지 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행@RestController, @Controller@GetMapping("/users")public ResponseEntity getUsers() { return ResponseEntity.ok(..

[Spring boot] 스프링부트의 동작 방식

스프링 부트의 동작 방식일반적인 웹 요청이 들어왔을 때의 스프링 부트의 동작 구조(1) 클라이언트 → 서블릿 컨테이너 → DispatcherServlet(2) DispatcherServlet → HandlerMapping → 해당 컨트롤러 찾기(3) DispatcherServlet → HandlerAdapter → 컨트롤러 실행(4) 컨트롤러 → 결과 반환(5) DispatcherServlet → ViewResolver → 뷰 이름 → 뷰 파일 위치 찾기(6) 뷰 렌더링 → 사용자에게 HTML/JSON 응답 스프링 부트의 동작 구조를 예제 코드로 보자@Controllerpublic class HelloController { @GetMapping("/hello") public String hel..

[Spring boot] 서버 간 통신

서버 간 통신어떤 포털 사이트를 하나의 서비스 단위로 개발한다고 가정즉 블로그, 카페, 메일 등의 기능들을 하나의 애플리케이션에 통합했다는 뜻서비스를 이렇게 구성한다면 서버를 업데이트 하거나 애플리케이션을 유지보수 할 때마다 ‘사이트 작업 중입니다’ 라는 팻말을 걸고 작업을 해야됨그만큼 개발에 보수적인 입장을 취할 수 밖에 없고, 서비스 자체의 규모도 커지기 때문에 서비스를 구동하는데 걸리는 시간도 길어진다.이러한 문제를 해결하기 위해 나온 것이 → 마이크로서비스 아키텍처(MSA:Microservice Architecture)마이크로서비스 아키텍처는 단어 그대로 서비스 규모를 작게 나누어 구성한 아키텍처이 기능 적용 → 애플리케이션 하나에 여러 기능을 넣어 개발하지 않고 블로그 프로젝트, 카페 프로젝트,..

[Spring boot] 내장 WAS

내장 WAS스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Server)가 존재웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 ‘spring-boot-starter-web’의 경우 밑 그림과 같은 톰캣을 내장한다.스프링 부트이 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행할 수 있다. 필요에 따라서 톰캣이 아닌 다른 웹 서버(Jetty, Undertow 등)로 대체 할 수 있다.WAS이란?Was(Web Application Server)란?HTTP 요청을 받아서,자바로 만든 웹 프로그램(Servlet, JSP 등)을 실행하고,응답을 클라이언트에게 돌려주는 역할을 한다.자바로 만든 웹 서비스를 동작시키려면 WAS가 꼭 필요하다. WAS 동작 순서..

[Spring boot] 자동 설정

자동 설정스프링 부트 → 스프링 프레임워크의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경 설정을 알아서 찾아준다.예제@SpringBootApplicationpublic class Chapter1Application { public static void main(String[] args) { SpringApplication.run(Chapter1Application.class, args); }}@SpringBootApplication이걸 붙이기만 해도 Spring이 자동으로 필요한 설정과 Bean을 찾아서 알아서 등록해줌@SpringBootApplication 애너테이션3개의 애너테이션이 합쳐진 것포함된 어..