본문 바로가기

전체 글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.
[우아한테크코스 4기] 13주차 회고 되게 방학 같은 한 주를 보낸 주랄까...? 이번 주도 어김없이 월요일 오후 1시 출근으로 시작했다. 매주 월요일만 되면 오후 출근이 얼마나 좋은지 새삼 다시 느끼게 된다. 체스 미션이 머지되고 다음 미션 전에 공부나 조금 더 하자는 생각에 블로그 포스팅도 하나 하고 네트워크 스터디 준비도 미리 해두었다. 대망의 화요일 이날은 새로운 미션을 받는 날이자 새로운 페어를 만나게 되는 날인데, 문제는 이게 아니었다. 오전 수업을 마치고 점심시간이 되기 전에 공지가 있었다. 건물에서 코로나 확진자가 나와 모두 검사해야 했던 상황. 절반은 이미 이전에 코로나 완치 경험이 있었어서 한 번도 확진된 적 없는 크루원과 조마조마하며 비상구 계단에 쭈그려서 자가진단 키트를 진행했다. 서로 콧물 흘리며 재채기를 엄청 했었는.. 2022. 5. 8.
[Java] DTO (Data Transfer Object) DTO란? DTO라는 단어는 마틴 파울러의 책 P of EAA(Patterns of Enterprise Application Architecture)에서 처음 소개했는데, Data Transfer Object의 약자입니다. DTO는 말 그대로 데이터 전송 객체로, 메서드 호출 수를 줄이기 위해 프로세스 간에 데이터를 전송하기 위해 사용됩니다. 마틴 파울러에 의하면 DTO를 사용하는 주목적은 단일 호출에서 여러 매개변수를 일괄 처리하여 서버로의 왕복 여행을 줄이는 것이라고 설명했습니다. 이를 통해 네트워크 통신 비용에 대한 오버헤드를 줄일 수 있게 된다고 하는데 다음 예시를 통해 쉽게 알아보도록 하겠습니다. 만약, User에 대한 정보에 Role을 포함해서 반환해야 한다면? → REST API를 두 번 호.. 2022. 5. 3.