2021-05-30

0530 스프링 부트 스터디

좀더 알아보고 싶은 것 - 노란색 

1. build 디렉토리 란?

2. gradle의 역할: 빌드 & 라이브러리를 자동으로 가져와준다.

    1) 컴파일: 컴퓨터가 이해할 수 있는 언어(바이너리코드) 로 변환하는것

    2) 빌드: 어플리케이션을 실행 가능한 단위로 만들어주는 것.

    3) 그레이들은 이러한 컴파일+빌드를 자동으로 해준다. 

3. dependency란? : 의존성. 잘 만들어진 기능을 재사용할 수 있게 해준다. 내가 만들지 않은 기능들을 이용하여 어플리케이션을 만든다. 

4. annotation의 문제점? : 컴파일될때 클래스에 포함이 된다. 메타데이터. 요구사항이 변경되면 -> 자바코드를 뜯어고쳐야 하는가?

    http://wiki.gurubee.net/display/DEVSTUDY/Annotation <<출처!!

Annotation의 단점

  • 어노테이션 처리시 리플렉션을 통해 해당 클래스를 분석해야 하는 오버헤드가 있다.
    • XML 파일을 이용하는 방법도 오버헤드가 있으므로, 경우에 따라서 어노테이션이 더 빠를 수도 있음.
  • 어노테이션은 모듈이나 어플리케이션 전반적인 메타데이터를 설정할 수 없다.
    • 어노테이션의 범위는 클래스나 패키지 레벨로 한정되기 때문에 여러 클래스에 걸친 공통적인 설정이나 모듈레벨 설정이 어렵다.
    • 웹 어플리케이션 개발시 서블릿 필터나, 인터셉터를 이용해서 문제 해결이 가능함.

XML과 어노테이션같이 쓰기

  • 대부분의 일반적인 웹 어플리케이션에 적합한 방법 이다.
  • 어플리케이션 상에서 디자인 타임에 결정되는 부분에 대해서는 어노테이션을 사용하는 것이 좋고,
    실제 디플로이 환경에 따라 바뀔 수 있는 부분의 경우 XML을 사용하여 표기하는 것이 좋다.

5. def querydslDir = "$buildDir/generated/querydsl" 

$buildDir : 로컬서버/개발서버/운영서버는 다르다. 따라서 이러한 환경변수를 배포시점에 따로 설정한다. 

6. 로컬서버 -> 테스트서버 ( 메이븐, 젠킨스는 여기까지만 역할을 수행한다. ) -> 실제서버

실제서버에서는 최종 산출물만 올라가고, 따라서 빌드툴을 사용해서는 안된다. 맘대로 변경하면 안된다! ( devtools는 정말로 'dev'tools인 것. ) 자원의 복사만 이루어진다.

7. 빌드란? : 컴파일 + 자원의 복사. 

8.gradle : wrapper 란?

9. 빌드디렉토리와 out디렉토리

https://goateedev.tistory.com/173 <<그런것이었군!!

10. 인터페이스의 default메소드가 충돌하면 어떻게 되는가? 

    : https://frontierdev.tistory.com/67 << 충돌시 컴파일 오류, super.~~로 명시해주거나 상속하는 쪽에서 명확히 해주어야한다.

11. DTO클래스의 의문점 : 

    1) 굳이 builder를 써야하는가? 화면단에만 보이는 클래스이기 때문에, @builder를 만들어서 명시적으로 길게길게 코드로 작성할 필요가 있는가?

    2) @Data어노테이션 : 코드가독성을 향상시켜주는 것은 맞다. 그렇지만 DTO이기 때문에- 그다지 코드를 열어서 뜯어볼일이 없다. 

    3) 아예 DTO를 안쓰고 Collection클래스를 이용하는 방법은? -> null문제가 발생한다. 이것을 해결하려면 직접 뭔가 메소드를 만들어주거나.. 하면서 보충할수있다. 장점은 훨씬 유연하다는 것이다. 그때그때 필요할때 필요한 것만 만들어서 넘겨주면된다. 반면 DTO클래스는 좀더 명시적으로 넘겨주는 데이터를 표현할수있다.

12. 데이터의 영속성이란 ? : 어플리케이션이 중단되더라도 저장된 데이터는 유지된다. 즉, 어플리케이션이 중단되더라도 데이터를 회복해서 가져올 수 있다. 

13. Date Type을 사용해야 하는가? 

    1) DB에서는 Date타입으로 하되

    2) 자바 객체에서는 전부 String타입으로 하고, 필요한 날짜계산 메소드 등은 utility로 만들어서 활용하는 방법도 있다. 좀더 유연한 설계가 가능해짐. LocalDateTime 과 같은 클래스를 굳이 이용하지 않아도 된다. java진영에서 이러한 클래스를 계속 업데이트하는데 힘쓰는 이유는 날짜계산 시간계산등이 복잡하기 때문에 기능으로서 제공하기 위해서이다.

    3) 즉, 기능으로서 사용한다/ 데이터로서 사용한다 를 명확히하는 방법도 있다는 것. 

14. 객체 지향이란? 실행시점에 기능과 데이터가 결정된다는 것이다. (인터페이스 구현)

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...