전체 글

· 개발
3월쯤 내 유튜브 알고리즘이 MCP로 물들여졌던 시기가 있었다. 아마 그때가 MCP가 고점을 향해가던 시기가 아니었을까 싶다. 지금도 유튜브에 키워드를 치면 난리 어쩌구 MCP... 하며 전공자 비전공자 할 것 없이 다들 MCP를 사용하길래, 나도 블로그에 한 번 정리해 본다! MCP란?Model Context Protocol (MCP)는 AI 모델과 외부 애플리케이션, 데이터 소스를 표준화된 방식으로 연결하기 위한 개방형 프로토콜이다. MCP에서 가장 많이 하는 비유로 USB-C 포트가 있다. USB-C 포트처럼, Claude나 CSOR 같은 AI 에이전트가 MCP 서버에 꽂기만 하면 다양한 데이터 소스와 툴을 잘 다듬어진 프롬프트를 손쉽게 주고받을 수 있다는 것이다. MCP가 없으면 AI 앱이 다른 ..
2부 스프링과 객체지향 설계)스프링 프레임워크는 자바 기반의 오픈소스 애플리케이션이다. 특히 스프링 부트의 등장은 스프링의 사용성을 끌어올렸다. 트랜잭션 스크립트란?레이어드 아키텍처란?서비스는 왜 서비스라고 부를까?서비스는 왜 생성자 주입을 사용해야 할까?모듈이란 뭘까?패키지는 어떻게 구분하는 것이 좋을까? 레이어, 도메인 순서로 구성하는 것이 좋을까, 도메인,레이어 순서로 구성하는 것이 좋을까?애플리케이션의 핵심은 무엇일까, 스프링? JPA?Chapter 6. 안티 패턴스프링 개발자가 많이 저지르는 '구조적 실수'가 있다. 개발엔 정답이 없지만 유지보수나 확장성 관점에서 좋지 못하다 알려진 안티패턴은 존재한다. 6.1 스마트 UI 스마트 UI 패턴은 유명한 안티패턴이다. 스마트 UI는 다음과 같은 코드..
· Spring
오늘은 뜬금없이 MSA에서 SpringBoot Gateway 환경에서 Swagger 연동을 어떻게 하는지 정리하러 돌아왔다. 사실 요즘 프로젝트에서 갑작스럽게 MSA로 구조가 바뀌면서, 배포하고 설정하고 관리하는 일들이 갑자기 확 몰아쳤다. 이럴 때일수록 빠르고 정확한 문서화는 중요하고, Swagger를 통해 API를 통합적으로 보고 싶은데 막상 해보니 생각보다 간단하지만은 않아서 이 글을 쓰게 되었다. 프로젝트 상황과 Spring Cloud Gateway에서의 Swagger 통합우선 나는 원래는 하나의 모놀리식(Spring Boot) 프로젝트로 진행하고 있었다. 거기엔 당연히 Swagger 설정도 하나만 되어 있었다. 그런데 이번에 각기 다른 사용자 그룹을 위한 서비스를 기획하게 되면서, 구조를 멀티 ..
Chapter 5. 순환 참조이 부분은 Chapter4에서도 의존성 전이를 얘기하면서 다루기도 했고, 실제로 Entity 매핑을 하면서도 발생한 문제여서 잘 알고 있었다.그래서 조금은 순환 참조가 뭐인지 정리하기보단.. 해결방안을 위주로 가볍게 작성해 볼 예정이다.JPA를 활용하며 가장 대표적으로 볼 수 있는 순환 참조는 다음과 같은 양방향 매핑이다.@Data@NoArgsConstructor@Entity(name = "team")class TeamEntity { @Id private String id; @OneToMany(mappedBy = "myTeam") // Team -> Member private List members;}@Data@NoArgsConstructor@En..
Chapter 4. SOLIDSOLID는 객체지향에서 좋은 설계와 아키텍처에 빠질 수 없는 개념이다. 2000년대 초반에 고안한 5가지 원칙을 지칭하는 말로, 아래와 같은 원칙을 앞글자만 따서 부른다.단일 책임 원칙 (SRP: Single Responsibility Principle)개방 폐쇄 원칙 (OCP: Open-Closed Principle)리스코프 치환 원칙 (LSP: Liskov Substitution Principle)인터페이스 분리 원칙 (ISP: Interface Segregation Principle)의존성 역전 원칙 (DIP: Dependency Inversion Principle)각 원칙은 객체지향 언어에서 좋은 설계를 얻기 위해 개발자가 지켜야 할 규범과 같다. 또한, 각 원칙의 ..
Chapter 2 이후로는 멈췄었지만, 책은 다 읽었다. 현생에 치이다 보니 이제야 정리를 올린다.책이 정말 좋아서 배운 것도 많기에, 그냥 넘어가면 조만간 까먹을 거 같은 이슈로 꾸역꾸역 정리를 해본다. (내 머리는 RAM이다. 휘발성 메모리..) Chapter 3. 행동객체는 단순한 데이터 덩어리가 아니며 마치 자아를 가진 것처럼 동작해야 한다. 즉, 객체가 데이터로서 존재하는 것이 아니라 '행동'하는 것이 중요하다는 것을 의미한다. 그렇다면 객체 행동해야 한다는 것은 어떤 의미이며, 어떻게 해야 객체를 행동하게 만들 수 있을까? 가장 쉽게 객체를 행동하게 만드는 방법은 TDA 원칙을 적용하는 것이다. TDA 원칙은 객체를 행동하게 만든다. TDA의 묻지 말고 시켜라 라는 말 자체가 객체에 어떤 행동..
· Infra
기존에는 운영서버와 개발서버가 분리되어 있지 않았다. 기존 시스템과 동일하게 배포하기 위해서 ECS, RDS, ALB, Route 53과 같은 AWS 서비스들을 활용해서 배포를 진행했다. 배포 이전에 ECS 개념에 대해서 정리도 했었고 많이 찾아봤었다. 하지만 단순히 개념을 공부하는 것과 실제로 연결해 운영하는 것은 별개인 것 같다. ECS 도입이나 ECS와 Github Actions를 활용한 글은 많지만, 그 외 다른 AWS 서비스들까지 함께 활용해 전체 배포 자동화 구축에 대해 다룬 글은 드물었다. 혼자 여러 번 헤매다 보니, 이번 기회에 AWS ECS를 통한 배포를 기반으로 RDS, ALB을 함께 활용한 전체적인 배포 자동화 구축 과정을 꼼꼼히 정리해보려 한다.1. AWS ERC 생성Amazon E..
· Infra
나는 그동안 AWS EC2 서비스를 활용해 여러 번 애플리케이션 서버를 배포해 왔다. EC2는 클라우드의 대표 서비스이자 단순한 컴퓨팅 대여 서비스로, 클라우드 환경에 최적화되어 있어 대표적인 사례가 많기 때문에 자연스럽게 사용한 것 같다. 사실 뭐 그 이상의 기능까지도 필요 없었던 것도 사실이다.. 하지만 기존에 내가 인프라를 구축하는 프로젝트들과는 달리 이번 프로젝트는 이미 기존에 ECS를 사용하고 있었다. 기존 시스템을 관리해야 하기도 하고, 새로 리팩토링을 하면서 새롭게 ECS를 사용할 예정이기 때문에 이 기회에 ECS를 정리하고 사용해보려 한다.  AWS는 결국 서비스를 판매하는 판매처이기 때문에 서비스에 대해서 잘 설명해주고 있다. 그래서 이 글은 AWS 공식 홈페이지와 설명서들을 기준으로 E..
Chapter 2. 객체의 종류VO(Value Object)란 어떤 객체인가?DTO(Data Transfer Object)란 어떤 객체인가?DAO(Data Access Objec)란 어떤 객체인가?엔티티(Entity)란 어떤 객체인가? 흔히 검색하면 나오는 개념으로는 다음과 같다.VO는 Value Object로 값 객체라는 뜻이다. 쓰기 작업이 불가한 읽기 전용 객체를 말한다. DTO는 계층 간 데이터 교환에 사용되는 객체이다. 대표적인 예로 DB에 데이터를 넣을 때나 DB에서 데이터를 불러올 때 DTO를 사용한다.DAO는 데이터베이스에 접근하는 데 사용되는 객체이다.엔티티는 JPA @Entity이며, 테이블에 1:1로 대응되고, 각각을 구별할 수 있는 식별자를 가지고 있다. 하지만 결코 충분하지 못하며..
늦은 신년 목표 한 달에 한 권 이상 읽기이다.. 잘 정리해보려 한다 ㅎㅎ1부 객체지향)객체지향 프로그래밍은 현실 세계의 복잡성을 풀어내는 방법 중 하나로, 현재 가장 인기 있는 프로그래밍 패러다임이라 해도 과언이 아니다. 1. 순차지향, 절차지향, 객체지향 프로그래밍이란?2. 객체지향 프로그래밍에서 역할, 책임, 협력을 강조하는 이유가 뭘까?3. VO, DTO, DAO, 엔티티란 뭘까?4. 행동이 강조되는 이유가 뭘까?5. SOLID와 디자인 패던은 어떻게 이해하는 게 좋을까?6. 순환 참조를 피해야 하는 이유가 뭘까? 책의 1부 객체지향을 읽으면 다음과 같은 질문에 대답을 할 수 있을 것이다. (물론 내 글은 Chpter1만 다루고 있다.)Chapter 1. 절차지향과 비교하기자바를 사용하면서도 절차..
가든잉
garden