[Spring] 개방-폐쇄 원칙 (OCP, Open Closed Principle)
·
Development & Projects/Java
* "김영한님의 코드로 배우는 스프링 부터, 웹 MVC, DB 접근 기술" 강의를 듣고 배운 점을 기록한 글입니다.  실습 중 기존 MemoryMemberRepository에서 JdbcMemberRepository로 교체하여 JDBC 기반의 데이터 저장소를 사용하도록 변경하였다. MemberRepository라는 추상화된 인터페이스를 사용해 확장 가능하도록 설계되었다. MemberRepository 인터페이스를 사용하여 의존성을 관리했기 때문에, 기존 코드(MemberService)를 수정하지 않고도 데이터 저장 방식을 변경할 수 있다. 소프트웨어 공학 시간에 배운 OCP를 준수하여 실제로 코드 구현까지 해보니 인터페이스를 활용한 설계의 중요성을 직접 체감할 수 있었다. +) 스프링의 DI를 활용하면 더..
[Spring] MVC 동작 구조
·
Development & Projects
Spring MVC 패턴은 웹 애플리케이션의 구조를 Model-View-Controller (모델-뷰-컨트롤러) 방식으로 나누어 개발하는 아키텍처 패턴이다. 각 구성 요소는 애플리케이션의 서로 다른 역할을 맡고 있으며, 이를 통해 코드의 유지보수성과 확장성을 높인다.  1. Model (모델)Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다.데이터 객체: 보통 POJO (Plain Old Java Object) 클래스로 구현되어 데이터를 저장한다.비즈니스 로직: 데이터의 유효성 검사, 계산, 서비스 로직 등을 포함한다.데이터베이스 상호작용: JPA, Hibernate, MyBatis 등을 이용해 데이터베이스와 상호작용하며 데이터를 가져오거나..
Node.js, Unity WebSocket 통신 (+ 에러 해결)
·
Development & Projects
VR 영어 교육 프로젝트에서 Polling 방식으로 데이터 처리를 했었는데, 사용자의 입력 이후 응답과 피드백 데이터가 돌아오는데까지 대략 5,6초 정도가 걸리는 문제가 있었다. 이러한 문제를 개선하기 위해 WebSocket 방식으로 수정하기로 하였고, 기존의 파이썬 서버에서 Node.js로 수정하고 Unity 클라이언트를 연결하였다. (WebSocket을 사용하기 위해 비동기 처리에 효율적이며 웹소켓과 호환이 잘 되는 Node.js로 수정) 하지만 클라이언트에서 보낸 문자열 데이터를 서버의 Chat GPT API의 입력 데이터로 보내는 과정에서 에러가 발생하였다. 내용은 message 배열에서 content 필드의 타입이 잘못되었다는 오류였다. message[1].content가 문자열 또는 객체 ..
[Unity] 유니티에서 WebSocket 사용하기
·
Development & Projects/Unity
유니티에서 웹소켓 통신을 하려면 WebSocketSharp라는 라이브러리가 필요하다. 1. 먼저 아래 깃허브에서 WebSocketSharp을 다운로드한다.https://github.com/sta/websocket-sharp 2. websocket-sharp.sln 파일을 빌드하면 bin/Dedug 폴더에  WebSocketSharp.dll 파일이 생성된다. 3. WebSocketSharp.dll 파일을 유니티 프로젝트의 Assets/Plugins 폴더로 복사한다.
[Python] execute() 함수 / exec()와의 차이 / cursor
·
Development & Projects/Python
execute() 함수는 execute()는 데이터베이스와 상호작용할 때 사용되는 함수이다. 주로 데이터베이스 커넥터 라이브러리(예: pymysql, sqlite3, psycopg2)에서 제공되며, SQL 쿼리를 실행하는 데 사용된다. ex) 데이터베이스에 SQL 쿼리를 보내어 데이터를 조회, 삽입, 수정, 삭제 등의 작업을 수행할 때 사용됨 사용 예시 (pymysql)import pymysqlconn = pymysql.connect(host='localhost', user='root', password='password', database='testdb')cursor = conn.cursor()# SQL 쿼리 실행query = "SELECT * FROM users WHERE username = %s"c..
[Java] Static 변수와 Static 메소드
·
Development & Projects/Java
Static 변수 다음과 같은 HouseLee 클래스가 있다고 하자.class HouseLee { String lastname = "이";}public class Sample { public static void main(String[] args) { HouseLee lee1 = new HouseLee(); HouseLee lee2 = new HouseLee(); }} HouseLee 클래스를 만들고 객체를 생성하면 객체마다 객체 변수 lastname을 저장하기 위한 메모리가 별도로 할당된다.하지만 HouseLee 클래스의 lastname이 어떤 객체이든지 동일한 값인 '이'로 항상 값이 변하지 않는다면 static을 이용해 메모리 낭비를 줄일 수 있다. 또한 ..
[Python] 웹소켓 서버 / 클라이언트 구현 (WebSocket 라이브러리)
·
Development & Projects/Python
python은 웹소켓 개발을 위한 WebSockets 라이브러리를 지원한다. WebSocket 프로토콜은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 기술로, HTTP 통신의 한계를 넘어 지속적이고 실시간의 데이터 교환을 필요로 하는 애플리케이션에 적합하다. WebSockets 라이브러리는 이 프로토콜을 쉽게 사용할 수 있게 해주며, 비동기 I/O를 통해 고성능 통신을 구현할 수 있도록 도와준다.주요 기능간편한 서버 구축: WebSocket 서버를 쉽게 구축하고 실행할 수 있음비동기 지원: Python의 asyncio를 활용한 비동기 프로그래밍을 지원하여, 고성능 네트워킹 애플리케이션 개발이 가능클라이언트 연결 관리: WebSocket 클라이언트를 생성하고, 서버와의 연결을 관리할 수 있음메시지..
[Unity] 유니티 텍스트 배경 넣기
·
Development & Projects/Unity
유니티에서 텍스트에 배경을 넣어보겠습니다.먼저 UI의 Image 컴포넌트 추가하여 Canvas의 자식 요소로 두고 그 안에 Text를 넣어줍니다.  동적으로 텍스트가 변경될 때에는 Image에 Horizontal Layout Group과 Content Size Fitter를 추가해주고, Horizontal Layout Group의 모든 체크 사항을 제거합니다. Content Size Fitter는 모두 Preferred Size로 변경해줍니다.Text에도 Content Size Fitter 컴포넌트를 추가하여 모두 Preferred Size로 변경해줍니다.  배경 이미지를 텍스트 크기에 맞게 조정하려면, TextMeshPro에 아래의 스크립트를 넣어 사용합니다. using UnityEngine;using..