728x90
반응형

기존의 MSSQL 연결 코드

const config = {
user: process.env.MSSQL_USER,
password: process.env.MSSQL_PASSWORD,
server: process.env.MSSQL_SERVER,
database: process.env.MSSQL_DB,
options: {
encrypt: true,
cryptoCredentialsDetails: {
minVersion: "TLSv1.3",
},
},

 

해당 코드로 실행시에는 여러 에러코드가 발생했다.

 

< 에러 내용 >

더보기

(node:17836) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version.
(Use `node --trace-deprecation ...` to show where the warning was created)
데이터베이스 연결에 실패했습니다.

originalError: ConnectionError: Failed to connect to 110.10.130.21:1433 - C84E0000:error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:124:

 

그리고 계속된 구글링을 통해 다음과 같이 코드를 수정하였다.

// 데이터베이스 연결 설정
const config = {
  type: "mssql",
  server: process.env.MSSQL_SERVER,
  database: process.env.MSSQL_DB,
  authentication: {
    type: "default",
    options: {
      userName: process.env.MSSQL_USER,
      password: process.env.MSSQL_PASSWORD,
    },
  },
  options: {
    encrypt: false,
    enableArithAbort: true,
    cryptoCredentialsDetails: {
      minVersion: "TLSv1",
    },
    trustServerCertificate: true,
  },
};

(async function () {
  try {
    // 데이터베이스 연결
    await sql.connect(config);
    console.log("데이터베이스에 연결되었습니다.");
  } catch (err) {
    console.error("데이터베이스 연결에 실패했습니다.", err);
  }
})();

자세히 읽어보기 보단 코드 한줄씩 붙여가며 계속 실행해본 것이라

성공한 이유가 궁금했다. 성공한 이유는 다음과 같다고 한다.

현재 코드에서 연결이 정상적으로 작동한 것은 다음과 같은 변경사항들 때문입니다:

encrypt: false로 변경함으로써 SSL/TLS 암호화를 사용하지 않게 되어 영향을 미칠 수 있습니다. 이것은 서버가 SSL/TLS 암호화를 지원하지 않을 때 문제를 해결할 수 있습니다. 하지만 보안상의 문제로 데이터 전송이 암호화되지 않게 됩니다.

trustServerCertificate
: true 옵션을 추가하여 서버의 인증서를 무조건 신뢰하도록 설정했습니다. 이 변경 사항으로 인해 클라이언트가 서버의 인증서를 확인하지 않고 연결을 수락하게 됩니다. 인증서가 올바르지 않거나, 자가 서명된 인증서를 사용하는 경우에도 연결에 성공할 수 있습니다. 그럼에도 불구하고 이 설정은 보안상 좋지 않은 선택이며 데이터 공격에 취약해질 수 있습니다.

cryptoCredentialsDetails 
옵션을 수정하여 최소 TLS 버전을 'TLSv1'로 변경했습니다. 이것은 이전에 발생한 TLS 버전 불일치 문제를 해결하는 데 도움이 되었을 수 있습니다.
변경된 코드는 연결 문제를 일시적으로 해결했지만, 중요한 것은 데이터베이스와 클라이언트 사이의 전송에 암호화된 연결을 사용하도록 설정하는 것입니다. SSL/TLS를 사용하여 데이터를 암호화하고, 유효한 서버 인증서를 사용하여 서버에 대한 신뢰를 높이는 것이 좋습니다. 이러한 설정을 적용하기 위해 데이터베이스 서버 관리자와 협력하는 것이 필요할 수 있습니다.

728x90
반응형
728x90
반응형

강의듣기 : https://www.youtube.com/playlist?list=PLtht1_et-35DI4cRVKEUUaQAuT3FW2jet 

 

비주얼 스튜디오는 커뮤니티(무료)버전으로 다운 받고,

.NET 프레임워크 를 검색해서 추가 다운 받아줘야 한다.

아래의 ASP.NET 웹 애플리케이션(.NET Framwork)와 ASP.NET 웹 응용프로그램이

새로운 프로젝트로 생성되지 않아 뻘짓을 많이 했다.

 

< 기초 >

비주얼 스튜디오에서 새로운 프로젝트를 만든다.

다음을 누르고 비어있음, MVC를 체크한다. (HTTPS에 대한 구성은 빼주는게 좋다)

만들어졌다면 컨트롤러 폴더에서 우클릭 - 추가 - 컨트롤러 - MVC 5 컨트롤러 비어있음을 추가해준다.

그리고 이름은 HomeController로 바꾼다.

 

이제 다음과 같은 컨트롤러 코드로 변경해주자.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public string Index()
        {
            return "My first Application!";
        }
    }
}

위 코드는 Home 컨트롤러에서 Index로 접속가능하게 해준다.

다음과 같은 url로 접속 가능한 이유는 App_start 폴더에 있는 Config에서 설정이 자동으로 되어 있기 때문이다.

 

< 컨트롤러 >

 

 

 

컨트롤러는 클래스,

액션은 메서드,

아이디는 매개변수라고 생각하면 된다.

 

새로운 컨트롤러 Board를 만들어보자.

컨트롤러 폴더에서 우클릭 + 추가를 통해 새로운 컨트롤러 생성.

 

namespace WebApplication1.Controllers
{
    public class BoardController : Controller
    {
        // GET: Board
        public string List(int? Id)
        {
            if (Id == null)
                return "Error Message #1";
            return "보드 리스트: " + Id.Value;
        }
    }
}

 

< 뷰 >

뷰를 사용하려면 메서드에서 string을 변경해야한다. (string -> ActionResult)

namespace WebApplication1.Controllers
{
    public class BoardController : Controller
    {
        // GET: Board
        public ActionResult List(int? Id)
        {
            if (Id == null)
                return HttpNotFound("에러메시지");
            return View();
        }
    }
}

 

현재 view폴더에 아무것도 없고, return View()에도 매개변수가 없기 때문에

아래와 같이 메서드가 있는 줄에서 우클릭+뷰추가를 통해 파일을 만들어준다.

 

List.cshtml 코드

body>
    <div> 
        <table>
            <thead>
                <tr>
                    <th>번호</th>
                    <th>제목</th>
                    <th>글쓴이</th>
                </tr>    
            </thead>
            <tbody>
                @for (int i = 0; i < 10; i++)
                {
                <tr>
                    <td>@(i+1)</td>
                    <td>제목입니다</td>
                    <td>홍길동</td>
                </tr>
                }
            </tbody>
        </table>
    </div>
</body>

실행시키면 다음과 같은 화면이 된다.

< 모델 >

모델은 데이터의 속성을 정의하고 데이터의 처리를 담당합니다.

 

모델 폴더에서 새 항목을 추가합니다.

클래스를 만들어줍니다.

이후 다음의 코드를 작성하면 데이터의 속성을 정의할 수 있습니다.

namespace WebApplication1.Models
{
    public class Document
    {
        // prop 쓰고 tab을 누르면 빠르게 작성가능
        public int Document_Number { get; set; }
        public string Title { get; set; }
        public string Writer { get; set; }
    }
}

데이터의 처리를 위해 새폴더를 만들고 새로운 클래스 파일을 만들어줍니다.

namespace WebApplication1.Data
{
    public class DocumentData
    {
        public List<Document> Documents
        {
            get
            {
                return new List<Document>
                {
                    new Document{ Document_Number = 1, Title="공지1", Writer="홍길동"},
                    new Document{ Document_Number = 2, Title="공지2", Writer="임꺽정"},
                    new Document{ Document_Number = 3, Title="공지3", Writer="변사또"},
                };
            }
        }
    }
}

모델폴더에 데이터 처리를 위한 클래스를 새로 만들어준다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebApplication1.Data;

namespace WebApplication1.Models
{
    public class DocumentActs
    {
        public List<Document> GetDocuments()
        {
            DocumentData documentData = new DocumentData();
            var documents = documentData.Documents;
            return documents;
        }
    }
}

 

그리고 보드컨트롤러로 가서 요청을 한다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models; //추가

namespace WebApplication1.Controllers
{
    public class BoardController : Controller
    {
        // GET: Board
        public ActionResult List(int? Id)
        {
            if (Id == null)
                return Content("Error Message #1");

            DocumentActs documentActs = new DocumentActs();
            var documents = documentActs.GetDocuments();

            return View(documents);
        }
    }
}

 

그다음 뷰로 가서 출력한다.

@model List<WebApplication1.Models.Document> //프로젝트명+모델+다큐먼트
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>List</title>
</head>
<body>
    <div> 
        <table>
            <thead>
                <tr>
                    <th>번호</th>
                    <th>제목</th>
                    <th>글쓴이</th>
                </tr>    
            </thead>
            <tbody>
                @foreach (var item in Model)
            {
                <tr>
                    <td>@item.Document_Number</td>
                    <td>@item.Title</td>
                    <td>@item.Writer</td>
                </tr>
            }
            </tbody>
        </table>
    </div>
</body>
</html>

 

이 모든 과정을 설명하자면

먼저 컨트롤러가 모델에서 데이터를 처리하는 클래스를 부름(DocumentActs)

받아온 값을 객체에 담아서 뷰로 리턴합니다.

            DocumentActs documentActs = new DocumentActs();
            var documents = documentActs.GetDocuments();
            return View(documents);

 

< ViewBag & ViewData >

데이터를 전달하는 방법은 다음과 같습니다.

View(object model)

        public ActionResult List()
        {
            DocumentActs documentActs = new DocumentActs();
            var documents = documentActs.GetDocuments();
            return View(documents);
        }

이 경우 하나의 모델데이터만 전달할 수 있기 때문에 여러 데이터를 전달하려 한다면 한계가 있습니다.

그래서 ViewBag&ViewData가 필요합니다.

 

        public ActionResult List()
        {
            DocumentActs documentActs = new DocumentActs();
            MemberActs memberActs = new MemberActs();

            var documents = documentActs.GetDocuments();
            var member = memberActs.GetMember(1);

            ViewBag.Member = member;

            return View(documents);
        }

View()는 한개의 매개변수만 담을 수 있으니,

ViewBag을 통해 다른 매개변수를 저장하고 사용합니다.

        <p>
        @ViewBag.Member.Name 님 환영합니다.
        </p>

 

ViewData는 다음과 같이 사용할 수 있습니다.

ViewData["Members"] = member;

그리고 cshtml으로 갑니다.

@model List<WebApplication1.Models.Document>
@{
    Layout = null;
    var member = ViewData["Member"] as WebApplication1.Models.Member;
}

ViewData의 경우는 형변환을 한 후 사용합니다.

@member.Name 님 환영합니다.
@model List<WebApplication6.Models.Document>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.Document_Number</td>
            <td>@item.Title</td>
            <td>@item.Writer</td>
        </tr>
    }
////////////////////////////////////////////
    <tbody>
        @foreach (var member in ViewBag.Member)
        {
            <tr>
                <td>@member.Name</td>
                <td>@member.Age</td>
            </tr>
        }
    </tbody>
////////////////////////////////////////////
    <p>이름: @ViewBag.Member[0].Name</p>
    <p>나이: @ViewBag.Member[0].Age</p>
    <p>이름: @ViewBag.Member[1].Name</p>
    <p>나이: @ViewBag.Member[1].Age</p>

 

 

< Razor >

Razor는 렌더링이라는 역활을 담당합니다.

렌더링이란 어떠한 것을 사용자(클라이언트)에게 보여주는 것입니다.

ViewBag.Arr = new string[]
{
	"1",
    "2",
    "3",
}
@foreach(string s in ViewBag.Arr)
{
	<div>@s</div>
}

 

< Layout >

레이아웃을 우리말로 한다면 '배치'입니다.

프로그래밍적으로 레이아웃은 반복되는 코드, 중복되는 코드를 다시 사용할 일 없게끔 하는 것 입니다.

@RenderBody() 라는 것과 입력했던 값이 대체 된다.

<개념정리>

1. ViewBag & ViewData: 이들은 컨트롤러에서 뷰로 데이터를 전달하는 데 사용합니다.
ViewData: ViewData는 Key-Value 쌍의 딕셔너리로서, TempData와 유사하지만 요청이 끝날 때 소멸됩니다. ViewData는 동적 속성을 제공하지 않으며, 문자열을 키로 사용합니다. 데이터 형식을 지정해야 되기 때문에 형식 변환이 필요할 수 있습니다.
ViewBag: ViewBag은 ViewData의 래퍼이며, 동적 속성을 제공하는 데 사용됩니다. ViewBag을 이용하면 코드가 더 짧아지며, 지정된 속성에 동적으로 액세스할 수 있습니다. 형식 변환 필요성이 줄어들지만, 코드 작성 시 덜 엄격하게 체크한다는 단점이 있습니다.

 

2. Razor: Razor는 ASP.NET의 바인딩 구문 중 하나로, C# 또는 VB코드를 HTML 문서에 삽입하여 웹 페이지를 동적으로 생성합니다. Razor 구문은 '@' 기호로 시작하며, 다음과 같은 형식을 가집니다. '@(표현식)', '@{ ... }' 등입니다. Razor는 서버 측 코드와 클라이언트 측 코드를 명확하게 구분하여 개발자가 코드를 쉽게 작성하고 유지할 수 있도록 지원합니다.

 

3. Layout: Layout은 ASP.NET에서 마스터 페이지와 같은 개념으로, 공통되는 페이지 요소를 재사용하고 중복을 줄이기 위한 방법입니다. 여러 뷰에서 공유할 수 있는 베이스 페이지를 설정하고, 각 뷰에 필요한 내용만 추가하여 효율적으로 페이지 구성을 관리할 수 있습니다. Layout 페이지는 _Layout.cshtml 파일로 저장되며, 각 뷰에서 '@{ Layout = "_Layout"; }'와 같은 코드로 그것을 참조할 수 있습니다.

 

< 심화 >

1. Entity Framework 설치

 

새 프로젝트 만들기 -> ASP.NET 웹 응용 프로그램(Empty , MVC) ->

도구(NuGet 패키지 관리자) -> 솔루션용 NuGet 패키지 관리 -> EntityFramework 설치하기

 

 

2. CRUD Action & View생성

Model 폴더에 Book.cs 파일을 만들어준다.

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace LibraryApplication.Models
{
    public class Book
    {
        [Key]
        public int Book_U { get; set; }
        [DisplayName("제목")]
        public string Title { get; set;}
        [DisplayName("저자")]
        public string Writer { get; set; }
        [DisplayName("요약")]
        public string Summary { get; set; }
        [DisplayName("출판사")]
        public string Publisher { get; set; }
        [DisplayName("출판일")]
        public int Published_date { get; set; }
    }
}

그후 Web.config에서 다음과 같은 코드를 추가한다.

<connectionStrings>
<add name ="DBCS" connectionString="server=MSSQL_SERVER_ID; database=Library; integrated security=SSPI" providerName="System.Data.SqlClient"/>
</connectionStrings>

 

그리고 Context라는 폴더 생성후 클래스 LibaryDb 생성

using LibraryApplication.Models;
using System.Data.Entity;

namespace LibraryApplication.Context
{
    public class LibaryDb : DbContext
    {
        public LibaryDb():base("name=DBCS") { }
        public DbSet<Book> Books { get; set; }
    }
}

컨트롤러 생성

 

생성후 컨트롤러에서 F5를 눌러 실행하면 화면이 발생한다.

생성 삭제 수정 등이 간단하게 구현되어 있다.

 

3. Action & View 설명

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

참고사이트 : https://www.dotnetnote.com/docs/aspnet/aspnet-intro/

유튜브 재생목록 : https://www.youtube.com/playlist?list=PLO56HZSjrPTBblm3CbalLSf7Zv7IrwU7G 

ASP.NET 개념정리 : https://www.youtube.com/watch?v=idO_OsRcCYc&t=1s 

 

ASP.NET이란 마이크로소프트의 웹프레임워크이자 웹 기술의 집합체다.

Web Pages는 현재 안쓰고 MVC로 바뀌었다고 보면 됨. 현재는 MVC가 주류로 사용되고 있다.

 

 

 

 

728x90
반응형
728x90
반응형

1. EC2 가상서버 만들기  https://goddaehee.tistory.com/316

 

[AWS] 2. EC2 생성 및 접속하기(AWS SSH키 등록 하기)

2. EC2 생성 및 접속하기 & SSH키 등록 하기 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ EC2 생성, 섭속, 종료 그리고 AWS SSH키 등록 하기 ] 입니다. : ) 시작하기 앞서 - 혹시 공부를 위해서 이 글을 본

goddaehee.tistory.com

 

내 나름대로 요약하자면, AWS 콘솔 로그인후 지역 서울로 설정하여 인스턴스를 만든다.

그리고 조건을 확인하며 인스턴스 생성한후 키 페어 생성하여 폴더에 따로 보관한다!

해당 폴더에서 우클릭 ->  더 많은 옵션 표시 한 후 Git Bash를 실행한다.

입력해야 할 정보는 [연결]에 들어간다.

인스턴트 연결에서 [SSH 클라이언트]에 가면 진행해야할 입력키를 알려준다.

[예:] 여기에 적힌 값을 바로 복사하여 붙여넣기 한다.

다음과 같은 화면이 나오면 git clone [저장소URL]을 입력한다.

이때 저장소URL은 HTTPS와 SSH가 있는데,

HTTPS가 안된다면 바로 SSH로 시도 해봐야 한다.

(HTTPS로 했을 시에는 WRITE와 ADMIN 권한을 줘도 자꾸 권한이 없다고 진행안됨)

 

2. 실행하기: 정상적으로 clone이 되었다면 다음 링크를 보고 따라하면 될 것 같다.

https://hevton.tistory.com/m/530

 

EC2 에 Node.js 웹서버구현 기초

EC2에 우선 ssh로 원격 접속을 해 들어간다. 그 상태에서 먼저 다운로더 패키지를 업데이트 해주고 sudo apt update 그다음 nodejs를 설치해주고 sudo apt install nodejs 그다음 nodejs 패키지매니저인 npm도 다

hevton.tistory.com

 

728x90
반응형
728x90
반응형

SQL Server Management Studio Management Studio 19를 설치해서

새쿼리로 문법연습은 하고 있었지만, VS Code에서 데이터베이스를 다뤄보고 싶었다.

그런데 생각보다 연결할 방법을 찾지 못했다.

열심히 구글링하고 유튜브를 찾아봤지만 헛수고...

공식문서를 들어가봤다!

 

https://learn.microsoft.com/ko-kr/sql/tools/visual-studio-code/mssql-extensions?view=sql-server-ver16 

 

Visual Studio Code mssql 확장명 개요 - SQL Server

Visual Studio Code용 mssql 확장명을 통한 개발

learn.microsoft.com

 

이 부분을 보고 확장 mssql을 설치했다.

 

위에서 보이는 화면처럼 로컬호스트에 연결하려면 localhost 위에 있는 + 버튼을 누르자.

그다음 SQL Server 연결시 보이는 서버이름 을 입력하자.

그후 옵션들을 잘 읽고 인증방법 선택이 나올 것이다.

 Integrated 인증으로 연결완료하였다.

잘 안된다면 추가링크를 확인하자.

추가링크 :  https://pyoja.tistory.com/288

728x90
반응형

'입사후 공부한 내용' 카테고리의 다른 글

[MSSQL] 연결 에러 해결!  (0) 2023.06.16
[ASP.NET] MVC강의 기초 및 심화  (0) 2023.06.13
[ASP.NET] 개념과 역사  (0) 2023.06.13
AWS EC2 가상서버 만들기 + 연결하기  (0) 2023.06.13
[MSSQL] 기본 문법  (0) 2023.06.01
728x90
반응형

공부영상 : https://www.youtube.com/playlist?list=PL1VTPqi5Xgu9pr3oK_j4ranMGEn6fKMFp 

 

MS-SQL

현재 인디애나 대학의 재무 박사과정에 있는 저의 전 조교 안연주 조교가 두물머리의 한태경이사의 도움을 받아 만든 과정입니다.

www.youtube.com

 

<설치과정>

클릭하면 사이트로 넘어감

다운받고 설치 누르면 끝!

 

실습용 데이터자료 : https://github.com/htk1019/sql_server_beginner

해당 자료는 다음 위치에 옮기기

 

프로그램 키기

프로그램이 실행되면 바로 커넥트를 누른다.

공부용 자료 추가하는 방법

이후 OK를 누르면 끝

 

use study (study라는 데이터베이스를 사용하겠다)

go (코드 구분자, go 이전의 코드를 실행 후 다음 코드를 실행하라고 지정함)

 

use study
go
select * from companyinfo

select * from study.dbo.companyinfo

select * from study..companyinfo

study데이터베이스에 존재하는 companyinfo 데이터 테이블의 내용을 가져오라는 의미

 

select distinct IncInCtryCode from companyinfo

중복없이 가져오는 distinct

 

select * from companyinfo where IncInCtryCode='kor'

조건을 거는 where절

 

 

와일드카드

select * from companyinfo where name like 'a%'

a로 시작하는 모든 기업name 찾기

 

select * from companyinfo where name like 'a____'

a로 시작하고 뒤에는 4개의 문자로 이루어진 이름 찾기

 

select IncInCtryCode, Employees, Name 
from companyinfo
where IncInCtryCode is not null
order by IncInCtryCode, Employees DESC

순서정렬 기본은 오름차순인 asc, 그리고 내림차순 desc

 

실무3편

 

실무 4편

 

 

 

 

실무 5편

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

1. Call by value와 Call by reference에 대해 설명해주세요.

자바스크립트에서는 원시 타입(primitive type)의 값은 call by value(값에 의한 호출)로 전달되고,
객체 타입(object type)은 call by reference(참조에 의한 호출)로 전달됩니다.

Call by value는 변수에 저장된 값을 복사해서 전달하는 방식입니다. 
이 방식에서는 변수의 복사본이 전달되므로
함수 내부에서 전달 받은 값을 변경해도 원래 변수의 값은 변경되지 않습니다.

반면에 call by reference는 변수 자체가 전달됩니다. 
이 방식에서는 해당 변수의 주소를 전달하므로 함수 내부에서 
전달 받은 값을 변경하면 원래 변수의 값도 변경됩니다.

Call by value는 변수에 저장된 값을 복사해서 전달하는 방식입니다.
장점은 복사하여 처리하기 때문에 매개변수로 전달된 값이 보존되고 안전합니다.
단점으로는 복사를 하기 때문에 메모리 사용량이 늘어납니다.

call by reference는 변수 자체가 전달됩니다. 
장점은 복사하지 않고 직접 참조를 하기 때문에 실행 속도가 빠릅니다. 
단점은 직접 참조를 하기 때문에 원래의 값이 영향을 받습니다.

 

🔥꼬리질문🔥

<  >

 

 

2. DDD와 MSA에 대해 설명해주세요.

DDD(Domain-Driven Design)는 도메인 주도 설계로 도메인 모델을 중심으로
설계하고 구현하는 것을 의미합니다.

도메인은 사건의 집합이라 생각하고,
여러 도메인들이 서로 상호작용하여 설계하는 것이 도메인 주도 설계입니다.
DDD의 핵심은 도메인을 서비스별로 분리하는 것 입니다.

MSA(Microservice Architecture)는 서비스를 작은 단위의 마이크로서비스로 분리하여
개발하는 아키텍처 패턴입니다. 이는 각 마이크로서비스가 독립적으로 배포 및 확장 가능하도록 설계됩니다. MSA의 핵심은 설계 및 정의할 때는 그 경계를 정하는 것이 핵심입니다.

DDD와 MSA는 객체지향과 많은 관련이 있습니다.
DDD와 MSA는 함께 사용하면 대규모 애플리케이션을 설계하고 개발하는 데 도움이 될 수 있습니다.
DDD를 사용하면 애플리케이션의 도메인 지식을 이해하고
MSA를 사용하면 애플리케이션을 작은 서비스로 분해할 수 있습니다.

 

DDD - 우아한 테크톡

참고 링크

https://huisam.tistory.com/entry/DDD

https://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice

 

🔥꼬리질문🔥

<  >

728x90
반응형
728x90
반응형

1. Nest.js 라이프사이클에 대해 설명해주세요.

💘 NestJS는 Node.js를 위한 프레임워크로, 서버 사이드 애플리케이션 개발을 위해 사용됩니다.

기본적인 순서는 다음과 같습니다.

Middleware => Guards => Pre-Interceptors => Pipes => Controller => Service => Post-Interceptors => ExceptionFilter => Response

1. Middleware

전역으로 바인딩 되어있는 미들웨어를 가장먼저 실행 합니다. (main.ts 에 app.use로 바인딩 되어있는 미들웨어들)

Express와 비슷한 방식으로 바인딩 된 순서대로 순차적으로 실행 됩니다.

2. Guards

사용자의 권한을 체크하는 로직이 들어간다 예를들어 jwt를 사용한다면 @UseGuards()를 통해 jwt의 값이 유효한지 검사 할 수 있습니다.

3. Interceptor

인터셉터는 컨트롤러에 접근하기 전, 후에서 바인딩 시킬 수 있습니다.

컨트롤러에 전에 접근하기 전에 사용하려면 return 전에 사용을하면 되고 컨트롤러 접근후에 사용하려면 return 문에서 사용하면 됩니다.

4. Pipes

요청이 들어오는 파라미터의 validation 혹은 형변환이 필요할 때 파이프에서 진행 합니다.

5. Controller

routing ,http method, Request에 담긴 페이로드, Response에 담을 페이로드를 Controller에서 관리할 수 있습니다.

6. Service

실제 비지니스 로직을 Service 단 에서 관리 할 수 있습니다.

7. ExceptionFilter

익셉션 필터는 로직을 처리하다가 오류가 발생 하면 HttpException을 throw 하게 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts