전체 글 118

영한님 책에서 볼 수 없는 JPA (Hibernate) 내부 코드 살펴보기

몇 달 전 JPA를 공부를 하는데 책에서 말하는 엔티티매니저, 쓰기지연저장소 등등 이런 용어들은 코드로 어떻게 되어있을까 궁금해져 JPA 관련 검색을 해보니 대부분 글들이 영한님의 PDF 강의 자료로 이루어져 있었습니다. 하지만 저는 강의나 책에 있는 기본적인 개념, 예제 말고 실제로 어떻게 코드로 구현되어 있고, 어떤 자료구조를 사용했을까 등등.. 궁금했습니다. 그래서 제가 궁금해서 왜? 라는 궁금증에 대한 해답을 스스로 찾아보고 정보를 공유하면 좋겠다고 생각이 들어 위해 삽을 들고 삽질을 시작했습니다. *현재 저는 실무자도 아니고 취준생이기 때문에 분석 실력은 살짝 감안하셔서 봐주시면 감사하겠습니다. 뭔가 이상하거나 틀린 부분이 있다면 댓글 남겨주시면 확인 후 반영하도록 하겠습니다! JPA 그리고 H..

스프링 2023.03.14

코딩테스트 공부를 막 준비, 시작하시는 분 들에게..

*매우 주관적인 견해임을 밝힙니다. 정답은 없으니까... 안녕하세요. F-lab에서 오프라인으로 코딩테스트 스터디를 진행하면서 다른 분들보다 조금이라도 문제를 많이 푼 경험이 있어, 삽질을 한 경험을 공유드려 이제 막 코테, 언어, 자료구조 공부를 시작하시는 분들에게 조금이나마 저와 같은 실수를 하지 않기를 바라는 마음에 글을 작성하게 되었습니다. 백준과 프로그래머스 문제를 합쳐 700문제 가까이 풀었습니다. 정말 많이 푼 것 같지만 저는 작년에 카카오 공채, 소마 2 차코테, 이베이 등등 수많은 코테에 떨어진 경험이 있습니다. Q) 왜 떨어졌을까요? A) 문제만 많이 풀면 될 줄 알았고, 알고리즘의 원리나 자료구조에 대해 정확히 파악을 하지 못하고 무작정 생각과 동시에 코드를 작성하려고 했습니다. 그러..

끄적끄적 2023.02.10

MyBatis 를 사용한 1:N 관계 조회하기

MyBatis 사용법 대부분은 공식문서에서 자세하게 설명되어 있습니다. 하지만 제가 프로젝트를 진행 하면서 1:N 관계 테이블에서 값을 가져오는데 발생한 문제점과 해결방법을 써보려고 합니다. 복잡한 연관관계 매핑 현재 진행하고있는 주문 도메인을 조회하는 쿼리인데 연관관계가 나름 복잡한 구문입니다. (order - orderLineItem - orderItemOptionGroup - orderItemOption ) 해당 결과를 가져오기 위해 어떻게 매핑을 해야할까를 공식문서와 블로그 등등 많이 찾아봤습니다. 공식 문서에서는 내포된(Nested) Results: 조인된 결과물을 반복적으로 사용하여 내포된 결과 매핑을 사용하는 방법으로 ResultMap 을 사용하도록 권장하고 있다. 단순히 Select 여러개..

프로젝트 정리 2022.10.19

Flyway 버전업데이트로 발생한 문제 해결

우선 Flyway 가 무엇인지, 왜 도입하려 했는지 간단하게 설명드리겠습니다. 해결 방법을 보기 원하시면 스크롤을 쭉쭉 내려주시면 됩니다! Flyway 란? Flyway는 데이터베이스 스키마에 대한 버전 제어를 가능하게 하는 오픈 소스 데이터베이스 마이그레이션 도구입니다. 데이터베이스 스키마는 시간이 지남에 따라 변경사항을 관리하고 데이터베이스 스키마에 적용하여 개발, 테스트 및 프로덕션과 같은 다양한 환경에서 스키마가 동기화되도록 합니다. Flyway 의 장점 Flyway를 사용하면 다음과 같은 주요 이점이 있습니다! 1. 버전 제어: Flyway를 사용하면 데이터베이스 스키마의 버전을 변경하고 시간 경과에 따른 변경사항을 추적할 수 있습니다. 이렇게 하면 이전 버전으로 되돌리거나 스키마가 변경된 내용..

프로젝트 정리 2022.09.01

[HTTP] 로그아웃은 "GET" or "POST" ??

프로젝트를 진행하다가 사용자의 로그아웃을 구현할 일이 있었습니다. 당연히 로그아웃은 Rest 관점에서 사용자의 상태를 변경시키니까 Post가 아닌가? 라고 생각을 할 수 있지만 Rest 관점 외에서 이유를 생각해보고 찾아보니 아래와 같은 브라우저의 기능이 있습니다. 사용자를 위해 GET 링크를 미리 가져오는 웹 가속기(Web Acceleration)와 같은 일부 프로세스가 있습니다. - 웹 가속화 는 캐싱 및 압축과 같은 다양한 기술을 사용하여 웹 서버와 클라이언트 브라우저 간의 콘텐츠 전송 속도를 높이는 것을 말합니다. 이러한 프리페치의 목적은 사용자가 링크를 따라가면 즉시 콘텐츠를 제공하여 페이지 로딩 시간을 단축하는 것입니다. 따라서 프로세스는 GET 요청의 링크가 콘텐츠를 반환하기 위한 것이며 상..

스프링 2022.07.12

assertJ - 공식문서 기반 간단 정리

AssertJ란?? AssertJ는 풍부한 assertions 세트와 유용한 오류 메시지를 제공하고 테스트 코드 가독성을 향상시키며, IDE내에서 매우 쉽게 사용할 수 있도록 설계된 Java 라이브러리 입니다. Junit5 에서 해당 라이브러리를 많이 사용합니다. 실제 Junit5 공식문서에 가면 이런 글이 있습니다. JUnit Jupiter에서 제공하는 어설션 기능은 많은 테스트 시나리오에 충분하지만 더 많은 성능과 매처 와 같은 추가 기능 이 필요하거나 필요한 경우가 있습니다. 이러한 경우 JUnit 팀은 AssertJ , Hamcrest , Truth 등과 같은 타사 주장 라이브러리의 사용을 권장합니다. 지원되는 자바 버전 AssertJ Core 3.x 에는 Java 8 이상이 필요 AssertJ ..

스프링 2022.07.08

Builder Pattern (빌더 패턴)

빌더 패턴의 정의 빌더 패턴은 "복잡한 객체의 구성을 해당 표현과 분리하여 동일한 구성 프로세스에서 여러 개의 다른 표현을 생성할 수 있도록 하는 것"을 목표로 합니다. 빌더 패턴은 fluent interface와 비슷해야 합니다. fluent interface는 일반적으로 람다식에서 볼 수 있듯이 method cascading(또는 method chaining)을 사용하여 구현됩니다. *메서드 체인은 객체 지향 프로그래밍 언어에서 여러 메서드를 호출하기 위한 일반적인 구문입니다. method chainig example) public class PersonMethodChaining { private String name; private int age; //해당 속성을 설정하는 부작용 외에도 setter..

스프링 2022.06.28

함수형 프로그래밍 + 람다(재정리) JAVA

함수형 프로그래밍? 함수를 값으로 취급한다. 0개 이상의 인수를 가지며, 한 개 이상의 결과를 반환해야하고, 부작용(no side effect)이 없어야 한다. 함수나 메서드가 어떤 예외도 일으키지 않아야 한다. 여기서 부작용(Side Effect)이란 자료구조를 고치거나 필드에 값을 할당(setter 메서드 같은 생성자 이외의 초기화 동작) 예외 발생 파일에 쓰기 등의 I/O 동작 수행 함수형 프로그래밍의 주요 특성 1. 불변(Immutable) 객체를 사용한다 원본은 변하지 않기 때문에, 객체의 상태를 바꿀 수 없으므로 thread safe하다. 2. 참조 투명성(Referential Transparency) // Pure Function 동시에 함수를 처리해도 사이드이펙트 없이 동일한 값 출력시킬 ..

L4, L7 Load Balancer

L4, L4 계층 L7: 애플리케이션 계층 최종 사용자에게 가장 가까운 L7은 사용자 데이터와 직접 상호 작용하는 유일한 계층입니다. 이메일 클라이언트, 웹 브라우저 및 기타 소프트웨어 애플리케이션은 모두 레이어 7에 의존하여 통신을 시작합니다. L4: 전송 계층 L4는 장치, 최종 시스템 및 호스트 간의 데이터 전송 및 종단 간 통신을 처리합니다. 여기에는 데이터를 L3으로 보내기 전에 세션 계층에서 데이터를 분할하고 수신단에서 분할된 데이터를 세션 계층을 위한 소비 가능한 데이터로 재조립하는 작업이 포함, 오류 제어 및 흐름 제어를 처리 L4 와 L7 Load balancer (스위칭 장비) 로드밸런서는 트래픽을 받아서 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어 부하 분산에는 L4 Load..

CS 2022.06.12