본문 바로가기
Android Studio

[Android Studio] Android Studio + Spring Boot + mariaDB ( REST API 서버 구현 ) (9)

by jisayDeveloper 2023. 11. 6.
728x90
반응형

Fragment를 해본 후 이 메뉴를 그대로 사용해서 로그인과 회원가입 기능을 만들어보잔 생각을 했고 일단 먼저 Spring Boot로 간단하게 REST API 만들겠습니다.

 

프로퍼티스 세팅은 이 포스팅을 참고하세요.

https://jisaydeveloper.tistory.com/31

 

[Spring Boot] 환자 관리 프로그램 - 설정 (1)

게시판 연습할겸 환자 관리 프로그램을 만들어 보겠습니다. dependencies는 위의 네개를 추가합니다. application.properties spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localh

jisaydeveloper.tistory.com

 

의존성은 Spring Web, Spring Data JPA, MariaDB Driver, Lombok 정도만 하면 됩니다.

 

User - Entity

package com.example.restfulapi.entity;

import com.example.restfulapi.dto.UserDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    private String id;
    private String password;
    private String name;
    private String birth;

    public UserDTO toUserDTO() {
        return UserDTO.builder()
                .id(this.id)
                .password(this.password)
                .name(this.name)
                .birth(this.birth)
                .build();
    }

}

UserDTO

package com.example.restfulapi.dto;

import com.example.restfulapi.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class UserDTO {

    private String id;
    private String password;
    private String name;
    private String birth;

    public User toEntity(){
        return User.builder()
                .id(this.id)
                .password(this.password)
                .name(this.name)
                .birth(this.birth)
                .build();
    }


}

 

UserRepository

package com.example.restfulapi.repository;

import com.example.restfulapi.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User,String> {
}

 

UserService

package com.example.restfulapi.service;

import com.example.restfulapi.dto.UserDTO;
import com.example.restfulapi.entity.User;
import com.example.restfulapi.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;


@Service
@RequiredArgsConstructor
public class UserService {

    final UserRepository userRepository;

    public UserDTO saveUser(UserDTO userDTO){
        User entityuser = userDTO.toEntity();
        System.out.println(entityuser);
        userRepository.save(entityuser);
        return userDTO;
    }

    public Object validateUser(UserDTO userDTO) {
        
        User user = userRepository.findById(userDTO.getId()).orElse(null);

        if (user == null) {
            return "아이디 또는 비밀번호가 맞지 않습니다.";
        }

        if(user.getId().equals(userDTO.getId()) && user.getPassword().equals(userDTO.getPassword())){
            return user.toUserDTO();
        }else {
            return "아이디 또는 비밀번호가 맞지 않습니다.";
        }

    }

}

 

ServerController

package com.example.restfulapi.controller;

import com.example.restfulapi.dto.UserDTO;
import com.example.restfulapi.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class ServerController {

    final UserService userService;

    @PostMapping("/user/join")
    public ResponseEntity<String> joinUser(@RequestBody UserDTO userDTO){

       UserDTO response = userService.saveUser(userDTO);

       return ResponseEntity.status(HttpStatus.OK).body(response.getId() + "님 회원가입 성공했습니다.");

    }
    @PostMapping("/user/valid")
    public ResponseEntity<String> validateUser(@RequestBody UserDTO userDTO){

        Object response = userService.validateUser(userDTO);

        if(response instanceof String){
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body((String)response);
        }else if(response instanceof UserDTO){
            UserDTO dto = (UserDTO) response;
            return ResponseEntity.status(HttpStatus.OK).body(dto.getId() + "님 환영합니다.");
        }

        return null;
    }

}

 

일단 로그인과 회원가입만 구현했습니다. 추후 수정, 삭제도 만들겠습니다.

 


이제 서버를 만들었으니 안드로이드 스튜디오 설정하겠습니다.

 

https://jisaydeveloper.tistory.com/54

 

[Android Studio] 첫 안드로이드 앱 개발 시작해보기 - Fragment (9)

쇼핑몰 앱을 보면 화면 하단에 홈,마이페이지,장바구니 등 이런 메뉴가 구성돼있는 걸 본적 있을 겁니다. 이런 UI구성을 하는데 안드로이드에서 Fragment를 사용해서 액티비티 내에서 여러 프라그

jisaydeveloper.tistory.com

 

이 프로젝트에 fragment2를 회원가입으로 사용하겠습니다.

 

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
        </trust-anchors>
    </base-config>
</network-security-config>

res/xml 폴더에 만듭니다.

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> //인터넷 접속 허용
android:networkSecurityConfig="@xml/network_security_config"

<application>안에 위 코드를 넣어야 합니다. 로컬 서버에 접속하는 걸 안드로이드 스튜디오에서 막아놨기 때문에 http 접속할 수 있게 합니다.

 

build.gradle

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

서버 통신을 하기위한 retrofit과 parsing을 위한 gson을 의존성 추가 합니다.

728x90
반응형