전체 글 (201)

07
23

Post, Put, Patch의 사용을 결정하는 것은 HTTP 메서드의 의미와 의도에 따라 결정됩니다. 각각의 메서드는 특정한 목적과 사용 사례를 가지며, 이를 이해하면 적절한 메서드를 선택하는 데 도움이 됩니다.

HTTP 메서드의 의미와 사용 사례

  1. POST:

    • 의미: 새로운 리소스를 생성합니다.
    • 사용 사례:
      • 새로운 사용자 계정을 생성할 때
      • 새로운 게시글을 작성할 때
      • 새로운 항목을 데이터베이스에 추가할 때
    • 특징:
      • 멱등하지 않음: 같은 요청을 여러 번 보내면 여러 리소스가 생성될 수 있습니다.
      • 일반적으로 리소스의 URI는 서버가 생성합니다.
    • 예시:
      @app.post("/users/")
      async def create_user(user: User):
          # 사용자 생성 로직
  2. PUT:

    • 의미: 리소스를 생성하거나, 전체 리소스를 대체합니다.
    • 사용 사례:
      • 사용자의 전체 정보를 업데이트할 때
      • 특정 리소스를 전체적으로 대체할 때
    • 특징:
      • 멱등함: 같은 요청을 여러 번 보내도 결과는 동일합니다.
      • URI가 지정된 리소스를 대상으로 합니다.
    • 예시:
      @app.put("/users/{user_id}")
      async def update_user(user_id: int, user: User):
          # 사용자 정보 대체 로직
  3. PATCH:

    • 의미: 리소스의 일부를 수정합니다.
    • 사용 사례:
      • 사용자의 특정 필드를 업데이트할 때 (예: 이메일 주소 변경)
      • 리소스의 부분적인 업데이트가 필요할 때
    • 특징:
      • 멱등하지 않을 수 있음: 부분 업데이트는 여러 번 보내도 결과가 동일하지 않을 수 있습니다.
      • URI가 지정된 리소스를 대상으로 합니다.
    • 예시:
      @app.patch("/users/{user_id}")
      async def partial_update_user(user_id: int, user: PartialUser):
          # 사용자 정보 부분 수정 로직

결정 기준

  • 새로운 리소스 생성: POST

    • 예: 새로운 블로그 게시글 작성
    • 예: 새로운 주문 생성
  • 전체 리소스 대체 또는 생성: PUT

    • 예: 사용자 프로필 전체 업데이트
    • 예: 특정 ID의 제품 정보 전체 대체
  • 리소스의 일부 수정: PATCH

    • 예: 사용자 이메일 업데이트
    • 예: 주문 상태 변경

구체적인 예제

사용자 정보를 관리하는 API를 예로 들어보겠습니다.

  • POST: 새로운 사용자 생성

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    class User(BaseModel):
        name: str
        email: str
    
    @app.post("/users/")
    async def create_user(user: User):
        # 새로운 사용자 생성 로직
        return {"message": "User created", "user": user}
  • PUT: 사용자 정보 전체 업데이트

    @app.put("/users/{user_id}")
    async def update_user(user_id: int, user: User):
        # 사용자 정보 전체 대체 로직
        return {"message": "User updated", "user_id": user_id, "user": user}
  • PATCH: 사용자 정보 부분 업데이트

    class PartialUser(BaseModel):
        name: Optional[str] = None
        email: Optional[str] = None
    
    @app.patch("/users/{user_id}")
    async def partial_update_user(user_id: int, user: PartialUser):
        # 사용자 정보 부분 수정 로직
        return {"message": "User partially updated", "user_id": user_id, "user": user}

이렇게 HTTP 메서드의 의미와 사용 사례를 명확히 이해하고, 각 메서드의 특징을 고려하여 적절한 메서드를 선택하면, API 설계가 명확하고 일관성 있게 됩니다.

반응형
COMMENT
 
07
23

몇번의 시도를 거듭하여 성공한 테스트 결과

Json 데이터를 서버에 전달하여 파일로 저장하거나, 데이터를 읽고, 폴더 내 전체 데이터의 리스트를 클라이언트에서 전달받아 확인하는 등 테스트를 진행 중

데이터는 API 서버 외의 공간에 저장하는 게 좋겠지만 스케일이 커지고 힘들어질 듯 하여 일단 서버에 데이터를 보관한다.

현재 클라우드타입에서 배포를 하고 있는데, 서비스를 중단하면 그간 저장된 데이터가 사라지기 때문에 클라우드타입을 계속 사용한다면 외부에의 데이터 저장은 필수이기는 하다.

엔드포인트에 적절한 이름을 부여하고 싶은데 딱 맞는 게 떠오르지 않아 계속 바뀌는 중.

아무튼 클라우드타입의 계속적인 사용을 위해서는 서비스 중단 시에 파일 전체를 어딘가로 백업하는 등의 꼼수를 통해 해결해야만 한다.

현재 떠오르는 아이디어는 깃허브 리포지토리를 새로 하나 데이터 보관용으로 새로 작성하여, 저장된 플레이어 데이터를 해당 리포지토리에 백업하고, 서비스를 다시 시작할 때 리포지토리에 저장된 내용을 클론하여 가져오는 방법 등을 생각할 수 있다.

여담으로 디스코드에도 서버를 하나 작성하여 앨범 데이터를 위한 채팅채널을 하나 작성하여 길드 앨범으로 활용하고 있는데, 어느샌가 그 채팅채널의 내용이 스멀스멀 지워지고 있어 대체할 스토리지가 필요한 참이다. 이쪽은 크기가 꽤 커 깃허브를 활용하기에는 조금 부담이 되는 케이스.

반응형
COMMENT
 
07
23

게임 서버를 구축할 때 Python을 사용하는 것은 충분히 가능하며, Node.js와 마찬가지로 여러 장점이 있습니다. 언어 선택은 주로 프로젝트의 요구사항, 팀의 기술 스택, 성능 요구사항, 개발자의 선호도에 따라 결정됩니다. 다음은 Python을 게임 서버에 사용하는 것의 장단점과 Node.js와의 비교입니다.

Python을 사용하는 장점

  1. 사용이 쉬움: Python은 문법이 간단하고 직관적이어서 빠르게 개발할 수 있습니다.
  2. 풍부한 라이브러리: 다양한 라이브러리와 프레임워크(예: Flask, FastAPI, Django 등)를 통해 웹 서버와 API를 쉽게 구축할 수 있습니다.
  3. 강력한 커뮤니티 지원: 풍부한 문서와 커뮤니티 지원을 받을 수 있습니다.
  4. 데이터 처리 및 AI: 게임 데이터 분석, 통계 처리, 머신러닝 등과 같은 작업에 매우 적합합니다.

Python을 사용하는 단점

  1. 동시성 문제: Python의 GIL(Global Interpreter Lock)로 인해 CPU 집약적인 작업에서는 성능이 떨어질 수 있습니다. 그러나 asyncio, gevent, concurrent.futures 등을 활용하면 많은 동시성 문제를 해결할 수 있습니다.
  2. 성능: Node.js에 비해 일부 네트워크 IO 작업에서 느릴 수 있습니다. 이는 주로 Node.js가 비동기 이벤트 기반 모델을 사용하기 때문입니다.

Node.js를 사용하는 장점

  1. 비동기 처리: Node.js는 비동기 이벤트 기반 아키텍처를 사용하여 높은 처리량과 확장성을 제공합니다.
  2. 성능: V8 엔진을 사용하여 빠른 자바스크립트 실행 속도를 제공합니다.
  3. 풀스택 자바스크립트: 프론트엔드와 백엔드 모두 자바스크립트를 사용할 수 있어 코드 공유와 유지보수가 용이합니다.
  4. 실시간 처리: WebSocket 등을 통한 실시간 데이터 처리에 매우 적합합니다.

Node.js를 사용하는 단점

  1. 단일 스레드: Node.js는 단일 스레드 모델이므로 CPU 집약적인 작업에서는 성능이 저하될 수 있습니다.
  2. 콜백 지옥: 비동기 코드를 많이 작성할 경우 콜백 지옥(Callback Hell)에 빠질 수 있으나, async/await를 사용하여 이를 해결할 수 있습니다.

결론

Python과 Node.js 모두 게임 서버 구축에 적합하며, 선택은 주로 다음 요소에 따라 결정됩니다:

  1. 팀의 기술 스택: 팀이 이미 Python에 익숙하다면 Python을 선택하는 것이 효율적입니다.
  2. 프로젝트 요구사항: 실시간 처리와 높은 동시성 요구사항이 있다면 Node.js가 더 적합할 수 있습니다.
  3. 개발 속도와 편의성: Python은 간단한 문법과 풍부한 라이브러리로 인해 빠른 개발을 도울 수 있습니다.

예시

게임 서버의 간단한 예시로 Python의 FastAPI와 Node.js의 Express.js를 사용한 예제를 비교해 보겠습니다.

Python (FastAPI)

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Hello, world!"}

@app.post("/score/")
async def post_score(score: dict):
    # 점수 저장 로직
    return {"message": "Score saved!", "score": score}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Node.js (Express.js)

const express = require('express');
const app = express();
app.use(express.json());

app.get('/', (req, res) => {
    res.send({ message: 'Hello, world!' });
});

app.post('/score', (req, res) => {
    const score = req.body;
    // 점수 저장 로직
    res.send({ message: 'Score saved!', score: score });
});

app.listen(8000, () => {
    console.log('Server is running on http://0.0.0.0:8000');
});

결론적으로, Python과 Node.js 모두 강력한 게임 서버를 구축할 수 있는 도구입니다. 프로젝트의 요구사항과 팀의 기술 스택에 따라 적절한 언어와 프레임워크를 선택하세요.

반응형

'다이어리' 카테고리의 다른 글

POST, PUT, PATCH 사용에 대해  (0) 2024.07.23
Python API 서버 구축 연습중  (0) 2024.07.23
UI Toolkit 학습중  (0) 2024.07.22
디코봇 이미지 저장 방식 변경  (0) 2024.07.08
메이플 정보 조회 서비스 배포 테스트  (0) 2024.06.28
COMMENT
 
07
22

UI Builder

UXML 탬플릿을 생성하고 UI Builder에서 내용을 작성하는 방법

각 레이어들을 구성하고 스타일을 편집, 스타일 시트를 작성하여 클래스를 사용하는 방법

트랜지션을 사용하고 스크립트와 연계하는 방법 등을 학습하였다.

이렇게 간단하게 피했습니다

원래는 가챠형 게임을 생각하고 버튼을 통해 '캐릭터 뽑기 씬'으로 전환 할 생각이었는데, 연습 겸 먼저 위와 같이 작성 해 보았다.

 

참고한 강의는 아래와 같다. 1~3편으로 구성되어있다.

https://www.youtube.com/watch?v=eeDjeziVEbA

 

반응형
COMMENT
 
07
20
반응형
COMMENT
 
07
08

현재 사용중인 이미지 저장 기능

현재 디코봇에서 사용중인 앨범 기능에 대해 개선이 필요하다.

!업로드(!업) 과 함께 이미지를 첨부하거나 저거(저)라는 키워드를 함께 붙여 최근 이미지를 봇이 읽도록 하고있는데

그 대략적인 순서는 아래와 같다.

1. 명령과 함께 어떤 메시지가 주어졌는지 확인('저 or 저거', '야 or 야식')

2. 어떤 앨범에 저장할지, 업로드된 이미지 URL 확인

3. URL로부터 이미지를 바이너리 형식으로 추출

4. 추출한 이미지를 앨범 채널에 전송

예전에는 업로드된 이미지를 다운로드 받아, 그 파일을 다시 첨부하여 앨범 채널에 전송했는데, 배포 서비스에서 파일 다운로드를 지원하지 않을 것을 가정하고(예: 깃허브) 바이너리 분석 및 그대로 업로드를 하도록 바꿨었다.

여기에서 발생하는 문제점 두가지.

1. 처리 속도가 매우 늦어졌다. 분석 또는 전송에 시간이 많이 걸리는 듯 하다.

2. 움짤이나 동영상을 지원할 수 없게 되었다. 정지이미지만 가능한 방법이었다.

현재 배포 서비스인 Cloudtype은 파일 다운로드를 지원하고 있기 때문에, 다시 이전 방식으로 되돌려야 더 좋은 편의성을 가질 수 있을 것이다.

아쉽게도 예전 버전의 소스가 남아있지 않아 새로 작성해야한다.

그리고 현재 앨범 폴더의 대용으로 디스코드 채팅채널을 사용하고 있는데, 업로드한 지 오랜 시간이 지나면 내용이 사라지는 현상을 목격한 것 같아 데이터 소실 우려가 커졌다. 이에 대해서도 대안을 찾아야한다.

 

__ _

파일 가져오는 방식의 변경을 완료하였다.

파일을 다운로드. 현재 시간을 파일명으로 하고 싶었는데, 제대로 된 년도 대신 다른 기준의 숫자가 기재된다.
별로 상관 없나 싶어서 유지했다.

파일을 다운로드 하고, 그대로 앨범 채팅 채널에 업로드 후 다운로드했던 파일을 삭제한다.

속도 향상도 되었고, 이미지 외의 파일에도 적용되는 것을 확인했다.

반응형

'다이어리' 카테고리의 다른 글

게임서버를 NodeJS 대신 Python으로 구축하는 것에 대해  (0) 2024.07.23
UI Toolkit 학습중  (0) 2024.07.22
메이플 정보 조회 서비스 배포 테스트  (0) 2024.06.28
근황  (0) 2024.06.27
정보처리기사 실기 합격  (0) 2024.06.19
COMMENT
 
07
01

"MonoBehaviour"는 유니티 엔진에서 가장 기본적인 스크립트 클래스입니다. 이 클래스의 이름에는 두 가지 중요한 요소가 있습니다: "Mono"와 "Behaviour".

1. Mono

  • "Mono"는 그리스어로 "하나" 또는 "단일"을 의미합니다. 유니티 엔진은 "Mono" 프로젝트를 기반으로 하고 있습니다. Mono는 .NET 프레임워크의 오픈 소스 구현체로, 다양한 플랫폼에서 .NET 애플리케이션을 실행할 수 있게 합니다. 유니티는 이 Mono 프로젝트를 사용하여 C# 스크립트를 지원하고, 다양한 플랫폼에서 실행될 수 있도록 합니다.
  • 유니티의 초기 버전들은 Mono를 사용하여 스크립트를 처리했습니다. 현재는 .NET Core와 IL2CPP 등의 기술도 사용되고 있지만, MonoBehaviour라는 이름은 그대로 유지되고 있습니다.

2. Behaviour

  • "Behaviour"는 행동, 동작을 의미합니다. 게임 오브젝트에 스크립트를 통해 동작을 부여하는 역할을 하는 클래스임을 나타냅니다.
  • MonoBehaviour는 유니티에서 모든 스크립트가 상속해야 하는 기본 클래스이며, 이 클래스를 통해 게임 오브젝트의 동작을 정의하고 제어할 수 있습니다. 예를 들어, 게임 오브젝트의 업데이트, 물리 계산, 사용자 입력 등을 처리할 수 있습니다.

결론

"MonoBehaviour"는 Mono 프로젝트 기반의 .NET 스크립팅 환경에서 게임 오브젝트의 동작을 정의하기 위해 사용되는 클래스입니다. 이름 자체는 유니티가 Mono 프레임워크를 사용하여 스크립트를 처리하고, 이를 통해 게임 오브젝트의 행동을 정의하는 역할을 한다는 의미를 담고 있습니다.

이를 통해 유니티 개발자들은 C#을 사용하여 게임 오브젝트의 동작을 정의하고, 다양한 플랫폼에서 실행될 수 있는 강력한 스크립트를 작성할 수 있습니다.

반응형
COMMENT
 
06
28

클라우드타입에서 배포

배포에서 에러가 두차례정도 있어 수정 후 배포 완료

API 키 입력하여
내 계정의 캐릭터정보 모두 가져오기

이후 스타일 약간 개선

츄츄지지를 모티브로 메뉴, footer 등 개선
계정조회 기능

구입했던 도메인 클라우드타입에서 연결

도메인 연결 완료
기능은 별거 없지만 일단 마무리

 

반응형

'다이어리' 카테고리의 다른 글

UI Toolkit 학습중  (0) 2024.07.22
디코봇 이미지 저장 방식 변경  (0) 2024.07.08
근황  (0) 2024.06.27
정보처리기사 실기 합격  (0) 2024.06.19
금일 알고리즘 자료구조 학습  (0) 2024.06.17
COMMENT
 
06
27

보이는 게임사에 가능한 모두 서류지원중

1/3 정도 서류탈락, 나머지는 무소식

어드레서블 영상 보며 학습 중

반응형
COMMENT
 
06
19

69점 합격

합격 점수가 60점이고, 가채점 결과가 60~70점이었다.

결과는 69점.

불합격 나왔으면 정말 억울했을 정도로 답안 제출 전에 검토를 세어번정도씩은 했었다

합격 나와서 다행이다.

반응형
COMMENT
 
06
17

https://www.youtube.com/playlist?list=PL3xNAKVIm80KOJ0g_OuJ7z-K9Esz4laZC

 

자료구조, 알고리즘, CS 지식

자료구조 와 알고리즘 그리고 CS지식을 다루는 영상모음 | Data Structures and Algorithms

www.youtube.com

  • 빅오 표기법
  • 연결 리스트
  • 투포인터
  • 슬라이딩 윈도우 알고리즘
  • 트리 자료구조
  • 힙 자료구조, 우선순위 큐 (음... 잘 모르겠다 다른 영상도 더 봐야 할 듯)
반응형
COMMENT
 
06
14

이 사람, 결국 자소서 점검은 안하고 딴짓만 하다 집 갔다.

(노동요)

https://www.youtube.com/watch?v=j6Wv6tKrVOE

주르르 고민중독

Unity 클라이언트 프로그래머 직군에 지원서를 마구 날리고는 있는데

4일 뒤인 6월 18일에 가채점으로 합격했던 정보처리기사 자격증시험 결과가 나오는 날이라서 4일을 기다렸다 넣는게 좋았을지 모르겠다.

....

자소서 점검하러 왔는데 너무 신나서 프로그래머스 코테 연습 조금이랑, Spleeter로 주르르 고민중독 보컬분리 조금 해봤다. 오전만 시간 보내고 근처에서 밥 먹고 집 돌아가야되겠다. 너무 더워.

Spleeter는 로컬에서도 쓸 수 있지만 구글 Colab에서 사용 해 보았다.

원래 이전에 작성했던 코드는 직접 파일을 업로드하는 방식이었지만, 그것도 귀찮아져서 곡의 유튜브 링크를 input하면 분리된 음원(보컬, Inst)이 output 되도록 수정하였다.

https://colab.research.google.com/drive/1G5WyV7oMsm19RS9lsf8kS83rnqFHpj9b?usp=sharing

 

Spleeter(2024.06.14)

Colab notebook

colab.research.google.com

[번외 : 유튜브로부터 가져와서 음원분리] 하단에 있는 내용을 순차적으로 실행 완료하면 분리된 음원을 얻는다.

왼쪽의 폴더모양 버튼을 눌러 파일시스템(폴더트리)을 확인할 수 있다.

둘 다 우클릭으로 다운받을 수 있다. 또는 

display(Audio(vocals_path))

이런 코드로 가시화하여 직접 재생이 가능했던 걸로 기억하는데, 어째선지 런타임 오류가 뜨며 실행되지 않는다.
Colab을 유료로 사용하고 있지 않아서 그런가... ㅠ

분리된 음원은 아래와 같다. wav파일로 출력이 되며 압축되어있지 않아 두 파일이 같은 크기인것을 확인할 수 있다.

20메가가 넘는 파일은 포스트에 넣지 못한다고 하여 원본을 업로드할 수 없다.

https://www.youcompress.com/ko/wav/

 

WAV 오디오 파일 압축, 온라인 WAV 파일 압축기 | YouCompress

온라인에서 WAV 오디오 파일 무료 압축, 온라인에서 WAV 오디오 파일 크기 줄이기, 온라인에서 WAV 파일 압축, 무료 WAV 압축기. 가입할 필요도 없고, 워터마크도 없고, 누구나 무료로 사용할 수 있습

www.youcompress.com

해당 서비스를 사용해서 살짝 압축.

다이어트 완료

크기가 많이 줄긴 했는데 음질이 깨져 들릴 정도로 끔찍해서 위 방법 말고 wav to mp3 convert를 하기로 했다.

https://cloudconvert.com/wav-to-mp3

 

WAV to MP3 | CloudConvert

Compress Merge Capture Website Create Archive Extract Archive Convert WAV Converter WAV WAV is an audio file that is associated with Microsoft Windows. It is the default audio format for Windows. But it supports almost all the Operating Systems. WAV files

cloudconvert.com

변환 중
accompaniment (1).mp3
4.52MB
vocals.mp3
4.80MB

Spleeter로는 대충 위와 같은 퀄리티의 결과를 뽑을 수 있다. 압축해서 첨부를 해서 그렇지, 음질은 위 첨부된 mp3 파일보다 훨씬 고음질이다.

약간 하자가 있지만, 그래도 좋은 점은 작은 크기로 숨겨져있던 화음 파트를 들을 수 있다는 점이다.

오전 10시 40분.
코딩테스트 연습 조금 하다가 육회덮밥 점심특선(8,900) 먹고 동생것도 포장하여 귀가 할 예정이다.

카페가 시원하질 않아서 집중이 잘 안된다.

집 돌아가면 메할일 후 마음을 가다듬고 자기소개서를 작성하여
자기소개서를 요구하고 있어 지원서를 아직 내지 못했던 두 군데에 추가로 지원서 작성 및 제출을 완료할 예정이다.

반응형
COMMENT