목록스프링 (43)
JAN's History
1. Null 값 처리를 하기 위해서! 엔티티에는 특정 필드가 null이 될 수 있는 경우가 있습니다. 그러나 API에서는 클라이언트로부터 값을 요청할 때 해당 필드가 null이 될 수 없도록 제한하고 싶을 수 있습니다. 이런 경우에 DTO를 사용하여 클라이언트로부터 전달받은 데이터 중 필요한 값만을 받아 처리할 수 있습니다. 이렇게 함으로써 null 값이 들어가는 것을 방지할 수 있습니다. public class UserRegistrationDTO { private String username; private String email; // getters and setters}예를 들어, 사용자 등록 API에서는 사용자 이름과 이메일을 필수로 받아야 하지만, 비밀번호는 선택적으로 받을 ..
NullPointException👎🏼 프로그래밍을 하다 보면 null 참조 에러(NullPointerException)는 가장 피하고 싶은 에러 중 하나입니다 이런 에러는 런타임 시 발생하기 때문에 프로그램의 신뢰성을 떨어뜨리고, 디버깅하는 데에도 어려움이 따르기 때문입니다.! Optional Class Java 8부터 도입된 Optional 클래스는 이러한 null 참조 문제를 해결하기 위해 고안되었습니다. Optional은 '있을 수도 있고, 없을 수도 있는 값'을 래핑하는 특별한 컨테이너 객체입니다. Optional을 사용해야하는 이유 명시적인 null체크를 해줍니다. isPresent()나 get()메서드를 사용하면 명시적으로 null체크를 해야합니다. 이를 통해 실수로 null를 참조하는 상황을..

타임리프에서 자바 클래스 접근하기 SeedStarter→Feature→name: 중첩 반복문 작성이 까다로움! 본 예제에서는 특정 SeedStarter에 속한 모든 Feature들을 탐색하며 name을 수집, 하나의 문자열로 concat 타임리프에서 자바 클래스 접근하기 CollectorFeatureName public class CollectorFeatureName { public static final List name(Stream stream) { return stream.map(v->v.getName()).collect(Collectors.toList()); } } 타임리프에서 메소드에 정의된 클래스에 접근하기 위해(인스턴스 변수로 접근이 아닌) 함수를 static으로 정의! ➡️그냥 타임리프에서..

보통 html, css 파일 같은 프론트엔드 작업 파일들은 resources -> templates에 넣어주면 됩니다 Thymeleaf SeedStarterMng.html 파일을 생성해서 templates 안에 넣어주세요. head 정의: bootstrap이용 SeedStarterMng.html 결과 확인 그러나 테이블의 컬럼에 이상한 값이 표시!! SeedStarterMng.html body 정의: 테이블 정의(head) List of Seed Starters 🌿 원래 html 코드에서 thymeleaf만 붙여서 동적 쿼리를 만들었다고 생각하면 됩니다! 간단한 표현식 변수 표현식: ${...} 메시지 표현식: #{...} 링크 URL 표현식: @{...} 표현식 유틸리티 객체 #execInfo exec..

Entity를 만들고 MySQL과 연동해 데이터까지 넣어줬고, Controller를 구현했으니 이젠 Repository와 Service를 구현할 차례입니다! SeedStarterRepository public interface SeedStarterRepository extends JpaRepository { } Jpa를 상속해 기본적인 Jpa들은 사용할 수 있습니다. ex) findAll, findById .... SeedStarterService @RequiredArgsConstructor @Service public class SeedStarterService { private final SeedStarterRepository seedStaterRepository; public List findAll..

엔티티를 작성했으니 데이터베이스를 MySQL과 연동해봅시다.👍 Helper 메소드 정의하기! 정의하기에 앞서, Helper 메소드가 무엇인지 알아볼까요? Helper 메소드는 양방향 연관관계에서 사용되는 방법인데요. 두 엔티티 간의 관계를 설정하고 데이터를 전달하는 코드를 캡슐화하여 코드를 더 간결하고 읽기 쉽게 만들어주는 도구랍니다. Helper 메소드를 통해 양방향 연관관계를 설정하고 유지하는 로직을 한 곳에 집중시킬 수 있어 코드의 복잡성이 감소된다는 장점이 있습니다. 즉, Helper 메소드는 양방향 연관관계에서 한 엔티티가 수정되었을 때 다른 엔티티의 정보를 동기화하기 위해 사용됩니다! ➡️ 따라서 양방향 관계에서는 Helper 메서드를 사용하여 관계를 설정하고 유지하는 것이 일반적으로 권장되는..

만들어볼 프로그램은 Seed Starter 입니다. ERD 다이어그램(간략ver^_^) Spring Project 생성하기! https://start.spring.io/ 에서 아래 이미지대로 생성해주시기 바랍니다 Spring Web : Web을 사용할 것이기 때문에 필요 Thymeleaf : 자바 템플릿 엔진으로 타임리프를 사용할 것이기 때문에 필요 Spring Data JPA : JPA를 사용할 것이기 때문에 필요 MySQL Driver : DB를 MySQL로 사용할 것이기 때문에 필요 Lombok : getter, setter같은 스프링에서 자주 사용하는 어노테이션을 제공해주기 때문에 필요 ➡️이후 Generater를 눌러 다운받고 압축파일을 풀어 인텔리제이에서 파일 내에 pom.xml을 열어주세요 ..

쿼리 결과 제한 first나 top 키워드를 사용하여 검색 결과 중 일부만 조회 페이징이나 슬라이싱을 함께 사용할 경우, 제한이 적용된 조회 결과에서 수행 페이징이 먼저 되고, 그 값에서 슬라이싱이 사용되는 것처럼! Entity Graph 패치전략 기본적으로 EAGER나 LAZY 둘 중 하나를 사용 static하게 결정되므로 런타임 시 동적으로 전략 수정이 불가 전략이 수정되면 어플리케이션 수정 및 컴파일 EntityGraph의 목적 연관된 엔티티를 패치할 때 성능 향상 객체 그래프 탐색의 형태로 데이터를 조회할 수 있음 모든 연관관계를 Lazy로 설정하면 함께 조회시 추가적 JPQL을 작성해야 하지만 이를 EntityGraph를 사용하면 더 편리함 [Post의 연관관계 분석] 하나의 Post에는 여러개..