본문 바로가기

기타107

[JWT] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 이론편 안녕하세요. 오늘은 JWT와 그 기본적인 스펙에 대해 자세히 알아보는 시간을 가져보도록 하겠습니다.저의 옛날 포스팅에 보면 JWT에 대해서 간단히 설멍했던 글이 있습니다.[REST API] REST API의 Security With JWT하지만 너무 단순한 개념적인 부분만 설명드렸기 때문에 이번 기회로 제대로 정리해보고자 합니다.JWT 란 무엇인가 ?JWT는 Json Web Token의 약자로써 서로다른 기기에 데이터를 전달할 때 사용하는 방법중 하나입니다.구성은 기본적으로 Base64포맷이며 Header와 Body(claim 이라고 부르기도 합니다) 그리고 Signature 부분으로 나뉘어집니다. 실제로 JWT는 아래처럼 생겼습니다. .을 기준으로 slice하면 첫번째 부분부터 Header, Body,.. 2023. 2. 19.
[기타] 서비스의 일반적인 보안 취약성 - 2편 안녕하세요. 오늘 포스팅은 이전 포스팅에서 다루지 않았던 서비스의 일반적인 보안 취약성 4가지에 대해서 알아보는 시간을 가져보겠습니다. 리마인드 해보면 이전 시간에 다루지 않은 기본 취약성 4가지는 아래와 같습니다.주입 (Injection)기밀 데이터 노출메서드 접근 제어 부족알려진 취약성이 있는 종속성 이용주입 (Injection)Injection 공격은 여러 범위에서 사용할 수 있는 공격입니다. 이는 서비스의 시스템에 특정 데이터를 집어넣어 서비스에서 기본적으로 제공하지 않는 정보를 취득할 수 있는 공격입니다. 여러 유형이 있으며 앞어 확인했었던 XSS 역시 주입 공격의 일종이라고 할 수 있습니다. 대표적으로는 SQL Injection, OS Command Injection 등이 있습니다.주입 공격을.. 2022. 11. 12.
[기타] 서비스의 일반적인 보안 취약성 - 1편 안녕하세요. 1달 정도만에 새로운 포스팅으로 찾아 뵙습니다. 오늘은 웹 어플리케이션의 일반적인 보안 취약성에 대해서 알아보는 시간을 가져보고자 합니다. 이렇게 보안 취약성을 알아 본 후 Spring Security의 사용으로 이를 방어하는 방법까지 알아보도록 하겠습니다.개요웹 어플리케이션을 개발함에 있어서 목표로 하는 비즈니스를 문제를 해결하는 기능을 개발하는 것은 중요합니다. 하지만 이러한 기능적인 부분 뿐만 아니라 비기능적인 개발또한 중요합니다. 비기능적인 부분이라는 것은 실제 기능에는 영향이 없지만 부수적으로 고려해야할 사항을 말합니다. 대표적으로 성능, 확장성, 가용성, 그리고 보안이 있는데요.이 중 오늘 이야기하고자하는 보안에 대해서 이야기해보자면 이를 중요하게 생각하지 않으면 어플리케이션의 수.. 2022. 11. 8.
Open API Spefication 활용하기 - 4편 ( yaml 파일 기반으로 자동으로 retrofit2 코드 생성하기 ) 안녕하세요. 오늘은 Open API Specification 활용하기 마지막편입니다. 오늘 알아볼 내용은 3편에서 자동으로 만든 Open API Specification yaml을 기반으로 자동으로 retrofit2 코드를 만들어보도록 하겠습니다. 환경 Client의 환경은 이전 프로젝트와 동일하게 Spring Boot, Kotlin 환경으로 진행하도록 하겠습니다. kotlin 1.6.21 Spring Boot 2.7.3 gradle kotlin dsl 7.5 yaml 파일 자동으로 만들어낼 client Open API Specification 파일은 아래와 같습니다. 아래 파일은 이전 시간 3편에서 자동으로 만들어낸 yaml 파일과 동일한 파일입니다. 3개의 API Operation을 가지고 2개의 D.. 2022. 9. 15.
Open API Spefication 활용하기 - 3편 ( Spring Boot 에서 yaml 파일 자동으로 만들기 ) 안녕하세요 ! 오늘은 Open Api Specification 3번째 시간입니다. 오늘 포스팅할 주제는 Spring Boot에서 Controller Class를 만들고 이렇게 만들어진 Controller Class를 기반으로 자동으로 yaml 파일을 만들어보도록 하겠습니다. 환경 간단하게 서버의 환경을 말씀드리면 아래와 같습니다. 저는 테스트를 kotlin 기반으로 작성했지만 Java로도 충분히 동일한 결과를 얻어내실 수 있을 것입니다. kotlin 1.6.21 Spring Boot 2.7.3 build.gradle.kts plugins spring boot의 Controller 코드를 자동으로 변환하기 위해서는 아래의 plugin이 추가로 필요합니다. 해당 플러그인을 추가해주세요. 1.4.0 버전은 2.. 2022. 9. 12.
Open API Spefication 활용하기 - 2편 ( yaml 파일 분석하기 ) 안녕하세요. 오늘은 Open API Specification 2편입니다. 이전시간에 yaml 파일과 json 파일을 샘플로 확인했었습니다. 오늘은 해당 샘플 파일을 뜯어보면서 Open API Spefication의 구성요소들에 대해서 알아보는 시간을 가져보도록 하겠습니다. 샘플 아래는 이전 시간에 확인했던 Open API Specification의 전체 yaml 파일입니다. 파일을 보면 위에서부터 버전, 정보, 그리고 server의 주소 및 각 path에 대한 정보가 담겨져있습니다. 더보기 openapi: 3.0.1 info: title: OpenAPI definition version: v0 servers: - url: http://localhost:8080 description: Generated s.. 2022. 9. 9.
Open API Spefication 활용하기 - 1편 ( Overview ) 안녕하세요. 오늘부는 Open API Specification에 대해서 알아보고 Client와 Server의 API를 일치시키는 자동화 과정에 대해서 알아보도록 하겠습니다. 이번 시간에는 기본적으로 OPen API Spescification이란 무엇이며 어떻게 구성되어있으며 어떻게 사용할 수 있을지에 대해서 알아보며, 이후 시간에는 yaml 파일을 분석해보도록 하겠습니다. 그리고 나서 실습으로 OpenAPI Specification Tool을 이용하여 클라이언트 소스를 생성해보기도 하고 서버코드를 기반으로 OpenAPI Specification을 작성해보도기도 하겠습니다. OpenAPI Specification 이란 OpenAPI Specification은 HTTP API의 인터페이스를 정의하는 문서입니.. 2022. 9. 2.
Event Sourcing 맛보기 - 이론편 안녕하세요 오늘은 이전 시간에 CQRS에 대해서 알아보는 시간에 이어서 Event Sourcing에 대해서 알아보는 시간을 가져보도록 하겠습니다.Event Sourcing 이란 ?이벤트 소싱이란 application의 모든 상태를 일으키는 이벤트를 순서에 맞게 저장하여 status를 만들어내는 방법입니다. 먼저 말씀 드리면 사실 일반적인 경우에 필요하진 않습니다. 아니, 대부분의 경우에는 이렇게 구현할 필요하가 없습니다. 하지만 필요한 경우가 있고 장점도 충분히 가지고 있습니다. 설계할 때 몰라서 고려하지 않는 것 보다는 알아두면 좋은 설계 테크닉 정도로 생각하시면 좋을것 같습니다.먼저 일반적으로 어플리케이션에서 데이터 모델을 저장하는 방법은 현재 상태를 저장하는 방법을 이용합니다. 여기에는 NoSQL,.. 2022. 8. 22.
[기타] 가독성(readable) 좋은 코드와 인지 부하(recognite load)에 대한 고찰 안녕하세요. 오늘은 가독성 좋은 코드란 어떤 코드인가에 대해 우연히 책을 읽다 공감가는 글을 발견 하였고 스스로의 생각을 정리해보면 좋겠다라는 생각을 가지게 되었습니다. 오늘은 제가 생각하는 가독성 좋은 코드는 어떤 코드인가에 대해서 한번 포스팅하려고 합니다. 코드 작성과 가독성 좋은 코드 코드를 작성할 때 가독성(readability)을 신경쓰면서 작성하는 것은 당연한 이야기 입니다. 가독성 좋은 코드란 그 코드를 읽었을 때 이해하기 쉬운 코드를 뜻합니다. 가독성 좋은 코드를 위한 팁과 내용들은 대표적으로 클린코드라는 책이 있고 또한 조금만 검색해도 가독성을 높이기 위한 많은 자료들이 나옵니다. 실제로 프로젝트를 진행하다보면 새롭게 처음부터 작성하는 경우도 있지만 대부분의 경우 기존의 코드를 수정하거나.. 2022. 6. 28.
CQRS(Command and Query Responsibility Segregation) 맛보기 - 실습편 안녕하세요. 이전 포스팅에서 우리는 CQRS는 어떤것이고 어떤 장점과 단점을 가지고 있는지 함께 보는 시간을 가져보았습니다. 오늘은 CQRS를 한번 실습해보는 시간을 가져보도록 하겠습니다.이전 시간에 CQRS를 설명할 때 두가지 모델뿐만 아니라 CQRS를 지속적으로 이어주기 위한 사이드적인 매커니즘들이 필요하다고 말씀드렸었습니다. 그러한 부분을 함께 보도록 하겠습니다.1편 : CQRS(Command and Query Responsibility Segregation) 맛보기 - 이론편환경오늘 포스팅에서 사용할 환경은 아래와 같습니다. write DB의 DataSource는 MongoDB를 이용합니다. 그리고 Read 모델의 Repository는 Redis 라고 명시해 두었지만 실습이기 때문에 빠른 구현을 .. 2022. 6. 25.
CQRS(Command and Query Responsibility Segregation) 맛보기 - 이론편 안녕하세요. 오늘은 CQRS 패턴이란 무엇이고 어떻게 구현하며 이 패턴으로 시스템을 개발하였을 때 어떠한 장점과 단점을 가지는지에 대해서 알아보는 시간을 가져보도록 하겠습니다.DDD와 CQRSCQRS란 무엇인가에 대해서 이야기 하기전에 앞서서 우리는 먼저 DDD에 대해서 이야기를 할 필요가 있습니다.간단히게 DDD에 대해서 설명하고 넘어가도록 하겠습니다. DDD는 Domain Driven Design의 약자로 어플리케이션을 비즈니스 Domain별로 나누어 설계 및 개발을 진행하는 개발 방법론입니다. 여기서 Domain은 비즈니스를 말합니다. 그리고 DDD에서는 비즈니스 중심으로 개발하면서 비즈니스에 매핑되는 도메인 모델을 가지게 되는데 이는 비즈니스 자체를 추상화한 설계도로써 도메인 서비스의 중심으로 동.. 2022. 6. 16.
[kotlin] 레거시(legacy) 코드 리팩토링하기 3편 - 리팩토링 진행하기 1편 : 레거시(legacy) 코드 리팩토링하기 1편 - 테스트 코드를 작성해야하는 이유 2편 : 레거시(legacy) 코드 리팩토링하기 2편 - 리팩토링 진행하기 안녕하세요. 레거시를 리팩토링하는 3번째 시간입니다. 오늘은 이전 포스팅에서 만들어둔 라인커버리지 100%의 테스트코드에 대한 신뢰를 바탕으로 코드가 좋은 가독성을 가지는 방향으로 리펙토링을 실제로 진행해보고자 합니다. 환경 환경은 이전 시간과 마찬가지로 아래와 같습니다. 기본적인 테스트 프레임워크는 JUnit5를 사용하며 mockking을 위해서 Unit 테스트 라이브러리인 mockk를 추가로 사용합니다. // JUnit5 testImplementation("org.springframework.boot:spring-boot-starter-t.. 2022. 5. 16.