Hexagonal Architecture란?Hexagonal Architecture(헥사고널 아키텍처)는 소프트웨어 설계의 한 방법론으로, 시스템을 다양한 독립적인 모듈로 나누어 각각의 모듈이 서로 독립적으로 개발되고 테스트될 수 있도록 하는 것을 목표로 한다. 이는 클린 아키텍처(Clean Architecture)나 포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 불린다. Alistair Cockburn에 의해 제안된 이 아키텍처는 애플리케이션의 핵심 비즈니스 로직을 외부 환경과 독립적으로 만들고, 다양한 외부 서비스나 사용자 인터페이스와의 통합을 유연하게 할 수 있도록 돕는다. Hexagonal Architecture의 주요 구성 요소1. 핵심 도메인 (Core..
버그와 함께 춤을
우당탕탕 개발 블로그구글 스타트업 캠퍼스에서 열린 GDG Campus Korea의 행사에 다녀왔다. 이번 행사는 대학생 개발자를 위한 챕터인 GDG Campus Korea에서 주최한 특별한 이벤트로, 실제 회사에서의 업무 방식을 미리 경험해보고, 현업 멘토와의 네트워킹을 통해 개발 지식을 넓힐 수 있는 기회였다. 행사 소개GDG상사는 참가자들이 실제 회사에서 일하는 방식을 체험할 수 있도록 다양한 프로그램을 준비했다. 각 팀은 8명의 참가자와 1명의 멘토로 구성되었다.(아닌 팀도 있었다.) 나는 백엔드 개발자로서 알바 스쿼드 팀에 배정받았다. 이번 행사의 주요 목표는 중고거래 플랫폼인 GDG 상사를 더욱 발전시키기 위한 아이디어를 구체화하고, 실제로 구현해보는 것이었다. 알바 프로젝트 목표중고거래 플랫폼인 GDG 상사는 ..
유닛 테스트란?유닛 테스트(Unit Test), 또는 단위 테스트는 소프트웨어 개발 과정에서 가장 기본적이고 중요한 테스트 기법 중 하나다. 유닛 테스트의 목적은 애플리케이션의 개별 구성 요소, 즉 "유닛"이 예상대로 작동하는지 확인하는 것이다. 일반적으로 유닛은 메소드, 클래스, 또는 모듈과 같은 작은 코드 단위를 의미한다. 왜 유닛 테스트를 해야 하는가?유닛 테스트는 여러 가지 이유로 중요하다:코드 품질 향상: 유닛 테스트를 작성하면 코드의 결함을 조기에 발견할 수 있어 전반적인 코드 품질을 높일 수 있다.디버깅 용이: 특정 유닛이 잘못된 동작을 할 경우, 해당 유닛을 빠르게 디버깅할 수 있다.안정성: 코드 변경이 기존 기능에 미치는 영향을 최소화할 수 있다.문서화: 테스트 코드는 코드베이스의 동작을..
N+1 문제란?N+1 문제는 JPA나 ORM을 사용할 때 발생할 수 있는 성능 문제 중 하나다. 간단히 말해, 하나의 쿼리를 실행한 후 관련된 N개의 항목에 대해 추가로 N개의 쿼리가 실행되는 상황을 말한다. 예를 들어, 한 번의 조회 쿼리로 여러 개의 부모 엔티티를 가져온 후, 각 부모 엔티티와 관련된 자식 엔티티를 조회하기 위해 N번의 추가 쿼리가 실행되는 경우가 이에 해당한다. N+1 문제 예시Entity Class@Entitypublic class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "parent", fetch = FetchTy..
트랜잭션이란?트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키기 위해 수행하는 일련의 연산들을 말한다. 트랜잭션은 데이터의 무결성과 일관성을 보장하기 위해 ACID 속성을 따른다.원자성(Atomicity): 트랜잭션 내의 모든 작업이 완벽하게 수행되거나 전혀 수행되지 않아야 한다.일관성(Consistency): 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태를 유지해야 한다.격리성(Isolation): 트랜잭션이 실행되는 동안 다른 트랜잭션의 영향을 받아서는 안 된다.지속성(Durability): 트랜잭션이 완료되면 그 결과는 영구적으로 반영되어야 한다. JPA와 트랜잭션 처리JPA에서 트랜잭션 관리는 주로 EntityManager를 통해 이루어진다. 하지만 Spring Da..
Spring Data JPA 개요 및 사용 방법Spring Data JPA란?Spring Data JPA는 Spring 프레임워크의 일부로, JPA(Java Persistence API)를 쉽게 사용할 수 있도록 도와주는 라이브러리이다. Spring Data JPA는 리포지토리 추상화(Repository Abstraction)를 제공하여, 개발자가 데이터 접근 계층을 더욱 간편하게 구현할 수 있도록 돕는다. 이를 통해 반복적인 CRUD (Create, Read, Update, Delete) 작업을 줄이고, 복잡한 쿼리 작성도 손쉽게 할 수 있다. 왜 Spring Data JPA를 사용하는가?Spring Data JPA를 사용하는 이유는 다음과 같다:생산성 향상: 반복적인 CRUD 작업을 자동화하여 개발 ..
JPA 개요 및 동작 원리JPA란?JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하여 데이터를 저장, 수정, 삭제, 조회할 수 있도록 하는 자바 표준 API이다. JPA는 객체 지향 프로그래밍과 관계형 데이터베이스 간의 패러다임 불일치를 해결하는 데 중점을 두고 있으며, 개발자가 데이터베이스 작업을 보다 쉽게 할 수 있도록 도와준다. JPA 사용 이유JPA를 사용하는 이유는 다음과 같다:객체와 관계형 데이터베이스 간의 매핑: JPA는 객체 지향 프로그래밍의 장점을 살려 데이터베이스 테이블과 자바 객체 간의 매핑을 자동화한다.생산성 향상: JPA는 데이터베이스 작업을 추상화하여 반복적인 코드 작성을 줄여준다. 이는 개발자의 생산성을 크게 향상시킨다.유지보수성..
SOLID 원칙SOLID 원칙이란?SOLID 원칙은 객체 지향 프로그래밍에서 코드의 유지보수성과 확장성을 높이기 위한 다섯 가지 기본 원칙을 의미한다. 이 원칙들은 Robert C. Martin(일명 Uncle Bob)에 의해 제안되었으며, 잘 설계된 소프트웨어 시스템을 구축하는 데 중요한 가이드라인을 제공한다. SOLID는 다음 다섯 가지 원칙의 약자이다: 단일 책임 원칙(Single Responsibility Principle), 개방-폐쇄 원칙(Open/Closed Principle), 리스코프 치환 원칙(Liskov Substitution Principle), 인터페이스 분리 원칙(Interface Segregation Principle), 의존 역전 원칙(Dependency Inversion P..
Git Branch 전략여러 개발자가 하나의 저장소에 작업을 할 때, 협업을 좀 더 효과적으로 하기 위해 git branch에 대한 규칙을 정하고 저장소를 잘 활용하기 위한 workflow를 정의하는 것을 바로 git branch 전략이라고 한다. 소프트웨어 개발 팀에서는 프로젝트의 특성에 따라 적절한 브랜치 배포 전략을 채택하는 것이 중요하다. Git Branch 전략의 필요성Git branch 전략은 여러 명의 개발자가 동시에 작업할 때 특히 유용하다. 각자 다른 기능을 담당하는 브랜치를 사용하여 작업하면, 개발 중인 기능이나 수정사항이 서로 독립적으로 진행될 수 있다. 또한, 각각의 브랜치가 특정 기능, 이슈에 대응하여 특정 작업을 추적하고, 필요한 경우 작업 단위의 Rollback이 가능하여 프로..