일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- C언어
- 인프런
- 따라하며 배우는 C언어
- BASIC
- 백준
- dfs
- JavaScript
- String
- 종만북
- Algorithm
- 생활코딩
- sorting
- C
- 따라하면서 배우는 C언어
- 따배씨
- DP
- BFS
- Math
- Algospot
- web
- graph
- server
- Python
- php
- greedy
- BOJ
- 정수론
- Java
- udemy
- Cleancode
- Today
- Total
목록전체 글 (426)
몽상실현개발주의
Entity의미: 고유 식별자(ID)를 가진 도메인 객체. 특징 데이터베이스 테이블과 매핑되는 경우가 많음 (JPA Entity). equals/hashCode는 식별자 기준으로 비교. 상태 변경 가능 (mutable). 예시@Entitypublic class Employee { @Id private String id; private String name; private String department;}VO (Value Object)의미: 값 그 자체를 표현하는 객체. 값이 같으면 같은 객체로 취급. 특징 불변(Immutable)으로 설계 권장. 별도의 식별자 불필요. 도메인에서 의미 있는 속성을 묶음. 예시public class Address { priva..
MyBatis는 왜 서비스 레이어가 뚱뚱해질 수밖에 없는가?2. 서비스 비대화를 막는 5가지 보완 패턴과 코드 예시MyBatis를 쓰면 서비스가 두꺼워지기 쉽습니다.하지만 아래 5가지 패턴을 적용하면 비대화를 완화할 수 있습니다. 1. Application Service ↔ Domain Service 분리Application Service: 트랜잭션 경계, 순서 제어 Domain Service: 비즈니스 규칙, 검증 ➡️ 서비스에는 오케스트레이션만 남기고, 규칙은 도메인 서비스로 분리 @Service@RequiredArgsConstructorpublic class CreateAppointmentUseCase { private final AppointmentOrchestrator orchestra..
MyBatis는 왜 서비스 레이어가 뚱뚱해질 수밖에 없는가?1. JPA와 비교하며 살펴보는 Transaction Script 패턴의 함정1. 접근 철학의 차이MyBatisSQL Mapper → SQL 직접 작성, VO/DTO 매핑.여러 테이블 조인, 후속 로직을 서비스에서 직접 오케스트레이션.서비스 코드가 절차적 스크립트처럼 길어짐.➡️ 서비스가 뚱뚱해지는 구조적 성향JPAORM → 엔티티와 관계를 선언해두면 findById, findAll로 객체 그래프 조회.서비스는 비즈니스 규칙에만 집중.데이터 조립은 프레임워크가 처리.➡️ 서비스가 얇아짐2. MyBatis 서비스 코드 예시사원 발령 등록을 MyBatis로 작성하면:EmpVo emp = empMapper.findById(empId);if (emp =..
1. CQRS 기본 개념CQRS(Command Query Responsibility Segregation)는 쓰기(Command)와 읽기(Query)를 명확히 분리하는 설계 원칙이다.Command상태를 변경하는 작업 (INSERT, UPDATE, DELETE)부작용 있음일반적으로 반환값은 없음 (또는 성공 여부, ID 등 최소한)Query상태를 조회하는 작업 (SELECT)부작용 없음데이터를 반환하는 것에만 집중👉 핵심: 한 메서드 안에서 조회와 수정이 섞이지 않도록 분리한다.2. 잘못된 예시 (CQRS 위배)public Employee findAndUpdate(String empId) { Employee e = employeeRepository.findById(empId).orElseThrow(..
데이터베이스를 쓰다 보면 “조회 요청에도 트랜잭션을 열어도 괜찮을까?”라는 질문이 자주 나옵니다. 특히 스프링 같은 프레임워크는 `@Transactional`을 쉽게 붙일 수 있어서, 무심코 모든 요청을 트랜잭션으로 감싸는 경우도 많죠. 결론부터 말하면: 👉 단순 SELECT 한 번만 하고 바로 끝낸다면 큰 문제는 없다.👉 하지만 트랜잭션을 오래 열어두면 락보다 커넥션·Undo Log 유지가 문제가 된다. 1. Undo Log란 무엇인가?InnoDB 같은 엔진은 `UPDATE/DELETE/INSERT`를 할 때 기존 데이터를 Undo Log 에 기록합니다. 이유는 MVCC(다중 버전 동시성 제어) 때문입니다. 어떤 트랜잭션은 최신 데이터를 보지만, 아직 끝나지 않은 다른 트랜잭션은 시작 당시의..

Java 컬렉션 프레임워크는 데이터를 그룹으로 관리하고 조작하는 데 사용되는 인터페이스와 클래스를 제공하는 중요한 구성 요소입니다. 이번 포스트에서는 Java의 주요 컬렉션 인터페이스와 그들의 상속 관계에 대해 알아보겠습니다.주요 컬렉션 인터페이스Collection Interface:모든 컬렉션 클래스가 구현해야 하는 기본 인터페이스입니다.주요 메서드: add(), remove(), size(), clear(), contains(), isEmpty(), iterator(), 등.List Interface:순서가 있는 요소의 컬렉션을 정의합니다. 중복 요소를 허용합니다.구현 클래스: ArrayList, LinkedList, Vector, Stack.주요 메서드: get(), set(), add(), rem..
Java의 리플렉션(Reflection) 기능은 클래스의 구조를 동적으로 조사하고 조작할 수 있는 강력한 기능으로, 프로그램의 유연성과 확장성을 대폭 향상시킬 수 있습니다. 하지만, 리플렉션을 통한 private 필드나 메소드에 대한 접근은 심각한 보안 문제를 야기할 수 있어, 사용 시 많은 주의가 필요합니다 리플렉션의 기본 사용Java에서 리플렉션을 이용해 클래스의 정보를 얻거나, 객체를 생성하고 메소드를 호출할 수 있습니다. 예를 들어, java.util.Date 클래스의 모든 메소드를 조회하는 간단한 예제는 다음과 같습니다import java.lang.reflect.Method;import java.util.Date;public class SimpleReflectionExample { publ..
Spring Boot는 Java 개발자들에게 강력한 프레임워크를 제공하여, 비즈니스 애플리케이션을 빠르고 효율적으로 개발할 수 있게 돕습니다. 특히, 의존성 주입(Dependency Injection, DI)은 Spring Boot의 핵심 기능 중 하나로, 애플리케이션의 결합도를 낮추고, 코드의 재사용성을 높이며, 테스팅을 용이하게 합니다. 이 글에서는 Spring Boot에서 사용되는 두 가지 주요 의존성 주입 방식인 @Bean과 @Autowired에 대해 자세히 알아보겠습니다. # @Bean 과 @Configuration 의 사용@Bean 어노테이션은 메소드에 사용되어, 해당 메소드가 Bean 객체를 생성하고 반환하는 것을 나타냅니다.이 메소드들은 주로 @Configuration 이 붙은 클래스 내에..