Layered (계층형) 아키텍처 Layered 아키텍처는 웹서비스 개발 시 가장 널리 쓰이며 역할에 따라 여러 레이어로 구성되는 특징이 있다. Presentation 레이어 : 클라이언트에 상호작용을 위한 View를 제공하고 API 요청을 처리한다. Application 레이어 : Persistence, 기타 서비스 등에 의존하고 비즈니스의 흐름을 제어한다. Persistence 레이어 : DB에 접근하여 영구적으로 데이터를 쓰고 읽는 각종 인터페이스를 제공한다. Layered 아키텍처는 의존성의 방향이 위에서 아래로의 한 방향으로만 흘러가므로 구현 난이도가 쉬운 것이 장점이지만 객체지향적인 측면에서 조금 부족할 수 있다. 글을 진행하기에 앞서 용어가 혼동될 수 있는데 Application == api..
전체 글 검색 결과
요즘 많은 사람의 입에 ChatGPT가 많이 오르내리고 있는데 도대체 얼마나 대단한지 궁금해졌다. 개발자에 대해 간단히 물어봤는데 생각보다 친절하고 상세하게 답(가르침)을 줘서 감명받아 블로그를 써보게 됐다. ChatGPT, 든든한 코딩 비서의 가능성 요즘 블로깅을 하면서 공부하고 있는 개념들(Spring Framework, Domain Driven Design)에 대해 ChatGPT에 대해 물어보다가 대답을 너무 잘해주고 심지어 코드 샘플까지 꽤 잘 만들어줘서 깜짝 놀랐다. 물론 AI가 개발자를 당장 대체하긴 어려워 보이며 당분간 코드 샘플 생성, 코드 리뷰 등 프로그래밍을 서포트해 주는 정도로 사용될 것 같다. 아직까진 생체 컴퓨터인 인간이 다른 동료들과 집단지성으로 의사소통하고 통합적인 사고를 통해..
Spring Security Basic Practice Spring Security는 인증(Authentication) 및 인가(Authorization)를 담당하는 스프링 프레임워크이다. 먼저 ChatGPT에게 Spring Security에 대해 물어봤는데 정확하고 상세하게 대답해줘서 놀랐다. 누군가 Spring Security에 대해 물어본다면 ChatGPT처럼 말하면 아주 좋을 것 같다. (대단;;) 이번 블로깅에서는 Spring Security의 기초 구조에 대해 정리해보려고 한다. Basic Web Security Servlet 기반으로 구동되는 웹서비스는 인증, 인가, 변환, 압축, 암호화 등 비즈니스 로직이 수행되기 전에 공통으로 사용되는 로직을 Servlet Filter로 구현한다. 위 그..
Spring Authorization Server Practice Spring Authorization Server 프레임워크는 OAuth 2.0 중 Authorization Server 부분을 쉽게 구현할 수 있게 해준다. 우선 OAuth 2.0에 대해 간략히 살펴보자. OAuth 2.0 rfc6749 문서에 따르면 'OAuth 2.0 인가(인증) 프레임워크'라는 말로 OAuth 2.0을 풀이한다. OAuth 2.0은 서드파티 앱이 특정 서비스의 제한이 걸린 자원에 접근하기 위해 리소스 오너(사용자)의 허락을 받아 자원에 접근을 하게되는 일련의 플로우를 제공한다. 구글, 페이스북 등 유수의 IT 기업들은 자신의 우수한 회원 체계, 여러 코어 서비스를 바탕으로 OAuth 2.0 서비스를 제공하고 있다. ..
DDD 프랙티스 #1 자동차 공장 DDD스러운 코드를 작성하는 방법을 탐구하는 자동차 공장 예제. JPA 기반으로 작성한 예제이며 보다 핵심 도메인에 집중할 수 있는 장점이 있음을 확인할 수 있었다. 맨 아래 링크로 가서 README.md와 소스코드를 각각 켜놓고 읽는 것도 괜찮다. (테스트코드 포함) 자동차 공장 설명 Domain 간 유기적인 관계를 크게 이용하지 않는 legacy 예제와 JPA의 여러 옵션을 활용하여 Aggregate 내부의 일관성을 유지하고 도메인에서 핵심이 되는 Aggregate Root등을 파악하기 쉬운 ddd 예제를 작성하였다. 자동차 공장에는 자동차, 바퀴 개념이 존재하는데 자동차 없는 바퀴는 존재하지 않는 것을 전제로 하여 자동차는 Aggregate Root, 바퀴는 자동차..
DDD Core DDD에서 언급되는 Aggregate Root, Domain Service, Domain Event 등을 코드로 녹여냈다. 예전에 함께 일했던 동료가 작성한 것을 보고 감명 깊었던 적이 있어서 나도 이렇게 코드를 작성해본다. Aggregate Root 특정 Aggregate(애그리거트)에 포함된 Entity끼리는 변경에 대해 일관성(같은 Root를 통해 함께 변경됨)을 가져야 한다. Aggregate의 Root를 담당하는 Entity만 Domain에서 Repository를 유일하게 소유할 수 있어 제어의 창구가 되어 Aggregate 내의 다른 Entity들을 관리한다. AggregateRoot interface를 정의하였는데 이것을 Aggregate Root가 되는 Entity에 붙여서..