<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev.archive</title>
        <link>https://velog.io/</link>
        <description>Hello, World!</description>
        <lastBuildDate>Thu, 19 Sep 2024 05:21:36 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dev.archive. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_sy" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[spring] long vs Long]]></title>
            <link>https://velog.io/@dev_sy/java-Long-vs-long</link>
            <guid>https://velog.io/@dev_sy/java-Long-vs-long</guid>
            <pubDate>Thu, 19 Sep 2024 05:21:36 GMT</pubDate>
            <description><![CDATA[<p>프로젝트를 시작하면서 엔티티 객체의 id값이 int보다는 long 타입을 사용하는 것이 더 적합하다는 것은 알고 있었지만, 순간 long 타입과 Long 타입이 헷갈리기 시작했다</p>
<blockquote>
<p>먼저 id값에 int보다는 long을 더 선호하는 이유는</p>
<ol>
<li>범위 자체가 더 넓기 때문에 db에 저장되는 레코드 양이 많아질 수록 더욱 안전</li>
<li>서비스가 성장하면서 데이터 양이 많아지면 추후 발생할 수 있는 id 충돌 문제 예방 가능</li>
</ol>
<p>-&gt; 즉, 데이터베이스 규모 + 추후 확장성까지 고려해 사용하게 되는 것</p>
</blockquote>
<p>본론으로 돌아와서 long형과 Long형의 차이점을 알아보자</p>
<h2 id="long">long</h2>
<ul>
<li>원시 타입(primitive type) : 메모리에서 직접 값 저장하는 자바의 기본 데이터 타입</li>
<li>기본타입이기 때문에 null값 가질 수 없음</li>
<li>직접 값을 할당하기 때문에 참조 타입에 비해 성능 좋음</li>
</ul>
<h2 id="long-1">Long</h2>
<ul>
<li>참조 타입(wrapper class) : 메모리 주소값으로 객체를 참조하기 때문에 null값 가질 수 있음</li>
<li>db상 id 설정되지 않았을 경우 유용</li>
<li>기본 타입-객체 타입 간 자동 변환(박싱&amp;언박싱) 지원</li>
<li>상대적으로 속도 느림</li>
</ul>
</br>

<h3 id="➡-그렇다면-엔티티-객체-id에는-어떤-타입이-적합할까">➡ 그렇다면 엔티티 객체 ID에는 어떤 타입이 적합할까?</h3>
<p>기본적으로 Long 사용하는 것이 일반적</p>
<ul>
<li>유연성 : id가 null일 수 있는 경우</li>
<li>ORM 프레임워크 호환성 : JPA나 Hibernate 같은 ORM에서는 관행상 Long으로 선언</li>
</ul>
<p>그러나!!
해당 객체가 not null 보장이 된다면 long 사용하는 것이 더 좋음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[spring] SOLID: 개방-폐쇄 원칙]]></title>
            <link>https://velog.io/@dev_sy/spring-SOLID-%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%84-%EC%9B%90%EC%B9%99</link>
            <guid>https://velog.io/@dev_sy/spring-SOLID-%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%84-%EC%9B%90%EC%B9%99</guid>
            <pubDate>Thu, 29 Aug 2024 07:48:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dev_sy/post/14f8f4f7-a43a-4549-bbfe-5d90aed351e6/image.png" alt=""></p>
<h2 id="ocpopen-closed-principle">OCP(Open-Closed Principle)</h2>
<h4 id="개방-폐쇄-원칙">개방-폐쇄 원칙</h4>
<blockquote>
<p>확장에는 열려있고, 수정/변경에는 닫혀있다</p>
</blockquote>
<p>스프링의 DI를 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다
데이터를 DB에 저장하기 때문에 스프링 서버를 다시 실행해도 데이터가 안전하게 저장된다</p>
<p>출처 : <a href="https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8&amp;unitId=49594">김영한님 스프링 입문 강의</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[IntelliJ] static import]]></title>
            <link>https://velog.io/@dev_sy/IntelliJ-static-import</link>
            <guid>https://velog.io/@dev_sy/IntelliJ-static-import</guid>
            <pubDate>Wed, 28 Aug 2024 02:54:37 GMT</pubDate>
            <description><![CDATA[<p>테스트 코드를 작성할 때
매번 assert()를 사용했는데, 이번에 인프런 김영한님 강의를 들으면서 assertThat()을 처음 사용해보게 되었다</p>
<p>assertThat()은 Assertions라는 클래스에서 import해주어야 인식이 되는데
org.junit.jupiter.api.Assertions가 아니라
org.assertj.core.api의 Assertions를 import 해주어야 한다</p>
<p>따라서 이 클래스에 속한 정적 메서드인 assertThat()을 입력했을 때
<img src="https://velog.velcdn.com/images/dev_sy/post/33d47521-7f1f-4137-aff3-4f9d8ac02c7d/image.png" alt=""></p>
<p>이런식으로 클래스명까지 붙어서 나타나게 된다
➕ 자동완성도 불가..</p>
<p>이럴 땐 Assertions 뒤에 커서를 놓고, [Alt] + [Enter]로 static import를 해주면 된다!</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/ccbdf6d8-21d4-44fe-a4c2-41cda48724a6/image.png" alt=""></p>
<p>그럼 아래처럼 깔끔하게 assertThat() 메서드만 표시되는 것을 알 수 있다</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/26e2b6fa-f964-4085-8ff9-3d58f5af04db/image.png" alt=""></p>
<h2 id="정적-임포트">정적 임포트</h2>
<p>하지만!!!!!!!!!!
공식 문서에 따르면 static import는 되도록이면 지양하라고 되어있다</p>
<blockquote>
<p>So when should you use static import? Very sparingly!</p>
</blockquote>
<p><em>출처 : <a href="https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html">https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html</a></em></p>
<p>그리고 *을 사용해 전체를 받아오는 것도 권장하지 않는다고 되어있다</p>
</br>
</br>
</br>
</br>

<p>+++ 내용 추가 예정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[IntelliJ] @Test 템플릿 자동 작성]]></title>
            <link>https://velog.io/@dev_sy/IntelliJ-Test-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%9E%90%EB%8F%99-%EC%9E%91%EC%84%B1</link>
            <guid>https://velog.io/@dev_sy/IntelliJ-Test-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%9E%90%EB%8F%99-%EC%9E%91%EC%84%B1</guid>
            <pubDate>Wed, 28 Aug 2024 02:37:27 GMT</pubDate>
            <description><![CDATA[<p>오랜만에 spring 강의를 듣다가 test 코드를 작성하게 되었다
모든 코드에 들어가게 되는 @Test void () 파트와 //given, //when, //then 을 매번 치기 귀찮아서 이전에 들었던 강의에서 Live Template을 지정해줬던 게 기억이 났다</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/03e52a2c-6b3d-4797-82f6-13bc4e0aff74/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/03df23ea-2c5a-481d-85fe-d6fb0edde6d1/image.png" alt=""></p>
<p>Settings - Editor - Live Templates 에서
 &#39;+&#39;를 눌러서 커스텀 라이브 템플릿을 추가해주면 된다 !</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/a5ab1ca5-c44a-4ef8-9fe7-845c8b521a99/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/51b90a2e-3bff-4b8b-8a07-a9dd9f3152eb/image.png" alt=""></p>
<p>나는 아래와 같이 가장 기본적인 틀로 구성했다</p>
<ul>
<li>@Test 어노테이션</li>
<li>리턴타입 void</li>
<li>괄호</li>
<li>//given, //when, //then</li>
</ul>
<p>이제 test만 입력하더라도 기본 테스트코드 템플릿이 자동으로 입력되는 것을 확인할 수 있다 😊
<img src="https://velog.velcdn.com/images/dev_sy/post/d0ac6b47-292a-43d2-8b98-31d44a55093c/image.png" alt="">
<img src="https://velog.velcdn.com/images/dev_sy/post/b9f28237-32ae-4ce8-bf52-01e59d659c33/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vue.js] 모듈 (feat. 모듈 번들러)]]></title>
            <link>https://velog.io/@dev_sy/vue.js-%EB%AA%A8%EB%93%88-feat.-%EB%AA%A8%EB%93%88-%EB%B2%88%EB%93%A4%EB%9F%AC</link>
            <guid>https://velog.io/@dev_sy/vue.js-%EB%AA%A8%EB%93%88-feat.-%EB%AA%A8%EB%93%88-%EB%B2%88%EB%93%A4%EB%9F%AC</guid>
            <pubDate>Fri, 09 Aug 2024 06:55:00 GMT</pubDate>
            <description><![CDATA[<p>Vue.js로 프로젝트를 진행하면서 Webpack, babel 등 생소한 단어를 많이 접하게 된다
Webpack에 대해서 공부를 하는데 항상 사용했던 모듈이라는 단어가 낯설게 느껴졌다
그래서 이번 주제는 모듈이다 !</p>
<h1 id="🔎-모듈module이란">🔎 모듈(Module)이란</h1>
<ul>
<li>특정 기능이나 책임을 가진 코드의 집합</li>
<li>소프트웨어 개발에서 코드의 구성 단위</li>
<li>각 모듈은 독립적이면서도, 다른 모듈과 상호작용 가능</li>
<li>보통 파일이나 디렉토리 단위로 나누어 관리</br>

</li>
</ul>
<p>조금 더 쉽게 생각해보자
개발을 하면서 규모가 커지면 파일을 여러 개로 분리해야 하는데, 이때 분리된 파일을 각각 모듈이라고 한다
➡ 파일 하나 또는 특정 기능을 갖는 작은 코드 단위를 의미
➡ 목적별로, 기능별로 여러 개의 파일로 분리해 관리 가능
➡ 이렇게 모듈로 분리하는 과정 : <strong>모듈화</strong></p>
<h2 id="❓-모듈이-왜-필요할까">❓ 모듈이 왜 필요할까</h2>
<ol>
<li><strong>코드의 재사용성</strong>
모듈화된 코드는 다른 프로젝트나 애플리케이션에서 재사용 가능
➰ ex. 유틸리티 함수 or 라이브러리 모듈 ➡ 여러 프로젝트에서 사용 가능</li>
<li><strong>유지보수성</strong>
특정 모듈만 수정해도 나머지 코드에는 영향 ❌
➡ 버그 수정/기능 추가 용이</li>
<li><strong>네임스페이스</strong>
변수와 함수가 모듈 범위 내에서만 유효하기 때문에 전역 네임스페이스 오염 방지 가능
➡ <strong>코드 충돌 ⬇, 코드 안정성 ⬆</strong></li>
<li><strong>의존성 관리</strong>
모듈 간 의존성 명확하게 정의하고 관리 가능
각 모듈이 필요한 다른 모듈을 명시적으로 선언하기 때문에 의존성 추적/관리 더욱 용이</li>
<li><strong>조직화</strong>
매우 방대한 대규모 애플리케이션에서 코드를 기능별로 나누어 체계적 구성/관리 가능</br>

</li>
</ol>
<h1 id="🔎-모듈-번들러module-bundler">🔎 모듈 번들러(Module Bundler)</h1>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/2b014e78-e9e6-4d5a-8a50-2967947a95ed/image.png" alt=""></p>
<h3 id="모듈-번들링">모듈 번들링</h3>
<p>웹 애플리케이션을 구성하는 수많은 자원들을 하나로 병합/압축해주는 동작</p>
<h3 id="모듈-번들러">모듈 번들러</h3>
<p>번들링을 할 수 있게 합쳐주는 도구
➡ 여러 개의 파일을 하나의 파일로 합쳐주는 역할</p>
<h1 id="❓-모듈-번들러는-왜-필요할까">❓ 모듈 번들러는 왜 필요할까</h1>
<p>모듈을 이용하려면 모든 파일을 네트워크 통신을 통해 가져와야 한다
파일 하나하나를 요청하고 가져온다면 로딩 속도는 당연히 느려질 것
추가로, 웹 서비스를 개발/배포할 때 HTML, CSS, JS 압축, 이미지 압축, CSS 전처리기 변환 등과 같은 작업을 해야했기 때문에, <strong>로딩 속도를 개선함과 동시에 이런 작업들을 자동화</strong>해주는 도구들이 필요했다!</p>
<h4 id="✅-최신-프론트엔드에서-가장-많이-사용되고-있는-웹팩webpack이-모듈-번들러-중-하나">✅ 최신 프론트엔드에서 가장 많이 사용되고 있는 웹팩(Webpack)이 모듈 번들러 중 하나</h4>
<p><a href="https://velog.io/@dev_sy/vue.js-Webpack">🔎 웹팩이란?</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vue.js] Webpack]]></title>
            <link>https://velog.io/@dev_sy/vue.js-Webpack</link>
            <guid>https://velog.io/@dev_sy/vue.js-Webpack</guid>
            <pubDate>Fri, 09 Aug 2024 06:34:05 GMT</pubDate>
            <description><![CDATA[<h1 id="🔎-webpack이란">🔎 Webpack이란</h1>
<p>프론트엔드 프레임워크에서 가장 많이 사용되는 모듈 번들러(Module Bundler)</p>
<p>주로 자바스크립트 애플리케이션의 파일을 관리하고, 여러 모듈을 하나의 번들로 묶어주는 역할
-&gt; 웹 개발에서 많이 사용</p>
<h2 id="주요-기능">주요 기능</h2>
<ol>
<li><p><strong>모듈 번들링</strong>
웹 애플리케이션에서 사용하는 자바스크립트 파일, css, 이미지 등을 하나의 파일 또는 여러 개의 파일로 묶어 웹 브라우저가 효율적으로 로드할 수 있도록 함
<img src="https://velog.velcdn.com/images/dev_sy/post/414bf711-a9e9-4a66-b960-6dcdfd30ce98/image.png" alt=""></p>
</li>
<li><p><strong>코드 스플리팅</strong>
애플리케이션의 크기를 줄이기 위해 필요한 코드만 로드할 수 있게 해줌
➡ 페이지에 필요한 코드만 로드하고, 나머지는 필요할 때 로드하는 방식</p>
</li>
<li><p><strong>트랜스파일링</strong>
최신 자바스크립트 문법을 구형 브라우저에서도 호환되도록 변환
➰ ex. Babel 사용 ➡ ES6 문법을 ES5로 변환</p>
</li>
<li><p><strong>플러그인과 로더</strong>
다양한 플러그인과 로더를 통해 번들링 과정에서 파일을 변환하거나 다양한 파일 포맷 지원
➰ ex. css파일을 자바스크립트 파일에 통합, 이미지 파일을 인라인으로 처리</p>
</li>
<li><p><strong>디버깅과 최적화</strong>
개발 과정에서의 디버깅을 용이하게 하고, 배포 시 파일 크기를 줄여 성능 최적화</p>
</li>
</ol>
<h2 id="webpack-설정-파일">Webpack 설정 파일</h2>
<p>Vue3 이상부터는 웹팩 설정 파일을 /node_modules/@vue/cli-service/webpack.config.js 디렉터리에 넣어놓았다</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/99540d7f-d6c1-4e01-b7a6-6b895f41424e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/d5e03f96-ace2-4a52-b69d-cdf9e1f4b6ed/image.png" alt=""></p>
<p>✅ 해당 설정 파일 안의 내용들은 디폴트값들이다. 프로젝트를 진행하면서 webpack 설정 파일은 아직 건드리지 않았기 때문..!
✅ 멘토님이 피드백 주시면서 이런 설정 파일 안에서 속성값들을 지정해주어야 동작하는 부분들도 있다고 하셔서 webpack에 대해서 조금 더 깊게 공부를 해봐야 할 것 같다 !!!
✅ 어제 간단히 설명을 들었을 때에는 모듈 번들링과 트랜스파일링 기능에 집중해서 들었는데, 다른 기능들도 수행하고 요즘 프론트 개발에서 많이 쓰이는 기능이라고 하니 어떤 역할을 하는지에 대해서 혼자 더 공부해봐야 될 것 같다 💪🏻</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[git] permission denied to 오류 해결]]></title>
            <link>https://velog.io/@dev_sy/git-permission-denied-to-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@dev_sy/git-permission-denied-to-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Thu, 08 Aug 2024 08:55:21 GMT</pubDate>
            <description><![CDATA[<p>어제 로컬로 팀프로젝트 작업 후 push 하던 도중 ..
오류가 발생했다 😥😥😥</p>
<h2 id="문제">문제</h2>
<pre><code>remote: Permission to &lt;git url&gt; denied to &lt;github 계정&gt;
fatal: unable to access &#39;&lt;git url&gt;/&#39;: The requested URL returned error: 403</code></pre><p>너무 정신없어서 캡쳐를 못했는데, 기억을 더듬어 작성해보자면 이런 식의 오류였다</p>
<h2 id="원인">원인</h2>
<p>검색을 하며 찾아보니 명확한 답변은 나오지 않았고, 유추를 해보자면</p>
<ol>
<li>이전에 사용하던 git 계정 기록이 내 노트북에 남아있고</li>
<li>그 계정이 내 컴퓨터(로컬)에 저장되어 있어 모든 tool에는 그 계정이랑 연동이 되어있는 듯..? 했다</li>
<li>실제로 이번 교육과정에 참가하면서 블로그도 새로 시작하고, 각종 계정들을 다른 구글 계정으로 변경해서 사용하는 중이었음</li>
</ol>
<h2 id="해결">해결</h2>
<blockquote>
<p>제어판 ➡ 사용자 계정 ➡ 자격 증명 관리 ➡ 웹 자격 증명 관리 ➡ github 웹 계정 선택 후 삭제</p>
</blockquote>
<p>해당 과정을 거친 후 다시 현재 사용하는 github 계정으로 연동해주었더니 push 명령 시 오류가 발생하지 않았음</p>
</br>
매일 새로운 오류를 만나고 해결하는 과정 속에서 성장하는 너낌이랄까..😂 </br>
물론 기록하지 않은 오류들과 해결과정이 훨씬 많지만 ! </br>
이런 재미에 개발자 하나 싶다 ㅎㅎ]]></description>
        </item>
        <item>
            <title><![CDATA[[spring] MVC 패턴]]></title>
            <link>https://velog.io/@dev_sy/spring-MVC-%ED%8C%A8%ED%84%B4</link>
            <guid>https://velog.io/@dev_sy/spring-MVC-%ED%8C%A8%ED%84%B4</guid>
            <pubDate>Mon, 05 Aug 2024 14:01:27 GMT</pubDate>
            <description><![CDATA[<h1 id="💡-mvc-패턴">💡 MVC 패턴</h1>
<p>Model-View-Controller 구조의 디자인 패턴
사용자 인터페이스, 데이터 및 논리 제어 구현</p>
<ol>
<li>모델(Model) : 데이터와 비즈니스 로직 관리</li>
<li>뷰(View) : 레이아웃과 화면 처리</li>
<li>컨트롤러(Controller) : 사용자의 입력 처리와 흐름 제어 담당, 모델과 뷰로 명령 전달</li>
</ol>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/2095d8da-b4ba-4813-8450-ef101a8af24b/image.png" alt=""></p>
<p>➡️ 사용자가 컨트롤러를 조작하면 컨트롤러는 모델을 통해 데이터를 가져오고, 그 데이터를 바탕으로 뷰를 통해 시각적 표현을 제어해 사용자에게 전달</p>
<p>💬 [web]에 적용하면</p>
<ol>
<li>사용자가 웹사이트에 접속</li>
<li>컨트롤러는 사용자가 요청한 웹페이지를 제공하기 위해 모델 호출 -&gt; <strong>Manipulates</strong></li>
<li>모델은 데이터베이스나 파일과 같은 데이터 소스 제어 후 결과 리턴</li>
<li>컨트롤러는 모델이 리턴한 결과를 뷰에 반영 -&gt; <strong>Updates</strong></li>
<li>데이터가 반영된 뷰는 사용자에게 보여짐</li>
</ol>
<h2 id="❓-mvc-패턴-사용-이유">❓ MVC 패턴 사용 이유</h2>
<ul>
<li>비즈니스 로직과 UI 로직 분리 -&gt; 독립적인 유지보수</li>
<li>모델과 뷰가 다른 컴포넌트에 종속되지 않음 -&gt; 애플리케이션 확장성/유연성</li>
<li>중복 코딩 문제점 제거</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[spring] API key]]></title>
            <link>https://velog.io/@dev_sy/Spring-API-key</link>
            <guid>https://velog.io/@dev_sy/Spring-API-key</guid>
            <pubDate>Mon, 05 Aug 2024 13:02:43 GMT</pubDate>
            <description><![CDATA[<h1 id="🔑-api-key">🔑 API key</h1>
<h3 id="api-인증-api-authentication">API 인증 (API Authentication)</h3>
<p>: API를 호출하는 대상을 확인하는 절차</p>
<h4 id="api-인증-방식">API 인증 방식</h4>
<ul>
<li>API Key 방식</li>
<li>API Token 방식</li>
</ul>
<p>➡️ 인증 방식에 따라 구현 난이도와 보안 수준이 달라짐!</p>
<h3 id="api-key란">API key란?</h3>
<p>특정 사용자만 알 수 있는 문자열</p>
<p><img src="https://velog.velcdn.com/images/dev_sy/post/05060f53-3c23-4239-b1ff-2f0da3f8646a/image.png" alt=""></p>
<ul>
<li>개발자는 
API key를 발급 받고 API key를 메세지 안에 입력해 API 호출</li>
<li>서버는
메세지 안의 API key를 읽고 누가 호출한 API인지 인증</li>
</ul>
</br>

<h3 id="그런데">그런데!!</h3>
<p>이 API key로 인해 과금이 발생할 수 있음</p>
<p>✔️ 내 프로젝트에 필요한 API 과금 기준을 잘 확인 후 활용해야 하고
✔️ 사용자가 얼마나 자주 API를 호출했는지 확인할 때도 API key가 사용되기 때문에
✔️ API key는 나만 알 수 있는 곳에 보관해야 함</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vue.js] axios vs fetch]]></title>
            <link>https://velog.io/@dev_sy/vue.js-axios-vs-fetch</link>
            <guid>https://velog.io/@dev_sy/vue.js-axios-vs-fetch</guid>
            <pubDate>Fri, 02 Aug 2024 01:52:02 GMT</pubDate>
            <description><![CDATA[<p>vue.js로 팀 프로젝트를 진행하면서 클라이언트에서 서버로 HTTP 요청을 효율적으로 처리하기 위해 axios나 fetch를 사용한다는 것을 알았다
</br></p>
<h1 id="❓-왜-http-요청이-필요한가">❓ 왜 HTTP 요청이 필요한가</h1>
<h3 id="1-데이터-전송">1. 데이터 전송</h3>
<p>웹 애플리케이션은 보통 서버-클라이언트 간 데이터를 주고받음
ex. 유저 로그인 정보, 상품 목록, 유저 프로필 등</p>
<h3 id="2-비동기-통신">2. 비동기 통신</h3>
<p>페이지를 다시 로드하지 않고 데이터 갱신 가능
-&gt; 사용자 경험 향상</p>
<h3 id="3-서버와의-상호작용">3. 서버와의 상호작용</h3>
<p>CRUD 작업을 서버와 통신하여 처리
</br></p>
<h1 id="❓-왜-axios나-fetch를-사용하는가">❓ 왜 axios나 fetch를 사용하는가</h1>
<h3 id="1-편리성">1. 편리성</h3>
<p>이 라이브러리들은 HTTP 요청을 쉽게 보낼 수 있는 인터페이스 제공</p>
<h3 id="2-에러-핸들링">2. 에러 핸들링</h3>
<p>HTTP 요청 성공/실패에 대한 적절한 처리 가능</p>
<h3 id="3-비동기-처리">3. 비동기 처리</h3>
<p>Promise 또는 async/await 사용해 비동기 작업 간편하게 관리 가능</p>
<h3 id="4-유연성">4. 유연성</h3>
<p>다양한 요청 설정이 쉬움
ex. 헤더 추가, 타임아웃 설정, 요청 취소 등</p>
<h3 id="5-인터셉터">5. 인터셉터</h3>
<p>요청이나 응답을 가로채 공통적인 작업 수행 가능
ex. 인증 토큰 추가, 로깅 등
</br></p>
<h1 id="⚡-운영환경에서의-중요성">⚡ 운영환경에서의 중요성</h1>
<ul>
<li>데이터 통신
  대부분의 현대적인 웹 애플리케이션은 서버-클라이언트 간 데이터 통신이 빈번하게 발생
  -&gt; 안정적이고 효율적인 HTTP 클라이언트 필수적</li>
<li>유지보수
  코드의 가독성과 유지보수성 측면에서 반복적인 HTTP 요청 코드를 깔끔하게 관리</li>
<li>성능 최적화
  필요에 따라 요청 최적화, 불필요한 요청 최소화 -&gt; 성능 개선</li>
</ul>
</br>
이외에도 vue.js 프로젝트에서 서버와 데이터 통신을 할 때 사용할 수 있는 다양한 기술들이 있음

<ul>
<li>Vue Resource</li>
<li>GraphQL</li>
<li>Firebase</li>
<li>Socket.io</li>
<li>RESTful 라이브러리들</br>

</li>
</ul>
<p>그렇다면!
현재 진행하고 있는 프로젝트에는 axios와 fetch 중 어떤 것을 사용해야할까?</p>
<h3 id="✅-장단점을-분석해보자">✅ 장단점을 분석해보자</h3>
<h1 id="axios">Axios</h1>
<h3 id="장점">장점</h3>
<ol>
<li>간편한 사용법
 XMLHttpRequest를 기반으로 한 라이브러리 -&gt; 사용하기 쉬운 API 제공</li>
<li>자동 JSON 변환
 요청 및 응답 데이터를 자동으로 JSON으로 변환</li>
<li>인터셉터
 요청이나 응답을 가로채 로깅이나 인증 토큰 추가 등의 작업 쉽게 수행</li>
<li>더 많은 기능
 요청 취소, 타임아웃 설정, 응답 데이터 변환 등 fetch에 비해 더 많은 기능 제공</li>
<li>Node.js 지원
 서버사이드에서도 동일한 API 사용 가능<h3 id="단점">단점</h3>
</li>
<li>파일 크기
 외부 라이브러리이기 때문에 프로젝트 빌드 크기 약간 증가</li>
<li>의존성
 추가적인 외부 라이브러리에 의존</li>
</ol>
<h1 id="fetch">Fetch</h1>
<h3 id="장점-1">장점</h3>
<ol>
<li>내장 함수
 최신 브라우저에 내장된 기능이기 때문에 별도 설치 필요 X</li>
<li>Promise 기반
 비동기 작업 관리 쉬움</li>
<li>브라우저 친화적
 최신 브라우저 환경에서는 네이티브로 지원되어 최적화<h3 id="단점-1">단점</h3>
</li>
<li>지원 브라우저
 구형 브라우저에서는 폴리필 필요
 // todo - 폴리필 설명 추가</li>
<li>JSON 변환 필요
 응답을 JSON으로 변환하려면 추가 처리 필요
 ex. response.json()</li>
<li>기능 제한
 기본 기능만 제공하기 때문에 인터셉터나 자동 변환 등의 기능은 직접 구현</li>
<li>에러 핸들링
 네트워크 에러는 Promise를 거부하지만, 404나 500 같은 HTTP 에러는 거부하지 않기 때문에 추가 처리 필요</li>
</ol>
</br>

<h1 id="💡-결론">💡 결론</h1>
<ul>
<li>간편함과 기능성 -&gt; <em><strong>axios</strong></em></li>
<li>경량성과 최신 브라우저 지원, 기본적인 기능만 필요 -&gt; <em><strong>fetch</strong></em></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[vue.js] 이미지 파일 경로]]></title>
            <link>https://velog.io/@dev_sy/vue.js-%EC%9D%B4%EB%AF%B8%EC%A7%80-%ED%8C%8C%EC%9D%BC-%EA%B2%BD%EB%A1%9C</link>
            <guid>https://velog.io/@dev_sy/vue.js-%EC%9D%B4%EB%AF%B8%EC%A7%80-%ED%8C%8C%EC%9D%BC-%EA%B2%BD%EB%A1%9C</guid>
            <pubDate>Thu, 01 Aug 2024 02:24:44 GMT</pubDate>
            <description><![CDATA[<p>vue 프로젝트에서 마이페이지 프로필 기본이미지를 넣다가 오류 발생
팀 컨벤션에 따라 이미지 파일은 assets - image 폴더에 넣기로 했는데,
검색해보니 public 폴더 아래에 image 폴더 생성해서 많이 넣기도 한다고 되어있었다</p>
<p>궁금해서 gpt한테 물어봄 !</p>
<h3 id="답변">&lt;답변&gt;</h3>
<p>vue 프로젝트에서 이미지 파일을 어디에 저장할지는 목적에 따라 달라진다</p>
<h3 id="1-public-폴더">1. public 폴더</h3>
<h4 id="용도">용도</h4>
<ul>
<li>정적 파일 저장</li>
<li>빌드 시점에 별도로 처리되지 않고, 그대로 출력 폴더(dist)로 복사</li>
</ul>
<h4 id="접근-방식">접근 방식</h4>
<ul>
<li>public 폴더에 있는 파일은 절대경로로 접근 X</li>
</ul>
<p>ex. public/logo.png</p>
<pre><code>&lt;img src=&#39;/logo.png&#39;&gt;</code></pre><h4 id="example">example</h4>
<ul>
<li>웹사이트 로고, 파비콘(favicon), 메타 태그에 사용되는 이미지 등</li>
<li>프로젝트 구조와 무관하게 고정된 위치에서 접근해야 하는 파일</li>
</ul>
</br>

<h3 id="2-srcassets-폴더">2. src/assets 폴더</h3>
<h4 id="용도-1">용도</h4>
<ul>
<li>웹팩(webpack)으로 처리되는 파일 저장</li>
<li>빌드 과정에서 웹팩에 의해 처리되고, 필요에 따라 최적화</li>
</ul>
<h4 id="접근-방식-1">접근 방식</h4>
<ul>
<li>JavaScript나 Vue 컴포넌트 내에서 import 구문 사용해 접근</li>
</ul>
<p>ex. src/assets/logo.png</p>
<pre><code>import logo from &#39;@/assets/logo.png&#39;;</code></pre><h4 id="example-1">example</h4>
<ul>
<li>컴포넌트 내에서 사용되는 이미지, 동적으로 불러오는 이미지 등</li>
<li>빌드 프로세스의 일부로 처리되어야 하는 파일</li>
</ul>
<p></br></br></p>
<h2 id="wrap-up">wrap-up</h2>
<p>정적파일(고정된 경로에서 접근해야 하는 이미지) -&gt; public
컴포넌트/자바스크립트 파일 내에서 사용되는 이미지 -&gt; src/assets</p>
<p>➰ 프로젝트의 유지보수성과 효율적인 파일 관리 가능
➰ 프로젝트의 요구사항에 맞게 두 폴더를 적절히 활용</p>
]]></description>
        </item>
    </channel>
</rss>