본문 바로가기
Spring

django + springboot

by windy7271 2024. 3. 11.
728x90
반응형

 

프로젝트 진행중에 형태소분석을 하고 싶어 디장고와 연동을  한 번 해보겠습니다.  일부 다른 블로그분의 내용을 참고했어요 

 

1. 프로젝트 세팅 

  • 인텔리제이 + django 
    • 인텔리제이에서 django로 만들어줍니다
pip install djangorestframework

django-admin startproject 프로젝트이름

python manage.py startapp 앱이름
  • 프로젝트는 앱 한개 이상을 담을 수 있고 관련된 configuration도 함께 담아 하나의 웹사이트를 구성하고
  • 은 뷰계층과 모델게층을 묶어서 제공하며 하나의 웹앱기능만 담당합니다.. 또한 app은 프로젝트 A, B, C, D등등 동시에 여러 프로젝트에 포함될 수 있있습니다.

2. 프로젝트 settings.py 설정 찾아서 바꿔주기

Allowd_host = ["*"]
TIME_ZONE = 'Asia/Seoul'

 

 

3. app 등록하기

앱등록

 

4. 등록한 앱 추가해주기

 

Restframework도 위에서 설치해줬으므로 추가해주기

 

python manage.py migrate

변경사항 저장해준다는 뜻입니다. 첫번째 데이터 베이스를 싱크를 맞춰준다고 합니다.

 

5. 서버실행 해보기 뒤에 포트 붙이면 포트가 달라집니다. 기본은 8000 입니다.

python manage.py runserver

 

 

 

 

이번에 사용하지는 않지만 ModelSerializer를 만들어 봅니다. 모델을 JSON 형태로 바꿔주기 때문입니다.

내가 원하는 모델의 필드들만 Json으로 만들 수 있습니다.

Model + Serializer

from rest_framework import serializers
from .models import Question


class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = '__all__'

 

전부 다Json으로 만들어 줍니다. exclude, 를 사용 할 수도 있습니다.

Model도 하나 만들어주고요. 음 이게 dto? 라고 생각을하고 있어요.

 

이제 JSON은 . 다만들어 줬구요 응답을 만들어볼게요.

 

question app앱에 urls.py를 만듭니다.

 

 

 QuestionDetailView의 함수들이 불릴 수 있도록 해줍니다.

 

그리고 프로젝트의 url로 가서 question앱의 url을 추가해줍니다. 스프링으로 치면 controller에서 위에 클래스에  url단거를 등록해주는 느낌입니다.

 

이제 파이썬에서의 설정은 하나 남았습니다.

 

스프링에서 contents랑 fileId 두개를 넘겨줍니다. 받아주고 필요한거 

contents만 담아서 리턴해줍니다.

 

스프링으로 가보겠습니다.

 


Spring 

 

Controller

 

@RestController
@RequiredArgsConstructor
public class JangoController {

    private final JangoService flaskService;

    /**
     * jango 데이터 전송
     */
    @PostMapping("/jango")
    public String sendToFlask(@RequestBody JangoSendToFlaskDto dto) throws JsonProcessingException {
        return flaskService.sendToFlask(dto);
    }
}

 

 

DTO

@Getter
@RequiredArgsConstructor
public class JangoSendToFlaskDto {
    private final String contents;
    private final String fileId;
}

 

 

Service

 

@Service
@RequiredArgsConstructor
public class JangoService {

    private final ObjectMapper objectMapper;

    @Transactional
    public String sendToFlask(JangoSendToFlaskDto dto) throws JsonProcessingException {
        RestTemplate restTemplate = new RestTemplate();

        HttpHeaders headers = new HttpHeaders();
// json타입으로 맞춰줍니다.
        headers.setContentType(MediaType.APPLICATION_JSON);

// JangoSendToFlaskDto 객체를 JSON 문자열로 직렬화합니다.
        String param = objectMapper.writeValueAsString(dto);

        HttpEntity<String> entity = new HttpEntity<String>(param , headers);
// url로 post요청하고 응답을 문자열로 받아옵니다.
        String url = "http://127.0.0.1:8082/question/";

        return restTemplate.postForObject(url, entity, String.class);
    }
}

 

서버간의 통신을 위해서 Resttemplate를 사용해줍니다. 

 

지금 스프링은 8080 서버이고 파이썬은 8082로 실행시켰습니다.

 

결과값이 넘어옵니다.

다음은 클라우드 혹은 형태소 분석으로 돌아오겠습니다.

 

반응형

댓글