<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>열쩡개발</title>
    <link>https://youngging2.tistory.com/</link>
    <description>쩡선영의 열쩡개발 </description>
    <language>ko</language>
    <pubDate>Wed, 29 Jul 2026 04:07:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>쩡선영</managingEditor>
    <image>
      <title>열쩡개발</title>
      <url>https://tistory1.daumcdn.net/tistory/5866671/attach/5137724b814f4353a1260d9c58c43496</url>
      <link>https://youngging2.tistory.com</link>
    </image>
    <item>
      <title>[SpringBoot] Lazy 칼람 JSON 반환 오류 해결하기 (No serializer fond for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no...)</title>
      <link>https://youngging2.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️배경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SpringBoot로 Join시킨 FK를 통해 get 요청을 받아서, 데이터를 넘겨주는 api를 작성하고 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;No&amp;nbsp;serializer&amp;nbsp;fond&amp;nbsp;for&amp;nbsp;class&amp;nbsp;org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor&amp;nbsp;and&amp;nbsp;no...&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 에러가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;✅ 해결방법 1&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 내가 해본 것은 &lt;b&gt;application.properties&lt;/b&gt;에 spring.jpa.properties.hibernate.format_sql=false를 추가해주었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;spring.jackson.serialization.fail-on-empty-beans=fasle&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니 단순히 에러는 해결되었지만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w7cxK/btsF5UZVKFu/kfDS4TX2kKqti54vQkiIeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w7cxK/btsF5UZVKFu/kfDS4TX2kKqti54vQkiIeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w7cxK/btsF5UZVKFu/kfDS4TX2kKqti54vQkiIeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw7cxK%2FbtsF5UZVKFu%2FkfDS4TX2kKqti54vQkiIeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1109&quot; height=&quot;846&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 불필요한 데이터들이 나오게 되었으며, &lt;span style=&quot;color: #a31515; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;hibernateLazyInitializer &lt;span style=&quot;color: #333333;&quot;&gt;라는 만든적이 없는 데이터도 나오게 되었다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #a31515; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리하여 다른 방법이 없을까 더 검색을 해본 결과&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;✅ 해결방법 2&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1711474606756&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = &quot;user_id&quot;)
    private UserEntity user;
    
    
    @JsonIgnore
    @OneToMany(mappedBy = &quot;user&quot;, cascade = {CascadeType.REFRESH, CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval = true)
    private List&amp;lt;IdeaEntity&amp;gt; ideaEntityList;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Join 해줄 칼람 위에 &lt;b&gt;@JsonIgnore&lt;/b&gt; 어노테이션을 추가해주었더니 해결이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SpringBoot</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/70</guid>
      <comments>https://youngging2.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 27 Mar 2024 02:37:41 +0900</pubDate>
    </item>
    <item>
      <title>객체지향 설계의 5가지 원칙 (Solid 원칙)</title>
      <link>https://youngging2.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 배경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자라면, 특히 백엔드 쪽이라면 &quot;객체지향~ 객체지향에 맞게 설계해주세요~~&quot; 라는 소리를 한 번쯤은 들어봤을 것입니다. 저도 처음 개발을 처음 접했던 고1때부터 객체지향이라는 단어를 참 많이 들어왔는데요. 이번 스프링부트를 공부하기 시작하면서 이 객체지향 설계의 5가지 원칙인 &lt;b&gt;SOLID&lt;/b&gt; 원칙을 제대로 알고 넘어가고 싶어서 이 글을 포스팅하게 되었습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ Solid 원칙이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로버트&amp;nbsp;마틴&lt;/b&gt;이라는 유명한 분이 만드신 원칙인데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Solid&lt;/b&gt; 원칙이란 객체지향 설계에서 지켜줘야 할 5가지 개발 원칙(&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;S&lt;/span&gt;&lt;/b&gt;RP, &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/span&gt;CP, &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;L&lt;/span&gt;&lt;/b&gt;SP, &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;I&lt;/b&gt;&lt;/span&gt;SP, &lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;D&lt;/b&gt;&lt;/span&gt;IP)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;S&lt;/b&gt;&lt;/span&gt;PR (Single Responsibility Principle) : 단일 책임 원칙&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/span&gt;CP (Open Closed Priciple) : 개방/폐쇄 원칙&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;L&lt;/b&gt;&lt;/span&gt;SP (Listov Substitution Priciple) : 리스코프 치환 원칙&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;I&lt;/span&gt;&lt;/b&gt;SP (Interface Segregatin Principle) : 인터페이스 분리 원칙&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;D&lt;/span&gt;&lt;/b&gt;IP (Dependency Inversin Principle) : 의존관계 역전 원칙&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 다섯가지의 원칙을 SOLID원칙 이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ SRP - 단일 책임 원칙&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;한 클래스는 하나의 책임만 가져야한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단일 책임 원칙의 뜻은, &lt;b&gt;한 클래스는 하나의 책임만 가져아한다는 것&lt;/b&gt;인데요. 이 책임이 클 수도 있고, 작을수도 있어서 참 애매합니다. 여기서 중요한 기준은 변경인데요. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708424955734&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person {
    void teach();		// 가르치기 - 선생님
    void study();		// 공부하기 - 학생
    void learn();		//배우기 - 학생
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Person 클래스에서는 선생님 역할과 학생 역할을 모두 담고있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래하여 &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;Person 클래스는 선생님의 역할과 관련한 기능이 추가될 때마다 코드의 변경이 있어야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708425078581&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Teacher{
	void teach();
}

class Student{
	void study();
    void learn();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 선생님과 학생의 역할을 분리하여 단일 책임 원칙을 지켰습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;단일&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt; 책임 원칙에 맞게 클래스를 수정한다면, 선생님의 역할과 관련한 기능이 추가될 때 Student 클래스가 변경되지 않아도 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ OCP - 개방/폐쇄 원칙&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;소프트웨어 요소는 확장에 열려있어야하나, 변경에는 닫혀있어야 한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀있어야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708425986142&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Car {
	void accel();
    	void break();
}

class Bus implement Car{
	void accel() { //속도 10 증가 };
    	void brake() { //속도 5 감소 };
 }
 
 class Truck implements Car{
 	void accel() { //속도 5 증가 };
    	void brake() { //속도 3 감소};
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 자동차가 변경되더라도 액셀이나 브레이크를 밟든 아무런 영향을 받지 않습니다. 이는 변경에 닫혀있는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로, 자동차는 Bus나 Truck 이외에도 다른 자동차 종류로 인터페이스를 통해 클래스 확정을 할 수 있고, 클라이언트의 역할에 영항을 끼치지 않으니 확장에 열려있다는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ LSP - 리스코프 치환 원칙&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;프로그램의 객체는 프로그램의 정확성을 깨드리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 하위 타입이 상위 타입이 지정한 제약조건들을 지키고, 상위 타입에서 하위 타입으로 변동이 일어나도 상위타입의 역할을 문제없이 제공하는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708426351272&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Car {
	int speed;
	void drive() { 
		this.speed += 10;
	}
}

class Bus extends Car {
	int speed;
	int km;
	
	@Override 
	void drive() {
		// 부모 기능 그대로 수행
		this.speed += 10;
		
		// 하위 타입 기능 추가
		this.km += 1;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 오버라이딩 하게 되면 Bus는 Car(부모) 기능인 speed += 10 기능을 구현할 수 있을뿐더러 km += 1인 하위 타입 기능도 수행할 수 있게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;리스코프 치환 원칙을 지키기 위해서는 하위 타입에서 상위 타입은 상속을 하지만 무분별한 메소드 오버라이딩을 줄이는 것입니다. 메소드 오버라이딩을 하더라도 상위 타입이 구현한 기능을 변경없이 구현 후 추가적인 기능을 구현하는 것이 바람직합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ ISP - 인터페이스 분리 원칙&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 책임 원칙 (SRP)에서는 하나의 역할만 하도록 다수의 클래스로 분할하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 터페이스 분리 원칙은 각 역할에 맞게 인터페이스로 분리하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 책임 원칙과 인터페이스 분할 원칙은 같은 문제에 대한 두가지의 해결책으로도 볼 수 있습니다. 하지만 특별한 경우가 아니라면 단일 책임 원칙을 쓰는게 더 바람직하다고 하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 상위 클래스는 풍성하면 풍성할수록 더 좋고, 인터페이스 내에 메소드는 최소한 일수록 좋기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708426988745&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Person {
    void teach();		// 가르치기 - 선생님
    void study();		// 공부하기 - 학생
    void learn();		//배우기 - 학생
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Person 인터페이스에 선생님과 학생 메소드를 모두 구현하면 안되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708427036522&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Teacher{
	void teach();
}

interface Student{
	void study();
    void learn();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능에 맞게 인터페이스를 분리해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ DIP - 의존관계 역전 원칙&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 이야기하면 구현 클래스에 의존하지 말고, 인터페이스에만 의존하라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할에 의존하게 해야한다는 것과 같습니다. 객체 세상도 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있습니다. 만약 구현체에 의존하게 되면 변경이 아주 어려워집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708427198277&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class ComicBook {
	void read();
	void save();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 클라이언트가 ComicBook 클래스에 의존하게 된다면, Magazine이나 &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;클래스를 이용하고 싶을 때 클라이언트의 코드를 전격 수정해주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708427232023&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Book {  
	void read();
	void save();
}

class ComicBook implements Book{
	void read() {...}
	void save() {...}
}

class Magazine implements Book{
	void read() {...}
	void save() {...}
}

class Poem implements Book{
	void read() {...}
	void save() {...}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 클라이언트는 구현체(클래스)에 의존하기 보다는 ComicBook, Magazine, Poem을 추상화한 Book 인터페이스에 의존을 해야합니다. 그리하면 구현체가 변경되어도 코드는 별다른 변경 없이 사용 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 참고 문헌&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://velog.io/@zayson/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID-%EC%9B%90%EC%B9%99&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@zayson/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID-%EC%9B%90%EC%B9%99&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SpringBoot</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/69</guid>
      <comments>https://youngging2.tistory.com/69#entry69comment</comments>
      <pubDate>Tue, 20 Feb 2024 20:09:24 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 피보나치 수 (JAVA)</title>
      <link>https://youngging2.tistory.com/68</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;코테 스터디를 끝낸 후, 코테 관련 블로그는 잘 안올릴려 했으나&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제는 꼭 블로그에 포스팅하여 한 번 더 정리하고 넘어가야겠다는 생각이 들어&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오랜만에 코테 관련 블로그를 끄적여봅니다 &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스 &lt;b&gt;피보나치 수&lt;/b&gt; 2단계 문제입니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12945&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12945&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707988361052&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12945&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHSnCR/hyVmSKYXoH/B8rea87iI3ShBjvPdtsifk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/QxfkN/hyVmVOtGY5/RMp3t1KTli5wazRlMEEdtK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12945&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12945&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHSnCR/hyVmSKYXoH/B8rea87iI3ShBjvPdtsifk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/QxfkN/hyVmVOtGY5/RMp3t1KTli5wazRlMEEdtK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;❓문제설명&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n+1) + F(n-2) 가 적용되는 수 입니다.&lt;br /&gt;&lt;br /&gt;예를 들어&lt;br /&gt;F(2) = F(0) + F(1) = 0 + 1 = 1&lt;br /&gt;F(3) = F(1) + F(2) = 1 + 1 = 2&lt;br /&gt;F(4) = F(2) + F(3) = 1 + 2 = 3&lt;br /&gt;F(5) = F(3) + F(4) = 2 + 3 = 5&lt;br /&gt;와 같이 이어집니다.&lt;br /&gt;&lt;br /&gt;2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;⚠️ 제한사항 및 입출력&lt;span&gt;&amp;nbsp;&lt;/span&gt;예&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;n은 2 이상 100,000 이하인 자연수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;n&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;✏️&lt;span&gt; 나의 풀이&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피보나치 수는 워낙 유명하며, 수업시간때도 몇번 다뤄본 문제이기에 &lt;b&gt;제귀함수&lt;/b&gt;를 써서 가볍게 풀어냈다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707988656002&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n) {
        if(n &amp;lt;= 1)
            return n;
        else 
            return solution(n-1) + solution(n-2);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 내가 처음 푼 풀이인데, 답은 맞았지만 시간초과가 나버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 난 제귀함수로 푸는 방법 밖에 몰랐기에 매우 혼란스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 와중, 어떤 분이 잘 써주신 글을 보게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;1241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8KGLh/btsEWwYRSwa/ABQNQL3olFOwW9AkSKFkTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8KGLh/btsEWwYRSwa/ABQNQL3olFOwW9AkSKFkTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8KGLh/btsEWwYRSwa/ABQNQL3olFOwW9AkSKFkTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8KGLh%2FbtsEWwYRSwa%2FABQNQL3olFOwW9AkSKFkTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1314&quot; height=&quot;1241&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;1241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 글을 보고 머리를 한 대 띵 맞은 느낌이였다. 세상에 천재분들은 많구나...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또, 여태까지 메모리 신경을 잘 안쓰며 개발했던 나날들이 후회하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707988971915&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int solution(int n) {
        int answer[] = new int[n+1];
        
        for(int i=0; i&amp;lt;=n; i++){
            if(i == 0) answer[i] = 0;
            else if(i == 1) answer[i] = 1;
            else {
                int sum = answer[i-2] + answer[i-1];
                answer[i] = sum % 1234567;
            }
        }
        
        return answer[n];
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 위와 같이 코드를 새로 짰다. 이번엔 당연히 통과!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 간단히 설명해보자면,&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n보다 하나 더 큰 배열을 생성해주고&lt;/li&gt;
&lt;li&gt;피보나치 수 0과 1의 값은 0과 1이니 예외처리 해주었다.&lt;/li&gt;
&lt;li&gt;그리고 배열 index 특징을 살려서 f(n-1) + f(n-2)한 값을 sum이라는 변수에 담아주었다.&lt;/li&gt;
&lt;li&gt;answer[i]에는 sum % 1234567 값을 넣어 메모리 초과가 안되게 해주었다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CodingTest</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/68</guid>
      <comments>https://youngging2.tistory.com/68#entry68comment</comments>
      <pubDate>Thu, 15 Feb 2024 18:33:03 +0900</pubDate>
    </item>
    <item>
      <title>[NodeJS] 웹 브라우저 쿠키와 세션 알아보기</title>
      <link>https://youngging2.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 웹개발의 기초인 쿠키와 세션에 대해 알아보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 1. 쿠키란&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 사이트에 회원가입 혹은 로그인을 한 뒤, 그 창을 껐다 켜도 로그인 상태로 남아있는 경우를 경험해본 적이 있을 겁니다. 다. 여기서 쿠키가 사용되는데요. &lt;b&gt;서버가 사용자의 웹 브라우저에 전송하는 데이터&lt;/b&gt;라고 생각하시면 됩니다! 브라우저가 이 데이터를 저장했다가, 동일한 서버로 요청이 오면 저장되어있던 데이터를 이용할 수 있게 되는 것이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  2. 코드 작성해보기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 nodeJs로 간단한 코드 하나 작성해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1702983953245&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();
const cookieParser = require('cookie-parser');
const port = 3000

app.use(cookieParser());

app.get('/count', function(req, res){
    res.cookie('count', 1);     //cookieParser 안의 cookie라는 메소드를 사용하여 cookie 넘겨주기
});

app.listen(port, function(){
    console.log('Connected Success');
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 필요한 npm들은 다 install 해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드들은 count라는 키로 1이라는 값을 쿠키로 저장하는 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cookie라는 메소드는 cookieParser 안에 있는것인데요. 이 메소드를 통해 클라이언트로 데이터들을 넘겨줍니다.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버를 실행시켜주고 localhost:3000/count로 접속한 뒤 F12 -&amp;gt; 네트워크에 들어가보시면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sz3xN/btsCf6KbzIf/KYDZmGrOafigKg5VKKXitK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sz3xN/btsCf6KbzIf/KYDZmGrOafigKg5VKKXitK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sz3xN/btsCf6KbzIf/KYDZmGrOafigKg5VKKXitK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSz3xN%2FbtsCf6KbzIf%2FKYDZmGrOafigKg5VKKXitK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1366&quot; height=&quot;832&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 헤더의 &lt;b&gt;Cookie count = 1&lt;/b&gt;이 보이실 겁니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 쿠키를 저장하고 불러올 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 쿠키는&lt;b&gt; 보안에 치명적&lt;/b&gt;인데요. 회원의 정보를 저장하는 쿠키를 생성했을 경우, 다른 사람들에게도 쉽게 회원 정보가 유출 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리하여 사용하게 될 것은 session이라는 것입니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 3. 세션(session) 이란&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세션은 쿠키를 기반으로 하고있지만, 데이터를 서버 측에서 관리합니다. 사용자의 정보 파일을 브라우저에 저장하는 쿠키의 보안 문제를 한 층 해결한 것이죠.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  4. 코드 작성해보기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 한 번 간단한 코드를 작성해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1703182659753&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express');
const session = require('express-session');
const port = 3000

const app = express();
app.use(session({
    secret: '1234322#@3wrwed',      //랜덤 값(쿠키 아이디) 넣기
    resave: false,              // 세션 아이디를 한 번 발급했으면 다시 발급하지 말아라
    saveUninitialized: true     // 세션 id를 사용하기 전까진 발급하지 말아라
}));

app.get('/session', function(req, res){
    if(req.session.count){
        req.session.count++;
    } else {
        req.session.count = 1;
    }
    res.send('count : ' + req.session.count);
});

app.listen(port, function(){
    console.log('Connected Success');
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요한 npm들은 다 install 해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드를 간단히 설명하자면 count라는 이름의 세션이 없다면 1로 초기화 된 count 세션을 만들고, 있다면&amp;nbsp; count 세션을 하나씩 추가해라. 라는뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나씩 살펴보겠습니다. 먼저 세션에 사용되는 정보들을 설정해줘야 하는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;seceret에는 임의의 쿠키 아이디 값을 넣어줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resave에는 세션 아이디를 한 번 발급하였다면 다시 발급하지 마라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;saveUninitialized는 세션 아이디를 사용하기 전가지는 발급하지 말라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;뭐 저도 어디서 주워들은 거지만 false, true가 국룰 이라네요... (죄송해요저도이건잘...)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼!!! 서버를 실행시키고, localhost:3000/session으로 접속해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaXROg/btsCoBQ3lq4/Gkwk57xoJQ3BfChkFdY1Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaXROg/btsCoBQ3lq4/Gkwk57xoJQ3BfChkFdY1Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaXROg/btsCoBQ3lq4/Gkwk57xoJQ3BfChkFdY1Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaXROg%2FbtsCoBQ3lq4%2FGkwk57xoJQ3BfChkFdY1Z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;778&quot; height=&quot;213&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 쿠키와는 다르게, 해독하기 어려운 이상한 문자들이 값으로 들어간 것을 볼 수 있습니다!&lt;/p&gt;</description>
      <category>NodeJS</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/67</guid>
      <comments>https://youngging2.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 22 Dec 2023 03:35:14 +0900</pubDate>
    </item>
    <item>
      <title>[Firebase] 호스팅 생성 및 웹 배포하기</title>
      <link>https://youngging2.tistory.com/66</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;프로젝트 생성&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://firebase.google.com/?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://firebase.google.com/?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700216835811&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Firebase | Google&amp;rsquo;s Mobile and Web App Development Platform&quot; data-og-description=&quot;개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.&quot; data-og-host=&quot;firebase.google.com&quot; data-og-source-url=&quot;https://firebase.google.com/?hl=ko&quot; data-og-url=&quot;https://firebase.google.com/?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/beg5p8/hyUyvRkqgK/LhG7RSHXBqXHAGTBRri7b0/img.png?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800,https://scrap.kakaocdn.net/dn/4BQDu/hyUyk95P6m/0sksrtZjg8YH5KKinftbq1/img.png?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800,https://scrap.kakaocdn.net/dn/x9HUq/hyUynTiAkE/NESS2zCdCDvLUhPzLKnGw0/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240&quot;&gt;&lt;a href=&quot;https://firebase.google.com/?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://firebase.google.com/?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/beg5p8/hyUyvRkqgK/LhG7RSHXBqXHAGTBRri7b0/img.png?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800,https://scrap.kakaocdn.net/dn/4BQDu/hyUyk95P6m/0sksrtZjg8YH5KKinftbq1/img.png?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800,https://scrap.kakaocdn.net/dn/x9HUq/hyUynTiAkE/NESS2zCdCDvLUhPzLKnGw0/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Firebase | Google&amp;rsquo;s Mobile and Web App Development Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;firebase.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 링크로 들어가셔서 로그인하신 뒤, &lt;b&gt;시작하기&lt;/b&gt; 버튼을 눌러주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2u1Qd/btsAwr9SerO/5dApN8vIP5CeUAec2fJF0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2u1Qd/btsAwr9SerO/5dApN8vIP5CeUAec2fJF0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2u1Qd/btsAwr9SerO/5dApN8vIP5CeUAec2fJF0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2u1Qd%2FbtsAwr9SerO%2F5dApN8vIP5CeUAec2fJF0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2534&quot; height=&quot;994&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로젝트 추가&lt;/b&gt; 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2555&quot; data-origin-height=&quot;1306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/82yfu/btsAvqwBVRG/x8mdmQe06K83JlK7kjyod0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/82yfu/btsAvqwBVRG/x8mdmQe06K83JlK7kjyod0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/82yfu/btsAvqwBVRG/x8mdmQe06K83JlK7kjyod0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F82yfu%2FbtsAvqwBVRG%2Fx8mdmQe06K83JlK7kjyod0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2555&quot; height=&quot;1306&quot; data-origin-width=&quot;2555&quot; data-origin-height=&quot;1306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 이름을 입력하시고 계속을 눌러주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2557&quot; data-origin-height=&quot;1252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7NUoR/btsAwrosZvA/S7oA7FMVWC6h6MKOgrmyak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7NUoR/btsAwrosZvA/S7oA7FMVWC6h6MKOgrmyak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7NUoR/btsAwrosZvA/S7oA7FMVWC6h6MKOgrmyak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7NUoR%2FbtsAwrosZvA%2FS7oA7FMVWC6h6MKOgrmyak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2557&quot; height=&quot;1252&quot; data-origin-width=&quot;2557&quot; data-origin-height=&quot;1252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애널리틱스 사용 설정을 허용해주시고, 계속을 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQJfFs/btsAw8Wpy8E/vuAXv292iEUPMTG6H6hOfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQJfFs/btsAw8Wpy8E/vuAXv292iEUPMTG6H6hOfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQJfFs/btsAw8Wpy8E/vuAXv292iEUPMTG6H6hOfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQJfFs%2FbtsAw8Wpy8E%2FvuAXv292iEUPMTG6H6hOfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2553&quot; height=&quot;1258&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신의 계정을 선택하시고 프로젝트 만들기를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;호스팅 생성하기&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;npm install -g firebase-tools&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에 들어가셔서 위의 명령어를 입력합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1732&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z0LwB/btsAxZrthNF/JtROhY4SdzVE0rDdK7ejR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z0LwB/btsAxZrthNF/JtROhY4SdzVE0rDdK7ejR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z0LwB/btsAxZrthNF/JtROhY4SdzVE0rDdK7ejR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ0LwB%2FbtsAxZrthNF%2FJtROhY4SdzVE0rDdK7ejR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1732&quot; height=&quot;672&quot; data-origin-width=&quot;1732&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 자동적으로 npm이 firebase CLI를 설치해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-g는 global의 약자로, 전역에 설치를 해준다는 것을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;firebase login&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 firebase에 로그인을 해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1728&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blZJHl/btsAyVISUBr/MNFYjLf3emKPPFXm4MmIlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blZJHl/btsAyVISUBr/MNFYjLf3emKPPFXm4MmIlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blZJHl/btsAyVISUBr/MNFYjLf3emKPPFXm4MmIlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblZJHl%2FbtsAyVISUBr%2FMNFYjLf3emKPPFXm4MmIlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1728&quot; height=&quot;258&quot; data-origin-width=&quot;1728&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 질문이 나올텐데 &lt;b&gt;Y&lt;/b&gt;라고 입력해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1073&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCD3Zl/btsAy9tv6tF/BJzFJPawR5jKgBNISNwRik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCD3Zl/btsAy9tv6tF/BJzFJPawR5jKgBNISNwRik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCD3Zl/btsAy9tv6tF/BJzFJPawR5jKgBNISNwRik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCD3Zl%2FbtsAy9tv6tF%2FBJzFJPawR5jKgBNISNwRik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;1073&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1073&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 자신의 구글계정이 나올텐데, 로그인을 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;1378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjbP8L/btsAzCPRtC5/NMXyWaE64qPmkkkpvrrkek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjbP8L/btsAzCPRtC5/NMXyWaE64qPmkkkpvrrkek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjbP8L/btsAzCPRtC5/NMXyWaE64qPmkkkpvrrkek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjbP8L%2FbtsAzCPRtC5%2FNMXyWaE64qPmkkkpvrrkek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1157&quot; height=&quot;1378&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;1378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허용을 선택해주시면 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFmOlk/btsAwsVfBr2/aqk6HrPolxvckYXGxoOXa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFmOlk/btsAwsVfBr2/aqk6HrPolxvckYXGxoOXa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFmOlk/btsAwsVfBr2/aqk6HrPolxvckYXGxoOXa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFmOlk%2FbtsAwsVfBr2%2Faqk6HrPolxvckYXGxoOXa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1389&quot; height=&quot;330&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 터미널로 돌아오면 &lt;b&gt;Success! Logged in as [이메일]&lt;/b&gt;이 있으면 성공하신 겁니다:)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Firebase Init&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;firebase init&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 배포할 폴더가 있는 곳으로 가서 firebase init를 입력해주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1656&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b44KHj/btsAuy9Lrh5/HKT8x4DmkIadHkF4PWbnXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b44KHj/btsAuy9Lrh5/HKT8x4DmkIadHkF4PWbnXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b44KHj/btsAuy9Lrh5/HKT8x4DmkIadHkF4PWbnXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb44KHj%2FbtsAuy9Lrh5%2FHKT8x4DmkIadHkF4PWbnXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1656&quot; height=&quot;887&quot; data-origin-width=&quot;1656&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 Are you ready to proceed? 질문이 나오면 Y를 입력해주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1667&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WPaYj/btsAxW2xQ9n/2XEgIKPYsnYPKEpkvZJUQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WPaYj/btsAxW2xQ9n/2XEgIKPYsnYPKEpkvZJUQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WPaYj/btsAxW2xQ9n/2XEgIKPYsnYPKEpkvZJUQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWPaYj%2FbtsAxW2xQ9n%2F2XEgIKPYsnYPKEpkvZJUQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1667&quot; height=&quot;296&quot; data-origin-width=&quot;1667&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향키로 Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys로 가주시고 Space를 눌러서 선택한 뒤, Enter를 누르세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8g4Ej/btsAuN6Gqjd/8gP7x2O4ZPkvm8hxEflexk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8g4Ej/btsAuN6Gqjd/8gP7x2O4ZPkvm8hxEflexk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8g4Ej/btsAuN6Gqjd/8gP7x2O4ZPkvm8hxEflexk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8g4Ej%2FbtsAuN6Gqjd%2F8gP7x2O4ZPkvm8hxEflexk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;959&quot; height=&quot;178&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 Use an existing project를 선택한 뒤 Enter를 누르면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6Dtt/btsAxGeEX7N/EZl0faVGRHpYWrTuy4z2QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6Dtt/btsAxGeEX7N/EZl0faVGRHpYWrTuy4z2QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6Dtt/btsAxGeEX7N/EZl0faVGRHpYWrTuy4z2QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6Dtt%2FbtsAxGeEX7N%2FEZl0faVGRHpYWrTuy4z2QK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1417&quot; height=&quot;222&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신이 만든 프로젝트를 선택하고, Enter을 누릅니다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1aijl/btsAvq4xXgX/taNCXIvVyp3chDkRLKU6n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1aijl/btsAvq4xXgX/taNCXIvVyp3chDkRLKU6n0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1aijl/btsAvq4xXgX/taNCXIvVyp3chDkRLKU6n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1aijl%2FbtsAvq4xXgX%2FtaNCXIvVyp3chDkRLKU6n0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1085&quot; height=&quot;356&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 &lt;b&gt;Public -&amp;gt; N -&amp;gt; N&lt;/b&gt;을 입력해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배포하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ml4gV/btsAwpEgKfo/zKDHPjwLFxN0kDvLNEfVkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ml4gV/btsAwpEgKfo/zKDHPjwLFxN0kDvLNEfVkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ml4gV/btsAwpEgKfo/zKDHPjwLFxN0kDvLNEfVkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMl4gV%2FbtsAwpEgKfo%2FzKDHPjwLFxN0kDvLNEfVkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1455&quot; height=&quot;977&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;977&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 firebase init 해줬던 폴더에 들어가보면 public 파일이 보일겁니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public폴더에 자신이 작업한 것을 넣고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;firebase deploy&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 터미널로 돌아가 firebase deploy를 입력해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mBsV2/btsAvXAWl8A/HxiCOEgb4dboKOh1LhHa00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mBsV2/btsAvXAWl8A/HxiCOEgb4dboKOh1LhHa00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mBsV2/btsAvXAWl8A/HxiCOEgb4dboKOh1LhHa00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBsV2%2FbtsAvXAWl8A%2FHxiCOEgb4dboKOh1LhHa00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1374&quot; height=&quot;506&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 호스팅 된 URL이 뜰 거에요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cz5572/btsAvsnGj27/jNKSve0rJm9KAvCRLvWJ0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cz5572/btsAvsnGj27/jNKSve0rJm9KAvCRLvWJ0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cz5572/btsAvsnGj27/jNKSve0rJm9KAvCRLvWJ0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcz5572%2FbtsAvsnGj27%2FjNKSve0rJm9KAvCRLvWJ0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2534&quot; height=&quot;1176&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;1176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스팅 완료된 URL로 들어가면 자신이 했던 프로젝트가 보일 겁니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 재배포를 하고싶다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;firebase deploy&lt;/b&gt;를 다시 입력해주면 끝입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Firebase</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/66</guid>
      <comments>https://youngging2.tistory.com/66#entry66comment</comments>
      <pubDate>Fri, 17 Nov 2023 20:41:27 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] 여러 개 프로젝트 동시에 띄우기 (멀티모듈), Module SDK is not defind 에러</title>
      <link>https://youngging2.tistory.com/65</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 1. 배경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 프로젝트 때문에 소켓서버를 실행하는 와중, 서버 리포지토리와 기존 리포지토리 두 창을 켜서 작업하는 것이 매우 번거로웠다. Eclipse 처럼 여러개 프로젝트를 한 창에 띄울 수 있는 방법이 궁금해졌다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 2. IntelliJ와 Eclipse에서 사용하는 용어&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;IntelliJ&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Eclipse&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Project&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Moudle&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Project&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 IntelliJ와 Eclipse에서 사용하는 용어가 다르다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 처음에 혼동이 왔던 개념이라 잘 정리해두면 유익할 거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://whitepaek.tistory.com/47&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700057800678&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[IntelliJ] 자바 멀티 프로젝트(모듈) 생성하기&quot; data-og-description=&quot;인텔리제이(IntelliJ)에서 이클립스(Eclipse)처럼 워크스페이스(Workspace)에 여러 개의 프로젝트를 생성하는 방법을 알아보도록 하겠습니다. 우선 설명에 앞서 인텔리제이와 이클립스에서의 용어와 &quot; data-og-host=&quot;whitepaek.tistory.com&quot; data-og-source-url=&quot;https://whitepaek.tistory.com/47&quot; data-og-url=&quot;https://whitepaek.tistory.com/47&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Gqjiy/hyUyuR0gP7/oakiakOk8JbTvvVeUxZE20/img.png?width=800&amp;amp;height=457&amp;amp;face=0_0_800_457,https://scrap.kakaocdn.net/dn/TPM9p/hyUuZsBytL/1o17TKd4th1U36cWiyPQmk/img.png?width=800&amp;amp;height=457&amp;amp;face=0_0_800_457,https://scrap.kakaocdn.net/dn/cpaIIr/hyUu0E2XaH/0LQFe4dF71IUBZjqKixfxk/img.png?width=2808&amp;amp;height=1668&amp;amp;face=0_0_2808_1668&quot;&gt;&lt;a href=&quot;https://whitepaek.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://whitepaek.tistory.com/47&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Gqjiy/hyUyuR0gP7/oakiakOk8JbTvvVeUxZE20/img.png?width=800&amp;amp;height=457&amp;amp;face=0_0_800_457,https://scrap.kakaocdn.net/dn/TPM9p/hyUuZsBytL/1o17TKd4th1U36cWiyPQmk/img.png?width=800&amp;amp;height=457&amp;amp;face=0_0_800_457,https://scrap.kakaocdn.net/dn/cpaIIr/hyUu0E2XaH/0LQFe4dF71IUBZjqKixfxk/img.png?width=2808&amp;amp;height=1668&amp;amp;face=0_0_2808_1668');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[IntelliJ] 자바 멀티 프로젝트(모듈) 생성하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;인텔리제이(IntelliJ)에서 이클립스(Eclipse)처럼 워크스페이스(Workspace)에 여러 개의 프로젝트를 생성하는 방법을 알아보도록 하겠습니다. 우선 설명에 앞서 인텔리제이와 이클립스에서의 용어와&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;whitepaek.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 개념은 위의 블로그 참고하세면 좋을 거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 3. 멀티모듈 설정하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 설정할 모듈들의 위치를 동일시 해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brqfKW/btsAmZF9j90/5uuMBtgVQSgSNJFPGsByuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brqfKW/btsAmZF9j90/5uuMBtgVQSgSNJFPGsByuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brqfKW/btsAmZF9j90/5uuMBtgVQSgSNJFPGsByuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrqfKW%2FbtsAmZF9j90%2F5uuMBtgVQSgSNJFPGsByuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1130&quot; height=&quot;374&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나는 프로젝트 폴더 안에 프론트 리포지토리와 백엔드 리포지토리의 위치를 동일시 해줬다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8W4CR/btsAnzHfWY3/6MGUIGTPZR2bAMYcZ4ZzUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8W4CR/btsAnzHfWY3/6MGUIGTPZR2bAMYcZ4ZzUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8W4CR/btsAnzHfWY3/6MGUIGTPZR2bAMYcZ4ZzUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8W4CR%2FbtsAnzHfWY3%2F6MGUIGTPZR2bAMYcZ4ZzUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;925&quot; height=&quot;604&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File &amp;gt; New &amp;gt; Module from Existing Sources... 에 들어가준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;1078&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vtys1/btsAszFGh4k/fKOAKfXuEeh7XQXxQVxjf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vtys1/btsAszFGh4k/fKOAKfXuEeh7XQXxQVxjf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vtys1/btsAszFGh4k/fKOAKfXuEeh7XQXxQVxjf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVtys1%2FbtsAszFGh4k%2FfKOAKfXuEeh7XQXxQVxjf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;725&quot; height=&quot;1078&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 추가해줄 모듈을 선택하고 OK 버튼을 누른다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UktE5/btsAjTl83Cr/JlYlk19nvZyU7LQLkL0iS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UktE5/btsAjTl83Cr/JlYlk19nvZyU7LQLkL0iS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UktE5/btsAjTl83Cr/JlYlk19nvZyU7LQLkL0iS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUktE5%2FbtsAjTl83Cr%2FJlYlk19nvZyU7LQLkL0iS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1156&quot; height=&quot;887&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Import module from external moduel에 Maven을 선택해주고 Create를 눌러준다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후&lt;b&gt; IntelliJ를 껐다가 다시 실행&lt;/b&gt;해주면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[&amp;nbsp;Module&amp;nbsp;SDK&amp;nbsp;is&amp;nbsp;not&amp;nbsp;defind&amp;nbsp;에러]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IntelliJ를 다시 실행해줬더니 &quot;&lt;b&gt;Module SDK is not defind&lt;/b&gt;&quot; 에러가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 당황하지 말고 옆에 있는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;u&gt;Set up SDK&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;를 눌러주면 정상적으로 작동하는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDE</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/65</guid>
      <comments>https://youngging2.tistory.com/65#entry65comment</comments>
      <pubDate>Wed, 15 Nov 2023 23:42:21 +0900</pubDate>
    </item>
    <item>
      <title>[NodeJS]  .env 파일 생성 및 사용</title>
      <link>https://youngging2.tistory.com/64</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️1. 배경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS로 서버를 배포하는 과정 중,&amp;nbsp; RDS로 발급받은 엔드포인트를 숨겨서 깃허브에 올려야했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전공선생님께 여쭤본결과 .env를 사용하면 된다고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️2. .env 파일이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발을 하다보면 git, 오픈소스에 올리면 안되는 것들이 있다. 이런걸 환경변수(env)로 설정해놔서 관리해주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  3. .env 사용법&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;npm install dotenv&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dotenv를 install 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/osyeF/btsAmYF6QzD/PEoK0gDgMBtq2A5A7QYBJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/osyeF/btsAmYF6QzD/PEoK0gDgMBtq2A5A7QYBJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/osyeF/btsAmYF6QzD/PEoK0gDgMBtq2A5A7QYBJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FosyeF%2FbtsAmYF6QzD%2FPEoK0gDgMBtq2A5A7QYBJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;236&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 .env 파일을 생성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699983066907&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DB_HOST = 
DB_DATABASE = 
DB_USER =&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 .env에 숨길 값을 넣어 줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 다시 본 코드로 와서&lt;/p&gt;
&lt;pre id=&quot;code_1699983657323&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;require('dotenv').config()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;맨 위&lt;/b&gt;에 dotenv를 추가해줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;console.log(process.env.DB_HOST)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 이렇게 출력해보면 값이 잘 출력 되는 것을 볼 수 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1tiGO/btsAmEgL7J6/o1hKO2x8GamVOQcKU5Ivm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1tiGO/btsAmEgL7J6/o1hKO2x8GamVOQcKU5Ivm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1tiGO/btsAmEgL7J6/o1hKO2x8GamVOQcKU5Ivm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1tiGO%2FbtsAmEgL7J6%2Fo1hKO2x8GamVOQcKU5Ivm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;165&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 깃허브를 보면&amp;nbsp; .env 파일은 아예 올라가지 않게 되어, 키페어가 보이지 않게 됩니다.&lt;/p&gt;</description>
      <category>NodeJS</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/64</guid>
      <comments>https://youngging2.tistory.com/64#entry64comment</comments>
      <pubDate>Wed, 15 Nov 2023 03:26:12 +0900</pubDate>
    </item>
    <item>
      <title>[Git] .gitignore  생성 및 적용해보기 (with VS Code,  Node)</title>
      <link>https://youngging2.tistory.com/63</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 1. .gitignore이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore 파일은 github에 추가되지 말아야하는(무시되어야 하는) 폴더나 파일을 정의하는 파일이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들자면, NodeJs에서 npm으로 install한 다양한 module들은 용량이 많이 필요하며, pacakge.json 파일만 있으면 module들을 install할 수 있기 때문에 필요없는 폴더이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 것을 정리(정의) 해주는 것이 .gitignore 파일이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 2. .gitignore 생성 및 적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore 파일을 직접 작성하기엔 매우 번거롭고 귀찮은 일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 아래 링크로 들어가면 간단하게 .gitignore 파일을 생성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.toptal.com/developers/gitignore&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698860494284&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;gitignore.io&quot; data-og-description=&quot;Create useful .gitignore files for your project&quot; data-og-host=&quot;www.toptal.com&quot; data-og-source-url=&quot;https://www.toptal.com/developers/gitignore&quot; data-og-url=&quot;https://www.toptal.com/developers/gitignore&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xapoO/hyUnK2xi6C/xxnqT3QMi118ZnOYiEHlAK/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254&quot;&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.toptal.com/developers/gitignore&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xapoO/hyUnK2xi6C/xxnqT3QMi118ZnOYiEHlAK/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;gitignore.io&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Create useful .gitignore files for your project&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.toptal.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitignore.io에 들어간 뒤 자신이 입력하고자 하는 .gitignore의 키워드를 입력하면 된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbVcah/btszDRtHnCJ/a3XWbfl0Ybb7pi37ldDbB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbVcah/btszDRtHnCJ/a3XWbfl0Ybb7pi37ldDbB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbVcah/btszDRtHnCJ/a3XWbfl0Ybb7pi37ldDbB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbVcah%2FbtszDRtHnCJ%2Fa3XWbfl0Ybb7pi37ldDbB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1334&quot; height=&quot;698&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;698&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt; VisualStuidoCode에서 NodeJs 관련된 .gitignore을 만들 것&lt;/b&gt;&lt;/span&gt;이기에 저렇게 입력해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;생성&quot; &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버튼을 누르면&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;1404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bofud2/btszC8CsWJ5/hfeAj85yn5V6YC74BA8P6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bofud2/btszC8CsWJ5/hfeAj85yn5V6YC74BA8P6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bofud2/btszC8CsWJ5/hfeAj85yn5V6YC74BA8P6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbofud2%2FbtszC8CsWJ5%2FhfeAj85yn5V6YC74BA8P6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1288&quot; height=&quot;1404&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;1404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 엄청 긴 .gitignore파일을 생성해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 것을 전체 복사해준 뒤&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1753&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v3gRx/btszAXWcRKj/HlvjYYxilZSkIIavAEk8E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v3gRx/btszAXWcRKj/HlvjYYxilZSkIIavAEk8E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v3gRx/btszAXWcRKj/HlvjYYxilZSkIIavAEk8E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv3gRx%2FbtszAXWcRKj%2FHlvjYYxilZSkIIavAEk8E1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1753&quot; height=&quot;986&quot; data-origin-width=&quot;1753&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 IDE로 돌아가 .gitignore파일을 생성해주고 코드를 붙여넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;s&gt;저는 이미 .gitignore을 생성해주고, module들을 설치 해준 뒤 다양한 커밋푸쉬를 진행했기에 다른 것은 무시하셔도 됩니다.&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 뒤 이제 한 번 간단하게 body-parser NPM을 install 해보겠다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3rRpC/btszAYU8YWX/CgeVUUW9R4zmKKr3U3Guo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3rRpC/btszAYU8YWX/CgeVUUW9R4zmKKr3U3Guo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3rRpC/btszAYU8YWX/CgeVUUW9R4zmKKr3U3Guo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3rRpC%2FbtszAYU8YWX%2FCgeVUUW9R4zmKKr3U3Guo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;284&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Km3Jp/btszDUxaRov/BYkDUPiJgZrDA4gU9QrqB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Km3Jp/btszDUxaRov/BYkDUPiJgZrDA4gU9QrqB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Km3Jp/btszDUxaRov/BYkDUPiJgZrDA4gU9QrqB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKm3Jp%2FbtszDUxaRov%2FBYkDUPiJgZrDA4gU9QrqB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;404&quot; height=&quot;487&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 깃변경사항에 node_modules 파일은 뜨지 않는 것을 볼 수가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/63</guid>
      <comments>https://youngging2.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 2 Nov 2023 02:53:12 +0900</pubDate>
    </item>
    <item>
      <title>[NodeJs] NPM 설치(install)하는 법</title>
      <link>https://youngging2.tistory.com/62</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ 1. NPM이란&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치를 하기에 앞서,&lt;b&gt; NPM(NodeJs Package Manager)&lt;/b&gt;은 다른 사람들이 잘 만들어놓은 모듈들을 npm을 통해 설치하여 사용가능하다. NodeJs는 프레임워크가 아니기 때문에 npm을 통해 필요한 기능을 install하여 사용해야한다. node js에 npm이 기본적으로 깔려있기에 npm 명령어를 이용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.npmjs.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697582235218&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;npm | Home&quot; data-og-description=&quot;Bring the best of open source to you, your team, and your company Relied upon by more than 17 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&quot; data-og-host=&quot;www.npmjs.com&quot; data-og-source-url=&quot;https://www.npmjs.com/&quot; data-og-url=&quot;https://www.npmjs.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xvuoZ/hyUdOLy27X/9irrIKHKG7i0SC3sB4KED1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.npmjs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xvuoZ/hyUdOLy27X/9irrIKHKG7i0SC3sB4KED1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;npm | Home&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Bring the best of open source to you, your team, and your company Relied upon by more than 17 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.npmjs.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사이트에서 사용하고자 하는 npm을 검색하면 다양한 정보와 사용 방법을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️ &lt;/b&gt;&lt;b&gt;2. NPM 설치하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본격적으로 npm을 설치해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode를 킨 다음 터미널(Ctrl + Shift + `)을 켜보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;npm init&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm init를 입력하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rYNhe/btsyDv1y9av/TkGCL3Y8EKwMWWw6n3FRB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYNhe/btsyDv1y9av/TkGCL3Y8EKwMWWw6n3FRB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYNhe/btsyDv1y9av/TkGCL3Y8EKwMWWw6n3FRB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYNhe%2FbtsyDv1y9av%2FTkGCL3Y8EKwMWWw6n3FRB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;802&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;802&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알 수 없는 텍스트들이 나오는데 무시하고 &lt;b&gt;Enter&lt;/b&gt;를 눌러주면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;package.json&lt;/b&gt;&lt;/span&gt;이 생긴 게 보일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pacakge.json은 설치된 모듈들을 정리해주는 파일이라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 사용하고자 하는 npm을 install할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 express라는 서버 프레임워크를 install 해보겠다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;npm install [다운 받을 npm 이름]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 install하면 된다. 나는 &quot;&lt;b&gt;npm install express&lt;/b&gt;&quot;를 입력하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tEE2T/btsyEBGGqLB/aC3Nv6eWKGsrj0pQyEh8Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tEE2T/btsyEBGGqLB/aC3Nv6eWKGsrj0pQyEh8Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tEE2T/btsyEBGGqLB/aC3Nv6eWKGsrj0pQyEh8Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtEE2T%2FbtsyEBGGqLB%2FaC3Nv6eWKGsrj0pQyEh8Ak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;301&quot; height=&quot;258&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;pacakge-lock.json&lt;/b&gt;&lt;/span&gt;과 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;node_modules&lt;/b&gt;&lt;/span&gt; 폴더가 생겼을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pacakge-lock.json&lt;/b&gt;도 설치된 모듈을 확인할 수 있는데, package.json보다 더 자세한 정보를 담고 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;node_modules&lt;/b&gt;는 install 한 모듈들이 저장되는 곳이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697583662065&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const express = require('express')
const app = express()

app.get('/', function (req, res) {
  res.send('Hello World')
})

app.listen(3000)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드를 입력하고 터미널에&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;node [파일명.js]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 입력하여 서버를 실행시키고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;http://127.0.0.1:3000 &lt;/b&gt;에 들어가니&amp;nbsp; HelloWorld가 출력되어있으면 정상적으로 express가 install된 것이다&lt;/p&gt;</description>
      <category>NodeJS</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/62</guid>
      <comments>https://youngging2.tistory.com/62#entry62comment</comments>
      <pubDate>Wed, 18 Oct 2023 08:05:04 +0900</pubDate>
    </item>
    <item>
      <title>[NodeJs] 프레임워크 (NodeJs는 프레임 워크일까?)</title>
      <link>https://youngging2.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;개발 공부를 하면 &lt;b&gt;&quot;프레임워크&quot;&lt;/b&gt;라는 단어를 많이 들어봤을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️프레임워크란?&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Frame(틀) + Work(일)의 합성어로 어떠한 일을 처리하기 위한 &lt;b&gt;구조&lt;/b&gt;를 제공하는 것.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 전체 동작방식은 프레임워크가 제공하고 우리는 프레임워크의 일부 부분을 개발하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 프레임워크를 이용하게 된다면 처음부터 끝까지 모든 동작을 개발하지 않고, 특정 부분만 도움을 빌려 개발하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 감이 안오시죠? 예를 하나 들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;떡볶이를 만들기 위해 떡을 불리고, 소스를 만들고, 재료를 손질하는 등 다양한 과정을 걸쳐야 합니다. 하지만 떡볶이 밀키트를 이용하면 재료를 넣고 끓이면 되기 때문에 아주 간편하게 요리를 도와줍니다. 여기서 &lt;b&gt;프레임워크는 밀키트와 같은 역할&lt;/b&gt;을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♀️NodeJs도 프레임워크 일까?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정답은&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; NO&lt;/b&gt; &lt;/span&gt;입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통의 로드맵이 아래와 같이 구성되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JAVA - Spring&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Python - Django&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JavaSctipt - NodeJs&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리하여 저도 당연히 NodeJs가 프레임워크로 생각하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 NodeJS의 본질(정의)를 알면 해결이 되는 궁금증이였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;NodeJs란&amp;nbsp;&lt;/b&gt;자바스크립트를 실행시키는 실행환경.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NodeJs는 단순 실행환경이기에, 프로그램 구조에 대한 설계를 다 개발자가 해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이렇게 되면 매우 불편하니 &lt;b&gt;NPM &lt;/b&gt;안에 있는 다양한 패키지들을&amp;nbsp;install해서 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM 관련 된 건 다음 포스팅때 설명해보겠습니다!&lt;/p&gt;</description>
      <category>NodeJS</category>
      <author>쩡선영</author>
      <guid isPermaLink="true">https://youngging2.tistory.com/61</guid>
      <comments>https://youngging2.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 16 Oct 2023 08:17:59 +0900</pubDate>
    </item>
  </channel>
</rss>