전체 글 80

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

https://newfangled.tistory.com/28 [스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제만들기비즈니스 요구사항과 설계아래와 같은 요구사항을 보면  회원데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다.그치만 정책이 결정 나기 전까지 기다릴 수만은 없다.이때 우리는newfangled.tistory.com위의 내용과 이어지는 포스팅입니다.  새로운 할인 정책 개발새로운 할인 정책을 확장해 보자! 기획자가 할인정책을 고정금액이 아닌 VIP 고객인 경우 10% 할인이 되도록 정책을 바꾸고 싶어 하는 상황이다.개발자는 정책이 바뀌어도 걱정이 없다.왜냐하면 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했기 때문이다. ^*^  RateDiscountPolicy ..

Spring 2024.10.11

[JAVA] ORM 이란? MyBatis 와 JPA 차이

ORM 은 무엇이며 MyBatis와 JPA는 어떤 상황에서 쓸까?ORM(Object Relational Mapping) 이란?ORM 이란 객체(Object) 와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체 지향적으로 사용하게 해주는 기술입니다.JAVA 에서 대표적인 ORM으로는 JPA와 그의 구현체 Hibernate 가 있다. JPA (Java Persistent API)  등장 이전에는 MyBatis라는 Object Mapping 기술을 사용하였다.MyBatis는 Java 클래스 코드를 직접 작성한 SQL 코드에 Mapping 시켜 주어야 한다.반면 JPA와 같은 ORM 기술은 객체가 DB에 연결되기 때문에, SQL을 직접 작성하지 않고 표준 인터페이스 기반으로 처리한다는 점에서 차이가 있..

JAVA 2024.10.11

[JAVA] 자바 버전과 특징 8 ,11

자바 8과 같은 일부 버전을 왜  1.8 이라고 할까? 9 이전의 JAVA 버전은 단순히 다른 명명 체계를 사용했습니다.따라서 Java 8 은 1.8, Java 5 는 1.5  등으로 불릴 수 있습니다.'java -version' 명령을 실행하면 아래와 같이 출력됩니다.c:\Program Files\Java\jdk1.8.0_191\bin>java -versionjava version "1.8.0_191" (1)Java(TM) SE Runtime Environment (build 1.8.0_191-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) 이는 단순히 Java 8 을 의미합니다. Java 9 이후부터는 Java version ..

JAVA 2024.10.10

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제만들기

비즈니스 요구사항과 설계아래와 같은 요구사항을 보면  회원데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다.그치만 정책이 결정 나기 전까지 기다릴 수만은 없다.이때 우리는 객체 지향 설계 방법을 활용하면 된다. 인터페이스를 만들고 언제든지 구현체를 갈아 끼울 수 있도록 설계하면 된다. 회원회원을 가입하고 조회할 수 있다.회원은 일반과 VIP 두 가지 등급이 있다.회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)주문과 할인 정책회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다.할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해 달라. (나중에 변경될 수 있다.)할인 정책은 변경 가능성이 높다. 회사의 기본..

Spring 2024.10.09

[스프링 핵심 원리 - 기본편]객체 지향 설계와 스프링

스프링 단어?스프링이란 단어는 문맥에 따라 다르게 사용된다.스프링 DI 컨테이너 기술스프링 프레임워크스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계 이 기술을 왜 만들었는가?이 기술의 핵심 컨셉은? 과거 범용적으로 쓰이던 EJB 은 EJB 에 종속적으로 개발을 해야하는 불편함이 있었고 객체지향 프로그램밍을 잘 개발할 수 있게 스프링이 등장하였다. 스프링은 자바 언어 기반의 프레임워크자바 언어의 가장 큰 특징 - 객체 지향 언어스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체 지향 프로그래밍이란?스프링을 제대로 이해하기 이해서 다형성과 SOLID 을 알아야한다. 다형성이란?하나의 객체가 여러..

Spring 2024.10.08

[MySQL] B-Tree 인덱스

인덱스를 생성하는 도중 의문에 생겼다.다중컬럼 인덱스를 생성하면 단일컬럼인덱스를 왜 또 생성해주어야할까?다중컬럼 인덱스를 걸어두면 단일컬럼 조회 시에도 인덱스 스캔을 타야 하는 것이 아닐까?B-Tree 인덱스 구조를 파헤쳐보면  이 문제에 대한 해답을 얻을 수 있었다. 인덱스란?테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan) 과 달리 인덱스를 검색하여 해당 자료의 테이블에 접근하는 방법입니다.인덱스를 책에 마지막에 있는 인덱스 목록(찾아보기) 에 비유하자면 책의 내용은 데이터 파일이 될 것이고 데이터 파일에 저장된 레코드의 주소는 인덱스 목록에 있는 페이지 번호가 될 것입니다. 인덱스의 장단점인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로..

다익스트라 알고리즘

https://www.youtube.com/watch?v=tZu4x5825LI  내비게이션은 어떤 원리로 최단거리를 추천해줄까? 궁금하다면 다익스트라 알고리즘을 알아보자! 다익스트라(Dijkstar) 알고리즘은 그래프의 한 정점에서 모든 정점까지의 최단거리를 구하는 최단 경로 문제 알고리즘입니다. 음수 간선이 없는 경우 사용할 수 있고, 음수의 간선이 존재할 경우 벨만-포트 알고리즘을 사용하면됩니다.1. 다익스트라 알고리즘은 아직 확인되지않은 거리는 전부 초기값을 무한으로 잡습니다.Q 는 방문하지 않는 노드들의 집합   초기화를 실행합니다.출발지를 A 로 설정했기 때문에 ,  d[A] = 0 이 된다. ( A 노드를 아직 방문한 것은 아니다)출발지를 제외한 모든 노드들은 아직  확인되지 않았기에, d[다..

알고리즘 2024.10.03

[Real Mysql 8.0] 5.2 MySQL 엔진의 잠금

5.2  MySQL 엔진의 잠금 Mysql 에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진 :MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미침스토리지 엔진 : 스토리지 엔진 간 상호 영양을 미치지 않음. 5.2.1GLOBAL LOCKFLUSH TABLES WITH READ LOCK 명령으로 획득 할 수 있다.MySQL 에서 제공하는 잠금 가운데 가장 범위가 크다.한 세션에서 글로벌 락을 획득하면 다른 세션에서 SELECT 를 제외한 대부분의 DDL ,DML 문장을 실행하는 경우 글로벌 락이 해제될 때까지 해당 문장이 대기 상태로 남는다.글로벌 락이 영향을 미치는 범위는 MySQL 서버 전체이다.작업 대상 테이블이나, 데이터베이스가 다르..

프로그래머스 광고삽입 [JAVA]

https://school.programmers.co.kr/learn/courses/30/lessons/72414 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  해당 문제는 누적합의 개념을 알아야 시간안에 풀 수 있다.시간은 초로 환산하여 계산하면 간단히 구현할 수 있다.  주의 1. 재생시간에서 끝나는 시간 end 에서는 -1 을 해주어야 한다. 시청 구간의 의미: 예를 들어, 로그에 00:00:00 - 00:00:10이라고 되어 있으면, 일반적으로 시청이 00:00:00에서 시작하고, 00:00:10이 시작되는 순간에 끝난다는 것을 의미합니다. 즉, 실..

알고리즘 2024.10.02

프로그래머스 택배 배달과 수거하기 [JAVA]

https://school.programmers.co.kr/learn/courses/30/lessons/150369#  접근 방법매 순간 최적의 선택을 통해 문제를 해결해 나가는 그리디 유형이다.먼 곳의 택배의 갯수를 매번 최적으로 가져오면 최소한의 이동거리를 얻을 수 있다.멀리 있는 지점부터 시작해 트럭의 용량만큼 배달하고, 용량이 허용하는 한 수거작업 또한 진행한다.  import java.util.*;class Solution { public int update(int pointer, int[] arr, int cap){ int sum = 0; while(pointer >= 0 && sum cap){ arr[++pointer] = sum - ca..

알고리즘 2024.09.30