디자인 패턴 디자인 패턴은 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은것 표준은 아니지만 표준적인 해법과 작명법을 제시한 도서가 GoF의 이라는 책이며 현재 수 많은 디자인 패턴의 학습의 기준이 되는 책이다. GoF에서는 크게 패턴을 생성, 구조, 동작 패턴으로 정의하며 이외에도 동시성, 아키텍처,기타 패턴등으로 분리되며 동시성은 크게 동기화에 대해 다루며 아키텍처의 경우 대표적으로 MVC 모델 패턴이 존재한다. 싱글톤 패턴 싱글톤 패턴의 정의 싱글톤 패턴은 생성패턴에 속하며 하나의 클래스에 하나의 인스턴스만을 가지는 패턴이다. 하나의 클래스를 기반으로 여러개의 개별적인 인스턴스 생성이 가능하지만 하나만의 인스터를 만들어 이..
분류 전체보기
N+1 이슈는 어떤 것일까? 개발자는 요청이 1개로 처리되길 원한 상태로 비즈니스 로직을 구현하였지만, N개의 추가 Query가 발생하게 되는 현상 연관 관계를 Mapping하는 과정에서 fetch Type을 Lazy 와 Eager 전략에서 각각 발생한다. Eager Loding에서 N+1이 발생하는 이유 즉시 로딩에서 이러한 이슈가 발생되는 이유는 JPQL 을 사용하는 경우 전체 조회를 했을 때 영속성 콘테스트가 아니라 데이터 베이스에서 데이터를 직접적으로 조회한 후 로딩전략이 동작하기 때문이다. 예를 들어 A라는 Entity가 존재하고, 그 A에 종속적인 엔티티의 데이터가 10개 존재한다고 하였을 때 A를 조회할경우 A에 종속적안 데이터들이 조회 row 만큼 쿼리가 호출된다. 정리하자면 , JPQL은..
알고리즘을 풀다보면 마주할 수 있는 복잡도(Complexity)와 빅오 표기법(Big-O notation)에 대해 항상 들어왔고 중요성을 인지하고 있지만 너무 추상적인 개념이었기에 정리를 시도해보려한다. 💣복잡도란? 복잡도란 다음과 같이 정의할 수 있다. 알고리즘의 성능 및 효율성을 나타내는 척도 크게 시간복잡도(Time-Complexity)와 공간복잡도(Space-Complexity)로 나눌 수 있다. 각 알고리즘이 주어진 특정 크기의 입력(n)을 기준으로 수행시간(연산) 혹은 사용공간이 얼마나 되는지 객관적으로 비교할 수 있는 기준을 제시한다. 복잡도를 나타내는 방법으로는 점근 표기법 기준으로 O(빅오), Ω(오메가), Θ(세타) 등이 있고, 주로 빅오와 세타 표기법이 많이 사용된다. 점근 표기법 :..
해당 글은 스터디 모임 모함코의 네트워크 커리큘럼 과제물입니다. 우선 스레드의 개념을 이해하기 위해선 프로세스의 개념을 알아야한다. 1-1. 프로세스란? 프로세스란 단순히 실행중인 프로그램이라고 말할 수 있다. 즉 , 사용자가 작성한 프로그램이 디스크로부터 메모리에 적재되어 운영체제로부터 주소공간 메모리,파일 등을 할당받아 실행중인 것을 의미합니다. 자바에선 이를 JVM이 수행하고 있다. 함수의 매개변수, 복귀주소, 로컬(인스턴스) 변수와 같은 임시 자료들을 저장하는 프로세스 “스택”과 전역 변수를 저장하는 데이터 섹션, 프로세스 실행중에 동적으로 할당되는 메모리인 “힙”을 포함한다. 이러한 프로세스는 프로그램에서 사용되는 데이터와 메모리등의 자원 , 스레드로 구성된다. 1-2. 스레드란? 스레드란 프로..
스프링부트를 자바 Language로 사용해오던 나에게 Lombok 라이브러리의 @Getter @Setter 어노테이션은 혁신과도 같은 것이었다. 그 귀찮은 Getter와 Setter를 직접구현하지 않고도 어노테이션 하나만으로 구현이 가능하기 때문이다. 하지만 프로젝트의 크기가 커져갈 수록 어노테이션이 남발되게 되고 필요없는 상황에서도 습관적으로 사용하기 때문에 이렇게 무차별적 사용을 해도 괜찮은가? 에 대한 의문이 들게되어 해당 글을 작성하게 되었다. Setter는 왜 지양되어야 하는가? Entity에서의 경우에는 DB와 직접적으로 연결되는 클래스로 DB에 값이 직접적으로 수정이 되는 로직은 안정적이지 못하다. 유지보수적 측면에서 값을 변경한 의도를 파악하기 어려워져 코드를 역추적하여 해당 값의 변경의의..
드디어 여정의 끝인 4주차가 지나가고 나의 마지막 프리코스 리뷰이다. 👋👋 정말 많은걸 깨우쳤고 많은걸 배웠으며 나에게 많은 실망을 하였던 4주간의 여정에 마침표를 찍는 회고록이다. 이번 주차의 회고록에는 체화시킨 것과 나의 실패한 점에 대하여 서술하려한다. 자바는 객체지향이야 자바는 흔히 말하는 객체지향언어이다. 하지만 지난 3주차 동안 자바를 객체지향언어답게 프로그래밍하지 못했고 그를 인지하고 있었다. 그래서 이번주차에서는 "나는 자바 서버개발자인가? 그렇다면 왜 이렇게 프로그래밍을 하는가" 에 대한 조금 근본적인 질문을 스스로에게 가지게 되었다. 그래서 나는 3주차가 끝난 시점에 기초부터 다지기 위해 OOP를 공부하며 프로그래밍적인 부분보다는 사고적인 부분을 키우고있었다. 그래서 이번 4주차가 시작..
해당 글은 켄트 백 저자의 테스트 주도 개발을 읽고 그 내용을 주관적으로 정리한 글입니다. "테스트 주도개발은 현재 하나의 기술 스택으로 추앙받고 있으나 그 본질은 자신의 사고에 달려있다. 자신의 코드를 자신이 검증하며 스스로를 돌아볼 수 있는 기회로 삼아야 한다는 것 이다." 테스트 주도 개발이란? 테스트 주도 개발이란 반복된 테스트로 자신이 만든 기능을 검증하고 이를 최대한 작은 단위로 만들어 이를 통과하는 코드들을 추가하며 개발하는 것을 말합니다. 이러한 테스트 주도 개발을 잘하기 위해선 켄트백은 3가지 단계를 거쳐야한다고 얘기합니다. 그 첫 번째 단계는 규칙을 충실히 지켜보는 것입니다. 간단하고 쉬운 문제들로 TDD를 시도하면서 프로그래밍 하기 쉬운 문제들로 TDD의 구조에 익숙해지는 것이 첫 단..
정말 슬픈 3주차가 드디어 지나가고 4주차가 오는 수요일이 돌아왔다. 😂 이번 3주차는 내가 얼마나 부족한지 알 수 있던 한 주였다. 우선 이번 3주차를 진행하는데 있어 리뷰내용으로는 부족함을 많이 느꼈기 때문에 나의 "실패"를 중점으로 블로그를 풀어나가려고한다. 와.. 고수가 너무 많아.. 나는 모든 주차의 과제를 진행하면서 다른 사람의 코드를 일부러 보지 않았다. 볼수록 남의 코드에 영향을 받아 내가 온전히 생각하여 작성하는 방향을 지향한다.(물론 남의 코드를 본다는 것 자체가 좋지않다는 것이아니다. 타인으로부터만 온전히 배울 수 있는 것이 있다고 생각한다.) 그렇게 3주차를 종료하고 다른 사람들의 코드를 보았을 때 나는 내가 아직도 많이 모자라구나라는 생각이 들었다. 이번주차의 핵심은 OOP였다. ..