컴공생의 발자취

[내일배움캠프 26일차 TIL] 모의면접과 Entity 연관 관계 본문

🤝 활동/내배캠TIL

[내일배움캠프 26일차 TIL] 모의면접과 Entity 연관 관계

MNY 2024. 5. 23. 23:47
728x90
반응형
오늘의 진도 : Spring 숙련 주차 2주차 2-15 관심상푸 API 구현까지...

하루종일 떨었던 모의면접은 망했죠?
오늘의 학습, 오늘의/지난 날의 궁금증, 코드카타, 모의 면접,오늘의 회고 이렇게 5개의 큰 틀로 나누어 정리할 것이다.

 

💡 오늘의 학습 키워드

- 2주차 -
@OneToOne & @JoinColumn
@ManyToOne
@OneToMan
@ManyToMany
fetch(@OneToMan & @ManyToOne)
영속성 전이
orphanRemoval

 


 

@OneToOne & @JoinColumn

  • @OneToOne 애너테이션 : 1대 1관계를 맺어주는 역할
    * mappedBy의 속성 값은 외래키의 주인인 상대 entity의 필드명 (양방향일 때 사용)
  • @JoinColumn(name = "이름") : 외래키 주인 entity에서 활용해야 함

* 예시 코드 (더보기 ..Click)

더보기

* 음식 Entity가 외래 키의 주인인 경우!

  • 음식
@Entity
@Table(name = "food")
public class Food {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}
  • 고객
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

@ManyToOne

: @ManyToOne 애너테이션은 N대 1관계를 맺어주는 역할

 

@OneToMan

: @OneToMany 애너테이션은 1대 N관계를 맺어주는 역할

  • 1대 N관계에서는 일반적으로 양방향 관계가 존재X
  • mappedBy 속성 제공X

 

@ManyToMany

: @ManyToMany 애너테이션은 N대 M관계를 맺어주는 역할

 

fetch(@OneToMan & @ManyToOne)

  • 지연 로딩 : @OneToMany - fetch(default LAZY)
    • 가져올 것이 여러개(Many)이기 때문에 지연 로딩
    • 지연 로딩된 entity를 조회할 때 @Transactional 필수
  • 즉시 로딩 : @ManyToOne - fetch(default EAGER)
    • 가져올 것이 하나(One)이기에 즉시 로딩 가능


영속성 전이

: 영속상태에서 작업되는 entity들이 연관된 entity까지 전파되는 상황 

ex) cascade 속성 사용 : cascade = CascadeType.PERSIST

 

orphanRemoval

: 해당하는 entity연관관계를 지우는 것만으로 DB의 내용을 지워줌 

ex) orphanRemoval = true(default false)

  • CasecadeType.REMOVE의 기능도 가지고 있음
  • @ManyToOne 애너테이션 사용X
    * why? 해당 entity 객체를 참조하고 있는 다른 객체들이 있을 수 있기 때문에

 


오늘의 궁금증

  • Q : Local Storage vs Session Storage?
  • Q : yml properties 차이?
  • Q : RequestParam vs PathVariable
    • A : RequstParam은 QueryString에서 사용 / PathVariable은 PathParam에서 사용

 

* 참고한 블로그

 

[Java/SpringBoot] @RequestParam vs @PathVariable 쓰임새, 사용법, 차이점

@RequestParam과 @PathVariable 어노테이션은 쓰임이 비슷해서 자칫 혼동될 수 있으니 비교해보도록 하겠습니다!

velog.io

 

 

지난 날의 궁금증

  • Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
    • A : 원시 자료형(=기본형) 타입을 Object(객체)로 변환이 필요할 때가 있다.
    • 예를 들어 어떤 메서드의 매개변수가 객체 타입일 때, ArrayList, Hash 등 컬렉션 프레임워크의 경우 객체만(참조형)을 저장할 수 있다. 즉 기본형은 저장할 수 없다.

 

* 참고한 블로그

 

[Java] Wrapper 클래스는 왜 필요할까?

자바는 객체지향 프로그래밍 언어입니다. 객체라는 세계에 있기 때문에 모든 것들을 객체로 표현합니다. 예를 들어 간단한 파일 같은 경우에도 Object로 다루고, image도 객체로 다룹니다. 그렇기

kchs94.tistory.com

 

  • Q : Object.equals와 str.equals의 차이? 
    • A : String.equals는 Object.equals와 같다!
      String.equals의 Overrides부분에 Object 클래스와 같다고 명시되어 있다.
    • String.equals() : 이 문자열은 지정된 개체와 비교합니다. 인수가 null이 아니고 이 객체와 동일한 문자 시퀀스를 나타내는 String 객체인 경우에만 결과는 true입니다.
    • Object.equals() : 다른 개체가 이 개체와 "동일"한지 여부를 나타냅니다. equals 메소드는 null이 아닌 객체 참조에 대해 동등 관계를 구현합니다. 일반적으로 이 메서드가 재정의될 때마다 hashCode 메서드를 재정의해야 합니다. 이는 동일한 개체가 동일한 해시 코드를 가져야 한다는 hashCode 메서드에 대한 일반 계약을 유지하기 위함입니다.
    • 추가) hashcode() : 객체가 가지는 고유의 값을 반환하는 메소드

 

* 공식 문서

 

Java Platform SE 8

 

docs.oracle.com

* 참고한 블로그

 

hashcode()와 equals() 파헤치기

대충알던 hashcode()와 equals() 동작에 대해 확실하게 살펴보자

hanjo8813.github.io

 

  • Q : 객체의 불변성에 대해 궁금...?
    • A : 불변객체는 항상 동일한 입력에 대해 동일한 값을 반환하므로 예측 가능하고 추론하기 쉽다.

 

* 참고한 블로그

 

[Java] 불변 객체(Immutable Object) 및 final을 사용해야 하는 이유

클린코드를 읽어도, 이펙티브 자바를 읽어도, 개발을 잘하는 팀의 얘기를 들어도 항상 좋은 코드를 얘기할 때면 불변의 객체를 필연적으로 접하게 되는 것 같습니다. 그래서 이번에는 불변의 객

mangkyu.tistory.com

 

 

  • 아직 찾아보지 못 한 궁금증(더보기 ..Click!)
더보기
  • Q : JDBC 이란?
  • Q : ORM 이란?

 


코드 카타

* 프로그래머스로 진행

 

  • 알고리즘
    • 크기가 작은 부분 문자열
    • 최소직사각형
    • 시저 암호
  • SQL
    • 상품 별 오프라인 매출 구하기
    • 있었는데요 없었습니다
    • 오랜 기간 보호한 동물(2)

모의 면접

약 10분간 진행했다. 그리고 결과는 개망했는데

일단 면접에서 받았던 질문을 정리해본다.

  1. RESTful한 API를 설계하는 장점은?
  2. 적절한 관심사 분리가 필요한 이유는? (계층 분리)
  3. Setter의 사용을 지양하는 이유는?
  4. NoSQL vs RDBMS
  5. 객체지향 설계 설명

 

내가 했던 답변은.. 망했긴 했는데 

대략적으로 나마 적어본다.

  1. REST API는 HTTP 프로토콜을 기반으로 한 무상태(stateless) 설계로 각 요청이 독립적으로 자원에 대한 CRUD 작업을 수행할 수 있어, 확장성과 유연성이 뛰어납니다.
  2. 코드의 유지보수성과 확장성을 높이고, 시스템 복잡성을 줄이며, 변경 사항이 다른 계층에 미치는 영향을 최소화할 수 있기 때문입니다. 
  3. DB에 수정하면 안되는 데이터도 포함이 되어 있는데 Setter을 사용하면 그런 데이트들도 포함해서 무분별한 수정이 일어나기 때문에 지양해야합니다.
  4. RDBMS는 관계형 데이터베이스고.. 서버 같은 특정 저장소에 저장을 하고.. NoSql은 그런게 없는 걸로 알고 있습니다.
  5. 죄송합니다. 객체지향에 대해 설명을 제대로 못 할 것 같습니다ㅠ

 

그러고 이제 마지막으로 

피드백 기억나는 거 적기!

  1. 키워드에 대해 잘 말했다! 하지만 추가적으로 다음과 같은 키워드로 설명이 더 되었으면 좋았을 것 같다.
    키워드 : 서버 클라이언트 무상태 request response 분리 http 프로토콜 충분한 고려
  2. 로그인 인증 인가. 모든 컨트롤러마다 로그인 했는지 호출 권한 있는지 if문으로 모두 분기 로직이 똑같고 모든 컨트롤러로 한번씩 써주는데 로그인이라는 별도의 관심사로 분리해서 모든 코드에 연관을 미치면서 최소한의 변경? 
    키워드 : AOP, 하나의 주제에 대한 관심을 분리
  3. 캡슐화에 대한 설명과 엮어서
    ex) 필드 하나를 바꾸는 건 캡슐화를 깬다
  4. 아는 거 먼저
    관계형 데이터 베이스 행열, 테이블 데이터 적재 시스템
    nosql 관계로 데이터 표현X 그러고 잘 모른다고 걍 대답
  5. 중요하다고 생각하는 것만 why? 추상적인 개념이기 때문에..
    행동 객체 관점에서 하나의 프로그래밍 패러다임

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

흠.. 오늘은 조금 피곤해서 실시간 강의 시간이랑 점심 쯤의 강의를 거의 졸면서 들었다.

목표한 것을 전부 하지는 못했지만 진도도 나갔고 모의면접도 했고 코드카타도 3문제씩 풀이했고

이정도면 100점 만점에 80점 정도 아닐까? 순수 몰입시간은 7~8시간 정도?

 

  • 오늘의 생각

궁금증에 대해 알아보는 시간이 오래 걸렸다.

뭔가 배우고 있는데 내가 뭐를 모르는지 잘 모르는 것 같다.

 

  • 내일 학습할 것은 무엇인지

그래도 내일은 2주차를 무조건 완강하고 1주차도..

되면 공부하지 않을까? 그리고 이제 노션에 뭘 더 공부해야 할 지 다시 정리해놔야겠어.

728x90
반응형