Dev 88

헥사고날 아키텍처(Hexagonal Architecture) 쉽게 알기

이전 MSA에 대해서 리뷰 했는데, 이번 게시글은 헥사고날 아키텍처다. 해당 아키텍처가 어떤 경우에 선택되어야 하는지 공유하면 좋을 것 같아서 글을 작성해 본다. 헥사고날에 대해 알기 전에, 전통적인 아키텍처에 대해 먼저 정리하고자 한다. 계층형 아키텍처(Layered Architecture) 가장 대중적으로 사용되는 전통적인 아키텍처로 비즈니스 로직, 데이터 액세스, 프레젠테이션 계층으로 구성된다. 일반적으로 많이 사용하는 repository(database, persistenece layer), service(domain layer), controller(presentation layer)를 생각하면 쉽다. 같은 목적의 코드들을 같은 계층으로 그룹화한 것으로, 역할과 관심사를 기준으로 계층을 분리한다..

Dev/Architecture 2024.05.29

왜 소프트웨어 프로그램 설계 시 MSA를 선택할까? - MSA : MicroService Architecture의 모든 것

오늘 포스팅할 주제는 MSA다.  요즘 IT회사에서 채용할 때 우대사항에 항상 들어가 있는 항목이기도 하다. 그렇다면 왜 MSA를 선택할까?마냥 MSA가 소프트웨어 설계관점에서 베스트일까?  MSA를 자세하기 알아보기 전에, 전통적으로 사용했던 모놀리식에 대해 알아보자. 모놀리식 아키텍처(MA:Monolithic Architecture)란?모놀리식 아키텍처는 애플리케이션 내의 모든 기능과 서비스가 함께 맞물려 단일 유닛으로 운영되는 것을 의미한다.  단일 유닛으로 운영된다는 것은 전체 애플리케이션이 단일 코드로 작성되어 단일 데이터베이스에 연결되는 것이다.이해하기 쉽게 쿠팡에서 사용했었던 모놀리식 아키텍처 구성도를 가져왔다. 초기 쿠팡의 서비스는 모놀리식 아키텍처로 구성되어 있었는데, 위 그림과 같이 하..

Dev/Architecture 2024.05.29

JWT 란 무엇인가 ? - Session과 JWT 인증 방식의 비교 / 예제 코드 포함 ( feat. OAuth )

오늘 게시글은 인증 시 많이 사용하는 JWT의 기본 개념과 실제로 어떻게 구현하는지에 대한 내용을 정리해보고자 한다. 관련해서 OAuth 도 공유하면 좋을 것 같아서 함께 묶었다. 이전에 Swagger 사용 시 JWT를 통한 인증을 구현할 때 페이지에서 JWT 값이 제대로 넘어오지 않던 오류가 났던 문제를 해결한 적이 있는데, 관련 글은 아래에 첨부했다. 내 개발 블로그에서 제일 조회수가 꾸준히 증가하는 게시글인 것 같다. 누군가에게 도움이 되었을 생각을 하니 뿌듯하다 ^0^ 2024.01.29 - [Dev/springboot] - Swagger 를 사용해서 Type 이 Bearer 인 JWT Token 인증하기 Swagger 를 사용해서 Type 이 Bearer 인 JWT Token 인증하기개발환경 I..

Dev/Etc 2024.05.20

스프링 빈 라이프 사이클 ( Spring Bean Life Cycle ) - Bean Scope, Bean Profile, Bean 초기화

해당 게시글은 사실 DI 나 IoC작성시 관련해서 함께 작성하려고 했는데 어쩌다 보니 작성 순서가 뒤로 밀렸다.  이 글을 읽고나면 아래 순서대로 한번씩 읽어보는 것을 추천한다 :) ( 사실 이번 글을 작성하다가 세션 종료로 글이 통째로 한번 날아가서 마음이 아픈 상태다 ^_ㅠ..)  2024.05.06 - [개발/springboot] - Spring의 DI - 코드를 유연하고 단순하게 하는 방법 Spring의 DI - 코드를 유연하고 단순하게 하는 방법이전 AOP에 이어 Spring POJO의 또 다른 키워드인 DI와 IoC에 대한 개념을 함께 정리해볼까 한다.AOP에 대한 게시글이 궁금하다면 아래 링크를 참조 바란다. 2024.05.06 - [개발/springboot] - Spring의 AOP - 공..

Dev/Springboot 2024.05.16

AOP 심화 - @Advice 예제 포함

이전 게시글에서 AOP에 대해 간단하게 정리했는데 실제 예제등에 대해 부족한점이 있는 것 같아 내용을 보충하고자 해당 게시글을 작성하게 되었다.  2024.05.06 - [개발/springboot] - Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법 Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법java OOP 관련 게시글을 작성하다가 Spring POJO 에서 필수적으로 알아야 하는 AOP/IoC/DI/PSA에 대해 정리한 글을 공유하면 좋을 것 같아 글을 남겨 본다.  그중에서도 이번 게시글은 AOP에 관련된 내용zigo-autumn.tistory.com  JoinPoint 와 ProceedingJoinPointJoinPoint@Advice가 적용..

Dev/Springboot 2024.05.16

Spring 의 PSA - 웹 기술 스택을 간편하게 변경할 수 있는 방법

Spring POJO 구조의 마지막 내용이다.  AOP와 DI 관련된 내용은 다음 게시글을 참고 바란다. 2024.05.06 - [개발/springboot] - Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법 Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법java OOP 관련 게시글을 작성하다가 Spring에서 필수적으로 알아야 하는 AOP/IoC/DI/PSA에 대해 정리한 글을 공유하면 좋을 것 같아 글을 남겨 본다.  그중에서도 이번 게시글은 AOP에 관련된 내용이다.zigo-autumn.tistory.com 2024.05.06 - [개발/springboot] - Spring의 DI - 코드를 유연하고 단순하게 하는 방법 Spring의 DI - 코..

Dev/Springboot 2024.05.06

Spring의 DI - 코드를 유연하고 단순하게 하는 방법

이전 AOP에 이어 Spring POJO의 또 다른 키워드인 DI와 IoC에 대한 개념을 함께 정리해볼까 한다.AOP에 대한 게시글이 궁금하다면 아래 링크를 참조 바란다. 2024.05.06 - [개발/springboot] - Spring의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법 Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법java OOP 관련 게시글을 작성하다가 Spring에서 필수적으로 알아야 하는 AOP/IoC/DI/PSA에 대해 정리한 글을 공유하면 좋을 것 같아 글을 남겨 본다.  그중에서도 이번 게시글은 AOP에 관련된 내용이다.zigo-autumn.tistory.com  의존성 주입(DI : Dependency Injection)이란?DI란 외..

Dev/Springboot 2024.05.06

Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법

java OOP 관련 게시글을 작성하다가 Spring POJO 에서 필수적으로 알아야 하는 AOP/IoC/DI/PSA에 대해 정리한 글을 공유하면 좋을 것 같아 글을 남겨 본다.  그중에서도 이번 게시글은 AOP에 관련된 내용이다.  2024.05.01 - [개발/java] - Garbage Collection과 JVM 메모리 구조 ( OOP를 제대로 알기 ) Garbage Collection 과JVM 메모리 구조 ( OOP를 제대로 알기 )자바를 사용해서 프로그램 코드를 작성하다 보면 간혹 코드 내용에는 문제가 없는 것 같은데 의도와 다르게 실행될 때가 있다. 경험상 이것은 변수가 JVM에서 어떻게 적재되고 읽히는지 제대로zigo-autumn.tistory.com  AOP 란? AOP는 Aspect O..

Dev/Springboot 2024.05.06

Garbage Collector 과JVM 메모리 구조 ( OOP를 제대로 알기 )

자바를 사용해서 프로그램 코드를 작성하다 보면 간혹 코드 내용에는 문제가 없는 것 같은데 의도와 다르게 실행될 때가 있다. 경험상 이것은 변수가 JVM에서 어떻게 적재되고 읽히는지 제대로 알지 못하고 작성한 경우가 많았다. 가장 기초적이지만, 실무를 하다보면 나도 모르게 놓칠 수 있는 JVM 구조의 기초와 OOP에 대한 개념을 정리하고자 한다. OOP 란 ? ( cf. OOPS )객체지향의 기본 개념은 '실제 세계는 사물로 이루어져 있으며, 발생하는 모든 사건들은 사물 간의 상호작용이다'라는 것이다.실제 사물의 속성과 기능을 분석한 다음, 데이터와 함수로 정의함으로써 데이터와 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상 세계를 구현하고 이 가상세계에서 모의실험을 함으로써 많은 시간과 비용을 절약할..

Dev/Java 2024.05.01

직렬화(Serialization) - 객체를 주고 받는 방법

예제 소스 링크 직렬화란? 객체를 데이터 스트림으로 만드는 것을 뜻한다. 다시 얘기하면 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 의미한다. 반대로 스트림으로부터 데이터를 읽어와서 객체를 만드는 것을 역직렬화(deserialization)라고 한다. 객체는 클래스에 정의된 인스턴스변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다. 객체는 오직 인스턴스변수들로 구성되어 있다. 인스턴스변수는 인스턴스마다 다른 값을 가질 수 있어야하기 때문에 별도의 메모리 공간이 필요하지만, 메서드는 변하는 것이 아니라서 메모리를 낭비해 가면서 인스턴스마다 같은 내용의 코드(메서드)를 포함시킬 이유는 없다. 그래서 객체를 저장한다는 것은 바로 객체의 모든 인스턴스변수의 값을 저장..

Dev/Java 2024.04.15