본문 바로가기

분류 전체보기14

[JPA] @OneToMany 단방향과 Hibernate Flush 순서 안녕하세요, 오늘은 JPA @OneToMany 단방향에 대한 이야기를 해보려 합니다. JPA에서는 @ManyToOne 또는 @OneToMany 를 사용해 실제 데이터베이스의 FK를 표현할 수 있습니다. 근데, 엔티티 상태 전환이나 dirty checking의 이점을 보고자 많은 사람들이 부모 객체에 Collection으로 자식 객체들을 가지고 있으려고 하는데요, 이를 위해 JPA는 @OneToMany 를 제공합니다. 하지만, @OneToMany 를 사용하면 불필요한 쿼리가 나갈 수 있습니다. 오늘은 그 문제점들과, 동작 원리, 그리고 해결 방법에 대해 알아보도록 하겠습니다. @OneToMany 단방향 연관관계는 다음과 같습니다. 주문 도메인 @Entity @Table(name = "orders") @No.. 2022. 10. 30.
로깅 (Logging) 개발의 시작은 Logger 설정부터! Log란? 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링하기 위한 텍스트입니다. System.out.println() 를 사용하여 로그를 확인할 수 있지만 이보다 로그를 기록하는 클래스를 만들어 사용하는 것이 더 나은 방법입니다. (특히 실무에서) 왜 그럴까요? print() 메서드를 살펴보면 synchronized로 동기화가 되어있는 것을 볼 수 있습니다. 이렇게 되면 기록을 남길 때마다 쓰레드 lock이 걸리기 때문에 엄청난 성능 저하를 불러일으키게 됩니다. 혹여나 개발 단계에서 이를 사용했다 하더라도 운영시에는 이를 모두 삭제해줘야 하며, 이를 방치하면 I/O 요청이 발생할 때마다 쓸데없는 리소스를 잡아먹게 됩니다. 이외에도 로그를.. 2022. 9. 27.
OAuth 2.0이란? 프로젝트에 구글 OAuth 2.0을 적용하며 공부한 내용을 정리한 글입니다. 해당 글은 인가와 인증에 차이를 인지하고 있는 사람들을 대상으로 작성되었습니다. OAuth 2.0 Open Authorization 2.0으로 인증과 인가를 위한 표준 프로토콜 OAuth를 사용하는 이유 우선 OAuth 2.0을 사용하는 이유는 다음과 같습니다. 1. 보안의 수준을 알 수 없는 애플리케이션에 매번 계정을 만들어 사용하면 ID/PW 관리도 어려울뿐더러 개인정보 유출에 위험성이 있음 (보통 사용자는 비슷하거나 같은 비밀번호를 사용하기 때문) 2. 따라서 보안 수준이 어느정도 검증된 사이트의 API를 이용해 인증을 받는 방법이 보안상 👍 3. 사용자 경험 측면에서도 편리한 로그인을 제공 → (실제로 서비스를 배포하고 .. 2022. 9. 7.
Bean Validation이란 학습 배경 지하철 노선도 미션에서 다음과 같은 리뷰를 받았습니다. DTO를 만든 후에, Spring bean validation으로 필수값들에 대한 검증을 해보면 어떨까요? 이를 적용하기 위해 우선 Bean Validation이 무엇인지에 대해 알아보았습니다. 사전 지식 JavaBean이란? 일반적으로 정보를 표현할 때에 사용하는 클래스입니다. 예를 들어, 회원정보 게시판 글 등의 정보를 출력할 때 정보를 저장하고 있는 자바빈 객체를 사용하게 됩니다. 즉, 데이터를 표현하는 것을 목적으로 하는 자바 클래스입니다. (ex. DTO) 규약 반드시 클래스는 패키지화 되어야 한다. 멤버변수는 property(프로퍼티)라고 부른다. property접근제한자는 private 외부접근은 게터세터로 접근한다. 프로퍼티.. 2022. 6. 1.