본문 바로가기

항해 99

Postman API 테스트, Intellij Git Conflict 해결

Postman API Test

준비 사항

  • Postman Workspaces API 설계(API 명세서 작성)
  • Spring web server-client 파일(intellij 사용)

순서

  • Workspaces에 Collections 생성 - 이름 설정(프로젝트 이름)

 

  • 구현 기능 별 API 설계(Add request)
    • HTTP 메서드 타입 결정, Rquest 이름 - 구현 기능, API 주소 입력
    • API 주소(또는 엔드 포인트) 입력
    • Input data 있을 경우 변수 명과 입력 값 설정
    • request save

 

  • API 기능 구현 후 테스트 실시
    • API주소 및 데이터 변경 사항 있을 시 Postman에 반영
    • input 있을 경우 입력 후 send(Ctrl+enter)
    • Response, Server log 확인 및 문제 있을 경우 해당하는 코드 수정

Postman API 테스트 request

 

Postman API 테스트 Response

 

Intellij 서버 로그

 

 

코드 수정 시 확인할 부분

Controller - 클라이언트

 //도서관 회원가입 기능(회원 등록)
    @PostMapping("/user/signup")
    public String signup(@RequestBody @Valid SignupRequestDto requestDto, BindingResult bindingResult) {
        // Validation 예외처리
        List<FieldError> fieldErrors = bindingResult.getFieldErrors();
        if (fieldErrors.size() > 0) {
            for (FieldError fieldError : bindingResult.getFieldErrors()) {
                log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
            }
            return "redirect:/api/user/signup";
        }

        userService.signup(requestDto);

        return "redirect:/api/user/login-page";
    }

    // 회원 관련 정보 받기
    @GetMapping("/user/{id}")
    @ResponseBody
    public UserInfoDto getUserInfo(@AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable Long id) {
        // 현재 인증된 사용자의 ID를 사용해 사용자 정보 조회
        return userService.getUserInfo(id, userDetails);
    }

 

Service - 비즈니스 로직

 // 회원 가입 기능
    public void signup(SignupRequestDto requestDto) {
        // 비밀번호 암호화
        String password = passwordEncoder.encode(requestDto.getPassword());

        // 주민번호 중복 확인
        String idNumber = requestDto.getIdNumber();
        Optional<User> checkIdNumber = userRepository.findByIdNumber(idNumber);
        if (checkIdNumber.isPresent()) {
            throw new IllegalArgumentException("중복된 주민번호가 존재합니다.");
        }

        // 전화 번호 중복 확인
        String phoneNumber = requestDto.getPhoneNumber();
        Optional<User> checkPhoneNumber = userRepository.findByPhoneNumber(phoneNumber);
        if (checkPhoneNumber.isPresent()) {
            throw new IllegalArgumentException("중복된 Email 입니다.");
        }

        // 사용자 ROLE 확인
        UserRoleEnum role = UserRoleEnum.USER;
        if (requestDto.isAdmin()) {
            if (!ADMIN_TOKEN.equals(requestDto.getAdminToken())) {
                throw new IllegalArgumentException("관리자 암호가 틀려 등록이 불가능합니다.");
            }
            role = UserRoleEnum.ADMIN;
        }

        // 사용자 등록
        User user = new User(requestDto, password, role);
        userRepository.save(user);
    }

    public UserInfoDto getUserInfo(Long id, UserDetailsImpl userDetails) {
        // 회원여부 확인
        User user = userRepository.findById(userDetails.getUser().getUser_id())
                .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다."));

        if (user.getUser_id() == id) {
            // 회원 아이디 기준으로 회원 정보 가져오기
            return UserInfoDto.builder()
                    .name(user.getName())
                    .sex(user.getSex())
                    .phoneNumber(user.getPhoneNumber())
                    .address(user.getAddress())
                    .isAdmin(user.getRole() == UserRoleEnum.ADMIN)
                    .build();
        } else {
            System.out.println("다른 유저의 정보는 확인할 수 없습니다.");
            return UserInfoDto.builder().build(); // 빈 빌더로 기본값을 가진 객체를 생성
        }
    }

 

Entity - DB와 객체 매핑(DB와 데이터 확인)

@Entity
@Getter
@NoArgsConstructor
@Table(name = "user")
public class User {

    // 회원 정보
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long user_id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false, unique = true)
    private String idNumber;

    @Column(nullable = false)
    private String sex;

    @Column(nullable = false, unique = true)
    private String phoneNumber;

    @Column(nullable = false)
    private String address;

    @Enumerated(value = EnumType.STRING)
    private UserRoleEnum role;

    public User(SignupRequestDto requestDto, String password, UserRoleEnum role) {
        this.name = requestDto.getName();
        this.sex = requestDto.getSex();
        this.idNumber = requestDto.getIdNumber();
        this.phoneNumber = requestDto.getPhoneNumber();
        this.address = requestDto.getAddress();
        this.password = password;
        this.role = role;
    }

}

 

Dto - 데이터 전송 객체(서버 및 클라이언트 간 데이터 교환)

@Getter
@Setter
public class SignupRequestDto {
    @NotBlank
    private String name;
    @NotBlank
    private String password;
    @NotBlank
    private String sex;
    @NotBlank
    private String idNumber;
    @NotBlank
    private String address;
    @NotBlank
    private String phoneNumber;

    private UserRoleEnum role;
    private boolean admin = false;
    private String adminToken = "";
}

 

 

사용자 인증 정보가 필요한 경우

  • Postman의 API 주소를 로그인 엔드 포인트로 설정 후 로그인 정보를 입력(아이디, 비밀번호) 후 send로 데이터를 보낸다
  • Response 탭에서 Header의 Jwt token 또는 cookies 데이터를 사용한다.
  • Jwt 토큰 사용 시 Authorization 탭에서 Type - Bearer Token 선택 후 Token 창에 복사한 Jwt token 값을 붙여 넣어 사용한다.

로그인 후 Authorization token 확인 화면
Authorization Token 입력하는 방법
테스트 결과 샘플 저장 방법

 

  • 테스트가 끝난 API는 결과 샘플을 저장 후 Document에 사용할 수 있음

 

 

Intellij Git Control

Intellij Git 명령어

인텔리제이에서 Terminal을 열어서 Git 명령어를 직접 입력하거나 메뉴에서 선택할 수 있음

 

터미널에 입력

기본 명령어

  • git status : 현재 상태 확인
  • git log : 전체 로그 확인
  • git init : git 저장소 생성하기
  • git clone : 저장소 복제 및 다운로드
  • git add , git add* : 저장소에 코드 추가
  • git add - A : 커밋에 파일의 변경 사항을 한 번에 모두 포함
  • git commit -m "message" : 커밋 생성
  • git push origin master : 변경 사항 원격 서버 업로드(push)
  • git pull : 원격 저장소의 변경 내용을 현재 디렉토리로 가져오기(pull)
  • git diff branch name branch name2 : 변경 내용을 merge하기 전에 바뀐 내용 비교

Git Branch 관련

  • git init : git init을 설정하면 해당 폴더에 .git 이라는 파일이 생성됨
  • git remote add origin github 주소 : github 주소와 연결  
  • git branch 브랜치명 : 브랜치 생성
  • git checkout 브랜치명 : 해당 브랜치로 이동
  • git branch -b 브랜치명 : 브랜치를 생성하고 해당 브랜치로 바로 이동
  • git branch : 원하는 브랜치로 이동했는지 확인
  • git brach -a : 모든 브랜치 확인
  • git add . : 파일 및 폴더 add
  • git commit -m "commit message" : 커밋
  • git push origin 브랜치명 : 원하는 브랜치로 push하여 원격 서버에 전송
  • git branch -d 브랜치 이름 : 브랜치 삭제
  • git merge 다른 브랜치 이름 : 현재 브랜치에 다른 브랜치 수정사항 병합

Git Config 설정 관련

  • git config --list : 전체 config 리스트 확인 
  • git config --global user.email "name@naver.com" : git config 설정하는 방법
  • git config --unset user.email : git config 삭제하기 
  • git config --unset --global user.email : global로 설정된 사용자를 지울 경우 global 추가

 

인텔리제이 메뉴창

  • Commit & Push 메뉴창

 

  • Branch & Commit log 관련 메뉴창

 

  • 상단 Git 메뉴

 

 

인텔리제이 git conflict 해결

  • 깃 merge 명령어 입력 후 conflict 발생 시 인텔리제이 상단 Git 메뉴 클릭 → Resolve Conflicts 선택

 

  • 추가 창에서 충돌 발생한 파일을 더블 클릭해서 수정 가능

 

  • 새로 창이 뜨면 충돌이 일어난 부분을 수정할 수 있는데 왼쪽이 현재 코드 오른쪽이 다른 브랜치로부터 받아온 코드임

  • 화살표를 누르면 코드가 반영되고 x를 누르면 무시할 수 있음(코드 선택적 병합 가능) 코드 병합 완료 후 Apply를 누르면 conflict를 해결할 수 있음

'항해 99' 카테고리의 다른 글

WIL-7  (0) 2024.03.24
WIL-6  (0) 2024.03.17
WIL-5  (0) 2024.03.10
Git Commit Convension, gitignore, application.properties 암호화  (0) 2024.02.23
항해 99 WIL - 0주차  (0) 2024.02.04