일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- optional
- 스터디카페
- 사전캠프
- 스파르타사전캠프
- 내일배움캠프
- 계층형
- jvm
- Framework
- 캡슐화
- 프레임워크
- 레퍼클래스
- springboot
- 스파르타코딩클럽
- static
- 스파르타코딩클럽 #사전캠프
- 스파르타코딩클럽 #개발자 #백엔드
- Spring
- 깃헙
- til #데이터베이스 #sql
- 요시
- 키오스크
- 스프링부트
- 함바그
- 메모리구조
- Til
- Java
- 패키지구조
- 자바
- 깃
- 도메인별
- Today
- Total
목록IT공부/Spring Boot (7)
John's Code Journey

📦 스프링 프로젝트, 패키지 구조는 도메인별? 계층형?Spring Boot로 프로젝트를 만들다 보면 꼭 고민하게 되는 것 중 하나가 패키지 구조이다.“Controller는 controller에, Entity는 entity에… 이렇게 하면 되는 거 아닌가요?”처음엔 그렇게 시작해도 괜찮지만, 프로젝트가 커질수록 이 구조가 불편해질 수 있음그래서 오늘은 대표적인 두 가지 구조인✅ 계층형 구조(Layered Structure) 와✅ 도메인별 구조(Domain-based Structure) 를 비교해서 정리해봄 🧱 1. 계층형 패키지 구조🔍 구조 예시com.example.project├── controller├── service├── repository├── dto├── entity└── config📌 ..
📘 Spring Boot 개발 순서 가이드 (ERD & API 명세 기반)✅ 전제ERD (Entity Relationship Diagram) 완성API 명세서 (Swagger, Notion, Excel 등으로 작성된 요청/응답 정의) 완성1️⃣ Entity 설계목적데이터베이스 테이블과 1:1 매핑되는 클래스 정의작업@Entity, @Table 어노테이션 사용필드에 @Column(nullable = false) 등 제약 조건 명시연관관계 설정: @ManyToOne, @OneToMany, @JoinColumn 등@NoArgsConstructor(access = AccessLevel.PROTECTED) + 생성자/비즈니스 메서드 사용→ setter는 지양하고 update() 같은 메서드로 변경예시@Entit..

📝 Validation 스프링에서 Validation(검증)은 사용자 입력 데이터를 검증하고, 이를 통해 유효하지 않은 데이터가 애플리케이션에 들어가는 것을 막기 위한 중요한 과정입니다. 특히, 웹 애플리케이션에서 폼 제출이나 API 요청 시 검증은 필수적입니다. 이 글에서는 스프링에서 Validation을 구현하는 방법, 주요 어노테이션, 그리고 @Valid와 @Validated의 차이를 중심으로 자세히 설명합니다. 1. 스프링 Validation 개요스프링 Validation은 주로 Bean Validation API를 기반으로 동작합니다. 이 API는 객체에 대해 유효성 검사를 수행하고, 검증 규칙을 어노테이션을 통해 정의합니다. 스프링은 @Valid와 @Validated 어노테이션을 통해 이러한..

🔸 영속성이란?데이터가 메모리에만 있지 않고, DB에 저장되어서 "오래도록 유지될 수 있는 상태" 를 뜻함. 📍 쉽게 말하면?우리가 자바 프로그램에서 어떤 객체를 만들면, 그 객체는 프로그램이 종료되면 사라진다.그런데 그걸 데이터베이스에 저장하면, 프로그램이 꺼져도 그 데이터는 계속 남아 있음.이렇게 "오래 살아남는" 상태를 영속(Persistent)이라고 함.🔸 비유로 이해하기✅ 비영속 상태Member member = new Member(); // 그냥 자바 객체그냥 메모리에만 있음. 저장 안 된 상태.컴퓨터 꺼지면 사라짐.✅ 영속 상태em.persist(member);JPA가 이 객체를 영속성 컨텍스트에 등록하고, 나중에 DB에 insert함.데이터베이스에 저장되면 오래 살아남는 상태가 됨 → ..

✅ @CreatedDate vs @CreationTimestamp @CreatedDate@CreatedTimestamp제공Spring Data JPAHibernate조건@EnableJpaAuditing + @EntityListeners 필요별다른 설정 없이 작동작동 시점persist() 전 단계에 Spring이 값 지정Hibernate가 insert 시점에 DB에 넣음장점더 유연하게 커스터마이징 가능설정이 간단하고 빠르게 적용됨단점설정 필요 (Auditing)Spring Data Auditing과 중복되면 ❌ 충돌 가능🟢 요약둘 다 "생성일 자동 설정"이지만 작동 방식이 다르고, 중복해서 쓰면 안 됨!Spring에서 BaseEntity 만들어서 @CreatedDate 사용하는 걸 선호하는 추세라고함...

💡 DI(Dependency Injection 의존성 주입)란?DI(의존성 주입)는 객체 간의 의존 관계를 개발자가 직접 생성하지 않고, 스프링이 자동으로 주입해주는 기능이다.간단히 말해, 필요한 객체를 "내가 직접 생성"하는 것이 아니라 "스프링이 제공"해주는 것 . 1️⃣ DI 없이 직접 객체 생성하는 경우 (Bad Example)아래처럼 UserService가 UserRepository 객체를 직접 생성하면 코드 수정이 어렵고, 테스트하기 어려운 코드가 된다.public class UserService { private final UserRepository userRepository = new UserRepository(); // 직접 객체 생성 ❌ public void someMeth..

✅ 1. Spring Boot에서 데이터 흐름Spring Boot는 객체를 주입하여 각 계층을 연결하고, 메서드 호출을 통해 데이터를 주고받음📌 데이터 흐름 예제 (GET /users 요청)[클라이언트 요청] → [Controller] → [Service] → [Repository] → [Database] 📌 데이터가 다시 응답으로 가는 흐름[Database] → [Repository] → [Service] → [Controller] → [클라이언트 응답] ✅ 2. 코드 흐름 분석1️⃣ Controller: 요청을 받음@RestController@RequestMapping("/users")public class UserController { private final UserService use..