Flamme Dev
  • IntroduceMyself
  • GOAL
    • 2021년 목표
    • 회고록
      • 2020년
  • COMMON
    • 자료구조
      • 시간복잡도
      • 스택/큐
    • 코드리뷰/스터디/세미나
      • Semina
        • Version control -1 (SVN/GIT)
        • Version control - 2 (GIT)
        • PostMan
        • JMeter
      • 스터디
        • 2021년
          • EffectiveKotlin
          • 이펙티브자바
        • 2020년
          • JPA Study
            • Chap1
            • Chap3
            • Chap4
            • Chap5
            • Chap6
            • Chap7
            • Chap8
            • Chap9
            • Chap10 -1
            • Chap10-2
            • Chap10-3
            • Chap12
            • Chap 13. 웹 애플리케이션과 영속성 관리
            • Chap14
      • 코드리뷰
        • Page 1
        • 개발 생각
        • APNs 라이브러리 교체
        • 파일 삭제 분투기
        • 신입 코드리뷰
          • 2020-09-02
          • 2020-09-03
          • 2020-09-10
        • Repository
          • Repositroy(20201124)
          • Repositroy(20201123)
          • Repositroy(20201120)
          • Repositroy(20201119)
          • Repositroy(20201117)
    • 개발 서적 / 동영상 강의
      • 동영상 강의
        • 진행 중
        • 완주한 것
      • 개발 서적
        • 읽은 것
          • 손에 잡히는 10분 SQL
            • 인덱스
            • 정리 본
        • 진행 중
          • 폴리글랏 프로그래밍
          • DDD-START
            • Chapter5 리포지터리의 조회 기능
            • Chapter4 리포지터리와 모델 구현
            • Chapter3 애그리거트
            • Chapter2 아키텍쳐 개요
            • Chapter1 도메인 모델의 시작
  • INFO
    • 유스콘 준비
    • intellij
      • Command line is too long.
    • 프로그래밍의 종류
      • Async Await
      • Reactive Programming
      • Imperative Programming
      • Functional Programming
        • Naver D2 함수형 프로그래밍 강의
      • Object Oriented Programing
        • 객체지향에 대해서 알아보는 영상
      • ProcedureOriented Programming
      • RX(ReactiveX)
      • OOP VS FP
      • Declarative Programming
    • Language
      • Kotlin
        • 박재성님 강의
        • Kotlin Spring CGLIB Error
        • Kotlin의 사용
        • coroutine
        • Kotlin JVM
      • JavaScript
      • JAVA
        • DefaultNonnull
        • effective78
        • Exception
        • JsonUnWrappers
        • 명명짓기
        • @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
        • Enc Key
        • ServiceLoader
        • Annotation
        • JVM(Java Virtual Machine)
        • Java8
          • Functional 사용
          • Optional
          • Invalid Key size
        • Java13
          • Text Block
        • Basic
          • Generic
          • JVM
          • Interface, Implements
    • Framework
      • NodeJs
      • Xamarin
      • Vert.x
        • vert.x in action
        • eventbus
      • blockedthreadchecker
      • Why.. not root run..
      • Spring
        • Spring Test
        • Kotlin
        • ControllerAdvice 정리
        • JsonAnnotation
        • Spring Data R2DBC
        • SpringWebFlux
          • login
          • SpringWebFlux란?
        • JPA
          • QueryDSL 객체 주소값 확인할 것
          • SpringData-JPA에서 Save, SaveAll
          • @CompositeKey에 ManyToOne JoinColumn이 있을 경우
          • QueryDSL N+1 문제(@OneToOne)
          • QueryDSL설정
          • CreationTimestamp
          • Enum(@enumerated vs @convert)
        • SpringSecurity
          • aopAlliance
          • csrf 방어
          • antMatcher vs mvcMatcher
          • SpringSecurity를 왜 써야할까?
          • CoreSpringSecurity
            • AuthenticationProvider
            • AuthenticationManager
            • Authentication Flow
            • SecurityContextPersistenceFilter
            • SecurityContextHolder, SecurityContext
            • Authentication
            • 필터 초기화와 다중 보안 설정
            • DelegatingProxyChain, FilterChainProxy
            • 사이트 간 요청 위조 - CSRF, CsrfFilter
            • 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter
            • 인가 API - 권한 설정 및 표현식
            • SessionManagementFilter, ConcurrentSessionFilter
            • 동시 세션 제어 / 세션고정보호/ 세션 정책
            • AnonymousAuthenticationFilter
            • RememberMeAutheticationFilter
            • Logout,LogoutFilter
            • UsernamePasswordAuthenticationFilter
            • Form인증
            • 인증 API - 사용자 정의 보안 기능 구현
            • 인증 API - 스프링 시큐리티 의존성 추가
        • SpringMVC
          • Spring Bean Q&A
          • HttpServletRequest
          • @ControllerAdvice
          • Service와 ServiceImpl은 꼭 있어야할까?
          • SpringMVC-1
          • SpringMVC - validator와 Errors
          • SpringMVC - DispatcherServlet의 URL
          • Spring MVC - 기본설정(2) 및 HandlerInterceptor
          • SpringMVC-3
          • Spring MVC - ViewResolver
          • Spring MVC - XML/JSON
          • Spring MVC - Field Injection & Constructor Injection
        • SpringEtc
          • Transactional
          • @Atowired NullPointer
          • CircleReference
          • Mybatis
            • IBatis - sql에 Map
            • 1:1 Mapping시 Null
            • auto_Increment, selectKey
          • @Transactional
          • JacksonAnnotation
        • SpringAOP
        • SpringDI
    • Server
      • PM2
      • Tomcat
        • jks
        • Virtual Host(Port)
    • OS
      • Window
        • Active directory
      • IOS
      • Linux
        • samba/keroberos
        • Linux
          • unlimit / socket backLog
          • nohup
          • ; , & , &&, {}
          • 쉘
          • rc.local
          • ps aux | grep 프로세스이름
          • Vim
          • Su, Sudo
          • File Directory
        • IdConfig
        • 유용한 커맨드
        • 리눅스 대소문자
        • 소프트링크와 하드링크의 차이
        • ln -Tfs
        • //와 / 의 차이
        • Linux(202003)
          • rm
          • diff
          • cp
          • mv
          • tar 압축 시 어떻게 심볼릭 링크도 같이 압축할까?
          • tar 명령어
          • ln -s 심볼릭 링크
    • Network
      • API Architectural Styles
      • 포트 확인
      • HeartBeat Protocol
      • SSO(Single Sign On)
      • Cookie and Session
      • Tcp HandShake
      • WireShark
        • WireShark 옵션
        • WireShark 패킷분석
    • DataBase
      • DB락에 대해서 알아보기
      • Redis
      • MYSQL
        • Mysql TimeOut 설정
        • MysqlLog
        • SlowQuery Analyzing
        • PushNotification Stress Test
      • MSSQL
      • 데이터베이스 식별자 선택 전략
    • ETC
      • 이름 짓기
      • FFProbe
      • Talk
      • Untitled
Powered by GitBook
On this page

Was this helpful?

  1. COMMON
  2. 코드리뷰/스터디/세미나
  3. 코드리뷰
  4. Repository

Repositroy(20201117)

Repositroy 리뷰

현재 진행 사항 1. Repositroy 패키지에 ezTalk2 Table Entity 생성 2. MSSQL 연결 테스트.

테스트 사항

  1. TestDB에 현재 테이블의 구조가 만들어지는지 확인.

  2. ezTalk2 연결 테스트 (User에 대한 간단한 정보 Insert)

Entity Class 생성

  1. 데이터 타입은 primitive와 Wrapper 중에 Wrapper를 사용.

    이유 : null 값 처리가 용이하기하여 SQL과 연동처리가 용이하기 때문.

  2. @Column Annotation을 사용하여 MSSQL DB 데이터 형식 및 Null Check --> DB에서 변경 해야하기 떄문에 관련 @ 삭제

  3. compositeKey를 가진 클래스(Device, Resigner, SvrCompany, Message, RoomMember, ConcurrentJob, GroupMember는

@IdClass와 @EmbeddedId 중에 EmbeddedId를 사용 선택 이유 :

@IdClass는 데이터베이스를 관점 @EmbeddedId는 객체지향 관점 이라고 하여 객체지향 관점으로 바라보기 위하여 EmbeddedId 선택.

  1. DB dateTime은 모두 LocalDateTime 클래스 사용.

  2. Message, Memo, Room에 대한 regDate 및 updateDate에 대한 date 추가 및 변경은 @CreationTimeestamp와 @UpdateTimestamp 사용.

    이유 :

    date 추가 변경에 대한 전략은 auditing 설정에 대한 것과

    CreationTimeestamp, UpdateTimestamp와 같은 hibernate Annotation이 있다.

    둘다 사용해도 상관 없고 설정이 덜 필요한 hibernate Annotation 사용

--> UpdateTimestamp 사용 고려.

  1. flag에 대한 처리는 아직 명확하지 않아 Boolean Type 혹은 Character로 데이터 타입으로 선언 s,Y -> BOOLEAN

    DeviceType인 경우 Android냐 IPHONE인가에 대한 처리가 필요하기 때문에 Enum으로 관리.

    추후에도 관리가 필요한 flag값은 enum으로 처리하려고 함.

혹여나 enum이 key value로 관리 그리고 숫자로 관리가 되어야하면 Enumurate.String, Enumrate.Ordinary 어노테이션 사용보다는 @Convert 전략을 사용하여 처리하려고함.

이유 : Ordinary는 서수로 표현, String은 문자열 자체가 저장되어 DB 공간 낭비가 발생하기 때문에 @Convert를 통하여 서수 및 직접적으로 들어가는 것을 피함.

  1. JPA에서는 프록시 객체가 필요하므로 기본 생성자를 각 entity.class마다 생성

    @NoArgsConstructor(access = AccessLevel.PROTECTED)로 낮은 접근지시자 사용.

차후 진행 사항

  1. Service 클래스 생성 및 Legacy 코드 분석 후 개선하여 구현

  2. 단방향, 양방향 연관관계처리는 Service 클래스를 구현하며 진행

  3. Log 처리 (AOP, slf4j, LogBack) spring log wrapper

    aop는 Debug에서도 가능한지 알아보기

User와 UserInfo, UserProfile의 관계

대상 테이블에 외래 키가 있는 경우.

주 테이블에 외래 키 : 외래 키를 객체 참조와 비슷하게 사용할 수 있어서 객체지향 개발자들이 선호. 대상 테이블에 외래 키 : 전통적인 데이터베이스 개발자가 선호. 장점 : 테이블 관계를 일대일에서 일대다로 변경할 때 테이블 구조를 그대로 유지

대상 테이블에 외래 키에 대한 단방향 연관관계를 JPA에서는 허용하지 않음. 그래서 양방향 연관관계를 줘야함.

PreviousRepositroy(20201119)Next개발 서적 / 동영상 강의

Last updated 4 years ago

Was this helpful?