| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 컴포넌트 스캔
- Not Acceptable
- 405 METHOD_NOT_ALLOWED
- 의존관계 자동 주입
- 좋은 객체지향 설계 원칙
- jdbc template
- ResponseEntity
- Controller
- testresttemplate
- 406 NOT_ACCEPTABLE
- jdbc
- 빈 스코프
- 기본 생성자
- RunWith
- 테스트 코드
- 의존성 주입
- SpringBootTest
- 가을야구
- restTemplate
- JPA
- 키움
- entity
- 통합 테스트
- 스프링 IoC 컨테이너
- 스프링
- Java Reflection API
- 랜덤 포트
- 스프링 데이터 JPA
- 정적 컨텐츠
- 스프링 컨테이너
- Today
- Total
목록전체 글 (54)
코드네임 JY
(절대로 공부하느라 정신 나간거 아님 주의) (근데 진짜 포스팅 내용이랑 관련 있다... 아 정말이라고...) 🍚 @RequestBody vs @ResponseBody API 통신을 구현하기 위해 컨트롤러에서는 두 가지 어노테이션을 사용할 수 있다. ✅ @RequestBody : 클라이언트 → 서버 방향의 요청 / JSON 기반의 HTTP body를 자바 객체로 변환 ✅ @ResponseBody : 서버 → 클라이언트 방향의 응답 / 자바 객체를 JSON 기반의 HTTP Body로 변환 🍜 JPA에서 Entity 사용할 때, 기본 생성자 반드시 써주기! public class MusicSaveRequestDto { private String title; private String artist; priva..
🧃 컨트롤러의 역할 컨트롤러는 어떤 역할을 할까? 서버 측 가장 앞단에 존재하는 '컨트롤러'는 주로 HTTP 요청을 다루는 역할을 한다. 클라이언트가 웹 브라우저에 URI request를 보내게 되면, 해당 request는 컨트롤러가 받게 된다. 또한 해당 request에 대한 response를 Model에 담에 View를 통해 보여주기도 한다. (MVC 패턴에서 배웠다! 😀😀) 테스트 코드의 종류에는 크게 2가지가 있다. '단위 테스트' 와 '통합 테스트' 로 나눌 수 있다. 단위 테스트(Unit Test)에서는 스프링 컨테이너를 올리지 않고 순수하게 로직에 대한 테스트를 진행하는 것이 목적이고, 통합 테스트(Integration Test)에서는 스프링 컨테이너를 올려서 전체적인 기능을 테스트하는 것이..
🍰 Entity와 Repository는 같이 존재해야 한다! 이번 프로젝트의 Repository는 JpaRepository를 상속받아 구현하였다. JpaRepository에 맞춰 작성하면 기본적인 CRUD 메서드가 자동 생성되어 사용할 수 있다. Entity와 Repository는 같이 존재하는 것이 좋다! Entity 클래스는 기본적인 Repository 없이 제대로 역할을 할 수 없기 때문이다. 나중에 프로젝트 규모가 커져 도메인이 많아져도, 도메인 패키지 안에 Entity와 Repository를 함께 관리하면 좋을 것이다! 🍦 Entity 구현하면서 고민 모먼트 id 값의 생성을 DB에 위임하고, 이를 Primary Key로 설정하여 글의 인덱스 값을 구분하고자 했다. (이외의 다른 필드들의 nul..
🤖 요구사항 분석 ✅ 게시글 작성 (CREATE) - 노래 제목, 가수 이름, 앨범 이름, 가사, 앨범 커버 - Local H2 Database에 저장 ✅ 게시글 조회 (READ) - 전체 및 세부 게시글 조회 가능 ✅ 게시글 수정 (UPDATE) ✅ 게시글 삭제 (DELETE) 🤔 초기 디렉토리 구조 📂 Controller 📂 DTO 📄 HomeController.java 📄 MusicAPIController.java 📂 Service 📄 MusicService.java 📂 Repository 📂 Domain 📄 Music.java 📄 MusicRepository.java (Interface) 📝 Music 도메인 설계 음악 앱에서 노래에 대한 상세정보를 선택하면 다음과 같이 나온다. 크게 5가지의 정..
미리보기 ✅ 빈 생명주기에 대해 알아보자! ✅ 빈 스코프에 대해 알아보자! ✅ 프로토타입 스코프를 공부해보자! ✅ 웹 스코프를 공부해보자! 🥫 빈 생명주기 스프링에서 스프링 빈이 생성되고, 사용되고, 소멸되는 과정은 다음과 같이 정리할 수 있다. 1️⃣ 스프링 컨테이너 생성 - 스프링이 실행되고, 스프링 컨테이너가 생성 2️⃣ 스프링 빈 생성 → 의존관계 주입→ 초기화 콜백 - 컨테이너에 빈이 등록(생성)되고, 필요한 의존관계들이 주입 - 의존관계 주입까지 끝나면, 이제 빈을 사용해도 된다는 초기화에 대한 콜백 3️⃣ 빈 사용 - 스프링 빈을 코드에서 사용 4️⃣ 소멸 전 콜백 → 스프링 종료 - 안전한 종료 작업을 위해, 소멸 전에도 콜백을 주고 스프링이 종료 '초기화 콜백'과 '소멸 전 콜백' 메서드..
미리보기 ✅ 의존관계 자동 주입 방식들을 찾아보자! ✅ 생성자 주입을 강력 추천한다! ✅ 코드를 더 줄여볼 수는 없을까! (with 롬복) ✅ 동일한 빈을 구분하는 방법에 대해 알아보자! 🍭 의존관계 자동 주입 이제는 설정 정보 파일을 따로 작성하지 않고도, 의존관계를 자동으로 주입할 수 있다. 의존관계 자동 주입에는 크게 3가지 방식이 있다! 코드를 통해 알아보자. 1️⃣ 생성자 주입 @Component public class ReservationServiceImpl implements ReservationService { private final TicketReserve ticketReserve; // 핵심 : final 키워드 private final MemberRepository memberRep..
미리보기 ✅ 컴포넌트 스캔에 대해 알아보자! ✅ 스캔 대상이 무엇인지 알아보자! 🍰 컴포넌트 스캔 (Component Scan) 설정 정보 파일을 통해 스프링 빈으로 등록하는 것은 한계가 있다. 등록이 필요한 빈이 엄청나게 많아진다면? 일일이 그것들을 관리하는 것도 힘들 것이다! 그래서 스프링에는 설정 정보가 없어도 자동으로 스프링 빈으로 등록할 수 있는 기능이 존재한다. 바로 '컴포넌트 스캔 (Component Scan)' 이라는 개념이다! @Component public class ReservationServiceImpl implements ReservationService { private final TicketReserve ticketReserve; private final MemberReposi..
미리보기 ✅ 싱글톤 패턴에 대해 알아보자! ✅ 싱글톤 컨테이너에 대해 알아보자! ✅ @Configuration의 비밀에 대해 파헤쳐보자! 🍔 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴은 "클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴" 이다. public class Singleton { // 1. static 설정으로 변수는 메모리에 딱 한 번만 할당 (= 같은 주소값을 사용) private static final Singleton INSTANCE = new Singleton(); // 2. 생성자 private 선언으로 외부에서 new를 통한 객체 생성 방지 private Singleton() {} // 3. 객체 인스턴스가 필요할 시, 오직 이 메소드를 통해서만 ..
미리보기 ✅ 스프링 컨테이너에 대해 알아보자! (with IoC, DI) ✅ ApplicationContext를 통해 스프링 컨테이너를 들여다보자! 🍩 스프링 컨테이너 그리고 IoC, DI 개념 기존에는 클라이언트 구현 객체가 직접 프로그램의 제어 흐름을 컨트롤했다. 무슨 말이냐면! ('구현 객체'는 '구현체 클래스'라고 생각하면 된다!) 위의 예시는 티켓 예매와 관련된 프로그램을 만들고 싶어서, 다음과 같은 클래스 다이어그램을 짜봤다. ReservationService 클래스에서는 TicketReserveImpl 클래스 객체를 인스턴스로 생성할 수 있고, 이를 통해 기능을 구현할 수 있다. 방금 뭐라고? ReservationService 클래스(=클라이언트)가 직접 객체를 만들어 기능을 구현(=프로그램..
미리보기 ✅ 좋은 객체지향 설계의 5가지 원칙에 대해 알아보자! 🥗 좋은 객체지향 설계의 5가지 원칙 주어진 원리나 원칙이 있을 때, 해당 원리 및 원칙들을 따른다면 어느정도 보장된 퍼포먼스를 수행할 수 있다. 현실에서는 물론, 소프트웨어를 만드는 데에도 이런 규율들은 필요하다. 이는 나중에도 유지보수하기 쉽고, 확장이 쉬운 소프트웨어를 만들 수 있기 때문이다! SRP (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 변경이 있을 때, 파급이 적다면 SRP를 잘 따른 것이다! 예를 들어 회원가입 기능을 구현하는데, 해당 클래스에 가입에 대한 모든 과정을 다 때려박았다고 하자.. 갑자기 중간 로직에 대해 손을 봐야할 일이 생겼다면? 회원가입 기능은 꽤나 ..