목록Programming/Spring (9)
멍두의 개발새발

"스프링 빈 왜 쓰세요?" 하면 어떤 것이 떠오르는가? 대표적으로 의존성 주입, 싱글톤이 떠오를 것이다.좀 더 구체적으로 말해보자면1. 의존성 주입을 IoC컨테이너가 해주어서 객체지향적이다.2. 싱글톤으로 요청마다 객체가 생성되지 않아 객체 생성과 메모리 비용이 줄어 성능이 향상된다.일 것이다. 그렇다면 과연 진짜 그럴까?한번 진짜 그런지 직접 두눈으로 확인해보자.1. 의존성 주입을 IoC컨테이너가 해주어서 객체지향적이다.🤔 그러면 개발자가 DI 해주면 객체지향적이지 않다는 건가? 실제로 해보자. 예시 : RacingGame 도메인RacingController → RacingService, DriverServcie를 의존각 Service → Repository를 의존개발자가 직접 DI를 해준다.여기..

JPA에서 NOTNULL 속성을 둘 중에 어떤 어노테이션으로 관리해야할지 고민이 있었다. 둘을 공부해보자!@NotNull@Jakarata.validation의 어노테이션이다.하지만 Entity의 column에 달려있으면 hibernate가 인식하여 NotNull을 DDL에도 반영해준다.이때 NotNull을 DDL에 추가해주는 것은 JPA의 기본 동작이 아닌, hibernate의 작동 방식임@Column(nullable = false)jakarta.persistence의 어노테이션이다.database column의 null 속성을 지정해주는 어노테이션으로 기본은 true이다.@Column(nullable = false) vs @NotNull공통점DDL에 NOT NULL을 넣어준다.Null을 넣으려고 하면 ..

Entity를 사용하다보면, Table이나 Column명이 Database와 불일치하여 name=''으로 정의를 해주어야하는 경우가 있다. 그렇다면 hibernate가 자동으로 명명해주는 이름과 Table이나 Colum의 이름이 동일할 때도 name을 정의해주어야할까? 일단 @Column, @Table, @Entity의 name 속성을 정의하면 어떤일이 발생하는지 다시 한번 짚고 넘어가자. @ColumnColumn의 속성들을 지정해주는 어노테이션 name 지정 시, DB column명과 매핑해주는 어노테이션 (create 사용 시DDL에서도 사용)없다면 필드명을 통해 자동 생성된 컬럼명으로 매핑이 된다.@Tablename 지정 시, DB Table명과 매핑해주는 어노테이션 (create 사용 시 D..

@TableDB에 지정되는 Table의 이름 @EntityEntity로 관리name을 지정해주면 JPQL에서 해당 명으로 사용할 수 있음참고 : [JPA] Entity에서 @Table, @Entity, @Column의 name을 정의해주어야할까? @IdPrimaryTable의 PrimaryKey를 지정해준다 @GeneratedValueprimary 생성 전략 제공@Id에 @GeneratedValue 없으면 insert할 때 반드시 id도 직접 넣어주어야함이름종류기능startegyAUTO(default)JPA가 알아서 DBMS에 따라 하위 4가지 전략중 택 1 TABLE@TableGenerator로 함께 쓰인다. 모든 DBMS에서 사용가능하지만 ID가 필요할 때마다 select, update를 해야하고 L..
📍 서론 개발을 하다가 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 이라는 에러가 발생했다.responseDTO에 @Getter를 넣어주지않아 발생한 오류였다. 그렇다면 왜 필요한 것일까? 📍 본문일단 기본적으로 우리가 dto를 사용하여 response를 보내고, request를 받아오면 Jackson 라이브러리에서 자동으로 ObjectMapper를 사용해 직렬화(object -> json 파싱)와 역직렬화(json -> object 파싱)를 해준다는 것을 알고있자. 또한 objectmapper는 직렬화, 역직렬화에 reflection을 사용하는데reflection이란 런타임에 클래스,..

📍 기존 코드와 문제점 1. 문제 상황 사용자가 학습하는 전체 리스트를 업데이트 해줘야하는데 이 때 대략 통신이 5초이상 걸린다는 것을 알게됐다. 2. 현재 코드 흐름 public String updateCardWeakSound(Long userId){ //card weaksound 테이블 해당 userId 행 전부 삭제 cardWeakSoundRepository.deleteByUserId(userId); List cardList = getCardListWithoutSentence(); List phonemeList = getPhonemeList(userId); cardList.forEach(card -> { Lis..