본문 바로가기

전체 글54

VO(Value Obejct) "VO(Value Object)에 대해서 들어보기는 했는데 왜 사용하는거지?" 이번 글에서는 VO(Value Object)의 개념과 장점 및 단점을 예제 코드를 통해 쉽게 알아보겠습니다."VO(Value Object)란 무엇일까요?"VO(Value Object)란 무엇일까요?VO는 Value Object로 해석 그대로 값 객체를 의미합니다. 즉, 값을 표현하는 객체입니다.그렇다면, "값은 그냥 원시 타입(Primitive Type)으로 표현하면 되지 않을까? 굳이 VO를 사용할 이유가 있을까?" 하는 의문이 들 수 있습니다. VO에 대한 필요성을 이해하기 위해 예시 상황과 코드를 통해 살펴보겠습니다.예시 상황은 입력받은 상품에 대한 정보를 저장하는 과정에서 가격이 0이하인지 검사를 한 후, 저장을 하는 .. 2025. 1. 31.
커버링 인덱스 & 성능 테스트 "DB에서 데이터 조회를 더 빨리하고 싶은데, 어떻게 하면 좋을까?"  이번 글은 데이터를 빠르게 조회할 수 있는 커버링 인덱스에 대해 소개하고, 직접 성능 테스트를 진행해 얼마나 빨라질 수 있는지 확인하는 글입니다. 먼저, 커버링 인덱스에 대해서 알아보도록 하겠습니다. 커버링 인덱스커버링 인덱스(Covering Index)는 쿼리에 필요한 모든 데이터를 인덱스 자체가 포함하고 있어, 테이블을 조회하지 않고 인덱스만으로 결과를 반환할 수 있는 인덱스를 의미합니다. 커버링 인덱스는 테이블을 조회하지 않고 인덱스만으로 데이터를 반환할 수 있어, 일반적인 인덱스보다 더욱 빠르게 데이터를 조회할 수 있습니다. "어떻게 인덱스로만 데이터를 반환하지?" 먼저, 인덱스가 동작하는 원리에 대해서 간단히 알아보도록 하겠.. 2025. 1. 30.
동시성 문제 해결방법(Update Query편) "동시에 2명이 좋아요를 눌렀는데 왜 하나만 저장될까?""동시에 눌러도 DB에 2개가 저장 되야 하는거 아니야?" 좋아요 기능을 구현하고 테스트 하던 중 2명의 유저가 동시에 좋아요를 누르는 상황일때, 좋아요 갯수가 한개만 저장되는 문제가 발생했습니다.  "왜 이런 문제가 발생할까요?"해결방법을 이야기하기 전에 동시성 문제에 대해 알아보도록 하겠습니다. (이번 편은 여러 해결 방법 중 update 쿼리문으로 해결하는 방법만 이야기 해보겠습니다.) 동시성 문제동시성 문제는 여러 개의 프로그램이 동시에 같은 데이터를 변경하려 할 때 발생하는 문제를 의미합니다.동시에 같은 데이터를 변경하는게 어떤 문제점을 가져올 수 있을까요? 우리 실생활에 적용될 만한 상황 중 은행으로 예시를 들어보겠습니다. 상황 예시XX은.. 2025. 1. 29.
Index와 Query문 조건의 관계 "분명 Index를 생성했음에도 불구하고 왜 인덱싱이 되지 않는걸까?"Index는 어떻게 생성해야 할까?  "인덱스를 생성해도 인덱싱이 안되는 경우가 존재할까요?"네, 존재합니다. 제가 직접 겪은 문제입니다.먼저, 인덱스를 왜 사용하는지에 대해 간략히 짚고 넘어간 후, 왜 인덱스를 생성했음에도 인덱싱이 안됬는지에 대해 알아보겠습니다. 인덱스인덱스는 데이터베이스에서 검색 기능을 향상시키기 위해 사용되는 데이터 구조를 말합니다. 테이블의 데이터에 빠르게 접근하도록 돕는 일종의 색인 역할을 합니다. 쉽게 말해, 책의 목차를 생각하면 됩니다. 인덱스를 사용하지 않는 경우에는 찾고자하는 데이터가 존재하는 테이블을 Full Scan하여 조회에 더 많은 시간이 걸리게 됩니다.  예시 코드api를 호출하게되면, 이 코.. 2025. 1. 28.
[Java] Serialization 기술 면접을 대비해Java의 Serialization와 관련된 질문과 답을꼬리 질문 형태로 작성한 글입니다. Q. 직렬화(serialization)란 무엇이며 왜 자바에서 사용하나요? 답변해주세요. A : Java의 객체를 외부와 상호작용 할때, 데이터 형태를 맞춰주기 위해서 사용합니다. 답변에 대한 평가: 40점평가 이유: 답변은 일부 맞는 내용을 포함하고 있지만, 직렬화의 개념을 충분히 설명하지 않았습니다. 또한, 왜 자바에서 직렬화를 사용하는지에 대한 이유도 명확히 언급되지 않았습니다. Q. Java에서 객체를 직렬화하는 과정에는 어떤 단계들이 포함되어 있나요? 직렬화된 객체를 외부와 상호작용할 때 어떤 장점이 있는지 설명해주세요. A : 직렬화 과정은 먼저, 직렬화가 필요한 클래스에 Seriali.. 2025. 1. 27.
[Java] Thread 기술 면접을 대비해Java의 Thread와 관련된 질문과 답을꼬리 질문 형태로 작성한 글입니다. Q. 자바에서 스레드란 무엇이고 어떻게 사용하나요? A : 자바에서 스레드는 프로세스 내에 존재하는 주어진 작업단위를 수행하는 수행원이라고 생각합니다.강제적으로 코드를 통해 사용할 수도 있고, 컴퓨터 자체적으로 업무를 수행하기 위해 자동으로 사용할 수도 있습니다.  답변에 대한 평가 : 30점평가 이유 : 스레드에 대한 개념은 어느 정도 맞지만, 더 정확히 설명이 필요합니다. 스레드는 프로세스 내에서 실행되는 실제 작업 단위로, 프로세스 내 리소스를 공유하며 동시에 여러 작업을 처리할 수 있는 것이 중요합니다.검색 키워드 : Java thread, Multithreading  Q. 자바에서 스레드를 만들 때 .. 2025. 1. 27.
[Java] Generic 기술 면접을 대비해Java의 Generic과 관련된 질문과 답을꼬리 질문 형태로 작성한 글입니다.  Q. 제네릭의 동작 원리와 제네릭을 사용하는 이유에 대해 설명해주세요. A : 제너릭은 컴파일 시점에 데이터 타입을 검사합니다. 사용하는 이유는 잘못된 데이터 타입을 사용하지 못하게 사전에 방지하기 위해 사용합니다.  답변에 대한 평가 : 60점평가 이유 : 제네릭에 대한 개념과 사용 이유에 대해서 언급했지만, 좀 더 구체적인 설명이 필요합니다. 제네릭을 사용함으로써 발생할 수 있는 장점과 실제적인 활용 사례에 대해 더 알아보는 것이 좋을 것입니다.검색 키워드 : Java Generics advantages, Java Generics use cases  Q. 제네릭을 사용함으로써 어떠한 장점을 얻을 수 있.. 2025. 1. 27.
[Java] HashMap 기술 면접을 대비해HashMap과 관련된 질문과 답을꼬리 질문 형태로 작성한 글입니다.  Q. HashMap에서 hashCode 메소드는 왜 중요한지, 그리고 hashCode 메소드를 재정의해야 하는 이유에 대해 설명해보세요. A : HashMap에서 값을 삭제하거나 찾을때 hashCode메소드를 통해 얻는 값을 기준으로 일치하는지 일치하지 않는지 찾게 됩니다.특히 객체를 값으로 가지는 경우 hashCode는 주소값을 갖고 있기 때문에, 객체의 필드가 모두 같은 값이라도 다른 객체로 인식하게 됩니다. hashCode 메서드를 재정의 해줌으로써 기존에 주소값을 비교하던 부분을 주소값이 아닌 다른 기준을 재정의함으로 인해 같은 객체로 인식이 되지 않는 문제를 해결할 수 있습니다. 피드백답변에 대한 평가: 7.. 2025. 1. 27.
[Java] ArrayList 기술 면접을 대비해Java의 자료구조와 관련된 질문과 답을꼬리 질문 형태로 작성한 글입니다.  Q. ArrayList 내부 동작 원리에 대해 설명해주세요. 해당 동작 원리를 알면 ArrayList를 사용할 때 어떤 점에 주의해야 하는지 알 수 있습니다. A : ArrayList는 배열과 같은 원리로 동작합니다.  데이터를 조회할땐 시간복잡도가 O(1)이지만, 데이터를 삽입 삭제하는 경우 최악일때 O(n)이 됩니다. 피드백답변에 대한 평가 60점평가 이유 : 답변은 ArrayList의 일반적인 동작 방식을 어느 정도 이해하고 있지만, 좀 더 세부적인 동작 원리에 대해 설명이 필요합니다. 실제로 ArrayList는 내부적으로 배열을 이용하지만, 배열크기를 조절하거나 삽입/삭제 시에는 어떤 과정을 거치는지 더.. 2025. 1. 27.