[Lotto SpringJPA] 4️⃣ 오류 해결

Welcome to Seoyun Dev Log·2022년 6월 24일
0
  1. Incorrect column specifier for column 'user_no'
    : DB에서 auto_increment 옵션은 int나 float같은 숫자값에만 사용할 수 있다
    Long으로 썼음 mysql에서 Long형은 bigint이다

  2. mysql에서 enum을 쓰지 않는 이유
    https://kimfk567.tistory.com/26

  3. import 자동 정리 단축키
    control + option + o

  4. 현재시간 등록
    sysdate / timestemp 차이 있음

  1. 실무에서는 생성자 주입, 필드 주입중에서
    어떤것을 사용하나요?
    ==> 생성자 어노테이션 사용

  2. 기본적인 셋팅은 뭐가 있나요?

  • application.properties
  • dependencies
  1. JPA, mybatis 는 라이브러리!

  2. 레이어
    Controller
    Service - > domain(비즈니스 로직)의 순서를 정해주는 역할
    Service -> 핵심 비즈니스 로직

  3. domain에서는 public method가 중요

  • 내부에 사용되는 메소드는 private로 캡슐화 시켜주는 것이 좋다.
  1. 커스텀 리플렉션 (어노테이션 커스텀)

  2. 어노테이션

  • @Getter @Setter : 인텔리제이에서 자동생성해주는것이 아닌 클래스에 어노테이션 설정을 통해 전체 getter, setter 대체 가능함
    일정 필드에만 적용하고싶은 경우 해당 필드위에 어노테이션 적용

  • @ToString : 투스트링은 일정 변수만 사용 불가
이유는 어노테이션 안에 들어가보면 @Target이 있다
해당 부분에 getter, setter ({ElementType.FIELD, ElementType.TYPE})로 되어있고, 투스트링은 FIELD가 없다. 필드에는 적용이 불가는 하다는 것 ==> 인터페이스이기 때문에
    @ToString(of = {"type","buying"}) —> 해당 범위 정해주기

  • 생성자 어노테이션
디폴트 어노테이션 : @NoArgsConstructor
전체 다 있는 어노테이션 : @AllArgsConstructor
나머지 다른 타입의 어노테이션만 작성해주면 되는데 , 이때 @AllArgsConstructor
의 경우 주의할 점이 있다. 만약 다른 개발자가 필드의 순서를 변경하게 될 경우 !

  • 컨트롤러, 서비스 등 어노테이션을 클래스에 넣어줄 경우 생성자에 @autowired하지 않아도됨
이유는 컨트롤러, 서비스, 레파지토리 등은 컴포넌트로 관리가 되어 빈으로 관리하고 있음

  1. log를 찍는 라이브러리는 로그백이 있다. 스트링은 자동 설치가 되므로,
로그를 찍을 곳에 어노테이션을 넣어주는데 구현체에 의존하지 않도록 하기 위해서
인터페이스로 사용한다 그것이 바로 
@Slf4j (//log 인터페이스)
  • Log Level : error, warn, info, debug (sout 사용하지 않음 log를 찍어본다)
  • Root —> 전부 찍는다는 것
  • Logging -> logback.xml을 변경
  1. Stack 스택 : 후입선출법 나중에 들어간것을 먼저 꺼낸다-> 디버그할때

14.Logback 설정하는 방법
https://velog.io/@cho876/Springboot-LogBack-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

  1. Exception / RuntimeException

  2. 개발에 중요한것
    : 분업화
    : 개발적으로 각각의 모듈로 존재하여 결합도가 낮고 응집도가 높은 프로그램
    : 좋은 무료 강의 찾아서 듣기

  3. 상속

  • 클래스 다중상속은 안됨
  • 인터페이스 다중상속 가능
  1. 랜덤 번호 추출
  • set으로 하는 방법과 stream()으로 하는 방법 중에서 hashset 선택한 이유
    : 중복 제거 HashSet은 데이터 중복이 불가하다 -> 따로 로직을 짜지 않아도 됨

19.오버로딩, 오버라이드

  • 오버라이드 : 부모 클래스 메소드를 자식클래스에서 구현 상위클래스에서 재정의
  • 오버로딩 : 같은 메소드를 인자타입을 다르게
  1. Jstl/ cmd, ajax 정의
    Inner join , left join , right join

  2. Stringbuffer

  3. runtime시 값을 가져오는 경우는
    절대 데이터베이스에 있는 값이 날아가지 않거나 변경되지 않는 다는 가정하에 진행해야한다
    아니면 NPE터짐
    데이터를 지우고 새로 넣는 작업을 많이하는 테스트 환경에서는 좋지 않을 수 있을 것 같다
    Create 하면안됨.. none update 무조건

  4. 테이블 관계
    : 다대일 manyToOne을 쓰는것이 좋은지

    :  테이블의 성격에 따라 다르다. 연관관계 유념해야할 것 -> N+1때문에
    초기 개발할때는 @ManyToOne(fetch = FetchType.LAZY) 많이 사용
    JPA할때는 연관관계 많이 사용

  • 조인 관계를 많이 만드는것이 좋은지, 아니면 테이블 따로 만드는것이 좋은지 

    : 정규화 쿼리 날릴 때 중복된 데이터 제외하고 조인으로 ,
    반정규화 : 성능우선으로 
-> 상황마다 다르고 정규화로 많이하지만 규모가 커질경우 반정규화로 고민해볼 수 있음
  1. controller에서 외부로 엔티티 노출이 되지 않으면 된다
  • Repository -> DB로 갈땐 엔티티로 주고 받고, service 또는 domain에서는 command, 화면 view, controller에서는 요청 받는 DTO를 사용하는것이 맞는지
    Ex) winner : 이번주 당첨 번호 로직에서 DTO를 어디서 받아야 하는지?
  1. .get()으로 객체를 꺼내는 것은 왜 좋지않은 코드인가요? (김영한님)
: NPE 발생할 수 있음

  2. 스케줄 크론

  1. Mysql count(*) 리턴타입 Long

  2. 리눅스 서버 구축 : Ubuntu, 센토스

  3. DOM 조작
    : api 
: html로 api 데이터를 보낸다고 했으니까, html 데이터를 받는다면 dom을 통해서 
뭔가를 조작하나?

    html 해석엔진이 있는데 자신의 개발언어로 바꾸는것 내부적으로 개발언어로 바뀌는 작업
load가 되기 전 
-> html은 문서이다.
    이것을 화면에서 어떻게 받을것인지 
도서 api사용할 때 Dom tree 꺼내서 사용했었음
:dom 접근 지양 ??? VirtualDOM


30.Vue , react

  • AWS (S3, SQS, SNS, RDS, Elasticache, Lambda 등)
  1. 이전 프로젝트 -> 새로 다운받아서 실행할 경
  • TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
    https://bcp0109.tistory.com/344
  1. StringBuffer / StringBuilder
: 둘다 동일한 객체라서 함수 까지 동일

에러

  • IndexOutOfBoundsException
java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:756)
  • Mysql : Mysql Communications link failure
Communications link failure 
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
    ==> 해결 터미널에서 서버 켜줘야함
    Mysql.server start

DBMS: MySQL (ver. 8.0.29)
Case sensitivity: plain=mixed, delimited=mixed
Driver: MySQL Connector/J (ver. mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0), JDBC4.2)
Ping: 17 ms
SSL: yes

  1. javax.persistence.NoResultException: No entity found for query
    :org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1667)
    참고 사이트 : https://hangjastar.tistory.com/240
해결 -> getSingleResult 대신 getResultList를 사용한다

DDD

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글