2025/03/14(금)

 

MVVM 패턴

Model-View-ViewModel

  • 애플리케이션 로직과 UI의 분리를 위해 설계
  • 비즈니스 로직에세는 ViewModel의 상태 데이터만 변경하면 즉시 View에 반영
  • Model : 순수 데이터 자체
  • View : 화면 , HTML과 CSS로 작성
  • View Model : View의 실제 논리 및 데이터 흐름, 여러가지 형태로 구현될 수 있음( 변수, 함수 등), 순수한 데이터를 화면에 표현하기에 편하도록 가공해서 가진다.

MVVM 패턴

 

 

 

  • model에서 직접 데이터를 바꾸면 화면에 바뀌지 않음

 

 


 ES6

 

var, let, const 차이점 정리

호이스팅 : 변수와 함수 선언이 코드 실행 전에 메모리에 할당되는 것

 

var 특징

  • 함수 스코프(Function Scope)를 가짐 (블록 {}을 무시함)
  • 변수 선언이 호이스팅(Hoisting)되며, 초기화되지 않은 상태에서 undefined로 할당됨
  • 같은 변수 이름을 여러 번 재선언 가능

 

 let 특징

 

  • 블록 스코프(Block Scope)를 가짐 ({} 내부에서만 유효)
  • 변수 선언이 호이스팅되지만 초기화되지 않아 TDZ(Temporal Dead Zone, 일시적 사각지대) 발생
  • 같은 변수를 재선언할 수 없음
  • 재할당 가능

 

 

const 특징

 

  • let과 동일하게 블록 스코프(Block Scope)를 가짐
  • 호이스팅되지만 TDZ 발생
  • 재할당 불가능
  • 선언과 동시에 초기화가 반드시 필요

 

 


기본 파라미터 , 가변 파라미터

기본 파라미터(Default Parameter)

  • 함수 호출 시 인수를 생략했을 때 가지는 기본 값을 지정
  • 뒷부분에 지정, 중간에만 지정하는 것은 불가능

 

 

 

가변 파라미터(Rest Parameter)

  • 전달하는 파라미터의 개수를 가변적으로 적용
  • 매개변수 앞에 ... 연산자 지정
    • 전달된 인수를 매개변수로 매칭
    • 매칭되지 않은 인수를 모아 배열로 지정 후, 가변 파라미터로 전달
  • 1개만 지정 가능, 마지막 매개변수에만 지정 가능

 

 


화살표 함수

화살표 함수(Arrow Function, =>)는 ES6(ECMAScript 2015)에서 도입된 간결한 함수 표현식, 기존의 function을 활용한 함수보다 짧고 직관적인 문법 제공

 

 

기본 문법

const 함수이름 = (매개변수) => 표현식;
  • 중괄호 {} 없이 한 줄로 작성하면 해당 표현식이 자동으로 반환
  • return 키워드 생략 가능
  • 한 줄짜리 함수로 객체를 return 할 때는 중괄호로 꼭 묶어야 함. 묶지 않으면 undefined 에러 발생

 

 

여러 줄 함수인 경우

const 함수이름 = (매개변수) => {
    // 여러 줄 코드 가능
    return 결과;
};
  • 중괄호 {} 사용, return 명시

 

 

화살표 함수의 this 바인딩 차이

기존 function 함수는 호출 방식에 따라 this 가 동적으로 결정되지만, 화살표 함수는 this를 자신을 감싼 상위 스코프에서 가져온다. 👉 화살표 함수는 자신만의 this를 가지지 않음

 

 

일반함수 vs 화살표 함수 예제

const obj = {
    name: "kwon",
    regularFunction: function() {
        console.log("Regular:", this.name);
    },
    arrowFunction: () => {
        console.log("Arrow:", this.name);
    }
};

obj.regularFunction(); // "Regular: Alice"
obj.arrowFunction();   // "Arrow: undefined"

 

❗왜 arrowFunction()의 결과가 undefined일까?

  • regularFunction(): this가 obj를 가리킴.
  • arrowFunction(): this가 obj가 아니라 상위 스코프(전역 객체 또는 undefined)를 가리킴.

 

 

화살표 함수를 주로 사용하는 경우

1. 콜백 함수

2. 클래스 내부에서 this가 필요 없는 함수

3. 이벤트 리스너 내부에서 this가 필요한 경우

2025/3/13(목)

 

파일 관리_Path 모듈

  • 운영체제 간에 경로를 구분하는 구분자가 다른 불편 존재 => 경로 구분자를 통일하기 위해 사용
  • 경로를 나누거나 합치기 가능
  • 절대경로( `파일절대경로: ${__filename}` ), 상대 경로 존재
  • 경로 존재 여부로, 이름이 같은 내가 만든 모듈과 내장 모듈 구분 가능

 

 

주요 함수

Path 모듈 가져오기

const path = require('path');

 

 

경로 합치기

path.join(경로1,경로2,...);

 

 

경로만 추출하기 

path.dirname(경로);

 

 

파일 이름만 추출하기

path.basename(경로);

 

 

파일 이름만 추출하기(확장자 제외)

path.basename(경로, 확장자);

 

 

확장자 추출하기

path.extname(경로);

 

 

경로를 객체로 변환하기

=> 각각의 정보를 한번에 가져올 수 있음

path.parse(경로)

{
  root, // 루트 디렉터리
  dir,  // 디렉터리 경로
  base, // 파일명.확장명
  ext,  // 확장명
  name  // 파일명
}

 


FS 모듈

  • File System 모듈의 약자
  • 비동기 처리 방법에 따라 사용하는 함수가 다름
    • 동기 처리 함수
    • 콜백 처리 함수
    • Promise API
  • FS 모듈 가져오기 : const fs = require('fs');

 

1. 동기 처리

 

에러 체크는 try catch로 실행

파일 존재 여부 체크 : fs.existsSync(파일)

 

2. 비동기 처리

 

 

 

요약

                                  동기 처리                                비동기 처리
디렉터리 읽기 fs.readdirSync('./'); fs.readdir('./', (err, files) =>
파일 읽기 fs.readFileSync('./example.txt'); fs.readFile('./example.txt', 'utf-8', (err, data) =>
파일에 쓰기 fs.writeFileSync('./text-1.txt', data); fs.writeFile('./text-2.txt', data, (err) =>
기존 파일에  내용 추가하기 fs.writeFileSync('./text-1.txt', content, { flag: 'a' });
fs.appendFileSync(파일, 내용);
fs.appendFile('./text-2.txt', '\n\n 새로운 내용 추가', (err) =>
파일 삭제하기 fs.unlinkSync('./text-1.txt'); fs.unlink('./text-2.txt', (err) =>
디렉터리 만들기 fs.mkdirSync(경로 [, 옵션]) fs.mkdir('./test', (err) =>

fs.mkdir('./test2/test3/test4', { recursive: true }, (err) =>
디렉터리 삭제하기 fs.rmdirSync(경로 [, 옵션]) fs.rmdir('./test', (err) =>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2025/3/12(수)

 

자바스크립트의 비동기

  • 노드 프로그램은 서버에서 실행되므로 대부분의 명령을 비동기 처리
  • 자바스크립트의 기본 설정은 비동기식

 

비동기 처리란?

  • 시간이 걸리는 함수와 빨리 처리할 수 있는 함수가 섞여 실행 순서를 알 수 없을 떄
  • 함수들이 원하는 처리 순서에 맞게 프로그래밍하는 것

 


 

비동기 처리_1) 콜백 함수

함수 안에 또 다른 함수를 매개변수로 넘겨서 실행순서를 제어하는 방식

=> 함수를 실행할 때, 특정 동작이 끝난 후 실행될 함수를 전달하는 개념

function mainFunction(callback) {
    console.log("메인 함수 실행");
    callback(); // 전달받은 콜백 함수 실행
}

function myCallback() {
    console.log("콜백 함수 실행");
}

// mainFunction 실행 시 myCallback을 콜백 함수로 전달
mainFunction(myCallback);
실행 결과
-----------
메인 함수 실행
콜백 함수 실행

 

 

 

콜백 함수는 마지막 매개변수로

function order(coffee, callback) {
	//커피 주문
    //3초 기다린 후 콜백 실행
}

function display(result) {
	//커피 완료 표시
}

order("아메리카노", display); //display함수를 order함수의 매개변수로 전달

 

 

 

 

콜백 함수를 사용할 때 한번만 실행하고 끝난다면 함수 안에 익명 함수로 직접 작성 가능

function displayLetter() {
  console.log('A');
  setTimeout(() => {
    console.log('B');
    setTimeout(() => {
      console.log('C');
      setTimeout(() => {
        console.log('D');
        setTimeout(() => {
          console.log('stop!');
        }, 1000);
      }, 1000);
    }, 1000);
  }, 1000);
}

displayLetter();

 

콜백이 중첩될수록 코드가 복잡해짐 => 콜백 지옥

==> Promise를 사용하여 콜백 지옥 해결

 

 

 

 

비동기 처리_ 2) Promise(프라미스)

프라미스 객체 콜백 함수를 사용해서 실행 순서 제어

"어떤 작업이 끝나면 결과를 반환할 것을 약속하는 객체"

 

Promise의 3가지 상태
pending (대기 중) 비동기 작업이 아직 완료되지 않음
fulfilled (이행됨) 작업이 성공적으로 완료됨 (resolve())
rejected (거부됨) 작업이 실패함 (reject())

 

const myPromise = new Promise((resolve, reject) => {
    let success = true; // 성공 여부를 설정

    setTimeout(() => {
        if (success) {
            resolve("✅ 작업 성공!");
        } else {
            reject("❌ 작업 실패!");
        }
    }, 2000);
});

myPromise
    .then(result => console.log(result)) // 성공 시 실행
    .catch(error => console.error(error)) // 실패 시 실행
    .finally(() => console.log("🎯 작업 완료!"));
실행 결과
-----------
✅ 작업 성공!
🎯 작업 완료!

 

 

 

 

Promise 체이닝

여러개의 비동기 작업을 연결해서 실행

function getUser() {
    return new Promise(resolve => {
        setTimeout(() => resolve("👤 사용자 데이터"), 1000);
    });
}

function getPosts(user) {
    return new Promise(resolve => {
        setTimeout(() => resolve(`${user}의 게시글`), 1000);
    });
}

getUser()
    .then(user => getPosts(user))
    .then(posts => console.log(posts)) // "👤 사용자 데이터의 게시글"
    .catch(error => console.error("❌ 오류 발생:", error));

 

Promise 역시 체이닝을 사용해서 연결을 계속하면 콜백 지옥처럼 코드가 복잡해질 수 있음!

 

 

 

 

비동기 처리_3) async/await

  • Promise를 더 쉽게 사용할 수 있도록 도와주는 최신 문법
  • 콜백 함수나 .then() 체이닝 없이 가독성이 뛰어난 비동기 코드를 작성 가능
async 비동기 함수를 정의하는 키워드
await 비동기 함수 내에서 Promise가 완료될 때까지 기다림

 

 

 async function init() {
 	try {
 		const response = await fetch('https://jsonplaceholder.typicode.com/users');
 		const users = await response.json();
 		console.log(users);
 	} catch (err) {
 		console.error(err);
 	}
 }
 
 init();

 

 


노드의 모듈

  • 노드에서는 대부분의 기능을 모듈 단위로 나누어 작성
  • 기능별로 만들어 놓은 함수

 

 

모듈의 종류 3가지

1)  내장 모듈(노드가 제공)

2)  내가 만든 모듈

3)  서드파티 모듈

 

 

 

모듈의 사용 이유

  • 코드의 재사용화, 라이브러리화를 위해

CommonJS 모듈 시스템

✅ module.exports

require()

// math.js (CommonJS)
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;

// 모듈을 내보내는 방법 (객체 형태로 여러 개 내보낼 수 있음)
module.exports = subtract;
module.exports = { add, subtract };
// app.js (CommonJS)
const math = require('./math'); // 모듈 가져오기

console.log(math.add(5, 3)); // 8
console.log(math.subtract(10, 4)); // 6

 

 

ES 모듈 시스템

 

✅ 모듈 내보내기 (export)

// math.mjs (ES 모듈)
export const add = (a, b) => a + b;
-----------------------------------------
const goodbye = (name) => {
    console.log(`${name}님, 안녕히 가세요`);
}
export default goodbye;

 

 

 

✅ 모듈 가져오기 (import)

// app.mjs (ES 모듈)
import { add, subtract } from './math.mjs';

console.log(add(5, 3)); // 8
console.log(subtract(10, 4)); // 6

 

이 게시글은 2025년 1월 14일 진행된 DGB금융그룹의 IT's DGB iM Challenger 대한민국 디지털 인재 양성 프로젝트 공모전 발대식 및 본선 대회 후기입니다.

 

 

1. 대회 공고 확인 및 팀 구성

https://dgb-challenger.co.kr/15

 

 

금융 관련 공모전을 기다리던 중 발견한 DGB금융그룹의 IT's DGB iM Challenger 공모전 !

이름이 길어서 복잡해 보이지만 결론은 디지털 기술을 적용한 금융 관련 상품이나 서비스 아이디어를 개발하는 것이다.

 

예선 - 본선 - 파이널 라운드, 사이에 전문 교육 등등 호흡이 긴 공모전이지만 일단 본선 대회 진출을 목표로 준비를 시작했다.

 

 

 

 

 

2. 예선 준비

우리 팀은 나와 내 친구 2명이었고 둘 모두 개발을 전공한 (예비) 개발자이다.

금융 지식 보유자, 디자이너 없이 개발만 아는 팀원 두 명이었지만 본선 대회에 진출할 수 있었다.

 

예선 준비를 하면서 친구와 다양한 아이디어를 논의해보았고 우리는 금융 관련 지식이 별로 없는만큼 어려운 주식 투자, 펀드, 부동산 등 보다는 보다 단순한 (우리들이 말하기로는 보다 말랑말랑한) 주제를 선정하고자 했다.

 

 

 

이렇게 전년도 수상 정보도 조사해보고 노션을 파서 회의를 진행했다.

 

우리 팀이 최종적으로 선정한 아이디어는 "맞춤형 DGB 캐릭터 키우기 서비스" 이다. 

 

아이디어 회의를 진행하면서 주목했던 2가지는

 

1) 요즘 유행하는 서비스가 무엇인가? => 피크민과 같은 캐릭터 서비스

2) DGB금융그룹이 원하는 건 무엇일까? => iM뱅크가 시중은행이 된 만큼 인지도 상승시키기

였고 전년도에도 dgb 캐릭터를 활용한 아이디어가 수상했던 것을 보아 이를 활용해서 주제를 선정했다.

 

(그런데 예선 자료를 만들면서는 전년도 아이디어랑 너무 유사해보일까봐 걱정되었다. 그래도 결론적으로는 본선까지 간 걸 보면 나름 잘 정한 주제인 것 같다)

 

 

우리는 예선 접수할 때 기술 구현은 하지 않았다. (예비)개발자 2명이었지만 둘 모두 공모전이 처음이었기에 주제 정하고 구체화하는데 더 집중했다.

 

예선 제출날 공모전 홈페이지 서버가 이상해서 메일로 제출하고 하는 이슈가 있었지만 그래도 정상적으로 접수 완료가 되었다.

 

3. 본선 진출 팀 발표

본선 진출 팀 발표는 12월 31일에 이루어졌다. 2024년의 마지막 날 발표라니.. 만약 떨어졌다면 꽤 씁쓸했을 것 같다.

 

발표는 공모전 홈페이지 팝업 및 공지사항으로 이루어졌고 나는 오후 5시쯤 들어가봤는데 낮 즈음에 발표가 나 있었다.

가나다 순이라 홈페이지 들어가자마자 금잔디가 있어서 바로 발견하고 흥분 MAX 상태로 친구에게 전화했다 ㅋㅋ

 

후에 뉴스에서 보니까 총 89팀이 예선 접수했고 그 중 20팀이 발대식 및 본선 대회에 진출했다고 한다.

 

 

4. 본선 대회 준비

본선 진출 팀 발표 이후 1주일 정도 본선 발표용 자료 제출 기한이 주어진다. 이때 기존 주제를 벗어나지 않는 선에서 아이디어 디벨롭이 가능하다. 우리 팀은 소비 분석 케이스를 더 구체화하고 추가 캐릭터를 제작해서 포함했다.

 

이때 자료에 동영상, 슬라이드 쇼, 폰트 등 잘 체크해서 제출하라고 공지를 꼼꼼히 해주신다. 우리 팀은 혹시나 폰트가 깨지면 PDF로 발표하려고 슬라이드 쇼 같은것도 안넣었는데 발표 후 생각해보니까 조금이라도 관심을 주목하기 위한 요소로 넣을 걸 그랬나 싶었다. (아무래도 20팀이 10분씩 계속 발표하다보니 본선 대회가 루즈해지는 것 같았다.)

 

 

학교 세미나실에 가서 발표 연습도 하고, 우리 팀은 서울에서 대구까지 가야하므로 왕복 KTX와 호텔도 1박 예약했다. 본선 대회 때는 서울 기준 KTX 편도 43500원, 왕복 87000원을 지원해준다. 본선 대회 후 일주일 정도 후에 바로 입금이 되었다!

 

 

5. 리허설

본선 대회 전날인 1/13일에 간단한 리허설이 있었다. 본선 대회 발표 순서(랜덤)대로 마이크 테스트 및 PPT 오류가 없는 지 확인한다. 마이크는 핸드 마이크와 핀 마이크 중 고를 수 있다. 대부분 팀들이 핸드 마이크를 썼는데 발표 때 한 손에는 포인터를 들어야 하니 이를 고려해서 선택해도 좋을 것 같다. 아무래도 핸드 마이크를 선택하면 손을 사용하는데 제약이 있다.

 

 

KTX 타고 대구로 이동~ 동대구역에서는 택시를 타고 갔다.

 

입구에서 단디와 똑디가 반겨준다. 아주 반가워서 친구한테 여기서 사진 한 장 찍어줄까? 했는데 거절함 ㅋㅋ쿄

iM뱅크 제2본점이라는데 회사 아주 삐까뻔쩍했다.

 

 

그리고 발대식 및 본선대회가 이루어질 5층 홀 ! 

 

리허설 때 나누어주신 안내 종이. 총 20팀이라 7, 7, 6 팀 씩 끊어서 발표했다. 

 

 

 

6. 발대식

본선 대회 날의 오전 동안에 발대식이 이루어졌다. DGB금융그룹 회장님과 임직원 분들, 대구 국회의원, 대구 지역의 대학교 교수님들 등 많은 분들이 참석하셨다.

 

4층 다목적 홀이 참가학생들 대기 공간 및 짐을 두고 점심도 먹는 공간이었다. 본선 대회 당일날 도착하면 단체 티를 나누어주신다. 민트색이라고 미리 공지가 되어있었어서 소화할 수 있을까,, 싶었는데 약간의 청록색? 계열이라 다행이었다 

 

사이즈가 95, 100, 105 로 나뉘어져있고 골라서 가져갈 수 있지만 전체적으로 크기가 매우 컸고 기모가 아주 부드러웠다 잠옷으로 입으면 딱일듯

 

 

 

 

발대식 세레모니와 축하 말씀이 있고 대한 변리사 협회의 변리사님이 1시간동안 강의도 해주셨다. IT's DGB iM Challenger 공모전은 교통비 지원, 단체복 제공 등등 모든게 완벽한데 하나 아쉬운 점이 있다면 바로 발대식 및 본선 대회가 이루어지는 공간의 학생들 자리였다. 

 

DGB금융그룹 제공

 

이렇게 계단처럼 된 공간에 앉는 형식인데 자리가 너무 좁고 학생들이 촘촘히 앉아야해서 등을 기대거나 다리를 펼수도 없다. 본선대회날은 거의 하루 종일 여기 앉아있어야 하는데 우리 팀 뿐만 아니라 다른 학생들도 힘들어하는 것 같았다. 

여기 공간이 이런 행사를 하기에는 매우 예쁘고 좋지만 학생들 앉는 공간을 조금만 더 확장해주셔도 좋을 것 같다..

 

 

 

 

발대식 이후 점심 식사를 하고 본선 대회가 진행된다. 도시락도 매우 맛있어 보이는 걸로 제공해주시는데 난 긴장이 되서 거의 못먹었다ㅠㅠ 너무 아쉽다

 

 

발표 공간 옆에 이렇게 간식과 생수도 아주 빵빵하게 제공된다!

 

 

7. 본선 대회

 

밥을 먹고 올라오면 이렇게 본선 대회를 위한 준비가 마쳐져있다. 심사위원은 6분 정도이고 외부 위원 2분에 DGB금융그룹 내부 인사 4분(iM뱅크 ict 및 디지털 사업부의 부장님들 4분) 정도였다. 

 

발표 후 심사위원 Q&A는 없으며 발표자 앞에 10분 타이머와 PPT를 볼 수 있는 스크린을 준비해 주셨다. 팀 당 제공되는 10분 시간이 끝나면 마이크가 자동으로 OFF될 거라고 하셨는데 10분을 초과한 팀은 없었다.

 

모든 발표가 종료된 후 바로 점수를 집계해서 파이널라운드에 진출할 10팀을 발표한다.

 

무려 20팀의 발표를 들으면서 느낀 점은 아이디어는 한정되어 있지만 이를 어떻게 분석하고 표현하는 지가 중요한 것 같다는 점이다. 다른 팀들의 주제로는 소액 주식 투자 상품, AI를 활용한 부동산 서비스, 자산 관리 서비스 등이 있었는데 금융 공모전을 준비해봤다면 한번쯤은 생각해봤을 주제들이었다. 조금 더 시선이 가고 퀄리티 있어보이는 발표는 누구나 생각할 수 있는 주제에 대해 기존 서비스와의 차별점을 구체화한 발표들이었다.

 

우리 팀은 아쉽게 파이널라운드에는 진출하지 못했지만 발대식 및 본선 대회에 진출한 것만으로도 너무 좋은 경험이었다!

 

 

파이널 라운드에 진출하지 못한 10팀에게는 10만원 상당의 기념품이 제공된다고 홈페이지에 나와있었는데

10만원 상당의 기념품은 바로 10만원 백화점 상품권이었다 ㅋㅋㅋ

 

쓸데없는 기념품 보다 돈으로 주는 은행 최고다

 

행사 종료 후 동대구역 앞에서 막창도 먹고 KTX를 타고 서울로 왔다

 

 

 

 

8. 느낀점

첫 공모전 도전이었는데 본선에 진출해서 공개PT라는 의미있는 경험을 할 수 있어서 좋았다. 기획한 아이디어에 대해 개발까지 완료한 건 아니지만 주제를 구체화하고 발표 자료를 만들면서 마이데이터 등 금융권의 디지털 서비스에 대한 이해도도 높아졌다. 이 공모전은 예선 제출부터 만약 다음 라운드에 계속 진출한다면 본선 대회, 전문 교육, 파이널 라운드 등 호흡이 긴 공모전이지만 본선 대회에 진출하는 것만으로도 큰 경험이 되니  DGB금융그룹 공모전을 고민 중인 분들이 계시다면 일단 도전해보길 강추한다.

~막학기 취준생이 오픈소스 기여를 접하게 된 과정~

 

1. 오픈소스 기여? 도전해 말아..

11/1(금) 오픈소스 멘토링 신청

 

때는 금요일 오전 오늘도 카페 가서 공부해야지..하고 누워서 핸드폰하며 뒹굴다가

구글에 싸피 후기를 검색 -> 발견한 블로그의 다른 게시글도 구경 -> 오픈소스 멘토링 후기 발견 순으로

인제님의 오픈소스 멘토링을 접하게 되었다!

 

내가 당시 본 블로그 후기글은 낙관적 허무주의 개발자님의 이 후기! 

https://jun10920.tistory.com/39

 

오픈소스 기여하기 / Open Source Contribute - Spring AI

안녕하세요!이번 주제는 오픈소스에 기여해 보는 경험을 공유하기 위해서 왔습니다.프로젝트를 진행하면서 어느 정도 기능 개발에 익숙해져서 자신감에 차 있던 저는오픈소스를 이해하고, 이

jun10920.tistory.com

 

https://medium.com/opensource-contributors/%EB%AA%A8%EC%A7%91%EC%A4%91-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EB%A9%98%ED%86%A0%EB%A7%81-7%EA%B8%B0-%EC%B0%B8%EC%97%AC%EC%9E%90%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4-a8e0f94a2522

 

인제님의 오픈소스 멘토링은 매우 체계적으로 진짜 누구나 이슈를 선정하고 첫 PR을 생성할 수 있도록 도와주는 과정 같았다. 그동안 오픈소스, 오픈소스 기여가 어떤 내용인지는 알고 있었지만 진짜 이렇게 많은 개발자들이 이슈를 올리고 또 해결하고 자유롭게 오픈소스가 발전되고 있다는 건 처음 접하였다.

 

오픈소스 멘토링 후기글들을 여럿 찾아보고, 노션도 구경하며 신청서를 제출할까 말까 많이 고민하였다. 나는 못할 것 같은데... 싶다가도 매일이 똑같은 이 시기에 새로운 도전을 해보고 싶어서 한시간 정도는 망설이다가 신청서를 제출하였다!

오픈소스 멘토링에 왜 참여하고 싶은지, 그동안 여러 스터디를 통해 다른 사람들과 함께 개발하는 경험을 쌓았던 내용을 담아서 작성했다.

 

 

11/5 (화) 멘토링 선정

신청서를 제출하고 선정이 될 수 있을까... 기다리다가 카톡방 알람이 울리고 멘토링에 선정되었다는 연락을 받았다. 무료한 일상에 도파민 터질 일정이 추가되었다는 사실에 너무너무 좋았다. 

 

 

 

 

 

2. 이슈 선정부터~ 본격 기여 시작

11/21 (목) ~ 11/23 (토), 11/24 (일)

일요일 대면 멘토링 전에 카톡으로 이슈를 선정하고 피드백을 받는다!

 

나는 평소에 많이 사용해 본 spring, spring boot를 첫번째로 이슈 탐색을 시작하였다.

 

 

그런데 생각보다 인제님의 이슈 선정 가이드에 적합한 이슈가 보이지 않았다. 그래서 범위를 더 넓혀서 hibernate나 swagger, jpa, redis 등 사용해 본 경험이 있는 오픈소스 중에 관심 가는 아이들을 살펴보았다. 그 중에서도 사실 spring data reids에 마음이 조금 더 갔는데 아무래도 이 시기에 진행했던 졸업 연구 마지막 단계에서 spring data redis를 사용해서 그랬던 것 같다.

 

redis는 요즘 정말 많이 사용된다고 해서 나도 자세히 공부해보고 싶었는데 졸업 연구에 적용하는 과정은 import하고 캐시 애노테이션을 사용하고 너무 단순하게?(진짜 그냥 갖다 쓰는 정도로..) 사용한 것 같아서 아쉬웠다. 그래서 redis 이슈를 선정해서 분석해보면 좋을 것 같아 더 열심히 이슈를 찾았다.

 

 

나는 최종적으로 

 

이렇게 2가지 이슈를 선정해 보았고 인제님 피드백을 바탕으로 spring data redis의 이슈를 최종적으로 선택하였다.

 

 

 

 

내가 선택한 이슈는 spring data redis에 properties 파일로 캐시 설정을 받아오는 새로운 기능을 추가하자는 이슈였다.

https://github.com/spring-projects/spring-data-redis/issues/1510

 

 

이슈 내용은 쉽게 이해가 돼서 간단할 거라고 생각했는데 생각보다 고려해야 할 내용이 많은 이슈였다.

 

결론적으로 이러한 작업을 거쳤다.

 

1. redisCacheConfiguration에 redis-cache.properties로 캐시 설정을 받아오는 코드 작성

2. 유닛테스트 작성

3. 실제로 사용자가 어떻게 properties 파일을 두면 되는 지 테스트

4. properties 파일이 없는 경우 고려

5. 잘못된 input이 들어올 경우 고려

 

 

 

PR생성!

사실 일요일 멘토링에서 PR까지 생성 완료했어야 했는데 configuration 코드 보완하고 3번 작업하느라 멘토링 3시간이 훌쩍 지났다. 그래서 멘토링 이후에 인제님께 코드 리뷰를 한번 더 받고 pr을 올리게 되었다.

https://github.com/spring-projects/spring-data-redis/pull/3059

 

 

pr을 생성할 때는 spring data redis의 기여가이드도 잘 살펴보고 신중히 글을 작성했다ㅋㅋ 

뭔가 내가 작성한 코드가 오픈소스에 pr로 올라가다니,, 너무 신기했다.

https://github.com/spring-projects/spring-data-redis/blob/main/CONTRIBUTING.adoc

 

 

3. 기여를 마치며, 느낀점

pr생성까지 마무리했지만 아직 끝이 아니다. 메인테이너 분들의 리뷰를 기다리고 merge 될 수 있을때까지 계속 작업을 해야 한다. 그동안 테스트 케이스를 다시 점검하고 다른 이슈들도 기웃기웃해 봐야겠다.

처음에는 이슈를 봐도 하나도 눈에 안들어오고 무엇보다 영어 독해가 생각보다 너무 안되고!! 힘들었지만 그래도 한 번 해보니까 자신감이 생기는 것 같다.

 

새로운 기능 추가가 아니더라도 오타 삭제나 누락된 단어 추가 같은 이슈도 기여해보면 좋을 것 같다.(사실 이번에 작업을 하면서 내가 오픈소스에 새 기능을 추가하는거... 괜찮은건가 가능한건가 싶으면서 조금 부담이 되었다ㅎ 하지만 뭐 일단 해보고 메인테이너분들의 리뷰를 받자는 마음으로 했다 결국엔 해냈다)

 

또, 오픈소스 멘토링은 너무너무 좋은 경험이었다. 내가 사용해보지 않은 오픈소스도 다른 분들이 작업하시는 걸 보고 또 마지막에 인제님께서 각각 어떤 오픈소스에서 어떤 이슈를 선정해서 작업했는 지 쭉 말씀해주셔서 여러 오픈소스에 대한 이야기를 들을 수 있어서 너무 좋았다.!

 

 


Redis 관련 참고한 기업 기술블로그

 

https://techblog.woowahan.com/2709/

 

선물하기 시스템의 상품 재고는 어떻게 관리되어질까? | 우아한형제들 기술블로그

안녕하세요. 저는 주문서비스팀의 서버개발자 강홍구입니다. 이 글에서는 배달의민족 선물하기 서비스의 상품권 재고관리를 위한 시스템 설계에 대한 경험을 공유드리고자 합니다. 들어가며

techblog.woowahan.com

 

https://techblog.gccompany.co.kr/redis-kafka%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%84%A0%EC%B0%A9%EC%88%9C-%EC%BF%A0%ED%8F%B0-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EA%B8%B0-feat-%EB%84%A4%EA%B3%A0%EC%99%95-ec6682e39731

 

Redis&Kafka를 활용한 선착순 쿠폰 이벤트 개발기 (feat. 네고왕)

안녕하세요. 유저혜택개발팀 쿠폰 백앤드 개발자 페이든입니다.

techblog.gccompany.co.kr

 

안녕하세요! 오늘은 제가 서포터즈로 다녀온 연합뉴스 1회 미래경제포럼 참석 후기를 전해드리겠습니다!
 
연합뉴스 제1회 미래경제포럼은 11월 14일 소공동 롯데호텔에서 열렸습니다!

포스트 미 대선 - 달아오르는 첨단테크 패권 경쟁


개회식

포럼의 첫 순서로 개회식이 있었습니다. 다양한 귀빈분들께서 축하 말씀을 전해주셨습니다. 가장 먼저 연합뉴스 대표이사이신 황대일 대표이사께서 개회사를 해주셨습니다.
 
연합뉴스 황대일 대표이사 개회사
 

참석해주신 귀빈 여러분께 감사드립니다. 반도체에 초점을 맞춰 이번 포럼을 준비했으며, 반도체는 각종 첨단 산업의 중추 역할로 첨단 기술은 우리 모두의 지상과제입니다. 연합뉴스를 보면 반도체 패권 경쟁은 국가간 중요 사항임을 알 수 있으며, 트럼프 정부의 보호 무역 정책으로 세계 무역 시장도 변화할 것으로 보입니다. 국가기간 뉴스 통신사 연합뉴스는 대한민국이 G7에 합류할 수 있도록 힘을 보탤 것입니다.

 
라는 내용의 개회사를 남겨 주셨습니다.
 
이 외에도
 
윤석열 대통령 축사 대독 왕윤종 국가안보실 3차장 
국회 산업통상자원중소벤처기업위원장 축사 대독
산업통상자원부 제1차관 축사
대한상공회의소 최태원 회장 영상 축사
 
류진 한국경제인협회장 축전
삼성전자 한동희 부회장 축전
SK하이닉스 곽노정 사장 축전
LG전자 조주완 사장 축전
강기동 박사님(한국반도체 설립자) 영상 축사
 
와 같이 많은 축사와 축전이 있었습니다.
 

 

세션 1: 미 대선 이후 세계 첨단테크 지형 변화와 대응

세션1의 첫 순서로 정성장 세종연구소 한반도전략센터장님께서 트럼프 재선 이후 국제 징서화 한반도 정세 변화 전망을 주제로 강연해주셨습니다.
 

  • 전세계가 미국 대선 결과에 주목하는 이유

주요 언론들이 미국 대선 결과 예측에 실패한 이유, 현재 미국의 심각한 고물가와 불법 이민 문제 및 치안 상황의 악화, 도널드 트럼프의 적극적인 경제회복정책과 해리스의 경제 비전 부재 등을 고려할 때 미국 내부 상황을 냉정하게 들여다보았다면 트럼프의 승리는 충분히 예상할 수 있었다.
 

  • 트럼프의 미국우선주의와 동맹관계의 이완 가능성

국내에서는 트럼프의 미국우선주의를 미국의 이기주의적인 입장으로 간주하는 경향이 있는데, 미국의 패권과 산업경쟁력이 악화되고 있다. 트럼프는 부유한 한국을 미국이 지켜주어야 하는 것이 부당하다는 의견도 여러번 드러냈다. 트럼프는 부유한 동맹국의 안보 무임승차와 그들을 위한 미국의 예산 지출에 매우 부정적이며 이러한 예산들을 미국 경제를 살리기 위해 쓰고싶어 한다.
 

  • 우리의 대응 방안

트럼프 2기 행정부의 출범은 한국의 경제와 안보에 큰 도전이 될 것이지만, 트럼프 당선인의 동맹국들에 대한 국방비 증액 요구도 한국 방산업체에 큰 기회를 제공할 수 있을 것이다. 위기를 기회로 바라볼 것
 
 
 
 
세션1의 두번째 순서로는 크리스 밀러 미국 터프츠대 교수님께서 미국에서 녹화 영상을 통해 강연을 해주셨습니다.
 

  • 미국 대선이 반도체 산업에 미치는 영향에 대해, 더 나은 반도체가 제공하는 컴퓨터의 발전, AI시스템 훈련에 사용된 컴퓨팅 파워 , 오늘날 세계의 컴퓨팅 인프라를 보면 미국이 압도적 선두, 그 다음이 중국 이는 AI훈련에 필요한 컴퓨팅 파워에 대한 기술 경쟁이 본격화되었다. 2025년 트럼프는 관세 부가를 강화할 것 주 표적은 중국, 가장 큰 타격을 받을 것이다.반도체 기업에 있어 관세 문제는 중요한 문제, 여러 나라를 거쳐 제조되고 패키징되므로 관세는 공급망 구조 변화와 사업 운영에 영향을 줄수도 있다.

 

  • 주요 정책은 AI 및 반도체 제조 장비의 대중국 수출 규제 강화, 트럼프는 수출 통제 정책을 선보이며 중국과의 갈등도 고려할 것이다. 중국도 광물 접근 제한 등 보복을 할 가능성이 있다.

 

  • 미국 내 반도체 제조를 장려하려는 노력이 강화될 것. 일론 머스크가 트럼프 행정부에 중요한 역할을 할 것이지만 아직 확정되지는 않았다. AI에 대한 조언을 할 것으로 본다, 관련 분야에 대해 주요하게 다룰 것으로 보여진다.

 
 
 
 

세션 2: 초격차 기술 경쟁과 미래 전략

세션2에서는김현우 삼성전자 부사장(DS부문 CTO 기술기획팀장)께서 AI와 반도체, 삼성전자의 전략에 대해 강연해 주셨습니다!
 

  • AI와 반도체

반도체는 인간의 뇌를 구현한 것, 인간의 뇌와의 갭 극복이 미리 반도체의 과제
저전력 고효율을 구현하고자 함
반도체 시장의 다변화로 새로운 미래 극복 기술은 COST가 중요한 가치였다, 성능이 유리하더라도 cost가 불리하면 다른 기술 먼저 사용. 하지만, ai시대에는 이것이 달라졌다 cost가 높더라도 가치가 있다면 사용한다.

  • 반도체 패러다임의 변화

제품 다양성의 증가로 기존 우위회사는 제품 개발의 부담이 증가하는 것은 사실
반도체는 개발기간>>제품 출시 간격, 시장의 니즈를 맞추기가 어려움, 최소한 3세대 기술을 동시에 개발해야함, R&D의 중요성 및 cost가 어마어마하게 증가할 것이다.

  • 함께하는 미래준비

삼성전자의 기흥R&D단지 조성 및 새로운 공장 구성, 반도체 생태계간 협력이 중요
과거에는 선두 유지 및 보안으로 우리 안에서 해야한다는 생각이었다면, 이제는 생각을 바꿔서 여러 협력사와 문제를 공유하고 함께 해결하는 개발 마인드와 시스템을 만든다.
AI는 이제 시작이다, 앞으로 다가올 AI시대의 제품들을 생각하면 이제 시작이며 앞으로 경쟁력을 만들아 갈 것이다.
 
 
린훙원 대만 경제지 ‘금주간’ 고문께서 이어서 세션2의 강연을 진행해주셨습니다. 이번 미래경제포럼에서는 동시통역을 제공해주셔서 고문님의 말씀을 동시통역기를 사용해서 바로바로 전달 받을 수 있었습니다.
 

  • TSMC에 관하여, 전세계 반도체 산업은 수직적 통합에서 수직적 분업으로 나아가고 있다. TSMC가 미국의 일자리를 가져갔다는 트럼프의 의견은 잘못되었다고 본다. 미중대립 이후에 모든 반도체 산업의 판도가 바뀌고 있다. 양극의 차이가 커지고 있다. TSMC가 직면한 도전은 무엇일까? 미국과 일본 독일에 설립한 공장에 천문학적인 비용이 들어서 영업수익을 올리는데 시간이 많이 걸리지 않을까 TSMC같은 경우는 대만인 직원이 대부분이다. 글로벌화가 삼성이나 인텔보다는 늦지 않았나

 

  • 미 대선 이후 불확실성 요소가 굉장히 많다. 과세 문제와 아리조나 공장이나 여러 요소에 대해 삼성보다는 직면한 도전과제가 많다.

 

  • AI시대가 가져올 충격과 도전에 대해 말씀드린다면 AI가 칮 제조 과정을 더욱 더 복잡하게 만들 것이며 산업 패러다임에 새로운 변화를 가져올 것.

 
 

세션3 : 반도체AI기술 혁신과 진화하는 첨단산업 생태계

신창환 고려대 반도체공학과 교수(전 SK하이닉스 사외이사)님께서 첨단 반도체 기술과 반도체 산업 지형 변화 - 공급망 재편의 서막- 을 주제로 세션3을 열어주셨습니다.

  • Technology

ICT 기기가 생성하는 데이터가 사람이 생성하는 데이터 수를 뛰어넘은 2018년이 AI 시대 개막이라고 본다.
무어의 법칙 , 2년 마다 칩 개수가 2배가 된다는 어마어마한 성장을 보여준다.

  • Geo-Political Risk

 
마지막으로 이문태 LG AI연구원 Advanced ML 랩장님께서 마지막 강연을 맡아주셨습니다.

  • 패러다임 시프트, search의 입장, 검색은 5단계의 프로세스로 구성되어 있다. 2가지의 ai 스텝과 3가지의 인간 스텝이다. 생성 시대에서는 이 5단계를 모두 AI로 이루어지는 작업이 될 것이다.

 

  • Law of Large Model, 이 모델은 이미지와 비디오 생성까지 가능하며 transformers in deep neural network를 이룬다.

 
 
이렇게 제1회 미래경제포럼에서 총3개의 세션 6분의 강연을 들을 수 있었습니다! 뜻깊은 자리 마련해주신 연합뉴스와 강연진행해주신 연사님들께 감사 인사 드리겠습니다!

안녕하세요, [연합뉴스 제1회 미래경제포럼]에 참석하실 여러분을 초대합니다!

 

포스트 미 대선 - 달아오르는 첨단테크 패권 경쟁

 

🔹일시 : 2024.11.14(목) 13:40 - 17:10

 

🔹장소 : 서울시 중구 소공동 롯데호텔서울 2층 크리스탈볼룸

 

🔹주최 : 연합뉴스

 

🔹후원 : 산업통상자원부 대한상공회의소 한국경제인협회 연합뉴스TV 연합인포맥스

 

 

🔹제1회 미래경제포럼 홈페이지: https://yonhapnews-forum.co.kr

🔹사전등록 신청 구글폼 링크: https://bit.ly/미래경제포럼등록

 

[제1회 미래경제포럼] 참가자 등록

국가기간뉴스통신사 연합뉴스가 오는 11월 14일(목) 롯데호텔서울에서 제1회 미래경제포럼을 개최합니다. 미국 대통령 선거가 끝난 후 국내·외 전문가를 초청해 반도체를 비롯한 글로벌 첨단산

docs.google.com

 

 

국가기간뉴스통신사 연합뉴스가 11월 14일 롯데호텔서울에서 제1회 미래경제포럼을 개최합니다.

주제는 ‘포스트 미 대선 - 달아오르는 첨단테크 패권 경쟁’입니다.

미국 대통령 선거가 끝난 후 국내,외 전문가를 초청해 반도체를 비롯한 글로벌 첨단산업 분야의 전망을 짚어보고 대한민국의 미래 경제 전략과 해법을 모색하고자 합니다.

 

 

1️⃣ [세션 1] 미 대선 이후 세계 첨단테크 지형 변화와 대응

연사 : 정성장 세종연구소 한반도전략센터장, 크리스 밀러 미국 터프츠대 교수

 

2️⃣ [세션 2] 초격차 기술 경쟁과 미래 전략

연사 : 김현우 삼성전자 부사장(디바이스 솔루션 부문 반도체연구소 기술기획팀장), 린훙원 대만 경제지 ‘금주간’ 고문

 

3️⃣ [세션 3] 반도체,AI 기술 혁신과 진화하는 첨단산업 생태계

연사: 신창환 고려대 반도체공학과 교수(전 SK하이닉스 사외이사), 이문태 LG AI연구원 Advanced ML 랩장

각 분야의 저명한 연사분들께서 참석해주시는 만큼 관심있으신 분들께서는 참석하셔서 자리를 빛내주시면 감사드리겠습니다 :)

JPA 와 Spring Data JPA

보통 사용 가능 기술에 둘 모두 작성되어 있는 백엔드 개발자들이 많을 것이다. 

 

그럼 JPA 와 Spring Data JPA의 차이는 무엇일까?

 

자신있게 답변하기 쉽지 않았다. 

 

내가 알고 있던 차이점

나는 김영한님의 스프링 입문 강의에서 두 개념에 대해 처음 접한 것 같다.

 

내가 알고 있던 둘의 개념은

JPA : Java Persistence Api 로 sql문을 따로 작성해주지 않아도 repository를 통해 자바로 db작업까지 함께 할 수 있는 기능(EntityManager 사용)

Spring Data JPA : JPA가 더 간편화된 방법으로 repository 에서 많은 코드를 축약해서 쓸 수 있다. 그런데 너무 많은 내용이 축약되므로 나중에 코드를 한번에 이해하기 어려울 수 있다.

 

따라서 Spring Data JPA 보다는 JPA를 사용할 것, 부끄럽지만 이렇게 알고 있었다.

각각 개념에 대해 먼저 알아보자

 

 

JPA

객체-관계 매핑(ORM)을 위한 표준 명세인 인터페이스

자바 객체를 데이터베이스 테이블에 저장하거나 조회하는 규칙을 정해둔 것

JPA는 인터페이스이므로 직접 사용할 수 없고, 이를 구현한 라이브러리를 사용해야 한다.

 

 


Spring Data JPA 

JPA의 기능을 더 쉽게 사용할 수 있도록 도와주는 Spring 프레임워크의 확장 라이브러리

JPA 구현체 위에서(구현체를 통해), 반복적인 코드 작성을 줄이고 더 간편하게 데이터베이스와 상호작용할 수 있도록 도와준다.

 


그럼 그동안 내가 사용했던 EntityManager는 무엇일까? JPA의 구현체일까?

EntityManager

데이터베이스에 대해 자바 객체를 저장, 조회, 수정, 삭제하는 등의 작업을 수행하는 JPA의 핵심 인터페이스 중 하나로, 구현체는 아니다.

실제 동작을 위해서는 EntityManager의 구현체가 필요하다. 대표적인 구현체가 Hibernate 이다.

* 개발자는 JPA 표준을 사용하지만, 실제로는 Hibernate가 그 표준을 기반으로 내부적으로 동작한다.

 

이번 프로젝트에서 JPA를 사용했다.

=> 이번 프로젝트에서 JPA의 구현체인 Hibernate를 사용했다 .

 

 

Hibernate와 Spring Data JPA의 차이

 

Hibernate

 Spring Data JPA

목적 JPA의 구현체로서 ORM 기능 제공 Hibernate 위에서 동작, 더 간편한 추상화 기능 제공
세부 제어 복잡한 쿼리와 동작을 세밀하게 제어 가능 기본적인 CRUD 작업과 페이징, 정렬을 자동으로 처리
복잡도 높은 수준의 제어와 기능 제공, 복잡한 설정 필요 자동화된 기능을 통해 코드 간소화, 단순 작업에 최적화
기본 제공 기능 고급 캐싱, 배치 처리, 지연 로딩, 원시 SQL 쿼리 지원 CRUD, 페이징, 정렬, 메서드 쿼리 생성 등의 기능 자동 제공
확장성 JPA 표준 외에도 고급 기능 제공 대부분의 고급 기능은 Hibernate를 통해 제공

 

 

 

어떤 경우에 어느 방법을 사용하는 것이 효율적일까?

Hibernate를 사용하는 경우:

  1. 복잡한 데이터베이스 작업이 필요할 때: 복잡한 쿼리나 성능 최적화, 고급 페치 전략을 사용해야 하는 경우
  2. JPA 표준 이상의 기능을 사용하고 싶을 때: 캐싱 전략, 배치 처리, 고급 로딩 전략 등 JPA 표준에 포함되지 않은 기능을 이용하고 싶은 경우
  3. 세부적인 쿼리와 데이터 조작이 필요한 경우: 쿼리를 직접 관리하거나 데이터 처리 로직에 대한 세밀한 제어가 필요한 경우

Spring Data JPA를 사용하는 경우:

  1. 단순 CRUD, 페이징, 정렬 작업이 주된 경우: 반복적인 CRUD 코드를 작성하는 대신, Spring Data JPA가 제공하는 자동화된 기능을 사용하는 것이 효율적이다
  2. 생산성을 높이고자 할 때: 기본적인 기능을 자동으로 처리해주므로, 복잡하지 않은 애플리케이션에서는 Spring Data JPA가 훨씬 빠르고 생산적이다
  3. 간단한 프로젝트나 빠른 프로토타이핑이 필요할 때: 기본적인 데이터베이스 연동 작업을 빠르게 처리할 수 있기 때문에 간단한 애플리케이션에서는 Spring Data JPA가 적합하다

 궁금증에 대한 시작점

치아 건강 관리 서비스인 '투스데이'를 진행할 때, 나를 포함한 백엔드 팀원 3명은 나-EntityManager 사용, 다른 2분-Spring Data JPA 사용 이렇게 나누어져있었다.

따로 정한건 아니었지만 다른 팀원분들께서 각각 aws 배포, 구글 연동 로그인을 맡으시고 나는 조금 더 많은 api 분량을 담당하여 비교적 먼저 개발을 시작하였다. 이 과정에서 나는 기존에 사용하던 EntityManager 를 사용하여 개발을 진행하였고, 다른 팀원 두분은 치과 진료 기록에 대한 부분을 같이 담당하셔서 같이  Spring Data JPA를 사용하신 것 같다! 

프로젝트를 진행하는데 문제는 없었으니 계속 진행하였는데 후반부쯤 페이징 처리 부분에서 이슈가 발생했다!

이 부분은 따로 정리한 페이징과도 연관되어 있는데, 기본 JPA에서 사용하는 offset, limit 처리와 Spring Data JPA 에서 지원하는 Pageable의 offset, limit 처리 기준이 달라 api 마다 페이징 처리가 다르게 되는 문제가 발생한 것이었다.

 

이 과정에서 Spring Data JPA의 Pageable이 지원하는 방식이 데이터 용량이 큰 경우 더 효율적이라는 글을 보고 Spring Data JPA가 더 안좋은 방식인 줄 잘못 알고 있었던건가?!? 싶어서 둘의 차이점과 장단점, 어떤 경우에 어떤 방법을 사용하는게 더 효과적인 지 공부해보고 싶었다.

 

이상 끝~!

+ Recent posts