[.NET Core] | #0 : 세상에서 가장 쉬운 서버 만들기

2025. 7. 1. 20:51·개발/C#

개요

Unity로 게임 개발을 할때 서버가 필요하다면 흔히 .NET Core를 사용한다고 합니다.

C++이나 Node.js 같은것도 쓴다고는 하는데 일반적으로는 .NET Core를 쓴다고 하네요. 그래서 저도 해보려구요.

 

아 참고로 제목이 오해를 불러일으키기 딱 좋은 형태인데요.

저는 '세상에서 가장 쉬운 서버'를 만든다고 하는거지 '서버 만들기'가 세상에서 가장 쉽다고 하는게 아닙니다.

 

 


 

 

셋업

일단 준비를 해봅시다. Visual Studio를 켜서 프로젝트를 만들어주면 됩니다.

당연하게도 단순히 빈 프로젝트로는 안되구요. ASP.NET Core Empty라는 걸로 만들어봅시다.

 

이러면 뭐 프로젝트 셋업이 끝납니다.

 

 

마인드 셋업

물론 그거만 한다고 셋업이 끝나지 않죠. 지금부터 제가 계속해서 클라이언트 개발자처럼 생각해서는 서버를 이해할 수 없기 때문에 마인드 셋업을 할 필요가 있습니다.

 

하지만 저는 서버 개발자가 아니기에, 그런거 모릅니다. 그래서 Gemini에게 한번 물어봤습니다.

 

아 좋습니다. 이제 시작해보죠.

 

 


 

 

뜯어보기

일단 프로젝트를 처음 열면 이렇게 코드 4줄이 반갑게 맞아줍니다. (var라는 자료형이 그닥 읽기 좋진 않으니 풀어놨습니다.)

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
WebApplication app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

 

일단 뭔지 하나도 모르겠으니까 실행(F5)부터 해봅시다.

 

실행한다면 localhost:(포트번호) 라는 주소로 자동으로 접속되며 Hello World! 라는 문자열이 저를 반겨줍니다.

 

일단 코드를 하나하나 뜯어봅시다.

 

첫줄부터 볼까요?

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);


모양새만 보더라도 builder라는 것을 단순 생성하는 코드같죠. WebApplicationBuilder라는것을 생성하는 코드인데 그래서 이 WebApplicationBuilder라는게 뭘까요?

 

 

WebApplicationBuilder

WebApplicationBuilder는 말 그대로 WebApplication을 Build 해주는 클래스입니다. 그것 외의 활동은 하지 않습니다.

근데 그 WebApplication이란걸 어떻게 빌드하는지에 대해선 알아둘 필요가 있죠.

그리고 그걸 알기 위해선 Builder Pattern에 대해 알아야합니다.

 

빌더 패턴은 디자인 패턴중 생성 패턴의 일종으로 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다.

별도의 Builder 클래스를 만들어 필수적인건 생성자를 통해, 선택적인건 함수를 통해 값을 입력받아 Build해서 최종적으로 하나의 객체를 만들어내는 그런 패턴이에요.

 

예를 하나 들어볼까요?

 

SandwichBuilder builder = new SandwichBuilder(BreadType.WhiteBread);
builder.AddLettuce();
builder.AddHam();
builder.AddSauce();
Sandwich sandwich = builder.Build();

 

저는 다양한 재료가 들어간 샌드위치 객체를 만들기 위해 Builder를 하나 만들었고 샌드위치에서 필수적인 빵은 생성자에서 지정합니다.

 

그리고 함수 호출을 통해 양상추, 햄, 소스가 들어간 샌드위치를 성공적으로 Build했습니다. 제가 만약 치즈를 넣고 싶다면 builder.AddCheese() 같은 함수를 호출하면 되고 양상추를 뺴고 싶다면 단순히 함수를 호출하지 않으면 그만이죠. 이러한 빌드 패턴은 객체의 속성이 선택적인 경우가 많다면 자주 사용합니다. 

 

마지막으로 정리하자면 : WebApplication을 만들어주는 애가 WebApplicationBuilder고, 빌더 패턴을 사용해서 '이건 쓸 거고 저건 안 쓸 거고' 같은 설정을 한 다음 Build()를 호출하면 딱 원하는 WebApplication 객체가 나온다는거죠.

 

그렇게 셋업을 따로 하진 않았지만 WebApplication을 Build()하면서 끝냅니다.

WebApplication app = builder.Build();

 

WebApplication

그렇게 만들어낸 WebApplication은 이제 서버 본체라고 봐도 됩니다.

요청 받기과 응답을 모두 WebApplication에서 해주기 때문이죠. 그 외의 미들웨어 같은 것도 돌려줍니다.

 

요청이 오지 않았을때 응답을 보낼 수는 없으니 요청의 종류부터 찬찬히 알아봅시다.

지금 알아야할 요청의 종류는 4개로 간단히 표로 표현할 수 있습니다.

 

요청 뭐함?
Get 서버에 정보를 요청
웹 사이트에 url로 접속했을때 HTML과 CSS가 보이는 것도 Get 요청을 통해 포맷을 받아왔기 때문임
Post 서버에 데이터를 추가
회원가입을 통해 새로운 유저 정보가 추가 됐을 경우 Post 요청을 통해 유저 정보를 추가함.
Put 서버의 데이터를 수정
완전히 덮어 씌워지기 때문에 부분만 수정할 수 있는 Patch라는 것을 대신 사용하기도 함
Delete 서버의 데이터를 삭제
말 그대로 데이터를 삭제하라는 요청

 

요청의 종류가 이 4개만 있는 것은 아닙니다. 하지만 이 4개 정도는 많이 쓰기 때문에 알아두는게 좋습니다. 더 알아둬서 나쁠건 없지만 일단 전 이걸 처음 배우니까 여기서 그치겠습니다.

 

 

아무튼 WebApplication은 이 Get, Post, Put, Delete 외 기타 등등의 요청을 처리할 수 있습니다.

근데 제가 뭔 UI가 마련돼있는것도 아니고 추가, 수정, 삭제 요청이 들어올리가 없기 때문에 Get 요청만 한번 처리해볼겁니다.

 

WebApplication엔 Map~() 함수가 많습니다. 그 중에 MapGet은 Get 요청이 들어왔을때 어떻게 응답해야 할지 설정하는 함수죠.

첫번째 매개변수는 말 그대로 경로 입니다. 웹사이트 url을 보면 사이트주소.com/이름1/이름2 뭐 이렇게 연결이 되잖아요? 그겁니다.
두번째 매개변수는 무엇을 반환할지 알려주는 Delegate를 넣어주면 됩니다.

 

다음과 같이 함수를 호출할 경우 Url의 root 경로로 Get 요청이 들어왔을때 Hello World!를 응답하겠다는 뜻입니다.

app.MapGet("/", () => "Hello World!");

 

그래서 실행했을때 localhost:(포트번호) 주소로 연결이 되고 Hello World!가 띄워져 있는 웹사이트가 보이는거죠.

 

그리고 다음과 같은 함수를 실행하면

app.MapGet("/Home", () => "Goodbye World!");

 

이런식으로 localhost:(포트번호)/home 으로 접속했을때 Goodbye World! 라는 문자열을 볼 수 있습니다.

 

 


 

 

마치는 말

.NET Core 1일차... 성공적.

'개발 > C#' 카테고리의 다른 글

[C#] | Exception has been thrown by the target of an invocation. 은 대체 뭐고 어떻게 해결하는걸까  (0) 2025.02.11
[C#] | 확장 메서드 쓰고 싶다~.  (0) 2025.02.09
[C#] | 대체 is not은 뭔데  (2) 2024.09.26
[C#] | Type 비교에서의 'is' 와 'GetType()'  (1) 2024.08.03
'개발/C#' 카테고리의 다른 글
  • [C#] | Exception has been thrown by the target of an invocation. 은 대체 뭐고 어떻게 해결하는걸까
  • [C#] | 확장 메서드 쓰고 싶다~.
  • [C#] | 대체 is not은 뭔데
  • [C#] | Type 비교에서의 'is' 와 'GetType()'
SundG0162
SundG0162
블로그 프로필은 머핀입니다.
  • SundG0162
    게임개발고수가될거야
    SundG0162
  • 전체
    오늘
    어제
    • 분류 전체보기 (33)
      • 주저리 (2)
        • 잡담 (1)
        • 장현우 (0)
        • 회고록 (1)
      • 개발 (17)
        • C# (5)
        • CITADEL : 성채 (0)
        • HEXABEAT (0)
        • FRACTiLE (0)
        • UNNAMED (0)
        • Default Defense (9)
        • T-Engine (0)
        • Project EW (0)
        • VIRTUS (0)
        • Unity (2)
        • C++ (1)
        • WinAPI (0)
        • 그 외 (0)
      • 알고리즘 (8)
        • C# (0)
        • C++ (8)
      • 자료구조 (0)
        • C++ (0)
        • C# (0)
        • 공용 (0)
      • 기타 (6)
        • 아트 (4)
        • AI (1)
        • 수학 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩
    생성형ai
    티스토리챌린지
    코드트리
    C#
    LLM
    코딩트리조별과제
    AI
    유니티
    코딩테스트
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
SundG0162
[.NET Core] | #0 : 세상에서 가장 쉬운 서버 만들기
상단으로

티스토리툴바