Server

개요2024년도 7월부터 8월간, SOPT 34기를 진행하며, 프로젝트를 진행했습니다.한줄로 요약하자면, '답변을 제공받는 감사일기' 입니다. 답변은 가상의 캐릭터 '로디' 가 제공합니다.AI를 활용하여 일기를 작성하면, 일기에 대한 긍정적인 답변을 받을 수 있는 서비스 입니다.팀의 여건 상, AI 요청을 담당하는 서버와 인증 및 비즈니스 로직을 담당하는 백엔드 서버를 나누어 개발을 진행하게 되었습니다.따라서 사용자가 저희 백엔드 서버에 일기를 작성하면, AI 서버로 요청을 보내는 방식의 간단한 로직이 핵심 비즈니스 로직 이었습니다. 하지만, 요구사항이 점점 추가되었습니다.최종적으로 결정된 일기 작성에 관련한 요구사항은 다음과 같습니다.'일기에 대한 답장은 하루에 한번 받을 수 있다.','첫 일기 작성시..
· Server
동기와 비동기 ? Blocking Non-Blocking? 개발을 공부하면 동기와 비동기라는 단어를 자주 접하게 됩니다. 또한 이 둘과 혼동될 수 있는 Blocking , Non-Blocking 개념도 종종 들을 수 있습니다. 비슷한 개념 같아 보이지만 미묘하게 다른 두 개념을 함께 살펴보겠습니다. Blocking OS관점의 블로킹은 프로세스가 어떤 작업을 위해 OS에 기능을 요청했는데 ( System Call ) OS가 해당 태스크를 바로 처리할 수 없을 경우, thread 를 “sleep” 혹은 “blocked” 상태로 변경합니다. 즉, CPU 큐에서 내려오고, 작업이 완료될 때 까지 대기합니다. 요청된 작업이 완료된 후에 OS는 thread를 깨웁니다. 이렇게 스레드를 sleep 상태로 만들 수 있..
Factory Method 팩토리 메서드 패턴이란 ? 객체를 생성할 때 필요한 인터페이스를 만들고, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하는 패턴 따라서 클래스 인스턴스를 만드는 일을 서브클래스에게 맡길 수 있다. 이전에 작성한 코드를 변경하며 살펴보겠습니다. PizzaStore.java public abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza; pizza = createPizza(type); //변경 pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizz..
도입 new 연산자 new 연산자를 사용하면, 구상 클래스의 인스턴스가 만들어진다. 구상은 추상의 반댓말로서, 인터페이스가 아닌 특정한 구현을 사용하는 방식이다. 하지만 객체지향 방식의 개발에서는 구상에 집중하지 않는다. 구상 클래스를 바탕으로 진행하는 코딩은 후에 코드를 수정해야 할 가능성이 커지고, 유연성이 떨어진다. Duck duck = new MallardDuck(); 이전에 작성한 오리 인터페이스를 이용한 코드 스니펫이다. 보다싶이 Duck 인터페이스를 사용했지만, 그럼에도 new 연산자를 통해 결국에는 구상 클래스의 인스턴스를 만들어야 한다. 이것은 다음과 같은 코드 구현으로 이어진다. Duck duck; if(picnic){ duck = new MallardDuck(); }else if(hu..
개요 보통 자주 사용하는 네트워크 프로토콜 이라고 한다면, UDP/TCP ,SSL, HTTP 등, 다양한 프로토콜이 존재합니다. 하지만 4계층인 Transport Layer 에서 주로 사용하는 프로토콜은 UDP와 TCP가 존재합니다. 이 둘은 확연한 장/단점이 있기에, 사용 용도에 따라 취사 선택하여 사용하곤 합니다. 지난 포스팅에서 보았듯이, UDP는 stateless 하기 때문에, 상대방과 연결을 맺지 않는 반면 TCP는 stateful하기 때문에, 상대방과의 연결을 맺고 ( 터널을 뚫고 ) 직접 통신을 진행합니다. 이를 3-way-handshaking 이라고 합니다. 흐름도 소켓 프로그래밍의 절차도 동일합니다. 단지 네트워크 프로토콜을 프로그래밍 언어로 구현한 라이브러리인데, 다르다면 그게 더 이상..
소켓이란? 소켓은 특정한 파이프의 끝, 파이프 이음쇠 또는 위생 기구를 수용하기 위해 확장한 것으로, 또 다른 파이프의 끝이나 파이프 이음쇠을 가리킨다. 또한 소켓(socket)은 통신선 또는 전기선, 전구 따위를 끼워 넣어 연결선과 접속하게 하는 연결기구를 가리킨다. 일상생활에서 소켓은 자주 접할 수 있습니다. 콘센트 플러그도 소켓, 전구의 소켓을 갈아끼운다. 등의 표현을 심심찮게 접할 수 있습니다. 위의 정의와 같이 소켓은 무언가 연결하기 위한 기구를 뜻합니다. 컴퓨터 언어에서도 다음과 같이 일상 생활의 용어를 종종 차용하곤 합니다. 그렇다면 소켓 프로그래밍은 무엇을 위한 프로그래밍일까요? 컴퓨터 네트워크는 layered architecture 를 사용하고 있습니다. 레퍼런스를 위한 OSI 7 모델이..
hyunw9
'Server' 카테고리의 글 목록